Files
kernel/include/linux
Dave Hansen 3d733633a6 [PATCH] r/o bind mounts: track numbers of writers to mounts
This is the real meat of the entire series.  It actually
implements the tracking of the number of writers to a mount.
However, it causes scalability problems because there can be
hundreds of cpus doing open()/close() on files on the same mnt at
the same time.  Even an atomic_t in the mnt has massive scalaing
problems because the cacheline gets so terribly contended.

This uses a statically-allocated percpu variable.  All want/drop
operations are local to a cpu as long that cpu operates on the same
mount, and there are no writer count imbalances.  Writer count
imbalances happen when a write is taken on one cpu, and released
on another, like when an open/close pair is performed on two

Upon a remount,ro request, all of the data from the percpu
variables is collected (expensive, but very rare) and we determine
if there are any outstanding writers to the mount.

I've written a little benchmark to sit in a loop for a couple of
seconds in several cpus in parallel doing open/write/close loops.

http://sr71.net/~dave/linux/openbench.c

The code in here is a a worst-possible case for this patch.  It
does opens on a _pair_ of files in two different mounts in parallel.
This should cause my code to lose its "operate on the same mount"
optimization completely.  This worst-case scenario causes a 3%
degredation in the benchmark.

I could probably get rid of even this 3%, but it would be more
complex than what I have here, and I think this is getting into
acceptable territory.  In practice, I expect writing more than 3
bytes to a file, as well as disk I/O to mask any effects that this
has.

(To get rid of that 3%, we could have an #defined number of mounts
in the percpu variable.  So, instead of a CPU getting operate only
on percpu data when it accesses only one mount, it could stay on
percpu data when it only accesses N or fewer mounts.)

[AV] merged fix for __clear_mnt_mount() stepping on freed vfsmount

Acked-by: Al Viro <viro@ZenIV.linux.org.uk>
Signed-off-by: Christoph Hellwig <hch@infradead.org>
Signed-off-by: Dave Hansen <haveblue@us.ibm.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
2008-04-19 00:29:27 -04:00
..
2008-02-07 08:42:23 -08:00
2008-02-14 21:17:08 -08:00
2008-02-10 18:11:16 -05:00
2008-02-19 10:04:00 +01:00
2008-04-19 09:59:43 +10:00
2008-02-19 10:04:00 +01:00
2008-04-17 20:05:38 +02:00
2008-03-04 16:35:12 -08:00
2008-02-14 20:58:05 -08:00
2008-03-04 14:47:06 -08:00
2008-02-08 02:09:56 +00:00
2008-02-08 09:22:24 -08:00
2008-02-07 08:42:30 -08:00
2008-02-11 13:01:51 +01:00
2008-04-04 18:36:49 +02:00
2008-04-17 12:22:31 +02:00
2008-02-13 16:21:18 -08:00
2008-02-07 20:39:44 -05:00
2008-03-17 22:48:46 -07:00
2008-02-19 21:00:18 +01:00
2008-03-19 18:53:36 -07:00
2008-02-08 09:22:29 -08:00
2008-04-17 20:05:42 +02:00
2008-04-17 15:44:25 -04:00
2008-02-26 14:03:47 +09:00
2008-03-04 16:35:15 -08:00
2008-03-12 12:34:37 -07:00
2008-02-08 09:22:31 -08:00
2008-02-14 21:13:33 -08:00
2008-02-14 21:13:33 -08:00
2008-02-07 23:11:56 -08:00
2008-03-17 22:46:46 -07:00
2008-02-08 09:22:31 -08:00
2008-02-08 09:22:26 -08:00
2008-04-17 10:42:14 -04:00
2008-02-08 09:22:41 -08:00
2008-04-17 10:43:01 -04:00
2008-02-07 08:42:34 -08:00
2008-02-07 08:42:30 -08:00
2008-02-08 09:22:41 -08:00
2008-02-08 09:22:27 -08:00
2008-02-07 08:42:34 -08:00
2008-04-17 20:05:37 +02:00
2008-02-07 08:42:16 -08:00
2008-04-17 20:05:36 +02:00
2008-02-08 09:22:34 -08:00
2008-02-08 09:22:36 -08:00
2008-03-04 14:57:43 -08:00
2008-04-07 13:14:22 -07:00
2008-03-06 15:30:40 -05:00