comment
This commit is contained in:
parent
7ea8411cfb
commit
3fafcc47bb
1 changed files with 72 additions and 0 deletions
|
@ -0,0 +1,72 @@
|
||||||
|
[[!comment format=mdwn
|
||||||
|
username="joey"
|
||||||
|
subject="""comment 8"""
|
||||||
|
date="2020-07-27T15:44:39Z"
|
||||||
|
content="""
|
||||||
|
For details of the older todo, including some timings with and without
|
||||||
|
prelinking, see [[!commit c4229be9a7a2318ef71b9ae433bc14bf604c9caf]].
|
||||||
|
|
||||||
|
A ghc bug, since fixed, was causing it to look in IIRC, thousands of
|
||||||
|
unncessary directories per library. This todo, by contrast, complains about
|
||||||
|
less than 100 extra lookups total.
|
||||||
|
|
||||||
|
The way you run the shim does not put the bundled git in PATH. That kind of
|
||||||
|
throws off your results, because git, not git-annex is what links to pcre.
|
||||||
|
I was not actually able to reproduce your result of it finding pcre without
|
||||||
|
any failed seeks, but perhaps it ran a different git binary than the ones I
|
||||||
|
have access to. Anyway, that all seems like a bit of a red herring due to
|
||||||
|
that problem and puts your timings in doubt too.
|
||||||
|
|
||||||
|
Simply moving all the libraries to a single directory would cut down on the
|
||||||
|
failed seeking a lot:
|
||||||
|
|
||||||
|
strace -f ./git-annex version 2>&1 | grep ENOENT | grep openat
|
||||||
|
openat(AT_FDCWD, "/usr/lib/git-annex.linux//lib64/tls/x86_64/x86_64/libm.so.6", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
|
||||||
|
openat(AT_FDCWD, "/usr/lib/git-annex.linux//lib64/tls/x86_64/libm.so.6", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
|
||||||
|
openat(AT_FDCWD, "/usr/lib/git-annex.linux//lib64/tls/x86_64/libm.so.6", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
|
||||||
|
openat(AT_FDCWD, "/usr/lib/git-annex.linux//lib64/tls/libm.so.6", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
|
||||||
|
openat(AT_FDCWD, "/usr/lib/git-annex.linux//lib64/x86_64/x86_64/libm.so.6", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
|
||||||
|
openat(AT_FDCWD, "/usr/lib/git-annex.linux//lib64/x86_64/libm.so.6", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
|
||||||
|
openat(AT_FDCWD, "/usr/lib/git-annex.linux//lib64/x86_64/libm.so.6", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
|
||||||
|
[pid 481279] openat(AT_FDCWD, "/usr/lib/git-annex.linux//lib64/tls/x86_64/x86_64/libpcre2-8.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
|
||||||
|
[pid 481279] openat(AT_FDCWD, "/usr/lib/git-annex.linux//lib64/tls/x86_64/libpcre2-8.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
|
||||||
|
[pid 481279] openat(AT_FDCWD, "/usr/lib/git-annex.linux//lib64/tls/x86_64/libpcre2-8.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
|
||||||
|
[pid 481279] openat(AT_FDCWD, "/usr/lib/git-annex.linux//lib64/tls/libpcre2-8.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
|
||||||
|
[pid 481279] openat(AT_FDCWD, "/usr/lib/git-annex.linux//lib64/x86_64/x86_64/libpcre2-8.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
|
||||||
|
[pid 481279] openat(AT_FDCWD, "/usr/lib/git-annex.linux//lib64/x86_64/libpcre2-8.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
|
||||||
|
[pid 481279] openat(AT_FDCWD, "/usr/lib/git-annex.linux//lib64/x86_64/libpcre2-8.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
|
||||||
|
|
||||||
|
The /lib64/tls/x86_64/x86_64/ seems like kind of weird behavior from
|
||||||
|
ld-linux.so, I wonder if that's a bug on its part. The rest of the seeking
|
||||||
|
seems reasonable. I guess these extra 14 seeks are not a major performance hit.
|
||||||
|
|
||||||
|
But, that library consolidation does not seem to speed it up appreciably at
|
||||||
|
all. Timings were almost identical before and after. 100 failed opens, when
|
||||||
|
cache is hot, is just not that much overhead compared with the script's
|
||||||
|
overhead. I don't think it's even worth implementing the library
|
||||||
|
consolidiation based on this.
|
||||||
|
|
||||||
|
Running `git-annex.linux/git-annex version`
|
||||||
|
takes 0.060s. Compare with around 0.030s to run `/usr/bin/git-annex version`.
|
||||||
|
(Sometimes it runs in more like 0.020s, but not often.. Probably have to
|
||||||
|
catch the cache in the right mood.)
|
||||||
|
So, runshell and the other 2 shell scripts have around
|
||||||
|
0.030s overhead themsevles.
|
||||||
|
|
||||||
|
(This is with runshell modified so `GIT_ANNEX_PACKAGE_INSTALL` is set.
|
||||||
|
IIRC the way the git-annex-standalone deb is built sets that. Otherwise,
|
||||||
|
runshell does an additional 0.060s of locale setup stuff.)
|
||||||
|
|
||||||
|
I tried putting set -x in all 3 levels of shell scripts and time stamping
|
||||||
|
the output to see what was expensive. This was a bit surprising,
|
||||||
|
because other than the abovementioned locale setup stuff, all the rest
|
||||||
|
of the set -x output happened within 0.000965s. Which is 30 times faster
|
||||||
|
than the timings above say it should be. Could be that the time stamping,
|
||||||
|
which used `ts`, is not accurate enough.
|
||||||
|
|
||||||
|
Anyway, runshell uses several unix utilities (and at least dirname is run
|
||||||
|
redundantly between the git-annex script and runshell),
|
||||||
|
and there are 3 levels of shell scripts for the shell to parse and run.
|
||||||
|
Combining them into a single shell script would eliminate some redundant work.
|
||||||
|
Probably rewriting in C would be a bigger win.
|
||||||
|
"""]]
|
Loading…
Add table
Add a link
Reference in a new issue