From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jan Kiszka Subject: Re: [PATCH 04/22] Leave inner main_loop faster on pending requests Date: Mon, 31 Jan 2011 12:22:46 +0100 Message-ID: <4D469B86.7030400@siemens.com> References: <34720dd344455d0abee575d399caedebcc099e5a.1296133797.git.jan.kiszka@siemens.com> <4D46865A.2090405@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Cc: Marcelo Tosatti , "kvm@vger.kernel.org" , "qemu-devel@nongnu.org" To: Avi Kivity Return-path: Received: from david.siemens.de ([192.35.17.14]:19451 "EHLO david.siemens.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755329Ab1AaLW7 (ORCPT ); Mon, 31 Jan 2011 06:22:59 -0500 In-Reply-To: <4D46865A.2090405@redhat.com> Sender: kvm-owner@vger.kernel.org List-ID: On 2011-01-31 10:52, Avi Kivity wrote: > On 01/27/2011 03:09 PM, Jan Kiszka wrote: >> If there is any pending request that requires us to leave the inner loop >> if main_loop, makes sure we do this as soon as possible by enforcing >> non-blocking IO processing. >> >> At this change, move variable definitions out of the inner loop to >> improve readability. >> >> Signed-off-by: Jan Kiszka >> --- >> vl.c | 11 +++++++---- >> 1 files changed, 7 insertions(+), 4 deletions(-) >> >> diff --git a/vl.c b/vl.c >> index 5fad700..2ebc55b 100644 >> --- a/vl.c >> +++ b/vl.c >> @@ -1384,18 +1384,21 @@ qemu_irq qemu_system_powerdown; >> >> static void main_loop(void) >> { >> + bool nonblocking = false; >> +#ifdef CONFIG_PROFILER >> + int64_t ti; >> +#endif >> int r; >> >> qemu_main_loop_start(); >> >> for (;;) { >> do { >> - bool nonblocking = false; >> -#ifdef CONFIG_PROFILER >> - int64_t ti; >> -#endif >> #ifndef CONFIG_IOTHREAD >> nonblocking = cpu_exec_all(); >> + if (!vm_can_run()) { >> + nonblocking = true; >> + } > > Doesn't this cause vmstop to spin? We'll never execute > main_loop_wait(false) if I read the code correctly? > The code path is not changed, we just poll instead of wait in main_loop_wait. Also, I didn't get your error scenario yet. Even if we left the loop here, what magic would main_loop_wait do to vmstop processing? The stop request is handled outside the loop, that's why we should leave ASAP. Jan -- Siemens AG, Corporate Technology, CT T DE IT 1 Corporate Competence Center Embedded Linux From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from [140.186.70.92] (port=34835 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1PjrqL-0003JR-LJ for qemu-devel@nongnu.org; Mon, 31 Jan 2011 06:22:50 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1PjrqK-0001Rn-4l for qemu-devel@nongnu.org; Mon, 31 Jan 2011 06:22:49 -0500 Received: from david.siemens.de ([192.35.17.14]:19402) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1PjrqJ-0001RX-SL for qemu-devel@nongnu.org; Mon, 31 Jan 2011 06:22:48 -0500 Message-ID: <4D469B86.7030400@siemens.com> Date: Mon, 31 Jan 2011 12:22:46 +0100 From: Jan Kiszka MIME-Version: 1.0 References: <34720dd344455d0abee575d399caedebcc099e5a.1296133797.git.jan.kiszka@siemens.com> <4D46865A.2090405@redhat.com> In-Reply-To: <4D46865A.2090405@redhat.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Subject: [Qemu-devel] Re: [PATCH 04/22] Leave inner main_loop faster on pending requests List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Avi Kivity Cc: Marcelo Tosatti , "qemu-devel@nongnu.org" , "kvm@vger.kernel.org" On 2011-01-31 10:52, Avi Kivity wrote: > On 01/27/2011 03:09 PM, Jan Kiszka wrote: >> If there is any pending request that requires us to leave the inner loop >> if main_loop, makes sure we do this as soon as possible by enforcing >> non-blocking IO processing. >> >> At this change, move variable definitions out of the inner loop to >> improve readability. >> >> Signed-off-by: Jan Kiszka >> --- >> vl.c | 11 +++++++---- >> 1 files changed, 7 insertions(+), 4 deletions(-) >> >> diff --git a/vl.c b/vl.c >> index 5fad700..2ebc55b 100644 >> --- a/vl.c >> +++ b/vl.c >> @@ -1384,18 +1384,21 @@ qemu_irq qemu_system_powerdown; >> >> static void main_loop(void) >> { >> + bool nonblocking = false; >> +#ifdef CONFIG_PROFILER >> + int64_t ti; >> +#endif >> int r; >> >> qemu_main_loop_start(); >> >> for (;;) { >> do { >> - bool nonblocking = false; >> -#ifdef CONFIG_PROFILER >> - int64_t ti; >> -#endif >> #ifndef CONFIG_IOTHREAD >> nonblocking = cpu_exec_all(); >> + if (!vm_can_run()) { >> + nonblocking = true; >> + } > > Doesn't this cause vmstop to spin? We'll never execute > main_loop_wait(false) if I read the code correctly? > The code path is not changed, we just poll instead of wait in main_loop_wait. Also, I didn't get your error scenario yet. Even if we left the loop here, what magic would main_loop_wait do to vmstop processing? The stop request is handled outside the loop, that's why we should leave ASAP. Jan -- Siemens AG, Corporate Technology, CT T DE IT 1 Corporate Competence Center Embedded Linux