- thread-pool: optimize scheduling of completion bottom half - migration/rdma: zore out head.repeat to make the error more clear - vhost-user-fs: Back up vqs before cleaning up vhost_dev - hw/vfio/pci-quirks: Sanitize capability pointer - hw/vfio/pci-quirks: Support alternate offset for GPUDirect Cliques - replay: fix event queue flush for qemu shutdown - hw/net: Fix read of uninitialized memory in ftgmac100 - target/ppc: Fix tlbie - target/i386: fix INVD vmexit - qtest/npcm7xx_pwm-test: Fix memory leak in mft_qom_set - aio-posix: zero out io_uring sqe user_data Signed-off-by: Jiabo Feng <fengjiabo1@huawei.com>
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
|
|
|