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 15:32:56 +0100 Message-ID: <4D46C818.2000505@siemens.com> References: <34720dd344455d0abee575d399caedebcc099e5a.1296133797.git.jan.kiszka@siemens.com> <4D46865A.2090405@redhat.com> <4D469B86.7030400@siemens.com> <4D46B684.1050507@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]:16218 "EHLO david.siemens.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751168Ab1AaOdJ (ORCPT ); Mon, 31 Jan 2011 09:33:09 -0500 In-Reply-To: <4D46B684.1050507@redhat.com> Sender: kvm-owner@vger.kernel.org List-ID: On 2011-01-31 14:17, Avi Kivity wrote: > On 01/31/2011 01:22 PM, Jan Kiszka wrote: >> 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. > > Where do we wait then? > >> 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. > > I'm just missing the alternate place where we sleep. If there's no such > place, we spin. > Probably you are misled by the name of vm_can_run. It should better be renamed to requests_pending or something like that - iow, it is only true if some request is pending and not if just the vm is in stop mode. 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=38384 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1PjuoY-0006py-GZ for qemu-devel@nongnu.org; Mon, 31 Jan 2011 09:33:17 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1PjuoM-0003H5-2N for qemu-devel@nongnu.org; Mon, 31 Jan 2011 09:33:10 -0500 Received: from david.siemens.de ([192.35.17.14]:16158) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1PjuoL-0003GV-Mv for qemu-devel@nongnu.org; Mon, 31 Jan 2011 09:32:57 -0500 Message-ID: <4D46C818.2000505@siemens.com> Date: Mon, 31 Jan 2011 15:32:56 +0100 From: Jan Kiszka MIME-Version: 1.0 References: <34720dd344455d0abee575d399caedebcc099e5a.1296133797.git.jan.kiszka@siemens.com> <4D46865A.2090405@redhat.com> <4D469B86.7030400@siemens.com> <4D46B684.1050507@redhat.com> In-Reply-To: <4D46B684.1050507@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 14:17, Avi Kivity wrote: > On 01/31/2011 01:22 PM, Jan Kiszka wrote: >> 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. > > Where do we wait then? > >> 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. > > I'm just missing the alternate place where we sleep. If there's no such > place, we spin. > Probably you are misled by the name of vm_can_run. It should better be renamed to requests_pending or something like that - iow, it is only true if some request is pending and not if just the vm is in stop mode. Jan -- Siemens AG, Corporate Technology, CT T DE IT 1 Corporate Competence Center Embedded Linux