guix-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Performance on NFS


From: Ludovic Courtès
Subject: Performance on NFS
Date: Fri, 16 Jun 2017 17:23:10 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/25.2 (gnu/linux)

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’.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]