On Sun, Oct 10, 2010 at 5:08 AM, Yuehai Xu <yuehaixu@xxxxxxxxx> wrote:
> After changing vcpu_unblock() to always call vcpu_wake(), the VM that
> has event can be scheduled immediately no matter whether it is CPU
> intensive. However, I have another question. Except the I/O event, it
> seems there are many other events too. Our design is to give a VM a
> very short period of time when it has "I/O event", and right now,
> vcpu_wake() is invoked when an event comes, even it is not "I/O
> event", this will cause that the VM is scheduled much more frequently
> than what I except.
> For example, suppose 2 VMs, one is CPU intensive and another is CPU +
> I/O intensive, from the level of scheduler, almost the same number of
> events are received from the two VMs. Even I/O itself creates event,
> since there are other events, the total number of events are almost
> the same. In such case, I think we need to differentiate the I/O
> events from other events.
> I add trace point to __run_tickle() and notice the result that the
> number of events are almost the same from two VMs, one of which is CPU
> intensive and the other is CPU + I/O intensive. Although I do not
> completely confirm what I have said currently, I need do more
Remind me, are you running in HVM mode, or PV mode?
That sounds unusual. Is it the number of events delivered, or the
number of times the guest woke up? NB they're not the same -- an HVM
guest will block and then wake up on the completion of an I/O
instruction which is handled by qemu.
If you're running in HVM mode, you can use "xenalyze -s" will give you
a summary of the trace. In the summary you can see not only now many
times a VM woke up, but which interrupt was delivered how many times.
At the moment, from Xen's perspective, an event delivery is an event
delivery. You'd have to manually add some way of classifying an event
Xen-devel mailing list