Hello! I just pushed another improvement: d27cc3bfaafe6b5b0831e88afb1c46311d382a0b significantly reduces the number of ‘stat’ calls when discovering .scm files. I’d be curious to see what impact it has on NFS.
Commit cbee955901b3e252ebdeb8066a2196055149198a also reduces the number of ‘stat’ calls. After that I have: --8<---------------cut here---------------start------------->8--- $ ./pre-inst-env strace -c guix environment --ad-hoc coreutils -- true % time seconds usecs/call calls errors syscall ------ ----------- ----------- --------- --------- ---------------- 27.03 0.006916 1 13585 read 24.64 0.006306 1 9701 8029 stat 21.25 0.005438 1 10698 write 11.05 0.002828 2828 1 wait4 3.60 0.000922 1 1598 122 open 2.88 0.000738 4 203 28 futex 1.79 0.000458 1 670 mmap 1.75 0.000448 1 642 mprotect 1.64 0.000419 0 1476 close 1.36 0.000347 0 1411 3 lseek 0.74 0.000190 2 107 sendfile 0.70 0.000180 4 51 getdents 0.62 0.000159 0 886 fstat 0.54 0.000137 1 196 lstat 0.22 0.000057 1 99 brk 0.09 0.000024 4 6 clone 0.02 0.000005 1 5 munmap 0.02 0.000005 0 19 rt_sigprocmask 0.02 0.000004 0 27 clock_gettime 0.01 0.000003 3 1 getrandom 0.01 0.000002 2 1 connect 0.01 0.000002 1 3 prlimit64 0.00 0.000001 1 2 2 access 0.00 0.000001 1 1 socket 0.00 0.000000 0 5 rt_sigaction 0.00 0.000000 0 7 1 ioctl 0.00 0.000000 0 1 madvise 0.00 0.000000 0 1 execve 0.00 0.000000 0 1 uname 0.00 0.000000 0 3 fcntl 0.00 0.000000 0 1 getcwd 0.00 0.000000 0 1 statfs 0.00 0.000000 0 1 arch_prctl 0.00 0.000000 0 2 sched_getaffinity 0.00 0.000000 0 1 set_tid_address 0.00 0.000000 0 1 set_robust_list 0.00 0.000000 0 3 pipe2 ------ ----------- ----------- --------- --------- ---------------- 100.00 0.025590 41417 8185 total $ git describe v0.13.0-804-gf4453df9a --8<---------------cut here---------------end--------------->8--- The number of ‘stat’ calls is a function of the number of entries in ‘GUILE_LOAD_PATH’ and ‘GUILE_LOAD_COMPILED_PATH’. I can’t think of any easy way to reduce it further. The many ‘read’ and ‘write’ are due to the unbuffered port used for RPCs, and definitely not great when talking to a remote store. I’ve tried to add some buffering but that turned out to be trickier than I had hoped for. To be continued! Ludo’.