IRC channel logs

2026-03-22.log

back to list of logs

<ekaitz>ieure: did you try the example from the docs? that should work
<ieure>ekaitz, Yes, all it does is print "No samples recorded."
<ekaitz>hmmm
<ekaitz>mine does show something
<ekaitz>(use-modules (statprof))
<ekaitz>(statprof (lambda ()
<ekaitz> (map 1+ (iota 1000000))
<ekaitz> #f))
<ekaitz>that i mean
<ieure>Oh, I see. That does print something.
<ieure>But my code does not.
<ekaitz>hm!
<ekaitz>maybe your code is optimized away :S
<ieure>The code I'm running is:
<ieure>,use (gnu)
<ieure>(operating-system (inherit (operating-system (inherit (operating-system (bootloader #f) (host-name "test") (file-systems #f))))))
<ekaitz>hmmmm
<ieure>This does almost nothing, but it takes ~25s to evaluate on a pretty fast machine.
<ekaitz>civodul should probably know better how to do this, because it involves guile
<ekaitz>guix*
<ekaitz>and probably most of that is not calling things but expanding and running things on the daemon
<ieure>The daemon isn't involved at all.
<ieure>It's creating records and copying fields between them.
<ekaitz>hmmm
<ieure>Even if it was calling the daemon, I'd see that reflected in the (current-time) calls before/after the form that gets evaluated.
<ieure>And as I mentioned -- the values are identical to the second, even though it takes 25s to eval the code.
<ieure>I used the stopwatch function of my phone to time it since I can't make Guile measure what I'm seeing.
<ekaitz>that's weird and surely has a good explanation
<ekaitz>but I don't have an answer for it
<ieure>Thought maybe it was the printer, changed it to (begin (operating-system ...) #f), but it's still very very very slow.
<ekaitz>hmmm
<ieure>It should be trivial to replicate if you have Guix.
<ekaitz>the expression takes forever to run
<ieure>Yep.
<ekaitz>now the question is, what is it running actually?
<ekaitz>macro expanding it creates a HUGE piece of code
<ekaitz>and now running with the statprof
<ekaitz>no samples
<ekaitz>it's probably something guix does
<ieure>Well, there are two issues, right? One is the poor performance of the Guix code, the other is that being invisible ro Guile's profiling tools.
<ieure>And I'm really only interested in the latter at this time.
<ieure>That seems like a Guile issue, right?
<graywolf>Maybe https://issues.guix.gnu.org/74748 would be of use? I do not know if the cause is the same, but symptoms (slow, but no samples) are
<graywolf>civodul suggested ,o optimization-level 1 as workaround
<ieure>graywolf, Similar but different issue. Constructing the record isn't slow, but inheriting is extremely slow and gets worse-than-quadratically slower with every level of inheritance added.
<ieure>What I'm trying to do is quantify how bad it is, so I can make a useful bug report.
<ieure>This is also not just REPL slowness.
<ieure>If I invoke from the shell with `time guile -c ...', it takes 1.5s for three levels of inheritance, 34s for four, and I started timing five levels, that's been running for 6m40s so far, using 100% CPU, and 10gb RAM.
<ieure>Which seems just completely nuts.
<graywolf>Oh, macro expansion shows a lot of code, the inherited packages is expanded over and over and over
<graywolf>(operating-system (inherit (begin (pk 'x) (operating-system (bootloader #f) (host-name "test") (file-systems #f))))) is illuminating
<graywolf>s/inherited packages/inherited system/
<ieure>Oooooohhhhh, interesting.
<ieure>(begin (define %os (operating-system (bootloader #f) (host-name "test") (file-systems #f))) (operating-system (inherit (begin (pk 'x) %os))))
<ieure>That is much, much faster.
<graywolf>And much, much less code. :)
<graywolf>(in the expansion)
<graywolf>Well, off to watch anime, have fun.
<ieure>graywolf, Thank you very much for the help.
<graywolf>Is scm_make_foreign_object_1 subject to non-local exits? I am thinking how to safely wrap external pointer in a foreign object. Based on the manual it seems that db = ...; scm_make_foreign_object_1(conn_type, db); could leak memory given the right conditions.
<graywolf>Do I need to wrap it in scm_dynwind_begin?
<ekaitz>rlb: reproduced the fibers segfault
<rlb>nice (and not nice)
<ekaitz>i reproduced on a remote machine, which is a little bit of a pain in the balls to deal with but i'll manage
<ekaitz>most of them fail
<ekaitz>9 out of 13 i believe