Skip to content

ipc/msg: mitigate the lock contention in ipc/msg

Rafael Aquini requested to merge raquini/centos-stream-9:RHEL-15602 into main

JIRA: https://issues.redhat.com/browse/RHEL-15602

This is a set of simple backports for the following upstream series
plus its follow-up fixes:

"
Patch series "/msg: mitigate the lock contention in ipc/msg", v6.

Here are two patches to mitigate the lock contention in ipc/msg.  

The 1st patch is to add the new interface percpu_counter_add_local and  
percpu_counter_sub_local.  The batch size in percpu_counter_add_batch  
should be very large in heavy writing and rare reading case.  Add the  
"_local" version, and mostly it will do local adding, reduce the global  
updating and mitigate lock contention in writing.  

The 2nd patch is to use percpu_counter instead of atomic update in  
ipc/msg.  The msg_bytes and msg_hdrs atomic counters are frequently  
updated when IPC msg queue is in heavy use, causing heavy cache bounce and  
overhead.  Change them to percpu_counter greatly improve the performance.  
Since there is one percpu struct per namespace, additional memory cost is  
minimal.  Reading of the count done in msgctl call, which is infrequent.  
So the need to sum up the counts in each CPU is infrequent.  

Link: https://lkml.kernel.org/r/20220913192538.3023708-1-jiebin.sun@intel.com
"

Signed-off-by: Rafael Aquini aquini@redhat.com

Merge request reports