[PATCH 10/13] proc: convert readdir /proc to _print_integer()

2018-08-27 Thread Alexey Dobriyan
Benchmark readdir("/proc") 2^13 times with 2K processes in a pid
namespace:

850.3750 us per readdir
786.5625

-7.5%

Signed-off-by: Alexey Dobriyan 
---
 fs/proc/base.c | 7 +++
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/fs/proc/base.c b/fs/proc/base.c
index 79d2f7d72ad1..33f444721965 100644
--- a/fs/proc/base.c
+++ b/fs/proc/base.c
@@ -3223,16 +3223,15 @@ int proc_pid_readdir(struct file *file, struct 
dir_context *ctx)
for (iter = next_tgid(ns, iter);
 iter.task;
 iter.tgid += 1, iter = next_tgid(ns, iter)) {
-   char name[10 + 1];
-   unsigned int len;
+   char name[10], *p = name + sizeof(name);
 
cond_resched();
if (!has_pid_permissions(ns, iter.task, HIDEPID_INVISIBLE))
continue;
 
-   len = snprintf(name, sizeof(name), "%u", iter.tgid);
+   p = _print_integer_u32(p, iter.tgid);
ctx->pos = iter.tgid + TGID_OFFSET;
-   if (!proc_fill_cache(file, ctx, name, len,
+   if (!proc_fill_cache(file, ctx, p, name + sizeof(name) - p,
 proc_pid_instantiate, iter.task, NULL)) {
put_task_struct(iter.task);
return 0;
-- 
2.16.4



[PATCH 10/13] proc: convert readdir /proc to _print_integer()

2018-08-27 Thread Alexey Dobriyan
Benchmark readdir("/proc") 2^13 times with 2K processes in a pid
namespace:

850.3750 us per readdir
786.5625

-7.5%

Signed-off-by: Alexey Dobriyan 
---
 fs/proc/base.c | 7 +++
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/fs/proc/base.c b/fs/proc/base.c
index 79d2f7d72ad1..33f444721965 100644
--- a/fs/proc/base.c
+++ b/fs/proc/base.c
@@ -3223,16 +3223,15 @@ int proc_pid_readdir(struct file *file, struct 
dir_context *ctx)
for (iter = next_tgid(ns, iter);
 iter.task;
 iter.tgid += 1, iter = next_tgid(ns, iter)) {
-   char name[10 + 1];
-   unsigned int len;
+   char name[10], *p = name + sizeof(name);
 
cond_resched();
if (!has_pid_permissions(ns, iter.task, HIDEPID_INVISIBLE))
continue;
 
-   len = snprintf(name, sizeof(name), "%u", iter.tgid);
+   p = _print_integer_u32(p, iter.tgid);
ctx->pos = iter.tgid + TGID_OFFSET;
-   if (!proc_fill_cache(file, ctx, name, len,
+   if (!proc_fill_cache(file, ctx, p, name + sizeof(name) - p,
 proc_pid_instantiate, iter.task, NULL)) {
put_task_struct(iter.task);
return 0;
-- 
2.16.4