Mailing List Archive

Interdomain events are missing
Hi all,

I'm trying to using event channel to deliver interdomain events. I've
seen from the book "The Definitive Guide to the Xen Hypervisor" that
unlike signals on Unix or interrupts, events on Xen will not be lost.
If a event cannot be handled right now, it will be pushed in a queue
and wait for being handled.

However, it seems that some events are lost in my experiment. I build
an interdomain event channel between two DomUs, and sender domain
sends events to receiver domain every 5ms. The sender sends 20000
events in about 100s, but the receiver only gets 19999 or less events.
But if I slow down the speed of sending events, the receiver can get
the right number.

In my irq handler, I use disable_irq() and enable_irq(). Will that
block the delivery of events?
And could someone explain how events are handled by the hypervisor
when it is not handled at once? And are there some tips on how to
write good code to handle the right number of events?

Thanks!

_______________________________________________
Xen-users mailing list
Xen-users@lists.xen.org
http://lists.xen.org/xen-users
Re: Interdomain events are missing [ In reply to ]
On Sun, 2012-05-13 at 13:00 +0100, 夏业添 wrote:
> Hi all,
>
> I'm trying to using event channel to deliver interdomain events. I've
> seen from the book "The Definitive Guide to the Xen Hypervisor" that
> unlike signals on Unix or interrupts, events on Xen will not be lost.
> If a event cannot be handled right now, it will be pushed in a queue
> and wait for being handled.

event channels are effectively level triggered interrupts. They are not
queued as such but if a new event occurs while the previous is still
pending then they can be coalesced, which will mean that you appear to
get fewer results than you expected.

> However, it seems that some events are lost in my experiment. I build
> an interdomain event channel between two DomUs, and sender domain
> sends events to receiver domain every 5ms. The sender sends 20000
> events in about 100s, but the receiver only gets 19999 or less events.
> But if I slow down the speed of sending events, the receiver can get
> the right number.

That sounds right -- events are likely being coalesced.

> In my irq handler, I use disable_irq() and enable_irq(). Will that
> block the delivery of events?

Yes. The event will be blocked and injected when you reenable irqs.

> And could someone explain how events are handled by the hypervisor
> when it is not handled at once? And are there some tips on how to
> write good code to handle the right number of events?

If your interrupt handler always does all available work at the moment
it is called then it doesn't matter if interrupts are coalesced or not.

Ian.


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