On Fri, Mar 23, 2012 at 10:43 AM, Chris Webb <ch...@arachsys.com> wrote: > Stefan Hajnoczi <stefa...@linux.vnet.ibm.com> writes: > >> On Thu, Mar 22, 2012 at 07:07:52PM +0000, Chris Webb wrote: >> > Stefan Hajnoczi <stefa...@linux.vnet.ibm.com> writes: >> > >> > > Yesterday I only posted an analysis of the bug but here are some >> > > thoughts on how to move forward. Throttling itself is not the problem. >> > > We've known that synchronous operations in the vcpu thread are a problem >> > > long before throttling. This is just another reason to convert device >> > > emulation to use asynchronous interfaces. >> > > >> > > Here is the list of device models that perform synchronous block I/O: >> > > hw/fdc.c >> > > hw/ide/atapi.c >> > > hw/ide/core.c >> > > hw/nand.c >> > > hw/onenand.c >> > > hw/pflash_cfi01.c >> > > hw/pflash_cfi02.c >> > > hw/sd.c >> > > >> > > Zhi Hui Li is working on hw/fdc.c and recently sent a patch. >> > > >> > > I think it's too close to QEMU 1.1 to convert all the remaining devices >> > > and test them properly before the soft-freeze. But it's probably >> > > possible to convert IDE before the soft-freeze. >> > >> > IDE is the only of these that would affect us as a typical user of >> > throttling. The others aren't really the kind of devices which you'd be >> > using in a hosting setting in any case. >> >> Can you check whether your Windows guest has DMA or PIO mode enabled? >> >> http://msdn.microsoft.com/en-us/windows/hardware/gg463526 > > Hi. We were producing the IDE assert()s and deadlocks with linux kernels. > Although I believe the same symptoms exist on windows, I haven't actually > tested it myself. Typically they would show up in the 16-bit bootloader > code, even before the 32-bit OS has started.
Okay, that makes sense. Bootloaders and the BIOS may use the simplest driver interface - which may be PIO in the case. I asked because the IDE DMA code path should work with I/O throttling and Windows is known for sometimes falling back to the PIO code path when some heuristics trigger. Stefan