* Re: 02/02: gnu: next: Compress the executable. [not found] ` <20190905095603.AC57A209A5@vcs0.savannah.gnu.org> @ 2019-09-05 12:31 ` Ricardo Wurmus 2019-09-05 12:51 ` Pierre Neidhardt 0 siblings, 1 reply; 38+ messages in thread From: Ricardo Wurmus @ 2019-09-05 12:31 UTC (permalink / raw) To: Pierre Neidhardt; +Cc: guix-devel Hi Pierre, > ambrevar pushed a commit to branch master > in repository guix. > > commit 0e8b91dbc45306984d682307d8b40b0e323bb4be > Author: Pierre Neidhardt <mail@ambrevar.xyz> > Date: Thu Sep 5 11:53:52 2019 +0200 > > gnu: next: Compress the executable. > > * gnu/packages/web-browsers.scm (next)[arguments]: Compressing the executable > brings it from about 95 MiB to 22 MiB. I think this commit should be reverted. Here’s why. Before your commit: --8<---------------cut here---------------start------------->8--- ./pre-inst-env guix gc --references /gnu/store/bzvg9brphn5dn9q9kw6mirk4bb54wrd2-next-1.3.1 /gnu/store/0ihdh4df3gpczwrpfjxrdcm7lmrr4z8l-sbcl-next-download-manager-1.3.1 /gnu/store/0nxab7i4cmc6zjfmjz58yy0498af74vb-sbcl-log4cl-1.1.2 /gnu/store/199kx1lw836v24n01galpl8bv0km7b6l-sbcl-cl-unicode-0.1.5-1.9fcd06f /gnu/store/22bb8xb28i6d8b2rb9jdgkxx1hnryz91-sbcl-swap-bytes-1.1 /gnu/store/2ilpaxvwv00j5lmczgc3znmhsqms284h-sbcl-cl-base64-3.3.3 /gnu/store/2xzkgsjynfjvbdj7dq3invk8ic9khad9-sbcl-iterate-20160825 /gnu/store/3695lwpxnc4yj7arvl5gbina5qjvgswj-sbcl-parenscript-2.6-1.061d8e2 /gnu/store/3d8g171h0cmwbgqhd2lpazrc2bffygfg-sbcl-trivia.level0-0.0.0-1.902e0c6 /gnu/store/3h6mz1isvicchrl2bvkzqjwqpjaj4v8c-sbcl-iolib.grovel-0.8.3 /gnu/store/3xsfp5ksd9wf0ib9bygmdcm59cn8nj2l-sbcl-closure-common-20101006-1.e3c5f5f /gnu/store/3ycw1jw4987bnrsrzqpfyg6wamgr178d-sbcl-closer-mop-1.0.0-1.fac29ce /gnu/store/42ri80fj80i48rf6xsycn4cmj95ipgls-sbcl-static-vectors-1.8.3-1.0681eac /gnu/store/4mcnw6b5676z8wmfp1xjs3m0br9gpfnj-sbcl-iolib.common-lisp-0.8.3 /gnu/store/4sqps8dczv3g7rwbdibfz6rf5jlk7w90-gcc-5.5.0-lib /gnu/store/4yj8rnffc2basyv6hksyql1f20dr833p-sbcl-trivial-features-0.8 /gnu/store/5afhdhwrp5ydsg53ibr5wfnmxi9avs43-sbcl-cxml-0.0.0-1.00b22bf /gnu/store/5fma6i5jv4m6fi7m9j4mwz9ls30lx9r7-sbcl-trivial-gray-streams-0.0.0-1.0483ade /gnu/store/5s2nib1lrd2101bbrivcl17kjx1mspw6-coreutils-8.30 /gnu/store/63vd8vwmf7f9m49npg68lkzbw6y8fykg-sbcl-local-time-1.0.6-1.beac054 /gnu/store/6f1gg0a6228a3514vkz6b560cws4bzx0-sbcl-trivial-garbage-0.21 /gnu/store/6f2x2f4106lyfkbxbn2kb15c6k6qsn9x-sbcl-trivial-cltl2-0.1.1-1.8eec840 /gnu/store/6pxkph74pjv5i0r67j6j2xcq2kab3bl1-sbcl-cxml+dom-0.0.0-1.00b22bf /gnu/store/6x9rygmjjqk3dxj6p1cks5w81yldm5zk-sbcl-trivial-mimes-1.1.0-1.303f8ac /gnu/store/74x8v5cj9zf8jlyqwmk5qgixn3sicqw7-sbcl-cl-json-0.5-1.6dfebb9 /gnu/store/7spnpq3b4grnspy7asaidsmsy15yym3v-sbcl-slime-swank-2.22 /gnu/store/8116j9b8vjacrjabr15zpx1097hd4yal-sbcl-smart-buffer-0.0.1-1.09b9a9a /gnu/store/8jz41f61a67hp3pq1f2kcdhp4s09i4d6-sbcl-ieee-floats-20170924-1.566b51a /gnu/store/8rqj3fz2nzj25adasdpyqh2svzlxd56a-sbcl-unix-opts-0.1.7 /gnu/store/91kg140kv14hcikmn06r6fs1w90p4l8y-sbcl-named-readtables-0.9-1.4dfb89f /gnu/store/930c7kmpln4fvb5nfqcskvm0w11cm14w-sbcl-cl-xmlspam-0.0.0-1.ea06abc /gnu/store/938i4y2br40r3a3ai0klph830a64ak4x-next-1.3.1-lib /gnu/store/970l1zmfq5c74aknh2bfx34f5fk8m9qp-sbcl-anaphora-0.9.6 /gnu/store/9snfj42ij8kvyhjyh664l09lxdk3yq4f-sbcl-babel-0.5.0 /gnu/store/9yqjy6r4fchryjiy68znj6a9vls5abl4-sbcl-iolib+sockets-0.8.3 /gnu/store/a40sw3w1gmhrzd5qvww62w36rjapczyw-sbcl-iolib+streams-0.8.3 /gnu/store/b12vxsq2ykaij80wp0saqlvdsk5p21bf-sbcl-trivia.balland2006-0.0.0-1.902e0c6 /gnu/store/bjj60qdahw21fdaq8b9bhvj2zi6xih93-sbcl-trivia-0.0.0-1.902e0c6 /gnu/store/bjn6nfhp3j0vjiibs6q0lfxlm8nyd9r6-sbcl-trivia.trivial-0.0.0-1.902e0c6 /gnu/store/bzvg9brphn5dn9q9kw6mirk4bb54wrd2-next-1.3.1 /gnu/store/cjzysi5lh5pkfjwdl6kbxd1iklsv5j4b-sbcl-cl+ssl-0.0.0-1.b81c113 /gnu/store/cxavfbxim8g08438kvqdagck1gr61c9r-sbcl-cl-ppcre-unicode-2.0.11 /gnu/store/dlngg1zc6cn1s0sl65a0yvk9pv6kq35p-sbcl-bordeaux-threads-0.8.6-1.5dce49f /gnu/store/dnjyxpjf0ypd0w7sj9g83zk7yh2ba1x6-sbcl-cl-css-0.1-1.8fe654c /gnu/store/dxbgbh9yfnf56mycvqnizwdly719lany-sbcl-iolib.base-0.8.3 /gnu/store/fz65d87rx6k1qh17cdbki7sk0jmqpxvx-sbcl-trivia.level1-0.0.0-1.902e0c6 /gnu/store/g44dw0w7873rjw0xa63yl5g8cbb0drwq-sbcl-quri-0.1.0-1.76b7510 /gnu/store/g6jv6jhq0fsga1wa17psx0xzr5yhji3z-sbcl-flexi-streams-1.0.16 /gnu/store/gaz7r55v39ngm00s0x641lb3y8i4ni4g-sbcl-iolib-0.8.3 /gnu/store/gsb7wswwk6qj8f17wq4mj47r3r9hq7dr-sbcl-puri-20180228 /gnu/store/gv9mgqvvaj3xrybnaqnz92k4pwxd5swn-sbcl-cl-cookie-0.9.10-1.cea55ae /gnu/store/h2j8gy8d2yrmrklavrik1y864zg7qwqd-sbcl-1.5.6 /gnu/store/h90vnqw0nwd0hhm1l5dgxsdrigddfmq4-glibc-2.28 /gnu/store/i3nbdq5mzf9w75pcwj4vmmk9ig477y57-sbcl-cxml+test-0.0.0-1.00b22bf /gnu/store/iqrad7j28rs3ybjbxqiy9ng8n7568cn3-sbcl-dexador-0.9.10-1.a2714d1 /gnu/store/jvvyq487ainy1y2y1slf3lnizjhwb9s4-sbcl-cl-utilities-0.0.0-1.dce2d2f /gnu/store/kaxbi425n6389mk6wdvylf1npfgayv1h-sbcl-ironclad-0.46 /gnu/store/kg104rhqzvmnpqxk91ayvwxzsrncr0f4-sqlite-3.26.0 /gnu/store/kivhppqdnc05j5h55843m9iq4m5sfqlw-sbcl-cffi-0.19.0 /gnu/store/lgd8f6lg8cc0wq1p88ypq7cxl68yz84a-sbcl-alexandria-0.0.0-1.926a066 /gnu/store/lp0zkbgzj8w9ciyzad3xz37746qr323c-sbcl-introspect-environment-0.1-1.fff42f8 /gnu/store/lx1bmdxxkq6ydhmbmfb14aw2gwfss3b2-sbcl-cl-reexport-0.1-1.312f366 /gnu/store/m1w2cxc4h7f36pgdwpmaqp8iynbngvzs-sbcl-iolib+multiplex-0.8.3 /gnu/store/m9ngbfyi8wrwiwyr7dkfnhn5fyfalq3r-openssl-1.0.2p /gnu/store/maw58fp2xfhgijjl7ddb53hia3gldi65-sbcl-cl-markup-0.1-1.e0eb7de /gnu/store/mkxpi2n0xhy3hdjbj89f5zpndyyl87fb-sbcl-type-i-0.1-1.dea233f /gnu/store/n5yy521im972r4cky8ipgpgg3l5l4xcx-sbcl-iolib.asdf-0.8.3 /gnu/store/n7wcp2npwf4b5x4cywwi48mah1g35jwz-libfixposix-0.4.3 /gnu/store/nq4lsyipmfb0q7g26ra45rwwqrh3x8zw-zlib-1.2.11 /gnu/store/pn86r0syfrwaq2ny7czr8cjdids9y8dx-sbcl-cl-fad-0.7.5 /gnu/store/q19l04vd2za80mk1845pz7r8cz29qk43-bash-minimal-4.4.23 /gnu/store/qc0wlrr3q5z3sg42447njb7kd41xhfnl-sbcl-idna-0.2.2 /gnu/store/qfy9imvn3x3ycnmzl3kpj69550rm0qj7-sbcl-cl-str-0.8-1.3d5ec86 /gnu/store/r2qwa2qd5hrq6kk9fscljlsnn747mnrd-sbcl-iolib.conf-0.8.3 /gnu/store/rbz9hscv4wg71b4ymgzycicnqsi6fm4n-sbcl-trivia.level2-0.0.0-1.902e0c6 /gnu/store/rdw3fax1cdnr8q35s88773z2sx2dbkg1-sbcl-fast-http-0.2.0-1.f9e7597 /gnu/store/rnl0z3qkwx303lpz6dy68r78ls63kmww-sbcl-iolib+syscalls-0.8.3 /gnu/store/rw2y9fy9mmgcd7gil3vyn0k0h5lqs5xp-sbcl-fast-io-1.0.0-1.dc3a71d /gnu/store/s9f4nxk7s3djgnxymg7vqy16b7vslbw9-sbcl-mk-string-metrics-0.1.2 /gnu/store/vcrnpjv9qzswvjlgazvw98vm8v909xav-sbcl-split-sequence-1.4.1 /gnu/store/vmkwl8546jm943qda0r4pvnl64qldwyi-sbcl-cl-sqlite-0.2-1.c738e66 /gnu/store/vn6lfph8x0i7cm2spyi205rp3sybprfq-sbcl-lparallel-2.8.4 /gnu/store/w3gmvxvr37kmdlyvcdxrvzhh424w0qw4-sbcl-usocket-0.7.1-1.86e7efb /gnu/store/wn3crbgl4idv9lb1wvzz2x0v2mjv4h4l-sbcl-cl-unicode-base-0.1.5-1.9fcd06f /gnu/store/wq56c5pinx0ccaavr5ralglam30sfrcs-sbcl-nibbles-0.14 /gnu/store/wsyla0p9cpg05ar3rpby7x3pwfd4zlw3-sbcl-chipz-0.8-1.75dfbc6 /gnu/store/wzqv2sq4lm6bwkk7i6ls85czxprmjvv0-sbcl-chunga-1.1.7 /gnu/store/xn1p8pw6snzn2pnbij66sdsa1h07hr5h-sbcl-lisp-namespace-0.1-1.28107ca /gnu/store/xqalg7y5yh83846c2kwip6kfgwz6wxdi-cl-dbus-20190408-1.24b452d /gnu/store/xv72rxxmi5b5pp8kphnbmg0zv3whl8y9-sbcl-trivial-clipboard-0.0.0.0-2.5af3415 /gnu/store/yr0pv0sq4fr50iavynnv6pwwxxa6dg0q-sbcl-proc-parse-0.0.0-1.ac36368 /gnu/store/yyryqxy2sf9kwbxq5kfcfh3wm0vg0wpa-sbcl-cl-ppcre-2.0.11 /gnu/store/z94yn3iarygf8a5nh6wjfwdr5a15fx7j-sbcl-cxml+klacks-0.0.0-1.00b22bf /gnu/store/zaj2wi6rs214rah4c8an62hn95lfx4mp-sbcl-cxml+xml-0.0.0-1.00b22bf /gnu/store/zraa220x950amls86xflrk5jpzn5s938-sbcl-xsubseq-0.0.1-1.5ce430b --8<---------------cut here---------------end--------------->8--- After your commit: --8<---------------cut here---------------start------------->8--- ./pre-inst-env guix gc --references /gnu/store/sypf1iq80b2i192jp0mxm43bk6dj6fcc-next-1.3.1 /gnu/store/4sqps8dczv3g7rwbdibfz6rf5jlk7w90-gcc-5.5.0-lib /gnu/store/a0rffysgyr66q5fjgm1iibjm4ma1jbk3-next-1.3.1-lib /gnu/store/h2j8gy8d2yrmrklavrik1y864zg7qwqd-sbcl-1.5.6 /gnu/store/h90vnqw0nwd0hhm1l5dgxsdrigddfmq4-glibc-2.28 /gnu/store/nq4lsyipmfb0q7g26ra45rwwqrh3x8zw-zlib-1.2.11 /gnu/store/sypf1iq80b2i192jp0mxm43bk6dj6fcc-next-1.3.1 --8<---------------cut here---------------end--------------->8--- This means that “guix gc” will collect more than it should, leaving users with a broken Next browser. -- Ricardo ^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: 02/02: gnu: next: Compress the executable. 2019-09-05 12:31 ` 02/02: gnu: next: Compress the executable Ricardo Wurmus @ 2019-09-05 12:51 ` Pierre Neidhardt 2019-09-08 21:19 ` Ludovic Courtès 0 siblings, 1 reply; 38+ messages in thread From: Pierre Neidhardt @ 2019-09-05 12:51 UTC (permalink / raw) To: Ricardo Wurmus; +Cc: guix-devel [-- Attachment #1: Type: text/plain, Size: 263 bytes --] Oh, my bad, I did the test with "guix size" instead of "guix gc --references". I'm actually confused why guix size report dependencies that are not in "guix gc --references"? I'll revert the commit just now. -- Pierre Neidhardt https://ambrevar.xyz/ [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 487 bytes --] ^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: 02/02: gnu: next: Compress the executable. 2019-09-05 12:51 ` Pierre Neidhardt @ 2019-09-08 21:19 ` Ludovic Courtès 2019-09-09 8:06 ` Pierre Neidhardt 0 siblings, 1 reply; 38+ messages in thread From: Ludovic Courtès @ 2019-09-08 21:19 UTC (permalink / raw) To: Pierre Neidhardt; +Cc: guix-devel Hi, Pierre Neidhardt <mail@ambrevar.xyz> skribis: > Oh, my bad, I did the test with "guix size" instead of "guix gc > --references". > I'm actually confused why guix size report dependencies that are not in > "guix gc --references"? “guix size” lists dependencies recursively, like “guix gc -R”, whereas “guix gc --references” lists only direct dependencies. Ludo’. ^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: 02/02: gnu: next: Compress the executable. 2019-09-08 21:19 ` Ludovic Courtès @ 2019-09-09 8:06 ` Pierre Neidhardt 2019-09-10 12:51 ` Pierre Neidhardt 0 siblings, 1 reply; 38+ messages in thread From: Pierre Neidhardt @ 2019-09-09 8:06 UTC (permalink / raw) To: Ludovic Courtès; +Cc: guix-devel [-- Attachment #1: Type: text/plain, Size: 365 bytes --] Hmmm, OK, but why would indirect dependencies be garbage-collected? Also in the case of Next there is something fishy: direct dependencies include none of the Common Lisp libraries, and none of them _depends indirectly_ on the those libraries, so how come they show up in the listing of indirect dependencies? -- Pierre Neidhardt https://ambrevar.xyz/ [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 487 bytes --] ^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: 02/02: gnu: next: Compress the executable. 2019-09-09 8:06 ` Pierre Neidhardt @ 2019-09-10 12:51 ` Pierre Neidhardt 2019-09-11 20:37 ` Ludovic Courtès 0 siblings, 1 reply; 38+ messages in thread From: Pierre Neidhardt @ 2019-09-10 12:51 UTC (permalink / raw) To: Ludovic Courtès; +Cc: guix-devel [-- Attachment #1: Type: text/plain, Size: 1367 bytes --] Pierre Neidhardt <mail@ambrevar.xyz> writes: > Also in the case of Next there is something fishy: direct dependencies > include none of the Common Lisp libraries, and none of them _depends > indirectly_ on the those libraries, so how come they show up in the > listing of indirect dependencies? Hmm, reading myself again I realize this was poorly phrased. Allow me to explain that again. In --8<---------------cut here---------------start------------->8--- ./pre-inst-env guix gc --references /gnu/store/sypf1iq80b2i192jp0mxm43bk6dj6fcc-next-1.3.1 /gnu/store/4sqps8dczv3g7rwbdibfz6rf5jlk7w90-gcc-5.5.0-lib /gnu/store/a0rffysgyr66q5fjgm1iibjm4ma1jbk3-next-1.3.1-lib /gnu/store/h2j8gy8d2yrmrklavrik1y864zg7qwqd-sbcl-1.5.6 /gnu/store/h90vnqw0nwd0hhm1l5dgxsdrigddfmq4-glibc-2.28 /gnu/store/nq4lsyipmfb0q7g26ra45rwwqrh3x8zw-zlib-1.2.11 /gnu/store/sypf1iq80b2i192jp0mxm43bk6dj6fcc-next-1.3.1 --8<---------------cut here---------------end--------------->8--- we see that next-1.3.1-lib is a dependency, which holds references to all the other libraries. So my question is, why would `guix gc` collect sqlite, libfixposix, etc. if they are indirect dependencies? In other words? Wasn't I right to check for dependencies with `guix size` (or `guix gc -R`) instead of `guix gc --references`? -- Pierre Neidhardt https://ambrevar.xyz/ [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 487 bytes --] ^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: 02/02: gnu: next: Compress the executable. 2019-09-10 12:51 ` Pierre Neidhardt @ 2019-09-11 20:37 ` Ludovic Courtès 2019-09-12 9:49 ` Pierre Neidhardt 0 siblings, 1 reply; 38+ messages in thread From: Ludovic Courtès @ 2019-09-11 20:37 UTC (permalink / raw) To: Pierre Neidhardt; +Cc: guix-devel Hi Pierre, Pierre Neidhardt <mail@ambrevar.xyz> skribis: > Hmm, reading myself again I realize this was poorly phrased. Allow me > to explain that again. In > > ./pre-inst-env guix gc --references /gnu/store/sypf1iq80b2i192jp0mxm43bk6dj6fcc-next-1.3.1 > /gnu/store/4sqps8dczv3g7rwbdibfz6rf5jlk7w90-gcc-5.5.0-lib > /gnu/store/a0rffysgyr66q5fjgm1iibjm4ma1jbk3-next-1.3.1-lib > /gnu/store/h2j8gy8d2yrmrklavrik1y864zg7qwqd-sbcl-1.5.6 > /gnu/store/h90vnqw0nwd0hhm1l5dgxsdrigddfmq4-glibc-2.28 > /gnu/store/nq4lsyipmfb0q7g26ra45rwwqrh3x8zw-zlib-1.2.11 > /gnu/store/sypf1iq80b2i192jp0mxm43bk6dj6fcc-next-1.3.1 > > we see that next-1.3.1-lib is a dependency, which holds references to > all the other libraries. > > So my question is, why would `guix gc` collect sqlite, libfixposix, > etc. if they are indirect dependencies? > > In other words? Wasn't I right to check for dependencies with `guix > size` (or `guix gc -R`) instead of `guix gc --references`? ‘guix size’ and ‘guix gc -R’ show you the whole closure of the store item, so you might not realize that some of the things that ought to be direct dependencies are now in fact indirect dependencies. If sqlite ought to be a direct dependency and is now, in fact, an indirect dependency, things won’t break right away: sqlite won’t be deleted as long as next is live. But you’ll already run into problems: grafting will yield a broken next, as in <https://issues.guix.gnu.org/issue/33848>. Furthermore, sqlite might eventually vanish entirely from the closure of next, as a consequence of changes in a dependency, and at that point running the GC may remove sqlite and thus break next. ‘guix pack’ would also produce an incomplete pack. To draw a parallel, it’s as if SBCL’s GC were unable to see some of the pointers to the heap, unpredictably: your code might keep running for a while, but sooner or later, it’ll break badly. :-) HTH, Ludo’. ^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: 02/02: gnu: next: Compress the executable. 2019-09-11 20:37 ` Ludovic Courtès @ 2019-09-12 9:49 ` Pierre Neidhardt 2019-09-16 15:56 ` Ludovic Courtès 0 siblings, 1 reply; 38+ messages in thread From: Pierre Neidhardt @ 2019-09-12 9:49 UTC (permalink / raw) To: Ludovic Courtès; +Cc: guix-devel [-- Attachment #1: Type: text/plain, Size: 1367 bytes --] And... I have so many more questions! > ‘guix size’ and ‘guix gc -R’ show you the whole closure of the store > item, so you might not realize that some of the things that ought to be > direct dependencies are now in fact indirect dependencies. > > If sqlite ought to be a direct dependency and is now, in fact, an > indirect dependency, things won’t break right away: sqlite won’t be > deleted as long as next is live. > > But you’ll already run into problems: grafting will yield a broken next, > as in <https://issues.guix.gnu.org/issue/33848>. I think the aforementioned issue is different: it's about store paths that are written within Common Lisp code, which only happens here for the next-gtk-webkit executable. This is not related to SQLite or others, which are visible to the reference scanner. I don't understand how grafting could cause a problem: next-1.3.1-lib would still be present, right? > Furthermore, sqlite might eventually vanish entirely from the closure of > next, as a consequence of changes in a dependency, and at that point > running the GC may remove sqlite and thus break next. ‘guix pack’ would > also produce an incomplete pack. If sqlite vanishes from the closure, it means the Next does not need it. Why would it be a problem then? -- Pierre Neidhardt https://ambrevar.xyz/ [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 487 bytes --] ^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: 02/02: gnu: next: Compress the executable. 2019-09-12 9:49 ` Pierre Neidhardt @ 2019-09-16 15:56 ` Ludovic Courtès 2019-09-16 17:46 ` Pierre Neidhardt 0 siblings, 1 reply; 38+ messages in thread From: Ludovic Courtès @ 2019-09-16 15:56 UTC (permalink / raw) To: Pierre Neidhardt; +Cc: guix-devel Pierre Neidhardt <mail@ambrevar.xyz> skribis: > And... I have so many more questions! > >> ‘guix size’ and ‘guix gc -R’ show you the whole closure of the store >> item, so you might not realize that some of the things that ought to be >> direct dependencies are now in fact indirect dependencies. >> >> If sqlite ought to be a direct dependency and is now, in fact, an >> indirect dependency, things won’t break right away: sqlite won’t be >> deleted as long as next is live. >> >> But you’ll already run into problems: grafting will yield a broken next, >> as in <https://issues.guix.gnu.org/issue/33848>. > > I think the aforementioned issue is different: it's about store paths > that are written within Common Lisp code, which only happens here for > the next-gtk-webkit executable. This is not related to SQLite or > others, which are visible to the reference scanner. > > I don't understand how grafting could cause a problem: next-1.3.1-lib > would still be present, right? Same story: if the reference to ‘next-1.3.1-lib’ is invisible to the scanner or grafting code (due to compression, or due use of a non-ASCII compatible string encoding), the ‘next-1.3.1-lib’ might vanish. Ludo’. ^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: 02/02: gnu: next: Compress the executable. 2019-09-16 15:56 ` Ludovic Courtès @ 2019-09-16 17:46 ` Pierre Neidhardt 2019-09-27 14:35 ` Pierre Neidhardt 0 siblings, 1 reply; 38+ messages in thread From: Pierre Neidhardt @ 2019-09-16 17:46 UTC (permalink / raw) To: Ludovic Courtès; +Cc: guix-devel [-- Attachment #1: Type: text/plain, Size: 675 bytes --] Ludovic Courtès <ludo@gnu.org> writes: > Same story: if the reference to ‘next-1.3.1-lib’ is invisible to the > scanner or grafting code (due to compression, or due use of a non-ASCII > compatible string encoding), the ‘next-1.3.1-lib’ might vanish. But it's not, as shown in the first post by Ricardo. next-1.3.1-lib is directly referenced by the asdf build system, there is no risk for it to disappear. So I'm still wondering how "guix size" could show dependencies that could potentially be garbage-collected. Sorry if I'm missing the obvious :p Can we re-enable core compression for Next then? -- Pierre Neidhardt https://ambrevar.xyz/ [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 487 bytes --] ^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: 02/02: gnu: next: Compress the executable. 2019-09-16 17:46 ` Pierre Neidhardt @ 2019-09-27 14:35 ` Pierre Neidhardt 2019-09-28 21:02 ` Ludovic Courtès 0 siblings, 1 reply; 38+ messages in thread From: Pierre Neidhardt @ 2019-09-27 14:35 UTC (permalink / raw) To: Ludovic Courtès; +Cc: guix-devel [-- Attachment #1: Type: text/plain, Size: 438 bytes --] Duh, got it: if next-1.3.1-lib is grafted, then the path to SQLite, libfixposix, etc. _inside the compress binary_ will not be updated. So if we garbage-collect after that, the binary will try to FFI-load non-existing libraries. Note that this is only a problem because Next depends on FFI libraries. Compressing pure-SBCL binaries should not be a problem. Thanks for your help! -- Pierre Neidhardt https://ambrevar.xyz/ [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 487 bytes --] ^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: 02/02: gnu: next: Compress the executable. 2019-09-27 14:35 ` Pierre Neidhardt @ 2019-09-28 21:02 ` Ludovic Courtès 2019-09-29 7:59 ` Pierre Neidhardt 2019-09-29 13:24 ` Maxim Cournoyer 0 siblings, 2 replies; 38+ messages in thread From: Ludovic Courtès @ 2019-09-28 21:02 UTC (permalink / raw) To: Pierre Neidhardt; +Cc: guix-devel Howdy! Pierre Neidhardt <mail@ambrevar.xyz> skribis: > Duh, got it: if next-1.3.1-lib is grafted, then the path to SQLite, > libfixposix, etc. _inside the compress binary_ will not be updated. > So if we garbage-collect after that, the binary will try to FFI-load > non-existing libraries. Exactly! > Note that this is only a problem because Next depends on FFI libraries. > Compressing pure-SBCL binaries should not be a problem. It’s a problem in general: any store reference in a compressed file is invisible to the GC and to the grafting code. Ludo’. ^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: 02/02: gnu: next: Compress the executable. 2019-09-28 21:02 ` Ludovic Courtès @ 2019-09-29 7:59 ` Pierre Neidhardt 2019-09-29 13:24 ` Maxim Cournoyer 1 sibling, 0 replies; 38+ messages in thread From: Pierre Neidhardt @ 2019-09-29 7:59 UTC (permalink / raw) To: Ludovic Courtès; +Cc: guix-devel [-- Attachment #1: Type: text/plain, Size: 318 bytes --] Howdy! > It’s a problem in general: any store reference in a compressed file is > invisible to the GC and to the grafting code. I meant that pure Common Lisp binaries are self-contained, so they can be compressed because they don't have any useful reference. -- Pierre Neidhardt https://ambrevar.xyz/ [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 487 bytes --] ^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: 02/02: gnu: next: Compress the executable. 2019-09-28 21:02 ` Ludovic Courtès 2019-09-29 7:59 ` Pierre Neidhardt @ 2019-09-29 13:24 ` Maxim Cournoyer 2019-09-29 13:43 ` Pierre Neidhardt 1 sibling, 1 reply; 38+ messages in thread From: Maxim Cournoyer @ 2019-09-29 13:24 UTC (permalink / raw) To: Ludovic Courtès; +Cc: guix-devel Hi Pierre, Ludovic Courtès <ludo@gnu.org> writes: > Howdy! > > Pierre Neidhardt <mail@ambrevar.xyz> skribis: > >> Duh, got it: if next-1.3.1-lib is grafted, then the path to SQLite, >> libfixposix, etc. _inside the compress binary_ will not be updated. >> So if we garbage-collect after that, the binary will try to FFI-load >> non-existing libraries. > > Exactly! > >> Note that this is only a problem because Next depends on FFI libraries. >> Compressing pure-SBCL binaries should not be a problem. > > It’s a problem in general: any store reference in a compressed file is > invisible to the GC and to the grafting code. > > Ludo’. In case you were not thinking about it, Btrfs compression gives you the best of both worlds -- Guix operates on seemingly uncompressed data, while in reality everything (not just SBCL binaries) is compressed to reduce disk space usage and speed up read/writes. Maxim ^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: 02/02: gnu: next: Compress the executable. 2019-09-29 13:24 ` Maxim Cournoyer @ 2019-09-29 13:43 ` Pierre Neidhardt 2019-10-02 7:53 ` Efraim Flashner 2019-10-02 15:01 ` Maxim Cournoyer 0 siblings, 2 replies; 38+ messages in thread From: Pierre Neidhardt @ 2019-09-29 13:43 UTC (permalink / raw) To: Maxim Cournoyer, Ludovic Courtès; +Cc: guix-devel [-- Attachment #1: Type: text/plain, Size: 404 bytes --] True. I've been using Btrfs for my data for a little while and I'm very happy with it. I wonder how Btrfs fares for a Guix system. In many ways, Guix supersedes many of the features of Btrfs (snapshots and deduplication in particular). So I wonder if it's not redundant and possibly incurs a waste of energy. What's your experience, Maxim? -- Pierre Neidhardt https://ambrevar.xyz/ [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 487 bytes --] ^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: 02/02: gnu: next: Compress the executable. 2019-09-29 13:43 ` Pierre Neidhardt @ 2019-10-02 7:53 ` Efraim Flashner 2019-10-02 13:27 ` Pierre Neidhardt 2019-10-02 15:01 ` Maxim Cournoyer 1 sibling, 1 reply; 38+ messages in thread From: Efraim Flashner @ 2019-10-02 7:53 UTC (permalink / raw) To: Pierre Neidhardt; +Cc: guix-devel, Maxim Cournoyer [-- Attachment #1: Type: text/plain, Size: 1296 bytes --] On Sun, Sep 29, 2019 at 03:43:45PM +0200, Pierre Neidhardt wrote: > True. > > I've been using Btrfs for my data for a little while and I'm very happy > with it. > > I wonder how Btrfs fares for a Guix system. In many ways, Guix > supersedes many of the features of Btrfs (snapshots and deduplication in > particular). So I wonder if it's not redundant and possibly incurs a > waste of energy. > > What's your experience, Maxim? > Not Maxim, but I use btrfs also on my Guix Systems. I have the compression set to lz4, which doesn't compress a lot but does compress/decompress with minimal CPU overhead so I feel like I'm getting some benefit from it. In general compression can "speed up" disk operations since you can write easily compressible data faster than regular data. Other than that after boot-up I run 'sudo chattr +C /tmp' to make my /tmp dir not copy-on-write, which helps with building packages. I also have a daily cron job to balance my disk and to scrub it. Overall I don't really use very many features that aren't available on ext4. -- Efraim Flashner <efraim@flashner.co.il> אפרים פלשנר GPG key = A28B F40C 3E55 1372 662D 14F7 41AA E7DC CA3D 8351 Confidentiality cannot be guaranteed on emails sent or received unencrypted [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 833 bytes --] ^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: 02/02: gnu: next: Compress the executable. 2019-10-02 7:53 ` Efraim Flashner @ 2019-10-02 13:27 ` Pierre Neidhardt 0 siblings, 0 replies; 38+ messages in thread From: Pierre Neidhardt @ 2019-10-02 13:27 UTC (permalink / raw) To: Efraim Flashner; +Cc: guix-devel, Maxim Cournoyer [-- Attachment #1: Type: text/plain, Size: 347 bytes --] Thanks for your feedback, Efraim. I'd be interested in knowing the difference between a compressed /gnu/store and an uncompressed one. I believe the `compsize` utility can give us an idea: sudo compsize /gnu/store (It's a Guix package.) Would you like to try it, Efraim? Or Maxim? -- Pierre Neidhardt https://ambrevar.xyz/ [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 487 bytes --] ^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: 02/02: gnu: next: Compress the executable. 2019-09-29 13:43 ` Pierre Neidhardt 2019-10-02 7:53 ` Efraim Flashner @ 2019-10-02 15:01 ` Maxim Cournoyer 2019-10-02 15:20 ` Pierre Neidhardt 2019-10-03 7:09 ` 02/02: gnu: next: Compress the executable Efraim Flashner 1 sibling, 2 replies; 38+ messages in thread From: Maxim Cournoyer @ 2019-10-02 15:01 UTC (permalink / raw) To: Pierre Neidhardt; +Cc: guix-devel Hello Pierre! Pierre Neidhardt <mail@ambrevar.xyz> writes: > True. > > I've been using Btrfs for my data for a little while and I'm very happy > with it. > > I wonder how Btrfs fares for a Guix system. In many ways, Guix > supersedes many of the features of Btrfs (snapshots and deduplication in > particular). So I wonder if it's not redundant and possibly incurs a > waste of energy. > > What's your experience, Maxim? I like that Btrfs allows to set different namespaces (think of LVM logical volumes) on the fly as subvolumes. I use snapshots as a mean of backups, (using the btrfs send/receive mechanism to backup the snapshots (differentially) to external storage). I haven't noticed much slow down (if at all?), and the 'lzo' compression keeps the /gnu/store size 30% smaller or so. That sums it for now, I think. HTH! Maxim ^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: 02/02: gnu: next: Compress the executable. 2019-10-02 15:01 ` Maxim Cournoyer @ 2019-10-02 15:20 ` Pierre Neidhardt 2019-10-02 15:59 ` btrfs and Guix features [was: gnu: next: Compress the executable.] Tobias Geerinckx-Rice 2019-10-03 7:09 ` 02/02: gnu: next: Compress the executable Efraim Flashner 1 sibling, 1 reply; 38+ messages in thread From: Pierre Neidhardt @ 2019-10-02 15:20 UTC (permalink / raw) To: Maxim Cournoyer; +Cc: guix-devel [-- Attachment #1: Type: text/plain, Size: 613 bytes --] Maxim Cournoyer <maxim.cournoyer@gmail.com> writes: > I like that Btrfs allows to set different namespaces (think of LVM > logical volumes) on the fly as subvolumes. I use snapshots as a mean of > backups, (using the btrfs send/receive mechanism to backup the snapshots > (differentially) to external storage). Aren't btrfs snapshots overlapping with Guix generations? > > I haven't noticed much slow down (if at all?), and the 'lzo' compression > keeps the /gnu/store size 30% smaller or so. This is pretty good! Alright, you sold it to me! :) -- Pierre Neidhardt https://ambrevar.xyz/ [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 487 bytes --] ^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: btrfs and Guix features [was: gnu: next: Compress the executable.] 2019-10-02 15:20 ` Pierre Neidhardt @ 2019-10-02 15:59 ` Tobias Geerinckx-Rice 2019-10-02 16:31 ` Pierre Neidhardt 0 siblings, 1 reply; 38+ messages in thread From: Tobias Geerinckx-Rice @ 2019-10-02 15:59 UTC (permalink / raw) To: Pierre Neidhardt, guix-devel; +Cc: Maxim Cournoyer [-- Attachment #1: Type: text/plain, Size: 1211 bytes --] Pierre, Pierre Neidhardt 写道: > Maxim Cournoyer <maxim.cournoyer@gmail.com> writes: > >> I like that Btrfs allows to set different namespaces (think of >> LVM >> logical volumes) on the fly as subvolumes. I use snapshots as >> a mean of >> backups, (using the btrfs send/receive mechanism to backup the >> snapshots >> (differentially) to external storage). > > Aren't btrfs snapshots overlapping with Guix generations? A few ‘traditional’ distributions use btrfs snapshots to do what Guix does natively and much better: system roll-backs. Reversing that to call btrfs's features ‘overlapping’ with Guix seems very forced to me :-) Guix generations don't even protect the one valuable part: the human-written configuration that created it. You need to do that yourself (probably with git). Everything else is just insanely convenient caching. Generations also don't allow you to btrfs send/receive, which I think was Maxim's main point. If there's another KISSy way to back up whole Guix Systems over the Internet, I don't know of it (rsync can't, nor can borg or restic or…, and everything else is too much work :o). Kind regards, T G-R [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 832 bytes --] ^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: btrfs and Guix features [was: gnu: next: Compress the executable.] 2019-10-02 15:59 ` btrfs and Guix features [was: gnu: next: Compress the executable.] Tobias Geerinckx-Rice @ 2019-10-02 16:31 ` Pierre Neidhardt 2019-10-02 17:48 ` Tobias Geerinckx-Rice 2019-10-08 4:41 ` Maxim Cournoyer 0 siblings, 2 replies; 38+ messages in thread From: Pierre Neidhardt @ 2019-10-02 16:31 UTC (permalink / raw) To: Tobias Geerinckx-Rice, guix-devel; +Cc: Maxim Cournoyer [-- Attachment #1: Type: text/plain, Size: 597 bytes --] Tobias Geerinckx-Rice <me@tobias.gr> writes: > Generations also don't allow you to btrfs send/receive, which I > think was Maxim's main point. If there's another KISSy way to > back up whole Guix Systems over the Internet, I don't know of it > (rsync can't, nor can borg or restic or…, and everything else is > too much work :o). Question: What is the point of backing up a Guix system if the config.scm suffices? Is there something that is not contained in config.scm? Beside Internet connection cost and time, of course! ;) -- Pierre Neidhardt https://ambrevar.xyz/ [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 487 bytes --] ^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: btrfs and Guix features [was: gnu: next: Compress the executable.] 2019-10-02 16:31 ` Pierre Neidhardt @ 2019-10-02 17:48 ` Tobias Geerinckx-Rice 2019-10-02 18:59 ` Pierre Neidhardt 2019-10-08 4:41 ` Maxim Cournoyer 1 sibling, 1 reply; 38+ messages in thread From: Tobias Geerinckx-Rice @ 2019-10-02 17:48 UTC (permalink / raw) To: Pierre Neidhardt; +Cc: guix-devel [-- Attachment #1: Type: text/plain, Size: 1410 bytes --] Pierre, Pierre Neidhardt 写道: > Tobias Geerinckx-Rice <me@tobias.gr> writes: > >> Generations also don't allow you to btrfs send/receive, which I >> think was Maxim's main point. If there's another KISSy way to >> back up whole Guix Systems over the Internet, I don't know of >> it >> (rsync can't, nor can borg or restic or…, and everything else >> is >> too much work :o). > > Question: What is the point of backing up a Guix system if the > config.scm suffices? I did blatantly invite that question, didn't I :-) > Is there something that is not contained in config.scm? So. much. state. ‘Oh, right, /etc/networkmanager's gone now. Let me get my notebook with passwords. Oh, that reminds me: all user passwords are empty, have to change that ASAP. Phew. Oh, I have to reinstall my printer, good thing I have time for that while people are angrily calling me about deadlines. What's this about changed SSH host ke—’ That's trivial stuff I thought of while writing, and it already adds up to minutes of human work (=downtime). All at the most inconvenient and stressful time. Now multiply that by the number of things I forgot. I don't consider a back-up that can't be restored while drunk a back-up. > […] time, of course! ;) I've learnt the hard way over the years that, for me, nothing else matters. ♪, T G-R [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 832 bytes --] ^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: btrfs and Guix features [was: gnu: next: Compress the executable.] 2019-10-02 17:48 ` Tobias Geerinckx-Rice @ 2019-10-02 18:59 ` Pierre Neidhardt 0 siblings, 0 replies; 38+ messages in thread From: Pierre Neidhardt @ 2019-10-02 18:59 UTC (permalink / raw) To: Tobias Geerinckx-Rice; +Cc: guix-devel [-- Attachment #1: Type: text/plain, Size: 65 bytes --] Fair enough! :) -- Pierre Neidhardt https://ambrevar.xyz/ [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 487 bytes --] ^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: btrfs and Guix features [was: gnu: next: Compress the executable.] 2019-10-02 16:31 ` Pierre Neidhardt 2019-10-02 17:48 ` Tobias Geerinckx-Rice @ 2019-10-08 4:41 ` Maxim Cournoyer 2019-10-08 7:44 ` Pierre Neidhardt 1 sibling, 1 reply; 38+ messages in thread From: Maxim Cournoyer @ 2019-10-08 4:41 UTC (permalink / raw) To: Pierre Neidhardt; +Cc: guix-devel Pierre Neidhardt <mail@ambrevar.xyz> writes: > Tobias Geerinckx-Rice <me@tobias.gr> writes: > >> Generations also don't allow you to btrfs send/receive, which I >> think was Maxim's main point. If there's another KISSy way to >> back up whole Guix Systems over the Internet, I don't know of it >> (rsync can't, nor can borg or restic or…, and everything else is >> too much work :o). > > Question: What is the point of backing up a Guix system if the > config.scm suffices? Is there something that is not contained in config.scm? > > Beside Internet connection cost and time, of course! ;) Hi Pierre! I've used a full backup to migrate from hard drives in the past; it's actually faster to sync drives than fetch packages off the internet, and my system is exactly in the same *state* as it was left (including those bookmarks in Icecat, those cached emails, etc.). Keep in mind that multiple subvolumes can be used to hold your 'home' or other data partitons, making these individually easy to snapshot and backup. Maxim ^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: btrfs and Guix features [was: gnu: next: Compress the executable.] 2019-10-08 4:41 ` Maxim Cournoyer @ 2019-10-08 7:44 ` Pierre Neidhardt 2019-10-09 1:58 ` Maxim Cournoyer 0 siblings, 1 reply; 38+ messages in thread From: Pierre Neidhardt @ 2019-10-08 7:44 UTC (permalink / raw) To: Maxim Cournoyer; +Cc: guix-devel [-- Attachment #1: Type: text/plain, Size: 819 bytes --] Hi Maxim! > I've used a full backup to migrate from hard drives in the past; it's > actually faster to sync drives than fetch packages off the internet, and > my system is exactly in the same *state* as it was left (including those > bookmarks in Icecat, those cached emails, etc.). > > Keep in mind that multiple subvolumes can be used to hold your 'home' or > other data partitons, making these individually easy to snapshot and > backup. I personally prefer to restore the home data (bookmarks, emails...) in a functional, declarative manner (for now via scripts, later maybe via Shepherd user services if I find time / money to work on this). It's more work, but if we get user services we could factor this work so that everyone benefits from it. -- Pierre Neidhardt https://ambrevar.xyz/ [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 487 bytes --] ^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: btrfs and Guix features [was: gnu: next: Compress the executable.] 2019-10-08 7:44 ` Pierre Neidhardt @ 2019-10-09 1:58 ` Maxim Cournoyer 0 siblings, 0 replies; 38+ messages in thread From: Maxim Cournoyer @ 2019-10-09 1:58 UTC (permalink / raw) To: Pierre Neidhardt; +Cc: guix-devel Hello again, Pierre Neidhardt <mail@ambrevar.xyz> writes: > Hi Maxim! > >> I've used a full backup to migrate from hard drives in the past; it's >> actually faster to sync drives than fetch packages off the internet, and >> my system is exactly in the same *state* as it was left (including those >> bookmarks in Icecat, those cached emails, etc.). >> >> Keep in mind that multiple subvolumes can be used to hold your 'home' or >> other data partitons, making these individually easy to snapshot and >> backup. > > I personally prefer to restore the home data (bookmarks, emails...) in a > functional, declarative manner (for now via scripts, later maybe via > Shepherd user services if I find time / money to work on this). It's > more work, but if we get user services we could factor this work so that > everyone benefits from it. I agree with you, that declarative is nice; but it's still no substitute for a backup IMO. I'm already using a private git + GNU Stow to deploy my dot files, and have been meaning to try the Guix Home Manager [0] Guix extension (via a channel) by Julien Lepiller. [0] https://framagit.org/tyreunom/guix-home-manager Maxim ^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: 02/02: gnu: next: Compress the executable. 2019-10-02 15:01 ` Maxim Cournoyer 2019-10-02 15:20 ` Pierre Neidhardt @ 2019-10-03 7:09 ` Efraim Flashner 2019-10-03 18:28 ` Bengt Richter 2019-10-08 7:05 ` Maxim Cournoyer 1 sibling, 2 replies; 38+ messages in thread From: Efraim Flashner @ 2019-10-03 7:09 UTC (permalink / raw) To: Maxim Cournoyer; +Cc: guix-devel [-- Attachment #1: Type: text/plain, Size: 1221 bytes --] On Thu, Oct 03, 2019 at 12:01:43AM +0900, Maxim Cournoyer wrote: > Hello Pierre! > > Pierre Neidhardt <mail@ambrevar.xyz> writes: > > > True. > > > > I've been using Btrfs for my data for a little while and I'm very happy > > with it. > > > > I wonder how Btrfs fares for a Guix system. In many ways, Guix > > supersedes many of the features of Btrfs (snapshots and deduplication in > > particular). So I wonder if it's not redundant and possibly incurs a > > waste of energy. > > > > What's your experience, Maxim? <snip> > > I haven't noticed much slow down (if at all?), and the 'lzo' compression > keeps the /gnu/store size 30% smaller or so. > > That sums it for now, I think. > What mount options do you have? I realized i have compression enabled but 'sudo compsize /gnu/store' doesn't show any compression happening. (file-system (device (file-system-label "root")) (mount-point "/") (type "btrfs") (options "autodefrag,compress=lzo,discard,ssd_spread")) -- Efraim Flashner <efraim@flashner.co.il> אפרים פלשנר GPG key = A28B F40C 3E55 1372 662D 14F7 41AA E7DC CA3D 8351 Confidentiality cannot be guaranteed on emails sent or received unencrypted [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 833 bytes --] ^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: 02/02: gnu: next: Compress the executable. 2019-10-03 7:09 ` 02/02: gnu: next: Compress the executable Efraim Flashner @ 2019-10-03 18:28 ` Bengt Richter 2019-10-04 8:08 ` Pierre Neidhardt 2019-10-08 7:05 ` Maxim Cournoyer 1 sibling, 1 reply; 38+ messages in thread From: Bengt Richter @ 2019-10-03 18:28 UTC (permalink / raw) To: Efraim Flashner; +Cc: guix-devel, Maxim Cournoyer On +2019-10-03 10:09:30 +0300, Efraim Flashner wrote: > On Thu, Oct 03, 2019 at 12:01:43AM +0900, Maxim Cournoyer wrote: > > Hello Pierre! > > > > Pierre Neidhardt <mail@ambrevar.xyz> writes: > > > > > True. > > > > > > I've been using Btrfs for my data for a little while and I'm very happy > > > with it. > > > > > > I wonder how Btrfs fares for a Guix system. In many ways, Guix > > > supersedes many of the features of Btrfs (snapshots and deduplication in > > > particular). So I wonder if it's not redundant and possibly incurs a > > > waste of energy. > > > > > > What's your experience, Maxim? > <snip> > > > > I haven't noticed much slow down (if at all?), and the 'lzo' compression > > keeps the /gnu/store size 30% smaller or so. > > > > That sums it for now, I think. > > > > What mount options do you have? I realized i have compression enabled > but 'sudo compsize /gnu/store' doesn't show any compression happening. > > (file-system > (device (file-system-label "root")) > (mount-point "/") > (type "btrfs") > (options "autodefrag,compress=lzo,discard,ssd_spread")) > I am wondering if there is some low level losetup size ambivalence involved. I.e., isn't e.g. ext4 smart enough to defer actual allocation of physical page blocks when blocks are pure zero, and just store the fact of their existence in inode metadata? If that's right, then it would seem that it would be possible to access both the full physical size and alternatively just the sum on non-zero blocks' sizes. One would think that someone has taken advantage of this to let losetup over-book physical backing blocks in a mounted loopback device. Is there a version of df that has an option to output both sizes of a sparsely non-zero file? HTH trigger some useful thought sussing out that 30% :-) -- Regards, Bengt Richter ^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: 02/02: gnu: next: Compress the executable. 2019-10-03 18:28 ` Bengt Richter @ 2019-10-04 8:08 ` Pierre Neidhardt 0 siblings, 0 replies; 38+ messages in thread From: Pierre Neidhardt @ 2019-10-04 8:08 UTC (permalink / raw) To: Bengt Richter, Efraim Flashner; +Cc: guix-devel, Maxim Cournoyer [-- Attachment #1: Type: text/plain, Size: 497 bytes --] Bengt Richter <bokr@bokr.com> writes: > I.e., isn't e.g. ext4 smart enough to defer actual allocation of physical page blocks > when blocks are pure zero, and just store the fact of their existence in inode > metadata? Yes, ext4 supports that. > Is there a version of df that has an option to output both sizes of > a sparsely non-zero file? I don't think df can do that, bu GNU `du' can, see the --apparent-size / --bytes options. -- Pierre Neidhardt https://ambrevar.xyz/ [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 487 bytes --] ^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: 02/02: gnu: next: Compress the executable. 2019-10-03 7:09 ` 02/02: gnu: next: Compress the executable Efraim Flashner 2019-10-03 18:28 ` Bengt Richter @ 2019-10-08 7:05 ` Maxim Cournoyer 2019-10-08 7:48 ` Pierre Neidhardt 1 sibling, 1 reply; 38+ messages in thread From: Maxim Cournoyer @ 2019-10-08 7:05 UTC (permalink / raw) To: Efraim Flashner; +Cc: guix-devel Hello again, Efraim Flashner <efraim@flashner.co.il> writes: > On Thu, Oct 03, 2019 at 12:01:43AM +0900, Maxim Cournoyer wrote: >> Hello Pierre! >> >> Pierre Neidhardt <mail@ambrevar.xyz> writes: >> >> > True. >> > >> > I've been using Btrfs for my data for a little while and I'm very happy >> > with it. >> > >> > I wonder how Btrfs fares for a Guix system. In many ways, Guix >> > supersedes many of the features of Btrfs (snapshots and deduplication in >> > particular). So I wonder if it's not redundant and possibly incurs a >> > waste of energy. >> > >> > What's your experience, Maxim? > <snip> >> >> I haven't noticed much slow down (if at all?), and the 'lzo' compression >> keeps the /gnu/store size 30% smaller or so. >> >> That sums it for now, I think. >> > > What mount options do you have? I realized i have compression enabled > but 'sudo compsize /gnu/store' doesn't show any compression happening. > > (file-system > (device (file-system-label "root")) > (mount-point "/") > (type "btrfs") > (options "autodefrag,compress=lzo,discard,ssd_spread")) I'm just using the 'compress=lzo' option. Here's the output of 'compsize' on my system: --8<---------------cut here---------------start------------->8--- time sudo compsize /gnu/store Processed 2039520 files, 446555 regular extents (1329746 refs), 925862 inline. Type Perc Disk Usage Uncompressed Referenced TOTAL 90% 49G 54G 128G none 100% 44G 44G 96G lzo 49% 5.2G 10G 31G real 1m18.454s user 0m6.375s sys 0m52.852sn --8<---------------cut here---------------end--------------->8--- So my total compression rate would be 10%, which is not as good as the 30% I had on mind. I think that 30% I had on mind was based on sending an uncompressed root file system to a compressed backup drive (using Btrfs' lzo compression). But it appears most of my /gnu/store content is not using compression at all, perhaps because Btrfs will not compress files it knows wouldn't compress well (e.g. already compressed archives). HTH, Maxim ^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: 02/02: gnu: next: Compress the executable. 2019-10-08 7:05 ` Maxim Cournoyer @ 2019-10-08 7:48 ` Pierre Neidhardt 2019-10-09 1:50 ` Maxim Cournoyer 0 siblings, 1 reply; 38+ messages in thread From: Pierre Neidhardt @ 2019-10-08 7:48 UTC (permalink / raw) To: Maxim Cournoyer, Efraim Flashner; +Cc: guix-devel [-- Attachment #1: Type: text/plain, Size: 552 bytes --] Maxim Cournoyer <maxim.cournoyer@gmail.com> writes: > But it appears most of my /gnu/store content is not using compression at > all, perhaps because Btrfs will not compress files it knows wouldn't > compress well (e.g. already compressed archives). Hmmm... If you've got a lot of source archives in your store, this is would be true, but libraries and binaries compress very well in general, so I would also expect more than 10%. Have you tried cleaning up some of the compressed archives? -- Pierre Neidhardt https://ambrevar.xyz/ [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 487 bytes --] ^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: 02/02: gnu: next: Compress the executable. 2019-10-08 7:48 ` Pierre Neidhardt @ 2019-10-09 1:50 ` Maxim Cournoyer 2019-10-09 8:05 ` Pierre Neidhardt 0 siblings, 1 reply; 38+ messages in thread From: Maxim Cournoyer @ 2019-10-09 1:50 UTC (permalink / raw) To: Pierre Neidhardt; +Cc: guix-devel Hi Pierre, Pierre Neidhardt <mail@ambrevar.xyz> writes: > Maxim Cournoyer <maxim.cournoyer@gmail.com> writes: > >> But it appears most of my /gnu/store content is not using compression at >> all, perhaps because Btrfs will not compress files it knows wouldn't >> compress well (e.g. already compressed archives). > > Hmmm... If you've got a lot of source archives in your store, this is > would be true, but libraries and binaries compress very well in general, > so I would also expect more than 10%. Have you tried cleaning up some > of the compressed archives? I haven't, but running compsize on my /home gives a similar result... Weird. I don't keep much already compressed (videos, photos, compressed archives, etc.) files in my home, AFAICT. It'd be useful if 'compsize' could tell us the nature of the files that we not compressed. Maxim ^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: 02/02: gnu: next: Compress the executable. 2019-10-09 1:50 ` Maxim Cournoyer @ 2019-10-09 8:05 ` Pierre Neidhardt 2020-02-27 15:38 ` Maxim Cournoyer 0 siblings, 1 reply; 38+ messages in thread From: Pierre Neidhardt @ 2019-10-09 8:05 UTC (permalink / raw) To: Maxim Cournoyer; +Cc: guix-devel [-- Attachment #1: Type: text/plain, Size: 129 bytes --] Maybe you can chain a shell `find' + compsize on specific folders / file types. -- Pierre Neidhardt https://ambrevar.xyz/ [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 487 bytes --] ^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: 02/02: gnu: next: Compress the executable. 2019-10-09 8:05 ` Pierre Neidhardt @ 2020-02-27 15:38 ` Maxim Cournoyer 2020-02-27 15:48 ` Pierre Neidhardt 0 siblings, 1 reply; 38+ messages in thread From: Maxim Cournoyer @ 2020-02-27 15:38 UTC (permalink / raw) To: Pierre Neidhardt; +Cc: guix-devel Hi Pierre, The problem where using Btrfs compression wasn't effective for /gnu/store (or anything else) was caused by the init RAM disk not honoring options on the root file system. I could notice about this when running just 'mount', and the options I gave in my config.scm were missing. Since this was fixed with commit 900ef20b1da66ad71145082c883dc12f31fafa54, retesting compsize gives better results :-). Here are the results when using the zstd compression (default level, 3) on the /gnu/store of this relatively new machine: --8<---------------cut here---------------start------------->8--- sudo compsize /gnu/store Password: Processed 1166359 files, 379224 regular extents (1025522 refs), 543008 inline. Type Perc Disk Usage Uncompressed Referenced TOTAL 65% 30G 46G 107G none 100% 23G 23G 52G zstd 29% 6.8G 22G 55G --8<---------------cut here---------------end--------------->8--- We see that there's 23 GiB that aren't compressed. I attribute those to already compressed files in the store, that Btrfs doesn't consider worth compressing. For the compressible files, Zstd achieves an impressive 29% compression ratio, while overall the compression ration is 65%. The last column shows how much space a traditional file system would need to store the content referenced. Maxim ^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: 02/02: gnu: next: Compress the executable. 2020-02-27 15:38 ` Maxim Cournoyer @ 2020-02-27 15:48 ` Pierre Neidhardt 2020-03-03 5:14 ` Maxim Cournoyer 0 siblings, 1 reply; 38+ messages in thread From: Pierre Neidhardt @ 2020-02-27 15:48 UTC (permalink / raw) To: Maxim Cournoyer; +Cc: guix-devel [-- Attachment #1: Type: text/plain, Size: 206 bytes --] This is fantastic, thanks a lot for the feedback! Speaking of which, should we update the manual and/or templates to encourage users to switch to Btrfs? -- Pierre Neidhardt https://ambrevar.xyz/ [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 487 bytes --] ^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: 02/02: gnu: next: Compress the executable. 2020-02-27 15:48 ` Pierre Neidhardt @ 2020-03-03 5:14 ` Maxim Cournoyer 2020-03-03 9:43 ` Pierre Neidhardt 0 siblings, 1 reply; 38+ messages in thread From: Maxim Cournoyer @ 2020-03-03 5:14 UTC (permalink / raw) To: Pierre Neidhardt; +Cc: guix-devel Hi Pierre, Pierre Neidhardt <mail@ambrevar.xyz> writes: > This is fantastic, thanks a lot for the feedback! > > Speaking of which, should we update the manual and/or templates to > encourage users to switch to Btrfs? Perhaps! I don't really have an opinion on this :-) Maxim ^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: 02/02: gnu: next: Compress the executable. 2020-03-03 5:14 ` Maxim Cournoyer @ 2020-03-03 9:43 ` Pierre Neidhardt 2020-03-11 2:09 ` Maxim Cournoyer 0 siblings, 1 reply; 38+ messages in thread From: Pierre Neidhardt @ 2020-03-03 9:43 UTC (permalink / raw) To: Maxim Cournoyer; +Cc: guix-devel [-- Attachment #1: Type: text/plain, Size: 98 bytes --] Can you share your operating system declaration? -- Pierre Neidhardt https://ambrevar.xyz/ [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 487 bytes --] ^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: 02/02: gnu: next: Compress the executable. 2020-03-03 9:43 ` Pierre Neidhardt @ 2020-03-11 2:09 ` Maxim Cournoyer 2020-03-26 8:38 ` Pierre Neidhardt 0 siblings, 1 reply; 38+ messages in thread From: Maxim Cournoyer @ 2020-03-11 2:09 UTC (permalink / raw) To: Pierre Neidhardt; +Cc: guix-devel Hi Pierre, Pierre Neidhardt <mail@ambrevar.xyz> writes: > Can you share your operating system declaration? Sorry for the delay; here it is. I've anonymized some of the information such as SSH public keys and usernames. --8<---------------cut here---------------start------------->8--- ;; This is an operating system configuration template ;; for a "desktop" setup with GNOME and Xfce where the ;; root partition is encrypted with LUKS. (use-modules (guix store) (gnu) (gnu packages bash) (gnu packages version-control) (gnu system nss) (srfi srfi-1)) (use-service-modules admin desktop docker linux ssh xorg) (use-package-modules android certs docker java linux nfs ratpoison) (define %my-desktop-services (remove (lambda (service) (eq? (service-kind service) gdm-service-type)) %desktop-services)) (operating-system (host-name "myhost") (timezone "America/Montreal") (locale "en_US.utf8") ;; Choose US English keyboard layout. The "altgr-intl" ;; variant provides dead keys for accented characters. (keyboard-layout (keyboard-layout "dvorak")) ;; Use the UEFI variant of GRUB with the EFI System ;; Partition mounted on /boot/efi. (bootloader (bootloader-configuration (bootloader grub-efi-bootloader) (target "/boot/efi") (keyboard-layout keyboard-layout))) ;; Specify a mapped device for the encrypted root partition. ;; The UUID is that returned by 'cryptsetup luksUUID'. (mapped-devices (list (mapped-device (source (uuid "f85c0627-1f6f-48b9-a2c2-6c12594a7bd1")) (target "btrfs-pool-1") (type luks-device-mapping)) (mapped-device (source (uuid "73b08e1a-ca2f-4d46-845a-44443fe14cd7")) (target "btrfs-pool-4") (type luks-device-mapping)))) (file-systems (cons* ;; For EFI firmware. (file-system (device (uuid "209E-67AD" 'fat)) (mount-point "/boot/efi") (type "vfat")) ;; Main system, on a 500 GB SSD (dev/sda). (file-system (device (file-system-label "btrfs-pool-1")) (mount-point "/") (type "btrfs") (options "subvol=rootfs,compress=zstd") (dependencies mapped-devices)) (file-system (device (file-system-label "btrfs-pool-1")) (mount-point "/home") (type "btrfs") (options "subvol=homefs,compress=zstd") (dependencies mapped-devices)) ;; 1000 GB drive for builds (/dev/nvme0n1). Shared ;; between jenkins-home, jenkins-build and ;; docker-cache subvolumes. (file-system (device (file-system-label "btrfs-pool-4")) (mount-point "/home/jenkins-user") (create-mount-point? #t) (type "btrfs") (options "subvol=jenkins-home,compress=zstd") (dependencies mapped-devices)) (file-system (device (file-system-label "btrfs-pool-4")) (mount-point "/home/jenkins-user/workspace") (create-mount-point? #t) (type "btrfs") (options "subvol=jenkins-build,compress=zstd") (dependencies mapped-devices)) (file-system (device (file-system-label "btrfs-pool-4")) (mount-point "/var/lib/docker") (create-mount-point? #t) (type "btrfs") (options "subvol=docker-cache,compress=zstd") (dependencies mapped-devices)) ;; NFS mounts for caching the state and downloads of ;; Yocto. ;; FIXME: Must be manually mounted. (file-system (device "server:/mnt/scratch/yocto-sstate") (mount-point "/mnt/scratch/yocto-sstate") (create-mount-point? #t) (type "nfs") (mount? #f) (options "soft") (flags '(no-exec))) (file-system (device "server:/mnt/scratch/yocto-dldir") (mount-point "/mnt/scratch/yocto-dldir") (create-mount-point? #t) (type "nfs") (mount? #f) (options "soft") (flags '(no-exec))) %base-file-systems)) (swap-devices '("/swap/swapfile")) (users (cons* (user-account (name "myuser") (group "users") (supplementary-groups '("dialout" "wheel" "netdev" "audio" "video" "kvm" "docker" "adbusers"))) (user-account (name "jenkins-user") (comment "User for a Jenkins build slave") (home-directory "/home/jenkins-user") (group "users") (supplementary-groups '("netdev" "kvm" "docker"))) %base-user-accounts)) (groups (cons* (user-group (system? #t) (name "adbusers")) %base-groups)) ;; This is where we specify system-wide packages. (packages (cons* ratpoison nss-certs ;for HTTPS access btrfs-progs nfs-utils cqfd docker-cli git git-repo openjdk12 %base-packages)) ;; SSH, Docker (services (cons* (extra-special-file "/bin/bash" (file-append bash "/bin/bash")) (service rottlog-service-type) (service earlyoom-service-type) (service openssh-service-type (openssh-configuration (port-number 22) (permit-root-login #t) (authorized-keys `(("myuser" ,(local-file "some-key.pub")) ;; Give access to the Jenkins master. ("jenkins-user" ,(plain-file "jenkins.pub" "ssh-rsa AAAAB3NzaC1yc2EAAAADAQA\ [...] YK+l20fjZSu198/keqjnlTIWryC479GI3 jenkins@jenkins-user.mtl.sfl")))))) (service docker-service-type) ;; (set-xorg-configuration (xorg-configuration ;; (keyboard-layout keyboard-layout))) ;; TODO: mcron jobs for cleaning up old docker containers, stale ;; /tmp files (service slim-service-type (slim-configuration (auto-login? #f) (default-user "mcournoyer") (xorg-configuration (xorg-configuration (keyboard-layout keyboard-layout))))) (service guix-publish-service-type (guix-publish-configuration (host "0.0.0.0"))) ;listen on all interfaces (modify-services %my-desktop-services (guix-service-type config => (guix-configuration (inherit config) (authorized-keys (cons (local-file "some-key.pub") %default-authorized-guix-keys)) (extra-options '("--max-jobs=8")))) ;; Enable using adb as a simple user with a multitude of devices. (udev-service-type config => (udev-configuration (inherit config) (rules (cons* android-udev-rules (udev-configuration-rules config)))))))) ;; Allow resolution of '.local' host names with mDNS. (name-service-switch %mdns-host-lookup-nss)) --8<---------------cut here---------------end--------------->8--- Note that to have my root partition mounted on a subvolume, you'll need my (yet to be merged) patches available at: https://issues.guix.info/issue/37305. I'll post a fresh, rebased v3 (hopefully the last!) series shortly. Maxim ^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: 02/02: gnu: next: Compress the executable. 2020-03-11 2:09 ` Maxim Cournoyer @ 2020-03-26 8:38 ` Pierre Neidhardt 0 siblings, 0 replies; 38+ messages in thread From: Pierre Neidhardt @ 2020-03-26 8:38 UTC (permalink / raw) To: Maxim Cournoyer; +Cc: guix-devel [-- Attachment #1: Type: text/plain, Size: 472 bytes --] Thanks Maxim, this is a great config.scm! :) > Note that to have my root partition mounted on a subvolume, you'll need > my (yet to be merged) patches available at: > https://issues.guix.info/issue/37305. I'll post a fresh, rebased v3 > (hopefully the last!) series shortly. I see that you've posted a new series. I've just sent patch 40236@debbugs.gnu.org to edit the template and use Btrfs + Zstd. Thanks! -- Pierre Neidhardt https://ambrevar.xyz/ [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 487 bytes --] ^ permalink raw reply [flat|nested] 38+ messages in thread
end of thread, other threads:[~2020-03-26 8:38 UTC | newest] Thread overview: 38+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- [not found] <20190905095602.15524.75425@vcs0.savannah.gnu.org> [not found] ` <20190905095603.AC57A209A5@vcs0.savannah.gnu.org> 2019-09-05 12:31 ` 02/02: gnu: next: Compress the executable Ricardo Wurmus 2019-09-05 12:51 ` Pierre Neidhardt 2019-09-08 21:19 ` Ludovic Courtès 2019-09-09 8:06 ` Pierre Neidhardt 2019-09-10 12:51 ` Pierre Neidhardt 2019-09-11 20:37 ` Ludovic Courtès 2019-09-12 9:49 ` Pierre Neidhardt 2019-09-16 15:56 ` Ludovic Courtès 2019-09-16 17:46 ` Pierre Neidhardt 2019-09-27 14:35 ` Pierre Neidhardt 2019-09-28 21:02 ` Ludovic Courtès 2019-09-29 7:59 ` Pierre Neidhardt 2019-09-29 13:24 ` Maxim Cournoyer 2019-09-29 13:43 ` Pierre Neidhardt 2019-10-02 7:53 ` Efraim Flashner 2019-10-02 13:27 ` Pierre Neidhardt 2019-10-02 15:01 ` Maxim Cournoyer 2019-10-02 15:20 ` Pierre Neidhardt 2019-10-02 15:59 ` btrfs and Guix features [was: gnu: next: Compress the executable.] Tobias Geerinckx-Rice 2019-10-02 16:31 ` Pierre Neidhardt 2019-10-02 17:48 ` Tobias Geerinckx-Rice 2019-10-02 18:59 ` Pierre Neidhardt 2019-10-08 4:41 ` Maxim Cournoyer 2019-10-08 7:44 ` Pierre Neidhardt 2019-10-09 1:58 ` Maxim Cournoyer 2019-10-03 7:09 ` 02/02: gnu: next: Compress the executable Efraim Flashner 2019-10-03 18:28 ` Bengt Richter 2019-10-04 8:08 ` Pierre Neidhardt 2019-10-08 7:05 ` Maxim Cournoyer 2019-10-08 7:48 ` Pierre Neidhardt 2019-10-09 1:50 ` Maxim Cournoyer 2019-10-09 8:05 ` Pierre Neidhardt 2020-02-27 15:38 ` Maxim Cournoyer 2020-02-27 15:48 ` Pierre Neidhardt 2020-03-03 5:14 ` Maxim Cournoyer 2020-03-03 9:43 ` Pierre Neidhardt 2020-03-11 2:09 ` Maxim Cournoyer 2020-03-26 8:38 ` Pierre Neidhardt
Code repositories for project(s) associated with this public inbox https://git.savannah.gnu.org/cgit/guix.git This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).