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-08 09:22:39 -08:00
2008-02-08 09:22:39 -08:00
2008-02-08 09:22:40 -08:00
2008-02-14 21:13:33 -08:00
2008-02-08 09:22:40 -08:00
2008-03-30 14:20:23 -07:00
2008-02-14 21:13:33 -08:00
2008-02-14 21:13:33 -08:00
2008-03-04 14:47:06 -08:00
2008-02-08 09:22:40 -08:00
2008-02-21 15:19:54 -06:00
2007-10-22 08:13:21 -07:00
2008-02-23 17:12:13 -08:00
2008-04-18 08:36:09 +01:00
2008-02-08 09:22:40 -08:00
2008-03-19 06:42:18 -04:00
2008-03-30 14:18:41 -07:00
2008-03-30 14:18:41 -07:00
2007-10-18 14:37:31 -07:00
2008-03-30 14:18:41 -07:00
2008-02-13 16:21:20 -08:00
2008-04-11 08:06:43 -07:00
2008-03-04 16:35:10 -08:00
2008-03-17 21:14:40 +01:00
2008-01-30 13:31:46 +01:00
2008-02-05 09:44:07 -08:00
2008-02-14 21:13:33 -08:00
2008-02-06 10:41:07 -08:00
2008-01-30 13:31:46 +01:00
2008-02-14 21:13:33 -08:00
2008-03-19 06:54:05 -04:00
2008-02-14 21:13:33 -08:00
2008-02-05 09:44:07 -08:00