coreutils
[Top][All Lists]
Advanced

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

Re: "ls -l": Avoid unnecessary getxattr() overhead


From: Sven Breuner
Subject: Re: "ls -l": Avoid unnecessary getxattr() overhead
Date: Thu, 09 Feb 2012 22:17:02 +0100
User-agent: Mozilla/5.0 (X11; Linux i686 on x86_64; rv:10.0) Gecko/20120129 Thunderbird/10.0

Jim Meyering wrote on 02/09/2012 03:17 PM:
Pádraig Brady wrote:
On 02/09/2012 11:32 AM, Jim Meyering wrote:
Technically, we could probably exempt all files on that device, but
...

So you avoid symlinks as they can point outside the device.
Unfortunately so can bind mounts, so you probably have to key on device?

Thanks.  That confirms my impression that my patch was not worthwhile:
It was buggy, too.

I suppose we could use a little hash table, whose entries are
<dev_t device_number, bool getfilecon_required>  pairs.

Or even a single static dev_t selinux_challenged_device,
that if equal to f->stat.st_dev, we can skip the *getfilecon call.
That should be good enough for most uses.

Here's that simpler patch:

diff --git a/src/ls.c b/src/ls.c
index f5cd37a..cb9f834 100644
[...]


Just tried it out and the difference is very significant, as expected.
(Test case with 61,441 files in a directory.)

Current git version without the patch...

$ time ~/tmp/ls-8.15.34-31eee -l >/dev/null

real    0m31.135s
user    0m0.859s
sys     0m4.276s

$ strace -c ~/tmp/ls-8.15.34-31eee -l >/dev/null
% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
 31.13    0.303648           5     61441           lstat
 30.81    0.300585           5     61441     61441 getxattr
 30.65    0.298937           5     61441           lgetxattr
  7.17    0.069987         933        75           getdents
[...]

Current git version patched...

$ time ~/tmp/ls-8.15.34-31eee_patched -l >/dev/null

real    0m21.254s
user    0m0.565s
sys     0m2.496s

$ strace -c ~/tmp/ls-8.15.34-31eee_patched -l >/dev/null
% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
 45.50    0.313386           5     61441           lstat
 43.63    0.300524           5     61441     61441 getxattr
 10.60    0.072986         973        75           getdents
[...]

Thanks!
Sven



reply via email to

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