Re: [PATCH] ipc/msg.c: mitigate the lock contention with percpu counter

From: Manfred Spraul
Date: Sat Sep 03 2022 - 15:35:26 EST


Hi Jiebin,

On 9/2/22 17:22, Jiebin Sun wrote:
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_counters
greatly improve the performance. Since there is one unique
ipc namespace, additional memory cost is minimal.

With ipc namespaces, there is one struct per namespace, correct?

The cost is probably still ok, but the change log should be correct.


@@ -1303,14 +1305,16 @@ void msg_init_ns(struct ipc_namespace *ns)
ns->msg_ctlmnb = MSGMNB;
ns->msg_ctlmni = MSGMNI;
- atomic_set(&ns->msg_bytes, 0);
- atomic_set(&ns->msg_hdrs, 0);
+ percpu_counter_init(&ns->percpu_msg_bytes, 0, GFP_KERNEL);
+ percpu_counter_init(&ns->percpu_msg_hdrs, 0, GFP_KERNEL);
ipc_init_ids(&ns->ids[IPC_MSG_IDS]);

These calls can fail. You must add error handling.

--

    Manfred