From mboxrd@z Thu Jan 1 00:00:00 1970 From: Gleb Natapov Subject: Re: [PATCH v2 28/30] KVM: x86 emulator: restart string instruction without going back to a guest. Date: Mon, 15 Mar 2010 12:07:56 +0200 Message-ID: <20100315100756.GH4294@redhat.com> References: <1268583675-3101-1-git-send-email-gleb@redhat.com> <1268583675-3101-29-git-send-email-gleb@redhat.com> <4B9D1545.2020902@redhat.com> <20100314180625.GB5406@redhat.com> <4B9DE55A.5070003@redhat.com> <20100315094447.GG4294@redhat.com> <4B9E0450.4090403@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: mtosatti@redhat.com, kvm@vger.kernel.org To: Avi Kivity Return-path: Received: from mx1.redhat.com ([209.132.183.28]:21835 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S936077Ab0COKH6 (ORCPT ); Mon, 15 Mar 2010 06:07:58 -0400 Received: from int-mx05.intmail.prod.int.phx2.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.18]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id o2FA7v05025440 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Mon, 15 Mar 2010 06:07:58 -0400 Content-Disposition: inline In-Reply-To: <4B9E0450.4090403@redhat.com> Sender: kvm-owner@vger.kernel.org List-ID: On Mon, Mar 15, 2010 at 11:56:32AM +0200, Avi Kivity wrote: > On 03/15/2010 11:44 AM, Gleb Natapov wrote: > >On Mon, Mar 15, 2010 at 09:44:26AM +0200, Avi Kivity wrote: > >>On 03/14/2010 08:06 PM, Gleb Natapov wrote: > >>>>Suggest simply reentering every N executions. > >>>> > >>>This restart mechanism is, in fact, needed for ins read ahead to work. > >>>After reading ahead from IO port we need to avoid entering decoder > >>>until entire cache is consumed otherwise decoder will clear cache and > >>>data will be lost. So we can't just enter guest in arbitrary times, only > >>>when read ahead cache is empty. Since read ahead is never done across > >>>page boundary this is save place to re-enter guest. > >>Please make the two depend on each other directly then. We can't > >>expect the reader of the emulator code know that. > >> > >We can document that. I wouldn't want to have different conditions for > >guest re-entry for different opcodes. > > We now have a write buffer size of one. It's just a matter of > making the emulator know the size of the buffer (extra parameter to > ->write_emulated). > The buffer is maintained inside emulator, so emulator knows about it and can check it, but then for all other string instruction except INS we will re-enter guest on each iteration. > >>Have the emulator ask the buffer when it is empty. > >> > >It will be always empty for all string ops except INS. > > > > Or we can make the buffer larger for everyone (outside this patchset > though). > I am not sure what do you mean here. INS read ahead and MMIO read cache are different beasts. Former is needed to speed-up string pio reads, later (not yet implemented) is needed to reread previous MMIO read results in case instruction emulation is restarted due to need to exit to userspace. MMIO read cache need to be invalidated on each iteration of string instruction. -- Gleb.