[pacman-dev] [PATCH] pacman/query.c : -Qo optimization.

Nagy Gabor ngaba at bibl.u-szeged.hu
Sat Nov 24 08:24:02 EST 2007

> I didn't understand why realpath was called on every files of every filelist
> in query_fileowner :
> ppath = resolve_path(path);
> It turns out this is needed for the diverted files. For example, cddb_get
> installs /usr/lib/perl5/site_perl/5.8.8/CDDB_get.pm which actually ends in
> /usr/lib/perl5/site_perl/current/CDDB_get.pm .

A real life example ;-): /opt directory can be a symlink for example.

And an offtopic note here: iirc (<- cannot check now) you cannot search for
owner of a directory symlink [/usr/var], because dir-symlinks are treated as
dirs in files <- this may(?) lead to an other symlink puzzle: conflicting
"symlinks" in target list. Xavier, could you check this please?

> And for making pacman -Qo /usr/lib/perl5/site_perl/current/CDDB_get.pm ,
> realpath has to be called on both the target, and the file in the filelist.
> However, realpath is costly, and calling it on every single file resulted
> in a poor -Qo performance. Worst case :
> pacman -Qo /lib/libz.so.1  0.35s user 1.51s system 99% cpu 1.864 total
> So I did a little optimization to avoid calling realpath as much as
> possible: first compare the basename of each file.
> Result:
> src/pacman/pacman -Qo /lib/libz.so.1  0.24s user 0.05s system 99% cpu 0.298
> total
> Obviously, the difference will be even bigger at the first run (no fs
> cache), though it's quite scary on my system : 1.7s vs 40s previously.

SZTE Egyetemi Könyvtár - http://www.bibl.u-szeged.hu
This mail sent through IMP: http://horde.org/imp/

More information about the pacman-dev mailing list