Re: [Lse-tech] [RFC,PATCH] use rcu for fasync_lock

From: Stephen Hemminger
Date: Sat Dec 20 2003 - 16:12:07 EST


Manfred Spraul wrote:

Hi,

kill_fasync and fasync_helper were intended for mice and similar, rare users, thus it uses a simple rwlock for the locking. This is not true anymore: e.g. every pipe read and write operation calls kill_fasync, which must acquire the rwlock before handling the fasync list.
What about switching to rcu? I did a reaim run on a 4-way pIII with STP, and it reduced the time within kill_fasync by 80%:

diffprofile reaim_End_stock reaim_End_rcu 21166 1.2% default_idle
18882 0.9% total
290 12.8% page_address
269 23.5% group_send_sig_info
259 41.1% do_brk
244 6.3% current_kernel_time
[ delta < 200: skipped]
-205 -16.1% get_signal_to_deliver
-240 -3.7% page_add_rmap
-364 -4.7% __might_sleep
-369 -8.4% page_remove_rmap
-975 -81.2% kill_fasync

What do you think? Patch against 2.6.0 is attached.

--
Manfred

------------------------------------------------------------------------

--- 2.6/fs/fcntl.c 2003-12-04 19:44:38.000000000 +0100
+++ build-2.6/fs/fcntl.c 2003-12-20 10:56:23.344256035 +0100
@@ -537,9 +537,19 @@
return ret;
}

-static rwlock_t fasync_lock = RW_LOCK_UNLOCKED;
+static spinlock_t fasync_lock = SPIN_LOCK_UNLOCKED;
static kmem_cache_t *fasync_cache;

+struct fasync_rcu_struct {
+ struct fasync_struct data;
+ struct rcu_head rcu;
+};


Why do needless wrapping of existing structure? Just add and rcu element to it!


-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/