guix-devel
[Top][All Lists]
Advanced

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

Re: Performance regression on NFS with new manifest version


From: Roel Janssen
Subject: Re: Performance regression on NFS with new manifest version
Date: Fri, 22 Sep 2017 14:09:02 +0200
User-agent: mu4e 0.9.18; emacs 25.2.1

Ludovic Courtès writes:

> Hello Roel,
>
> I’m finally going back to this issue…
>
> Roel Janssen <address@hidden> skribis:
>
>> Ludovic Courtès writes:
>>
>>> Hi,
>>>
>>> Roel Janssen <address@hidden> skribis:
>>>
>>>> Ricardo Wurmus writes:
>>>>
>>>>> Hi Roel,
>>>>>
>>>>>> Looking into the manifests ($GENERATION_15/manifest and
>>>>>> $GENERATION_16/manifest), I noticed that generation 15 uses manifest
>>>>>> version 2, and generation 16 uses manifest version 3.
>>>>>>
>>>>>> What has changed, so that it takes a lot longer to run the same command
>>>>>> as before?  (this is probably disk-related, because that is a known
>>>>>> cause for trouble on network-mounted stores..)
>>>>>
>>>>> Commit 55b4715fd4c03e46501f123c5c9bc6072edf12a4 bumped the manifest
>>>>> version to 3.  The goal was to represent propagated inputs as manifest
>>>>> entries so that we can anticipate conflicts from propagated inputs and
>>>>> refuse to build a profile when there would be conflicts.
>>>>
>>>> Thanks for pointing to that commit.  It's much better this way. :-)
>>>>
>>>> So, what makes 'guix package --search-paths' so slow?  It doesn't have
>>>> to check for conflicts because that's already done on profile creation
>>>> time.  All it has to do is combine the search-path data and output
>>>> that..
>>>
>>> Could it be that you have lots of propagated inputs in your profile
>>> (Python, etc.)?  Are you sure (per ‘strace’) that it has to do with file
>>> system accesses?
>>
>> Yes, I have lots of propagated inputs in that profile (R packages..).
>>
>> I haven't checked with strace, but everything else on this machine is
>> fast and plenty (24 cores, 128GB ram).  The only troublesome thing is
>> the NFS-mounted store.
>
> I tried to reproduce the problem like this:
>
> --8<---------------cut here---------------start------------->8---
> $ ./pre-inst-env guix package -p foo -i r $(guix package -A '^r-a'|cut -f1)
> guix package: warning: Your Guix installation is 10 days old.
> guix package: warning: Consider running 'guix pull' followed by
> 'guix package -u' to get up-to-date packages and security updates.
>
> The following packages will be installed:
>    r  3.4.1   /gnu/store/k0q4b6nq1cdyfh3267nmgkwspf7hv6pb-r-3.4.1
>    r-acepack  1.4.1   
> /gnu/store/2lnpmwk5n3g2567q0rj1cz2hfwmcaj4v-r-acepack-1.4.1
>    r-acsnminer        0.16.8.25       
> /gnu/store/dv7mrnh8nm0cga5caqay5hmx4cc5355a-r-acsnminer-0.16.8.25
>    r-adaptivesparsity 1.4     
> /gnu/store/vkiq4knbqm1rm6hsnbkq4ad0pgdsr653-r-adaptivesparsity-1.4
>    r-ade4     1.7-8   /gnu/store/3455karydz6sfn5d78r088f812w5z99y-r-ade4-1.7-8
>    r-affy     1.54.0  
> /gnu/store/zv5fj0c5gdw27carm7mdvyisdnrnirl9-r-affy-1.54.0
>    r-affyio   1.46.0  
> /gnu/store/xgd50xlbq6nsjjk628y1n8scf4hwrrd8-r-affyio-1.46.0
>    r-annotate 1.54.0  
> /gnu/store/qbbwjr7k12ss32d7545pwr31lhg1ng07-r-annotate-1.54.0
>    r-annotationdbi    1.38.2  
> /gnu/store/vcmxw3plg8yygp58q4crr85710hr9mqk-r-annotationdbi-1.38.2
>    r-annotationfilter 1.0.0   
> /gnu/store/w2n1lz9051fhchc8v2c6yyq7dv7bsxgh-r-annotationfilter-1.0.0
>    r-annotationforge  1.18.1  
> /gnu/store/9vmr1lfx4g6v3h85d8jgaqn7cs2by8wy-r-annotationforge-1.18.1
>    r-annotationhub    2.8.2   
> /gnu/store/xyanxcl5dgj8fq415dr4ihm1prlsrz03-r-annotationhub-2.8.2
>    r-ape      4.1     /gnu/store/0cy2kw2vifirbhp399db8lndfkyqgjva-r-ape-4.1
>    r-aroma-light      3.6.0   
> /gnu/store/rq0xawz5l9nq07cxz9kisk63yxasfcnl-r-aroma-light-3.6.0
>    r-assertthat       0.2.0   
> /gnu/store/dqq16x94nwkgyrliavf0w6gnhp1vxbha-r-assertthat-0.2.0
>    r-auc      0.3.0   /gnu/store/fmzah3jzzy756sh4dir78nb8kcrn25pn-r-auc-0.3.0
>
> [...]
>
> The following environment variable definitions may be needed:
>    export PATH="foo/bin${PATH:+:}$PATH"
>    export R_LIBS_SITE="foo/site-library/${R_LIBS_SITE:+:}$R_LIBS_SITE"
> address@hidden ~/src/guix$ time ./pre-inst-env guix package --search-paths -p 
> foo
> export PATH="foo/bin"
> export R_LIBS_SITE="foo/site-library/"
>
> real  0m0.170s
> user  0m0.107s
> sys   0m0.016s
> address@hidden ~/src/guix$ time ./pre-inst-env guix package --search-paths -p 
> foo
> export PATH="foo/bin"
> export R_LIBS_SITE="foo/site-library/"
>
> real  0m0.158s
> user  0m0.097s
> sys   0m0.021s
> address@hidden ~/src/guix$ ./pre-inst-env strace -c guix package 
> --search-paths -p foo
> export PATH="foo/bin"
> export R_LIBS_SITE="foo/site-library/"
> % time     seconds  usecs/call     calls    errors syscall
> ------ ----------- ----------- --------- --------- ----------------
>  69.68    0.005729           2      3516      3292 stat
>  14.96    0.001230          40        31         1 futex
>   4.14    0.000340           1       271       121 open
>   2.96    0.000243           1       182           mmap
>   2.89    0.000238           2       156           mprotect
>   1.14    0.000094           1       150           close
>   1.06    0.000087           1       110         3 lseek
>   0.91    0.000075           1        74           read
>   0.63    0.000052          10         5           clone
>   0.46    0.000038           1        28           brk
>   0.28    0.000023           1        46           fstat
>   0.19    0.000016           5         3           pipe2
>   0.18    0.000015           1        16           lstat
>   0.15    0.000012           2         5         1 ioctl
>   0.09    0.000007           1         7           clock_gettime
>   0.07    0.000006           1         7           rt_sigprocmask
>   0.06    0.000005           2         3           write
>   0.06    0.000005           2         3           fcntl
>   0.04    0.000003           2         2           getcwd
>   0.02    0.000002           0         5           rt_sigaction
>   0.02    0.000002           2         1           getrandom
>   0.00    0.000000           0         2           munmap
>   0.00    0.000000           0         2         2 access
>   0.00    0.000000           0         1           execve
>   0.00    0.000000           0         1           uname
>   0.00    0.000000           0         1           readlink
>   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           prlimit64
> ------ ----------- ----------- --------- --------- ----------------
> 100.00    0.008222                  4636      3420 total
> --8<---------------cut here---------------end--------------->8---
>
> Everything looks OK here, but it could be that I did not pick the right
> set of packages to reproduce the problem.
>
> Could you come up with a simple way for me to reproduce it?
>
> TIA!
>
> Ludo’.

