Arjun
2006-Apr-15 06:57 UTC
[Xen-devel] Strange behavior of simple loop programs in Xen guests.
Hi, I''m running some simple C programs in a Xen 3.0 guest. I have a program testprog.c containing simple nested loops (see code below). I run this program and check "sar" and "top" output inside the guest and also xentop on the host. It shows that the running program takes up almost all the CPU time as expected. Now I introduce a sleep(1) statement inside my outer loop. On running the modified program, both "sar" and "top" in the guest VM show 0% and xentop on the host shows about 0.5% Next I start about a 100 instances of my loop program (started at skewed times) inside the guest VM. A check on sar and top still shows 0% CPU, however a check on xentop on the host shows an increase in CPU usage for the guest. This changes with the number of instances of the loop program I start (more or less linearly). I don''t understand why this is happening. Why are sar and top showing incorrect output in the guest VM. Can anyone explain ? P.S: code for the programs is posted below. Thanks and regards Arjun testprog.c ------------------------------------- nested loops ----------------------------- main() { long long int i = 0; int j = 0, count = 0; do{ i++; for(j=0 ; j < 100 ; j++){ count = count + 1; } } while (i < 25999999999LL); } ------------------------------ nested loops with sleep ---------------------- main() { long long int i = 0; int j = 0, count = 0; do{ i++; for(j=0 ; j < 1000000 ; j++){ count = count + 1; } sleep(1); count= 0; } while (i < 25999999999LL); } ------------------------------------------------------- _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Anthony Liguori
2006-Apr-15 22:58 UTC
[Xen-devel] Re: Strange behavior of simple loop programs in Xen guests.
You''re experience a well known problem with just about any piece of virtualization software. Tools that run in the guest (like sar and top) do not realize that the guest isn''t always running which means they don''t take this into account when calculating percentages. This makes the output from them pretty much useless in a virtualized environment. The IBM zSeries Linux port has some special modifications to take this trait into account within the kernel so tools like top work like you''d expect. I believe someone was looking into doing something like this for Xen. Regards, Anthony Liguori On Sat, 15 Apr 2006 02:57:26 -0400, Arjun wrote:> Hi, > > I''m running some simple C programs in a Xen 3.0 guest. I have a program > testprog.c containing simple nested loops (see code below). I run this > program and check "sar" and "top" output inside the guest and also xentop > on the host. It shows that the running program takes up almost all the CPU > time as expected. > > Now I introduce a sleep(1) statement inside my outer loop. On running the > modified program, both "sar" and "top" in the guest VM show 0% and xentop > on the host shows about 0.5% > Next I start about a 100 instances of my loop program (started at skewed > times) inside the guest VM. A check on sar and top still shows 0% CPU, > however a check on xentop on the host shows an increase in CPU usage for > the guest. This changes with the number of instances of the loop program I > start (more or less linearly). > > I don''t understand why this is happening. Why are sar and top showing > incorrect output in the guest VM. Can anyone explain ? > > P.S: code for the programs is posted below. > > Thanks and regards > Arjun >_______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel