Dipankar Sarma
529bf6be5c
[PATCH] fix file counting
...
I have benchmarked this on an x86_64 NUMA system and see no significant
performance difference on kernbench. Tested on both x86_64 and powerpc.
The way we do file struct accounting is not very suitable for batched
freeing. For scalability reasons, file accounting was
constructor/destructor based. This meant that nr_files was decremented
only when the object was removed from the slab cache. This is susceptible
to slab fragmentation. With RCU based file structure, consequent batched
freeing and a test program like Serge's, we just speed this up and end up
with a very fragmented slab -
llm22:~ # cat /proc/sys/fs/file-nr
587730 0 758844
At the same time, I see only a 2000+ objects in filp cache. The following
patch I fixes this problem.
This patch changes the file counting by removing the filp_count_lock.
Instead we use a separate percpu counter, nr_files, for now and all
accesses to it are through get_nr_files() api. In the sysctl handler for
nr_files, we populate files_stat.nr_files before returning to user.
Counting files as an when they are created and destroyed (as opposed to
inside slab) allows us to correctly count open files with RCU.
Signed-off-by: Dipankar Sarma <dipankar@in.ibm.com>
Cc: "Paul E. McKenney" <paulmck@us.ibm.com>
Cc: "David S. Miller" <davem@davemloft.net>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2006-03-08 14:14:01 -08:00
..
2006-01-08 20:14:02 -08:00
2006-02-07 20:58:50 -05:00
2006-02-14 16:09:34 -08:00
2006-02-22 09:32:46 +00:00
2006-02-07 20:56:35 -05:00
2006-01-20 11:57:07 -08:00
2006-01-12 14:06:43 -08:00
2006-02-27 13:04:17 -08:00
2006-02-27 13:04:17 -08:00
2006-02-27 13:04:17 -08:00
2006-01-18 19:20:24 -08:00
2006-01-13 16:29:56 -08:00
2006-02-01 12:52:25 -05:00
2006-02-20 20:00:10 -08:00
2006-01-16 20:53:46 -08:00
2006-01-08 20:14:03 -08:00
2006-01-08 20:14:07 -08:00
2006-01-13 09:12:21 -08:00
2006-02-03 08:32:00 -08:00
2006-01-24 10:06:19 +01:00
2006-01-10 20:35:03 -05:00
2006-01-10 08:01:35 -08:00
2006-01-11 18:42:13 -08:00
2006-01-10 08:01:33 -08:00
2006-02-11 21:41:11 -08:00
2006-01-14 18:27:15 -08:00
2006-01-14 18:27:16 -08:00
2006-01-10 08:32:35 -08:00
2006-01-08 20:14:02 -08:00
2006-02-03 14:01:05 -08:00
2006-01-18 13:53:45 -08:00
2006-02-10 08:13:12 -08:00
2006-01-14 18:27:10 -08:00
2006-01-09 14:15:37 -08:00
2006-01-08 20:14:07 -08:00
2006-02-07 20:56:35 -05:00
2006-02-01 08:53:11 -08:00
2006-01-13 11:26:04 -08:00
2006-01-11 19:04:51 -08:00
2006-02-08 07:52:58 -08:00
2006-02-03 08:32:09 -08:00
2006-01-09 15:59:24 -08:00
2006-01-14 18:27:15 -08:00
2006-01-18 19:20:29 -08:00
2006-03-08 14:14:01 -08:00
2006-03-08 14:14:01 -08:00
2006-01-12 16:31:52 -05:00
2006-02-01 08:53:09 -08:00
2006-01-11 19:04:51 -08:00
2006-01-14 18:27:09 -08:00
2006-03-06 18:40:44 -08:00
2006-01-15 09:02:44 -02:00
2006-02-06 12:02:14 -08:00
2006-02-03 08:32:07 -08:00
2006-02-03 08:32:12 -08:00
2006-01-18 00:45:15 +01:00
2006-01-08 20:14:07 -08:00
2006-01-16 23:18:35 -08:00
2006-01-09 16:03:03 +01:00
2006-02-01 08:53:13 -08:00
2006-02-08 01:03:52 -05:00
2006-01-08 20:14:07 -08:00
2006-01-10 08:02:01 -08:00
2006-02-14 16:09:34 -08:00
2006-01-09 15:59:24 -08:00
2006-01-10 08:01:35 -08:00
2006-02-10 08:13:12 -08:00
2006-02-17 08:00:40 -08:00
2006-02-10 08:13:12 -08:00
2006-01-08 20:13:53 -08:00
2006-01-08 20:13:53 -08:00
2006-03-06 18:40:44 -08:00
2006-02-22 09:39:02 -08:00
2006-01-11 18:42:12 -08:00
2006-02-15 15:32:22 -08:00
2006-02-20 16:48:18 -05:00
2006-02-03 08:32:02 -08:00
2006-01-09 15:59:27 -08:00
2006-03-06 18:40:44 -08:00
2006-01-18 19:20:18 -08:00
2006-01-18 19:20:17 -08:00
2006-02-20 20:00:11 -08:00
2006-02-01 08:53:15 -08:00
2006-01-10 08:01:34 -08:00
2006-01-11 08:14:16 -08:00
2006-01-11 08:14:16 -08:00
2006-01-18 19:20:29 -08:00
2006-02-07 16:12:34 -08:00
2006-01-14 18:27:12 -08:00
2006-01-08 20:14:07 -08:00
2006-02-15 01:34:23 -08:00
2006-01-10 12:54:29 -08:00
2006-02-15 15:18:19 -08:00
2006-02-09 16:43:38 -08:00
2006-02-20 20:00:11 -08:00
2006-02-07 20:56:35 -05:00
2006-01-08 20:13:52 -08:00
2006-02-03 08:32:05 -08:00
2006-03-06 18:40:43 -08:00
2006-01-31 18:00:11 -08:00
2006-03-08 14:14:01 -08:00
2006-01-08 20:13:59 -08:00
2006-01-15 02:12:54 +01:00
2006-01-12 16:31:52 -05:00
2006-01-09 15:59:24 -08:00
2006-02-05 11:06:52 -08:00
2006-01-09 15:47:16 +11:00
2006-01-18 19:20:30 -08:00
2006-02-01 08:53:13 -08:00
2006-01-13 21:02:13 +11:00
2006-02-15 11:05:43 -08:00
2006-02-03 08:32:08 -08:00
2006-01-12 11:35:15 -06:00
2006-03-08 14:14:01 -08:00
2006-02-05 11:06:52 -08:00
2006-02-01 08:53:25 -08:00
2006-03-02 10:37:59 -08:00
2006-02-01 08:53:25 -08:00
2006-01-08 20:13:51 -08:00
2006-01-10 08:01:53 -08:00
2006-02-01 08:53:16 -08:00
2006-02-28 20:53:44 -08:00
2006-01-10 08:01:42 -08:00
2006-01-08 20:14:07 -08:00
2006-01-08 20:14:02 -08:00
2006-02-03 18:31:33 -08:00
2006-01-21 23:03:28 +00:00
2006-01-21 23:03:28 +00:00
2006-02-23 09:49:35 +00:00
2006-01-14 18:27:07 -08:00
2006-01-08 20:13:53 -08:00
2006-01-17 02:54:21 -08:00
2006-02-01 08:53:18 -08:00
2006-01-14 18:27:13 -08:00
2006-02-07 20:56:35 -05:00
2006-01-12 14:06:31 -08:00
2006-01-08 20:14:02 -08:00
2006-02-07 16:12:33 -08:00
2006-02-20 20:00:09 -08:00
2006-02-24 14:31:39 -08:00
2006-02-28 09:42:23 -08:00
2006-02-11 21:41:11 -08:00
2006-01-10 08:01:38 -08:00
2006-02-17 08:24:29 -08:00
2006-01-18 00:45:15 +01:00
2006-01-12 14:06:38 -08:00
2006-01-18 19:20:17 -08:00
2006-02-10 08:13:12 -08:00
2006-01-10 08:01:59 -08:00
2006-02-10 08:13:12 -08:00
2006-02-01 08:53:13 -08:00
2006-02-03 08:32:04 -08:00
2006-02-03 08:32:05 -08:00
2006-01-31 17:23:44 -08:00
2006-01-09 15:32:31 -02:00
2006-02-08 01:03:39 -05:00
2006-01-08 20:14:07 -08:00
2006-01-10 08:01:29 -08:00
2006-01-10 08:01:57 -08:00