I couldn't install *all* R packages, but I used it on our shared R
profile:

$ guixr package --list-installed -p /gnu/profiles/per-language/r
ncurses 6.0     out     /gnu/store/djvxj8r1xwvrm89xqjrd44wwaxc02i74-ncurses-6.0
coreutils       8.27    out     
/gnu/store/ps92fz5p6l3mz9ddi388p1891r2q3fva-coreutils-8.27
grep    3.0     out     /gnu/store/bxnxmg6vamnlp95skrgdqw7s86ag1f51-grep-3.0
sed     4.4     out     /gnu/store/673v5pxadfdj1zkmpm90s6j89367w4af-sed-4.4
r-sparql        1.16    out     
/gnu/store/5qhr4va0af65a0jrpj6nc7xdnw9s4345-r-sparql-1.16
r-blob  1.1.0   out     /gnu/store/g17llpsbppkq7bkdibfmfkna9hdssfbv-r-blob-1.1.0
r-dexseq        1.22.0  out     
/gnu/store/hsc2pgcz51sf3sq1n7yl7jwhpnz7jg5n-r-dexseq-1.22.0
r-ripseeker     1.14.0  out     
/gnu/store/sh5q8r0v05r854i9p62prpgiw08q60n7-r-ripseeker-1.14.0
r-bsgenome-celegans-ucsc-ce10   1.4.0   out     
/gnu/store/bmgapxyiqldlq4xa0a5sfariay6swa1h-r-bsgenome-celegans-ucsc-ce10-1.4.0
r-bsgenome-hsapiens-ucsc-hg19   1.4.0   out     
/gnu/store/dq28v4mncd8a5rqnc5f3lq3lrmas1p8m-r-bsgenome-hsapiens-ucsc-hg19-1.4.0
r-bsgenome-hsapiens-1000genomes-hs37d5  0.99.1  out     
/gnu/store/smv43q5p0fgiy1kyz9yaiw01q6zz5c9n-r-bsgenome-hsapiens-1000genomes-hs37d5-0.99.1
r-bsgenome-mmusculus-ucsc-mm10  1.4.0   out     
/gnu/store/95k6r8c7sz66z51hc0x059fv7090qk1d-r-bsgenome-mmusculus-ucsc-mm10-1.4.0
r-qdnaseq       1.10.0  out     
/gnu/store/7r9wazsllnflgpwbcwkcpb1wgl5vpvvv-r-qdnaseq-1.10.0
r-pracma        2.0.7   out     
/gnu/store/ikwdwfqp9hf35iwc31bp9mswwnzyjs05-r-pracma-2.0.7
r-biomart       2.32.1  out     
/gnu/store/5r3nwc4nawh4ldr5inrbys11cprbg442-r-biomart-2.32.1
r-rngtools      1.2.4   out     
/gnu/store/4awn9jy8yp8xr0ma7izsww4b4i6av4yv-r-rngtools-1.2.4
r-pkgmaker      0.22    out     
/gnu/store/mjfrgggip6jl4bx6i6ypbgqvbab91l50-r-pkgmaker-0.22
r-gridextra     2.3     out     
/gnu/store/s618pfbmzcv405s730namha638ynpf8p-r-gridextra-2.3
r       3.4.1   out     /gnu/store/2a8igkn9f5n4ag8ym9ysrmki2msnifyn-r-3.4.1
r-biocviews     1.44.0  out     
/gnu/store/0cwz2zyj6h4pv7mhi26sx8r7p2xyj5zz-r-biocviews-1.44.0
r-bioccheck     1.12.0  out     
/gnu/store/6d3wwas1xzs9g3msdilacy7xisj39dc0-r-bioccheck-1.12.0
r-ggplot2       2.2.1   out     
/gnu/store/0v9g3p95scbq1wm0qvpv24d0308l78cm-r-ggplot2-2.2.1
r-gplots        3.0.1   out     
/gnu/store/jba92jjlzq7xgvw4ac5n5lyr8k224k0v-r-gplots-3.0.1
r-pastecs       1.3-18  out     
/gnu/store/0fb5329ipb76ggfj10csv4d3p3af81yn-r-pastecs-1.3-18
r-funcisnp      1.18.0  out     
/gnu/store/6667xikkpdqp8cbn9q0v5zrq2s0b7i28-r-funcisnp-1.18.0
r-diffbind      2.2.12  out     
/gnu/store/8mc3yl9j5s3brn63r34s3krg4xkdbayl-r-diffbind-2.2.12
r-edger 3.18.0  out     
/gnu/store/96wqf9pcw0ikiwqqyx6w952svyv7h0ca-r-edger-3.18.0
r-rbgl  1.52.0  out     
/gnu/store/25rkm6fc3abbw7ak77yxks46bd9fmxjd-r-rbgl-1.52.0
r-biocstyle     2.4.1   out     
/gnu/store/zj5v2iwrcvm9vczbdpcw0mcr304j8j00-r-biocstyle-2.4.1
r-rcurl 1.95-0.1.2      out     
/gnu/store/bk0yriz89j5arhz2qky3757zmpivnn1k-r-rcurl-1.95-0.1.2
r-s4vectors     0.14.3  out     
/gnu/store/k41y6gp8sk4p4mfhkpq3yh5di79qap9b-r-s4vectors-0.14.3
r-xvector       0.16.0  out     
/gnu/store/7an3mc6qpr9xprcwv944gaq9xn09syk5-r-xvector-0.16.0
r-xml2  1.1.1   out     /gnu/store/60zmc0hk9z5shi5s4k3j8yp8vfklw2ik-r-xml2-1.1.1
r-iranges       2.10.2  out     
/gnu/store/3hs9r87zsxnaq837rka8bsjm9gv1419p-r-iranges-2.10.2
r-biostrings    2.44.2  out     
/gnu/store/rr2j9sf3dg24qy93jzwl84a09mscpw7y-r-biostrings-2.44.2
r-devtools      1.13.3  out     
/gnu/store/xi3kjaif2vxk0c1wggraajsblakh5r4l-r-devtools-1.13.3
r-nmf   0.20.6  out     /gnu/store/pbp6pk8di5h8rdql8rfmv9kqbd0b03nl-r-nmf-0.20.6
r-reshape2      1.4.2   out     
/gnu/store/yd8pngfm523fr8nnpnh27qb4q79zvzzi-r-reshape2-1.4.2
r-variantannotation     1.22.3  out     
/gnu/store/nlz40rw5gic8s1zqy8r5xqyg6lv2px0y-r-variantannotation-1.22.3
r-mutationalpatterns    1.2.1   out     
/gnu/store/v3654hh4k291q429b0wvfyb7vw7f4ihn-r-mutationalpatterns-1.2.1
r-deseq2        1.16.1  out     
/gnu/store/say07f2m9ixb6lvp7hqpy1yfr4nks648-r-deseq2-1.16.1
r-openssl       0.9.7   out     
/gnu/store/qn7qn0dp5ff8bf2649g8s9i32pjlrfgh-r-openssl-0.9.7
r-curl  2.8.1   out     /gnu/store/fwyfhhyn253vqny4yxsc0568l8qcps5c-r-curl-2.8.1
r-git2r 0.19.0  out     
/gnu/store/2j74yg2znd6mz059mw0lv15wpjr7i13j-r-git2r-0.19.0
r-jsonlite      1.5     out     
/gnu/store/004h1v4wy3hvjqms0bm8x114qmk1dl0b-r-jsonlite-1.5
r-rcpp  0.12.12 out     
/gnu/store/fgm16p6pyxyjswzzh0xcaqzln7bilw86-r-rcpp-0.12.12
r-mime  0.5     out     /gnu/store/ba5nx5mx4ji0mfdv4g8l40fjbcjjgi8m-r-mime-0.5
r-plyr  1.8.4   out     /gnu/store/5dyby97wd6lg2n04gndcn0k7rm30k8fp-r-plyr-1.8.4
r-ggdendro      0.1-20  out     
/gnu/store/lfj04k9p2hnma733qib54vapv0whrgbp-r-ggdendro-0.1-20
r-cowplot       0.8.0   out     
/gnu/store/5y1f266cf9lfd7a8vk2in190fmz1j90m-r-cowplot-0.8.0
r-testthat      1.0.2   out     
/gnu/store/02fp185nf106c5i4pz9jmkx7j8kkpxx1-r-testthat-1.0.2
r-bit64 0.9-7   out     
/gnu/store/f7fpax2g3pniv5n6y3ysm50kmyskr0a2-r-bit64-0.9-7
r-rlang 0.1.2   out     
/gnu/store/gvhx5rsd13fv30n7wfiwclrrhirzdwgw-r-rlang-0.1.2
r-biocinstaller 1.26.0  out     
/gnu/store/pizcmi2k44v4vsk8m0bb4hh6n2qrw6fs-r-biocinstaller-1.26.0
r-motifbreakr   1.6.0   out     
/gnu/store/cic9h7rdkk5w8810khna32bf5kjlpzl4-r-motifbreakr-1.6.0


