Benchmark opendir+readdir("/proc/self/fd")+closedir 2^21 times
with 4 descriptors (0, 1, 2, 3 from opendir):

        11.802099126 seconds time elapsed ( +-  0.23% )
        10.950810068 seconds time elapsed ( +-  0.23% )

        -7.2%

Benchmark the same thing with 1000 descriptors:

        362.1250 us per iteration
        288.4375 us

        -20%

Signed-off-by: Alexey Dobriyan <[email protected]>
---
 fs/proc/fd.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/fs/proc/fd.c b/fs/proc/fd.c
index e098302b5101..60ad1935eefc 100644
--- a/fs/proc/fd.c
+++ b/fs/proc/fd.c
@@ -247,8 +247,7 @@ static int proc_readfd_common(struct file *file, struct 
dir_context *ctx,
             fd++, ctx->pos++) {
                struct file *f;
                struct fd_data data;
-               char name[10 + 1];
-               unsigned int len;
+               char name[10], *p = name + sizeof(name);
 
                f = fcheck_files(files, fd);
                if (!f)
@@ -257,9 +256,10 @@ static int proc_readfd_common(struct file *file, struct 
dir_context *ctx,
                rcu_read_unlock();
                data.fd = fd;
 
-               len = snprintf(name, sizeof(name), "%u", fd);
+               p = _print_integer_u32(p, fd);
                if (!proc_fill_cache(file, ctx,
-                                    name, len, instantiate, tsk,
+                                    p, name + sizeof(name) - p,
+                                    instantiate, tsk,
                                     &data))
                        goto out_fd_loop;
                cond_resched();
-- 
2.16.4

Reply via email to