[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v2 2/3] Poll main loop after I/O events were receive
From: |
Jan Kiszka |
Subject: |
[Qemu-devel] [PATCH v2 2/3] Poll main loop after I/O events were received |
Date: |
Mon, 11 Apr 2011 22:27:43 +0200 |
From: Jan Kiszka <address@hidden>
Polling until select returns empty fdsets helps to reduce the switches
between iothread and vcpus. The benefit of this patch is best visible
when running an SMP guest on an SMP host in emulation mode.
Signed-off-by: Jan Kiszka <address@hidden>
---
sysemu.h | 2 +-
vl.c | 12 ++++++++----
2 files changed, 9 insertions(+), 5 deletions(-)
diff --git a/sysemu.h b/sysemu.h
index bbbd0fd..f75a03a 100644
--- a/sysemu.h
+++ b/sysemu.h
@@ -87,7 +87,7 @@ void cpu_synchronize_all_post_init(void);
void qemu_announce_self(void);
-void main_loop_wait(int nonblocking);
+int main_loop_wait(int nonblocking);
bool qemu_savevm_state_blocked(Monitor *mon);
int qemu_savevm_state_begin(Monitor *mon, QEMUFile *f, int blk_enable,
diff --git a/vl.c b/vl.c
index b7bbed8..2c46cd9 100644
--- a/vl.c
+++ b/vl.c
@@ -1286,7 +1286,7 @@ void qemu_system_vmstop_request(int reason)
qemu_notify_event();
}
-void main_loop_wait(int nonblocking)
+int main_loop_wait(int nonblocking)
{
fd_set rfds, wfds, xfds;
int ret, nfds;
@@ -1333,6 +1333,7 @@ void main_loop_wait(int nonblocking)
them. */
qemu_bh_poll();
+ return ret;
}
#ifndef CONFIG_IOTHREAD
@@ -1350,7 +1351,8 @@ qemu_irq qemu_system_powerdown;
static void main_loop(void)
{
- bool nonblocking = false;
+ bool nonblocking;
+ int last_io = 0;
#ifdef CONFIG_PROFILER
int64_t ti;
#endif
@@ -1359,7 +1361,9 @@ static void main_loop(void)
qemu_main_loop_start();
for (;;) {
-#ifndef CONFIG_IOTHREAD
+#ifdef CONFIG_IOTHREAD
+ nonblocking = !kvm_enabled() && last_io > 0;
+#else
nonblocking = cpu_exec_all();
if (vm_request_pending()) {
nonblocking = true;
@@ -1368,7 +1372,7 @@ static void main_loop(void)
#ifdef CONFIG_PROFILER
ti = profile_getclock();
#endif
- main_loop_wait(nonblocking);
+ last_io = main_loop_wait(nonblocking);
#ifdef CONFIG_PROFILER
dev_time += profile_getclock() - ti;
#endif
--
1.7.1
- [Qemu-devel] [PATCH v2 0/3] io-thread optimizations, Jan Kiszka, 2011/04/11
- [Qemu-devel] [PATCH v2 3/3] Do not kick vcpus in TCG mode, Jan Kiszka, 2011/04/11
- [Qemu-devel] [PATCH v2 2/3] Poll main loop after I/O events were received,
Jan Kiszka <=
- [Qemu-devel] [PATCH v2 1/3] Do not drop global mutex for polled main loop runs, Jan Kiszka, 2011/04/11
- Re: [Qemu-devel] [PATCH v2 0/3] io-thread optimizations, Paolo Bonzini, 2011/04/12
- Re: [Qemu-devel] [PATCH v2 0/3] io-thread optimizations, Aurelien Jarno, 2011/04/13
- Re: [Qemu-devel] [PATCH v2 0/3] io-thread optimizations, Aurelien Jarno, 2011/04/25
- Re: [Qemu-devel] [PATCH v2 0/3] io-thread optimizations, Jan Kiszka, 2011/04/26