Messages in this thread Patch in this message | | | From | Alexey Dobriyan <> | Subject | [PATCH 08/13] proc: convert /proc/*/fd to _print_integer() | Date | Tue, 28 Aug 2018 02:14:58 +0300 |
| |
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 <adobriyan@gmail.com> --- 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
| |