All of lore.kernel.org
 help / color / mirror / Atom feed
* Performance regression from switching lock to rw-sem for anon-vma tree
@ 2013-06-13 23:26 ` Tim Chen
  0 siblings, 0 replies; 92+ messages in thread
From: Tim Chen @ 2013-06-13 23:26 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: Andrea Arcangeli, Mel Gorman, Shi, Alex, Andi Kleen,
	Andrew Morton, Michel Lespinasse, Davidlohr Bueso, Wilcox,
	Matthew R, Dave Hansen, Peter Zijlstra, Rik van Riel,
	linux-kernel, linux-mm

Ingo,

At the time of switching the anon-vma tree's lock from mutex to 
rw-sem (commit 5a505085), we encountered regressions for fork heavy workload. 
A lot of optimizations to rw-sem (e.g. lock stealing) helped to 
mitigate the problem.  I tried an experiment on the 3.10-rc4 kernel 
to compare the performance of rw-sem to one that uses mutex. I saw 
a 8% regression in throughput for rw-sem vs a mutex implementation in
3.10-rc4.

For the experiments, I used the exim mail server workload in 
the MOSBENCH test suite on 4 socket (westmere) and a 4 socket 
(ivy bridge) with the number of clients sending mail equal 
to number of cores.  The mail server will
fork off a process to handle an incoming mail and put it into mail
spool. The lock protecting the anon-vma tree is stressed due to
heavy forking. On both machines, I saw that the mutex implementation 
has 8% more throughput.  I've pinned the cpu frequency to maximum
in the experiments.

I've tried two separate tweaks to the rw-sem on 3.10-rc4.  I've tested 
each tweak individually.

1) Add an owner field when a writer holds the lock and introduce 
optimistic spinning when an active writer is holding the semaphore.  
It reduced the context switching by 30% to a level very close to the
mutex implementation.  However, I did not see any throughput improvement
of exim.

2) When the sem->count's active field is non-zero (i.e. someone
is holding the lock), we can skip directly to the down_write_failed
path, without adding the RWSEM_DOWN_WRITE_BIAS and taking
it off again from sem->count, saving us two atomic operations.
Since we will try the lock stealing again later, this should be okay.
Unfortunately it did not improve the exim workload either.  

Any suggestions on the difference between rwsem and mutex performance
and possible improvements to recover this regression?

Thanks.

Tim

vmstat for mutex implementation: 
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
38  0      0 130957920  47860 199956    0    0     0    56 236342 476975 14 72 14  0  0
41  0      0 130938560  47860 219900    0    0     0     0 236816 479676 14 72 14  0  0

vmstat for rw-sem implementation (3.10-rc4)
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
40  0      0 130933984  43232 202584    0    0     0     0 321817 690741 13 71 16  0  0
39  0      0 130913904  43232 224812    0    0     0     0 322193 692949 13 71 16  0  0


Profile for mutex implementation:
5.02%             exim  [kernel.kallsyms]     [k] page_fault
3.67%             exim  [kernel.kallsyms]     [k] anon_vma_interval_tree_insert
2.66%             exim  [kernel.kallsyms]     [k] unmap_single_vma
2.15%             exim  [kernel.kallsyms]     [k] do_raw_spin_lock
2.14%             exim  [kernel.kallsyms]     [k] page_cache_get_speculative
2.04%             exim  [kernel.kallsyms]     [k] copy_page_rep
1.58%             exim  [kernel.kallsyms]     [k] clear_page_c
1.55%             exim  [kernel.kallsyms]     [k] cpu_relax
1.55%             exim  [kernel.kallsyms]     [k] mutex_unlock
1.42%             exim  [kernel.kallsyms]     [k] __slab_free
1.16%             exim  [kernel.kallsyms]     [k] mutex_lock  
1.12%             exim  libc-2.13.so          [.] vfprintf   
0.99%             exim  [kernel.kallsyms]     [k] find_vma  
0.95%             exim  [kernel.kallsyms]     [k] __list_del_entry    

Profile for rw-sem implementation
4.88%             exim  [kernel.kallsyms]     [k] page_fault
3.43%             exim  [kernel.kallsyms]     [k] anon_vma_interval_tree_insert
2.65%             exim  [kernel.kallsyms]     [k] unmap_single_vma
2.46%             exim  [kernel.kallsyms]     [k] do_raw_spin_lock
2.25%             exim  [kernel.kallsyms]     [k] copy_page_rep
2.01%             exim  [kernel.kallsyms]     [k] page_cache_get_speculative
1.81%             exim  [kernel.kallsyms]     [k] clear_page_c
1.51%             exim  [kernel.kallsyms]     [k] __slab_free
1.12%             exim  libc-2.13.so          [.] vfprintf
1.06%             exim  [kernel.kallsyms]     [k] __list_del_entry
1.02%          swapper  [kernel.kallsyms]     [k] _raw_spin_unlock_irqrestore
1.00%             exim  [kernel.kallsyms]     [k] find_vma
0.93%             exim  [kernel.kallsyms]     [k] mutex_unlock


turbostat for mutex implementation:
pk cor CPU    %c0  GHz  TSC    %c1    %c3    %c6 CTMP   %pc3   %pc6
            82.91 2.39 2.39  11.65   2.76   2.68   51   0.00   0.00

turbostat of rw-sem implementation (3.10-rc4):
pk cor CPU    %c0  GHz  TSC    %c1    %c3    %c6 CTMP   %pc3   %pc6
            80.10 2.39 2.39  14.96   2.80   2.13   52   0.00   0.00





^ permalink raw reply	[flat|nested] 92+ messages in thread
[parent not found: <1371165333.27102.568.camel@schen9-DESK>]

end of thread, other threads:[~2013-08-12 20:10 UTC | newest]

Thread overview: 92+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-06-13 23:26 Performance regression from switching lock to rw-sem for anon-vma tree Tim Chen
2013-06-13 23:26 ` Tim Chen
2013-06-19 13:16 ` Ingo Molnar
2013-06-19 13:16   ` Ingo Molnar
2013-06-19 16:53   ` Tim Chen
2013-06-19 16:53     ` Tim Chen
2013-06-26  0:19     ` Tim Chen
2013-06-26  0:19       ` Tim Chen
2013-06-26  9:51       ` Ingo Molnar
2013-06-26  9:51         ` Ingo Molnar
2013-06-26 21:36         ` Tim Chen
2013-06-26 21:36           ` Tim Chen
2013-06-27  0:25           ` Tim Chen
2013-06-27  0:25             ` Tim Chen
2013-06-27  8:36             ` Ingo Molnar
2013-06-27  8:36               ` Ingo Molnar
2013-06-27 20:53               ` Tim Chen
2013-06-27 20:53                 ` Tim Chen
2013-06-27 23:31                 ` Tim Chen
2013-06-27 23:31                   ` Tim Chen
2013-06-28  9:38                   ` Ingo Molnar
2013-06-28  9:38                     ` Ingo Molnar
2013-06-28 21:04                     ` Tim Chen
2013-06-28 21:04                       ` Tim Chen
2013-06-29  7:12                       ` Ingo Molnar
2013-06-29  7:12                         ` Ingo Molnar
2013-07-01 20:28                         ` Tim Chen
2013-07-01 20:28                           ` Tim Chen
2013-07-02  6:45                           ` Ingo Molnar
2013-07-02  6:45                             ` Ingo Molnar
2013-07-16 17:53                             ` Tim Chen
2013-07-16 17:53                               ` Tim Chen
2013-07-23  9:45                               ` Ingo Molnar
2013-07-23  9:45                                 ` Ingo Molnar
2013-07-23  9:51                                 ` Peter Zijlstra
2013-07-23  9:51                                   ` Peter Zijlstra
2013-07-23  9:53                                   ` Ingo Molnar
2013-07-23  9:53                                     ` Ingo Molnar
2013-07-30  0:13                                     ` Tim Chen
2013-07-30  0:13                                       ` Tim Chen
2013-07-30 19:24                                       ` Ingo Molnar
2013-07-30 19:24                                         ` Ingo Molnar
2013-08-05 22:08                                         ` Tim Chen
2013-08-05 22:08                                           ` Tim Chen
2013-07-30 19:59                                       ` Davidlohr Bueso
2013-07-30 19:59                                         ` Davidlohr Bueso
2013-07-30 20:34                                         ` Tim Chen
2013-07-30 20:34                                           ` Tim Chen
2013-07-30 21:45                                           ` Davidlohr Bueso
2013-07-30 21:45                                             ` Davidlohr Bueso
2013-08-06 23:55                                       ` Davidlohr Bueso
2013-08-06 23:55                                         ` Davidlohr Bueso
2013-08-07  0:56                                         ` Tim Chen
2013-08-07  0:56                                           ` Tim Chen
2013-08-12 18:52                                           ` Ingo Molnar
2013-08-12 18:52                                             ` Ingo Molnar
2013-08-12 20:10                                             ` Tim Chen
2013-08-12 20:10                                               ` Tim Chen
2013-06-28  9:20                 ` Ingo Molnar
2013-06-28  9:20                   ` Ingo Molnar
     [not found] <1371165333.27102.568.camel@schen9-DESK>
     [not found] ` <1371167015.1754.14.camel@buesod1.americas.hpqcorp.net>
2013-06-14 16:09   ` Tim Chen
2013-06-14 16:09     ` Tim Chen
2013-06-14 22:31     ` Davidlohr Bueso
2013-06-14 22:31       ` Davidlohr Bueso
2013-06-14 22:44       ` Tim Chen
2013-06-14 22:44         ` Tim Chen
2013-06-14 22:47       ` Michel Lespinasse
2013-06-14 22:47         ` Michel Lespinasse
2013-06-17 22:27         ` Tim Chen
2013-06-17 22:27           ` Tim Chen
2013-06-16  9:50   ` Alex Shi
2013-06-16  9:50     ` Alex Shi
2013-06-17 16:22     ` Davidlohr Bueso
2013-06-17 16:22       ` Davidlohr Bueso
2013-06-17 18:45       ` Tim Chen
2013-06-17 18:45         ` Tim Chen
2013-06-17 19:05         ` Davidlohr Bueso
2013-06-17 19:05           ` Davidlohr Bueso
2013-06-17 22:28           ` Tim Chen
2013-06-17 22:28             ` Tim Chen
2013-06-17 23:18         ` Alex Shi
2013-06-17 23:18           ` Alex Shi
2013-06-17 23:20       ` Alex Shi
2013-06-17 23:20         ` Alex Shi
2013-06-17 23:35         ` Davidlohr Bueso
2013-06-17 23:35           ` Davidlohr Bueso
2013-06-18  0:08           ` Tim Chen
2013-06-18  0:08             ` Tim Chen
2013-06-19 23:11             ` Davidlohr Bueso
2013-06-19 23:11               ` Davidlohr Bueso
2013-06-19 23:24               ` Tim Chen
2013-06-19 23:24                 ` Tim Chen

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.