All of lore.kernel.org
 help / color / mirror / Atom feed
* qemu-dm performance
@ 2006-09-20 20:01 Tommie McAfee
  2006-09-20 20:12 ` Anthony Liguori
  2006-09-20 21:03 ` Daniel P. Berrange
  0 siblings, 2 replies; 9+ messages in thread
From: Tommie McAfee @ 2006-09-20 20:01 UTC (permalink / raw)
  To: xen-devel


I've been investigating why qemu-dm is causing %CPU to be high when
viewing fully vitalized guests with vncviewer( about 20% usage ).  

I've looked at the code, and one area that I'm curious about is the
vram_dirty() function in tools/ioemu/hw/vga.c.  Please correct me if I'm
wrong, but vram_dirty() seems to be using SSE inline functions to
optimize it's bit-shifting/masking/loading/storing/comparison operations
to see if dirty bits need to be set for a page within the shadow table.
Also, I used gdb to make sure that I'm really executing the SSE
optimized version of vram_dirty() that utilizes xmm0 registers.

So out of curiosity, I decided to comment out calls to vram_dirty() from
vga_draw_graphic() and the guests still behave normally, but CPU% now
drops to 8%.  I know this is silly, and that I should expect a CPU drop
for commenting out code, but why is vram_dirty() adding 12% CPU
utilization when it can be commented out without crashing my viewer, and
without me even noticing a difference in the guests behavior?  Can
someone help me to understand the purpose vram_dirty serves and perhaps
why it seems 2 be so CPU intensive without really changing the way my
virtual guest behaves?

Also, where else should I look in the code for possible explanations to
why qemu-dm uses 20% CPU simply to view a guest.  All comments and
suggestions regarding this matter are appreciated,

thx,

T. McAfee
Xen Testing

^ permalink raw reply	[flat|nested] 9+ messages in thread
* RE: qemu-dm performance
@ 2006-09-20 21:39 Dugger, Donald D
  2006-09-21 17:45 ` McAfee, Tommie M
  0 siblings, 1 reply; 9+ messages in thread
From: Dugger, Donald D @ 2006-09-20 21:39 UTC (permalink / raw)
  To: Anthony Liguori, Tommie McAfee; +Cc: xen-devel

Since I wrote the code all I can do is say that Anthony is completely
correct, there's a shadow frame buffer that `vram_dirty' compares to see
if the HVM guest has modified it's frame buffer.  Deleting this function
should result in a blank VGA screen for your HVM guest, I'm really
curious how you got this to work.  Are you accessing the guest from the
serial line rather than the VGA console?

--
Don Dugger
"Censeo Toto nos in Kansa esse decisse." - D. Gale
Donald.D.Dugger@intel.com
Ph: (303)443-3786 

>-----Original Message-----
>From: xen-devel-bounces@lists.xensource.com 
>[mailto:xen-devel-bounces@lists.xensource.com] On Behalf Of 
>Anthony Liguori
>Sent: Wednesday, September 20, 2006 2:13 PM
>To: Tommie McAfee
>Cc: xen-devel@lists.xensource.com
>Subject: Re: [Xen-devel] qemu-dm performance
>
>There was a long thread about this topic already plus a patch floating 
>around.  I don't think vram_dirty is the problem.
>
>vram_dirty seems to be Xen-specific.  Presumably, since we map the 
>framebuffer directly into the guest, we cannot use write-faulting 
>anymore to track dirtying.  Instead, it looks like we rely on a double 
>buffer to determine which portions of the screen change.
>
>Regards,
>
>Anthony Liguori
>
>Tommie McAfee wrote:
>> I've been investigating why qemu-dm is causing %CPU to be high when
>> viewing fully vitalized guests with vncviewer( about 20% usage ).  
>>
>> I've looked at the code, and one area that I'm curious about is the
>> vram_dirty() function in tools/ioemu/hw/vga.c.  Please 
>correct me if I'm
>> wrong, but vram_dirty() seems to be using SSE inline functions to
>> optimize it's 
>bit-shifting/masking/loading/storing/comparison operations
>> to see if dirty bits need to be set for a page within the 
>shadow table.
>> Also, I used gdb to make sure that I'm really executing the SSE
>> optimized version of vram_dirty() that utilizes xmm0 registers.
>>
>> So out of curiosity, I decided to comment out calls to 
>vram_dirty() from
>> vga_draw_graphic() and the guests still behave normally, but CPU% now
>> drops to 8%.  I know this is silly, and that I should expect 
>a CPU drop
>> for commenting out code, but why is vram_dirty() adding 12% CPU
>> utilization when it can be commented out without crashing my 
>viewer, and
>> without me even noticing a difference in the guests behavior?  Can
>> someone help me to understand the purpose vram_dirty serves 
>and perhaps
>> why it seems 2 be so CPU intensive without really changing the way my
>> virtual guest behaves?
>>
>> Also, where else should I look in the code for possible 
>explanations to
>> why qemu-dm uses 20% CPU simply to view a guest.  All comments and
>> suggestions regarding this matter are appreciated,
>>
>> thx,
>>
>> T. McAfee
>> Xen Testing
>>
>> _______________________________________________
>> Xen-devel mailing list
>> Xen-devel@lists.xensource.com
>> http://lists.xensource.com/xen-devel
>>
>>   
>
>
>_______________________________________________
>Xen-devel mailing list
>Xen-devel@lists.xensource.com
>http://lists.xensource.com/xen-devel
>

