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

From: Sun, Jiebin
Date: Mon Sep 05 2022 - 08:12:16 EST



On 9/4/2022 3:35 AM, Manfred Spraul wrote:
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.

Yes, that's what I want to summarize. The IPC msg namespace is unique

and there is only one percpu counter in IPC msg namespace.

Thanks.


@@ -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.

I have add error handling for percpu_counter_init.

Thanks.


--

    Manfred