46 lines
1.5 KiB
Diff
46 lines
1.5 KiB
Diff
|
|
From c84bb01c0c56cadb70a95c874b32ed85b8177504 Mon Sep 17 00:00:00 2001
|
||
|
|
From: tangbinzy <tangbin_yewu@cmss.chinamobile.com>
|
||
|
|
Date: Tue, 26 Sep 2023 06:41:50 +0000
|
||
|
|
Subject: [PATCH] thread-pool: optimize scheduling of completion bottom half
|
||
|
|
mainline inclusion commit 3c7b72ddca9ce85a9d1e8a98fd0996b74597b5ae category:
|
||
|
|
bugfix
|
||
|
|
|
||
|
|
---------------------------------------------------------------
|
||
|
|
|
||
|
|
The completion bottom half was scheduled within the pool->lock
|
||
|
|
critical section. That actually results in worse performance,
|
||
|
|
because the worker thread can run its own small critical section
|
||
|
|
and go to sleep before the bottom half starts running.
|
||
|
|
|
||
|
|
Note that this simple change does not produce an improvement without
|
||
|
|
changing the thread pool QemuSemaphore to a condition variable.
|
||
|
|
|
||
|
|
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
|
||
|
|
Reviewed-by: Nicolas Saenz Julienne <nsaenzju@redhat.com>
|
||
|
|
Message-Id: <20220514065012.1149539-2-pbonzini@redhat.com>
|
||
|
|
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
|
||
|
|
|
||
|
|
Signed-off-by: tangbinzy <tangbin_yewu@cmss.chinamobile.com>
|
||
|
|
---
|
||
|
|
util/thread-pool.c | 3 +--
|
||
|
|
1 file changed, 1 insertion(+), 2 deletions(-)
|
||
|
|
|
||
|
|
diff --git a/util/thread-pool.c b/util/thread-pool.c
|
||
|
|
index d763cea505..7e9e2c178b 100644
|
||
|
|
--- a/util/thread-pool.c
|
||
|
|
+++ b/util/thread-pool.c
|
||
|
|
@@ -108,9 +108,8 @@ static void *worker_thread(void *opaque)
|
||
|
|
smp_wmb();
|
||
|
|
req->state = THREAD_DONE;
|
||
|
|
|
||
|
|
- qemu_mutex_lock(&pool->lock);
|
||
|
|
-
|
||
|
|
qemu_bh_schedule(pool->completion_bh);
|
||
|
|
+ qemu_mutex_lock(&pool->lock);
|
||
|
|
}
|
||
|
|
|
||
|
|
pool->cur_threads--;
|
||
|
|
--
|
||
|
|
2.41.0.windows.1
|
||
|
|
|