[ovs-dev] [PATCH v3 17/28] dpif-netdev: Postpone flow offload item freeing
Gaetan Rivet
grive at u256.net
Sun Apr 25 11:55:31 UTC 2021
Profiling the HW offload thread, the flow offload freeing takes
approximatively 25% of the time. Most of this time is spent waiting on
the futex used by the libc free(), as it triggers a syscall and
reschedule the thread.
Avoid the syscall and its expensive context switch. Batch the offload
messages freeing using the RCU.
Signed-off-by: Gaetan Rivet <grive at u256.net>
Reviewed-by: Eli Britstein <elibr at nvidia.com>
Reviewed-by: Maxime Coquelin <maxime.coquelin at redhat.com>
---
lib/dpif-netdev.c | 11 ++++++++---
1 file changed, 8 insertions(+), 3 deletions(-)
diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c
index 44e5735b2..ac55d2ae9 100644
--- a/lib/dpif-netdev.c
+++ b/lib/dpif-netdev.c
@@ -2625,14 +2625,19 @@ dp_netdev_alloc_flow_offload(struct dp_netdev_pmd_thread *pmd,
return offload;
}
+static void
+dp_netdev_free_flow_offload__(struct dp_offload_thread_item *offload)
+{
+ free(offload->actions);
+ free(offload);
+}
+
static void
dp_netdev_free_flow_offload(struct dp_offload_thread_item *offload)
{
dp_netdev_pmd_unref(offload->pmd);
dp_netdev_flow_unref(offload->flow);
-
- free(offload->actions);
- free(offload);
+ ovsrcu_postpone(dp_netdev_free_flow_offload__, offload);
}
static void
--
2.31.1
More information about the dev
mailing list