From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:46063) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZjmAz-0005gV-Py for qemu-devel@nongnu.org; Wed, 07 Oct 2015 06:42:26 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZjmAw-0002Ns-Fu for qemu-devel@nongnu.org; Wed, 07 Oct 2015 06:42:25 -0400 Received: from mail.ispras.ru ([83.149.199.45]:42520) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZjmAw-0002NB-8C for qemu-devel@nongnu.org; Wed, 07 Oct 2015 06:42:22 -0400 From: "Pavel Dovgaluk" References: <1444161658-15038-1-git-send-email-pbonzini@redhat.com> <1444161658-15038-5-git-send-email-pbonzini@redhat.com> <35633.6639299572$1444206177@news.gmane.org> <5614DD31.4080000@redhat.com> <002e01d100e5$97a8ade0$c6fa09a0$@Dovgaluk@ispras.ru> <5614F2AA.5080100@redhat.com> In-Reply-To: <5614F2AA.5080100@redhat.com> Date: Wed, 7 Oct 2015 13:42:22 +0300 Message-ID: <002f01d100ec$d97bb4e0$8c731ea0$@Dovgaluk@ispras.ru> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Language: ru Subject: Re: [Qemu-devel] [PATCH 4/4] events doubts List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: 'Paolo Bonzini' , qemu-devel@nongnu.org > From: Paolo Bonzini [mailto:pbonzini@redhat.com] > On 07/10/2015 11:50, Pavel Dovgaluk wrote: > >> From: Paolo Bonzini [mailto:paolo.bonzini@gmail.com] On Behalf Of Paolo Bonzini > >> On 07/10/2015 10:21, Pavel Dovgaluk wrote: > >>> There are two kinds of events: > >>> - read from the log and injected immediately (user input, network input) > >>> - read from the log and wait for corresponding event in the queue (BH) > >>> > >>> We cannot inject BH event immediately because we do not have any information > >>> about callback > >> > >> Actually we do (indirectly, through aio_bh_call). But that may not be > >> the central issue, because... > >> > >>> and to preserve consistency - BH cannot be processed before > >>> it is scheduled by qemu core. > >> > >> ... you are processing them differently anyway between record mode > >> (where the BH is scheduled by the core) and replay (where the BH is > >> called directly). > > > > In record it also called through replay. It is scheduled into the replay > > events queue and called at checkpoint, where queue is flushed. > > > >> In fact, I don't understand what introduces the difference between > >> record and replay that requires special handling of ptimers' bottom > >> halves. In both cases, the ptimer triggers at the desired time (based > >> on checkpoints) and then the bottom half is called as soon as possible. > >> Why is a separate async event necessary? > > > > We want to preserve order of all events that affect virtual machine behavior, > > not only instructions execution. These events include processing of > > interrupts, exceptions, and bottom halves. > > That is why bottom halves are bind to checkpoints and recorded into the log. > > > >> Because we only care about bottom halves from ptimers, their order > >> should be the same for both record and replay. > >> > >> If bottom halves async events could be removed, that would simplify a > >> lot the code, and it would make it a lot easier to understand for me. > > > > I added ptimer handling because replay didn't work when I removed BH queuing. > > Ok, got it. I still want to understand exactly the need for the init > and reset checkpoints, and the placement of qemu_clock_warp calls, but > apart from that the patches are good to go for 2.5. Thanks for your > persistence! Init checkpoint is needed to separate initialization events (mostly coming from block devices) from execution ones. Reset checkpoint is used for synchronization of machine reset call. Pavel Dovgalyuk