Here's my timings:

$ time guixr package --search-paths -p /gnu/profiles/per-language/r
export PATH="/gnu/profiles/per-language/r/bin"
export R_LIBS_SITE="/gnu/profiles/per-language/r/site-library/"
export TERMINFO_DIRS="/gnu/profiles/per-language/r/share/terminfo"

real    1m3.771s
user    1m3.745s
sys     0m0.145

And the strace:

$ strace -c guixr package --search-paths -p /gnu/profiles/per-language/r        
               
export PATH="/gnu/profiles/per-language/r/bin"
export R_LIBS_SITE="/gnu/profiles/per-language/r/site-library/"
export TERMINFO_DIRS="/gnu/profiles/per-language/r/share/terminfo"
% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
 98.31    0.139510       11626        12         6 wait4
  0.77    0.001087          36        30         9 open
  0.43    0.000615          21        29         8 stat
  0.10    0.000144          24         6           clone
  0.07    0.000095           5        19           mmap
  0.05    0.000076           4        21           read
  0.05    0.000064           2        26           close
  0.04    0.000058           3        20           fstat
  0.03    0.000049           5         9         1 access
  0.03    0.000045          45         1           lstat
  0.03    0.000039           1        48           rt_sigprocmask
  0.02    0.000028           5         6           mprotect
  0.01    0.000013           0        28           rt_sigaction
  0.01    0.000008           2         4           lseek
  0.01    0.000008           2         5           brk
  0.01    0.000008           1         9           getuid
  0.01    0.000008           1         9           getgid
  0.01    0.000008           1         9           geteuid
  0.01    0.000008           1         9           getegid
  0.00    0.000007           1         6           rt_sigreturn
  0.00    0.000007           1         8         1 fcntl
  0.00    0.000005           3         2           pipe
  0.00    0.000005           5         1           execve
  0.00    0.000003           1         4         3 ioctl
  0.00    0.000003           1         3           dup2
  0.00    0.000003           3         1           arch_prctl
  0.00    0.000002           1         2           prlimit64
  0.00    0.000000           0         1           write
  0.00    0.000000           0         2           getpid
  0.00    0.000000           0         1           uname
  0.00    0.000000           0         1           sysinfo
  0.00    0.000000           0         1           getppid
  0.00    0.000000           0         1           getpgrp
  0.00    0.000000           0         1           faccessat
------ ----------- ----------- --------- --------- ----------------
100.00    0.141906                   335        28 total


I don't understand why the numbers are so low on my end.
Note, this is /gnu served over NFS.  We recently upgraded to SSDs in our
storage system, which caused reads to be faster.  In the case of the
--search-paths, it is still very slow.

Kind regards,
Roel Janssen



reply via email to

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