^ permalink raw reply	[flat|nested] 9+ messages in thread
* RE: qemu-dm performance
@ 2006-09-22 19:34 Dugger, Donald D
  0 siblings, 0 replies; 9+ messages in thread
From: Dugger, Donald D @ 2006-09-22 19:34 UTC (permalink / raw)
  To: McAfee, Tommie M, Steven Smith; +Cc: Anthony Liguori, xen-devel, sos22

SLES uses TightVNC which has a problem with resize events (it doesn't
handle them).  If you replace the VNC client with RealVNC, which handles
resize events, this problem should go away.

--
Don Dugger
"Censeo Toto nos in Kansa esse decisse." - D. Gale
Donald.D.Dugger@intel.com
Ph: (303)443-3786 

>-----Original Message-----
>From: McAfee, Tommie M [mailto:Tommie.McAfee@unisys.com] 
>Sent: Friday, September 22, 2006 12:58 PM
>To: Steven Smith
>Cc: Dugger, Donald D; Anthony Liguori; 
>xen-devel@lists.xensource.com; sos22@srcf.ucam.org
>Subject: RE: [Xen-devel] qemu-dm performance
>
>
>
>Thanks a lot, this fix does reduce qemu overhead.
>
>Also, while testing I noticed a small bug with vncviewer using a
>sles9sp3 guest.  My initial attempt to view a guest causes vnc 
>to render
>a small window that doesn't respond to mouse movements.  I 
>have to close
>this window and then start the vncviewer again to get a resized and
>usable window.  I'm only seeing this on my first attempt to view the
>guest.  Any suggestions?
>
>Thx again for your help,
>
>T. McAfee
>Xen Testing
>
>
>
>-----Original Message-----
>From: Steven Smith [mailto:sos22@hermes.cam.ac.uk] On Behalf Of Steven
>Smith
>Sent: Thursday, September 21, 2006 3:23 PM
>To: McAfee, Tommie M
>Cc: Dugger, Donald D; Anthony Liguori; xen-devel@lists.xensource.com;
>sos22@srcf.ucam.org
>Subject: Re: [Xen-devel] qemu-dm performance
>
>> >Deleting this function should result in a blank VGA screen for your
>HVM
>> guest,
>> 
>> I not sure why but I'm not seeing this.  Here is what how I commented
>> out vram_dirty (as shown in gdb):
>> 
>> 1563        for (y = 0; y < s->vram_size; y += TARGET_PAGE_SIZE){
>> 1564            /*if (vram_dirty(s, y, TARGET_PAGE_SIZE))
>> 1565                
>cpu_physical_memory_set_dirty(s->vram_offset + y);
>> */
>> 1566        }
>It turns out that there was a bug a little later on which meant that
>the dirty bits were never actually cleared.  Fixing this seems to have
>fairly drastically reduced qemu overhead.  The fix is now present in
>xen-unstable.
>
>Thanks,
>
>Steven.
>

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2006-09-22 19:34 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-09-20 20:01 qemu-dm performance Tommie McAfee
2006-09-20 20:12 ` Anthony Liguori
2006-09-20 21:03 ` Daniel P. Berrange
  -- strict thread matches above, loose matches on Subject: below --
2006-09-20 21:39 Dugger, Donald D
2006-09-21 17:45 ` McAfee, Tommie M
2006-09-21 19:23   ` Steven Smith
2006-09-22 18:58     ` McAfee, Tommie M
2006-09-22 19:31       ` Steven Smith
2006-09-22 19:34 Dugger, Donald D

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.