[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] FW: Cirrus VGA slow screen update, show blank screen last 13s or so for windows XP guest



On Mon, Aug 5, 2013 at 4:06 PM, Gonglei (Arei) <arei.gonglei@xxxxxxxxxx> wrote:
>> -----Original Message-----
>> From: dunlapg@xxxxxxxxx [mailto:dunlapg@xxxxxxxxx] On Behalf Of George
>> Dunlap
>> Sent: Monday, August 05, 2013 10:28 PM
>> To: Gonglei (Arei)
>> Cc: xen-devel@xxxxxxxxxxxxx; qemu-devel@xxxxxxxxxx; Anthony PERARD;
>> Stefano Stabellini
>> Subject: Re: [Xen-devel] FW: Cirrus VGA slow screen update, show blank screen
>> last 13s or so for windows XP guest
>>
>> On Mon, Aug 5, 2013 at 2:10 PM, Gonglei (Arei) <arei.gonglei@xxxxxxxxxx>
>> wrote:
>> > Hi,
>> >> -----Original Message-----
>> >> From: Gonglei (Arei)
>> >> Sent: Tuesday, July 30, 2013 10:01 AM
>> >> To: 'Pasi Kärkkäinen'
>> >> Cc: Gerd Hoffmann; Andreas Färber; Hanweidong; Luonengjun;
>> >> qemu-devel@xxxxxxxxxx; xen-devel@xxxxxxxxxxxxx; Anthony Liguori;
>> >> Huangweidong (Hardware); 'Ian.Jackson@xxxxxxxxxxxxx'; Anthony Liguori;
>> >> 'aliguori@xxxxxxxxxx'
>> >> Subject: RE: [Xen-devel] [Qemu-devel] Cirrus VGA slow screen update, show
>> >> blank screen last 13s or so for windows XP guest
>> >>
>> >> > On Mon, Jul 29, 2013 at 08:48:54AM +0000, Gonglei (Arei) wrote:
>> >> > > > -----Original Message-----
>> >> > > > From: Pasi Kärkkäinen [mailto:pasik@xxxxxx]
>> >> > > > Sent: Saturday, July 27, 2013 7:51 PM
>> >> > > > To: Gerd Hoffmann
>> >> > > > Cc: Andreas Färber; Hanweidong; Luonengjun;
>> qemu-devel@xxxxxxxxxx;
>> >> > > > xen-devel@xxxxxxxxxxxxx; Gonglei (Arei); Anthony Liguori;
>> Huangweidong
>> >> > > > (Hardware)
>> >> > > > Subject: Re: [Xen-devel] [Qemu-devel] Cirrus VGA slow screen update,
>> >> show
>> >> > > > blank screen last 13s or so for windows XP guest
>> >> > > >
>> >> > > > On Fri, Jul 26, 2013 at 12:19:16PM +0200, Gerd Hoffmann wrote:
>> >> > > > >
>> >> > > > > Maybe the xen guys did some optimizations in qemu-dm which where
>> >> not
>> >> > > > > merged upstream.  Try asking @ xen-devel.
>> >> > > > >
>> >> > > >
>> >> > > > Yeah, xen qemu-dm must have some optimization for cirrus that isn't 
>> >> > > > in
>> >> > > > upstream qemu.
>> >> > >
>> >> > > Hi, Pasi. Would you give me some more details? Thanks!
>> >> > >
>> >> >
>> >> > Unfortunately I don't have any more details.. I was just assuming if xen
>> >> > qemu-dm is fast,
>> >> > but upstream qemu is slow, there might be some optimization in xen
>> >> > qemu-dm ..
>> >> >
>> >> > Did you check the xen qemu-dm (traditional) history / commits?
>> >> >
>> >> > -- Pasi
>> >>
>> >> Yes, I did. I tried to reproduce the issue with qemu-dm by fall backing 
>> >> history
>> >> commit.
>> >> But the qemu-dm mainline merged other branches, such as branch
>> 'upstream'
>> >> and branch 'qemu',
>> >> so that I can not complied the xen-4.1.2/tools project well. CC'ing Ian 
>> >> and
>> >> Anthony.
>> >>
>> > By analyzing xentrace data, I found that there is lot's of VMEXIT between
>> memory region 0xa0000~0xaffff with upstream qemu,
>> > but only 256 VMEXIT on traditional qemu-dm, when Windows XP guest
>> booting up or change the method connecting the VM from VNC(RDP) to
>> RDP(VNC):
>> >
>> > linux-sAGhxH:# cat qemu-upstrem.log |grep 0x00000000000a|wc -l
>> > 640654
>> > linux-sAGhxH:# cat qemu-dm.log |grep 0x00000000000a|wc -l
>> > 256
>> > And the 256 VMEXIT of qemu-dm as the same as the top 256 VMEXIT of
>> qemu-upstream
>> >
>> > linux-sAGhxH:# cat qemu-upstream.log |grep 0x00000000000a| tail
>> > CPU0  0 (+       0)  NPF         [ gpa = 0x00000000000a0b08 mfn =
>> 0xffffffffffffffff qual = 0x0182 p2mt = 0x0004 ]
>> > CPU0  0 (+       0)  NPF         [ gpa = 0x00000000000a0b0a mfn =
>> 0xffffffffffffffff qual = 0x0182 p2mt = 0x0004 ]
>> > CPU0  0 (+       0)  NPF         [ gpa = 0x00000000000a0b0c mfn =
>> 0xffffffffffffffff qual = 0x0182 p2mt = 0x0004 ]
>> > CPU0  0 (+       0)  NPF         [ gpa = 0x00000000000a0b0e mfn =
>> 0xffffffffffffffff qual = 0x0182 p2mt = 0x0004 ]
>> > CPU0  0 (+       0)  NPF         [ gpa = 0x00000000000a0b10 mfn =
>> 0xffffffffffffffff qual = 0x0182 p2mt = 0x0004 ]
>> > CPU0  0 (+       0)  NPF         [ gpa = 0x00000000000a0b12 mfn =
>> 0xffffffffffffffff qual = 0x0182 p2mt = 0x0004 ]
>> > CPU0  0 (+       0)  NPF         [ gpa = 0x00000000000a0b14 mfn =
>> 0xffffffffffffffff qual = 0x0182 p2mt = 0x0004 ]
>> > CPU0  0 (+       0)  NPF         [ gpa = 0x00000000000a0b16 mfn =
>> 0xffffffffffffffff qual = 0x0182 p2mt = 0x0004 ]
>> > CPU0  0 (+       0)  NPF         [ gpa = 0x00000000000a0b18 mfn =
>> 0xffffffffffffffff qual = 0x0182 p2mt = 0x0004 ]
>> > CPU0  0 (+       0)  NPF         [ gpa = 0x00000000000a0b1a mfn =
>> 0xffffffffffffffff qual = 0x0182 p2mt = 0x0004 ]
>> > linux-sAGhxH:# cat qemu-dm.log |grep 0x00000000000a| tail
>> > CPU2  0 (+       0)  NPF         [ gpa = 0x00000000000a1ec0 mfn =
>> 0xffffffffffffffff qual = 0x0182 p2mt = 0x0004 ]
>> > CPU2  0 (+       0)  NPF         [ gpa = 0x00000000000a1ee0 mfn =
>> 0xffffffffffffffff qual = 0x0182 p2mt = 0x0004 ]
>> > CPU2  0 (+       0)  NPF         [ gpa = 0x00000000000a1f00 mfn =
>> 0xffffffffffffffff qual = 0x0182 p2mt = 0x0004 ]
>> > CPU2  0 (+       0)  NPF         [ gpa = 0x00000000000a1f20 mfn =
>> 0xffffffffffffffff qual = 0x0182 p2mt = 0x0004 ]
>> > CPU2  0 (+       0)  NPF         [ gpa = 0x00000000000a1f40 mfn =
>> 0xffffffffffffffff qual = 0x0182 p2mt = 0x0004 ]
>> > CPU2  0 (+       0)  NPF         [ gpa = 0x00000000000a1f60 mfn =
>> 0xffffffffffffffff qual = 0x0182 p2mt = 0x0004 ]
>> > CPU2  0 (+       0)  NPF         [ gpa = 0x00000000000a1f80 mfn =
>> 0xffffffffffffffff qual = 0x0182 p2mt = 0x0004 ]
>> > CPU2  0 (+       0)  NPF         [ gpa = 0x00000000000a1fa0 mfn =
>> 0xffffffffffffffff qual = 0x0182 p2mt = 0x0004 ]
>> > CPU2  0 (+       0)  NPF         [ gpa = 0x00000000000a1fc0 mfn =
>> 0xffffffffffffffff qual = 0x0182 p2mt = 0x0004 ]
>> > CPU2  0 (+       0)  NPF         [ gpa = 0x00000000000a1fe0 mfn =
>> 0xffffffffffffffff qual = 0x0182 p2mt = 0x0004 ]
>> >
>> > Please see attachment for more information.
>> >
>> > Because of the lot's of VMEXIT, the cirrus_vga_ioport_write funciton 
>> > receive
>> little scheduling,
>> > and cirrus_vga_write_gr execution interval of more than 32ms twice per, so
>> that the blank screen time over 13 second with upstream qemu on Xen.
>> > I don't know why the Windows XP guest access the memory region
>> 0xa0000~0xaffff with upstream qemu but with traditional qemu-dm is not,
>> > Anyone can give me some suggestion?
>>
>> Anthony Perard is probably the best person to answer this question,
>> but unfortunately he's on holiday at the moment.
>>
>> It might be interesting to see what xenalyze tells you about what it
>> sees in the trace:
>>
>> http://blog.xen.org/index.php/2012/09/27/tracing-with-xentrace-and-xenalyze
>> /
>>
>> I think you'll want to use "--summary --with-mmio-enumeration".
>>
>>  -George
>
> Hi, George. I analyze the xentrace data by xenalyze, and get the next 
> results, actually I don't understand the meaning:
>
> linux-sAGhxH: # xenalyze qemu-upstream.log --summary --with-mmio-enumeration
> Using VMX hardware-assisted virtualization.
> scan_for_new_pcpu: Activating pcpu 0 at offset 0
> Creating vcpu 0 for dom 32768
> scan_for_new_pcpu: Activating pcpu 1 at offset 4180
> Creating vcpu 1 for dom 32768
> init_pcpus: through first trace write, done for now.
> hvm_generic_postprocess: Strange, exit 2c(APIC_ACCESS) missing a handler
> WARNING: Not enumerationg MMIO in VGA range.  Use 
> --mmio-enumeration-skip-vga=0 to override.
> hvm_generic_postprocess: Strange, exit 0(EXCEPTION_NMI) missing a handler
> hvm_generic_postprocess: HVM evt 0 in 2c and 0!
> read_record: read returned zero, deactivating pcpu 1
> deactivate_pcpu: setting d32768v1 to state LOST
> deactivate_pcpu: Setting max_active_pcpu to 0
> read_record: read returned zero, deactivating pcpu 0
> deactivate_pcpu: setting d32768v0 to state LOST
> deactivate_pcpu: Setting max_active_pcpu to -1
> Total time: 4.71 seconds (using cpu speed 2.40 GHz)
> --- Log volume summary ---
>  - cpu 0 -
>  gen   :       3292
>  hvm   :   47935940
>  +-vmentry:    8055696
>  +-vmexit :   13426160
>  +-handler:   26454084
>  - cpu 1 -
>  gen   :         12
>  hvm   :     574408
>  +-vmentry:     158424
>  +-vmexit :     264040
>  +-handler:     151944

Oh right -- it looks like you only enabled tracing of HVM events; in
order to track vcpus as they move across pcpus (which was the core
functionality I was looking for when I created xenalyze), you need to
enable schedule traces as well.  So you'd at least need 0xaf000.   I
almost always just trace with "-e all".

 -George

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.