From: Manfred S. <ma...@co...> - 2003-12-20 18:20:44
|
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 |