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

Re: [Xen-devel] questions regarding interdomain communication and xen-guest communication

On 25 October 2013 14:18, Jan Beulich <jbeulich@xxxxxxxx> wrote:
>>>> Aastha Mehta <aasthakm@xxxxxxxxx> 10/24/13 7:32 PM >>>
>>On 24 October 2013 09:09, Jan Beulich <jbeulich@xxxxxxxx> wrote:
>>>>>> Aastha Mehta <aasthakm@xxxxxxxxx> 10/23/13 7:44 PM >>>
>>>> In case of an asynchronous I/O does one guest have to
>>>>register its callbacks with the other guest directly?
>>>>Or does one guest hypercall into xen, which then upcalls into the
>>>>other guest and then transfer reply in the reverse using another pair
>>>>of hypercall and upcall?
>>> Again, the latter.
>>So when one guest (G1) shares pages with second (G2), for example for
>>block I/O, G1 will inform second via xen about a shared page.
> How this information is propagated is up to you; commonly this is being
> done via xenstore.
>> G1 will also register a callback with Xen.
> That callback will need to be registered in any case - the (general)
> event upcall.
Could you please clarify which general event upcall are you referring to here?

>> When Xen upcalls into G2 to forward G1's request, does it block on G2's 
>> reponse?
> Why would it - it acts as a passive agent here only.
>> How does G2 send back the result of I/O to G1?
> Generally as contents of the shared page.
> But really - please take a look at the various existing backend/frontend
> drivers.
>>>>Regarding xen -- domain communication: how can xen send some request
>>>>to dom0 for some operation that needs to be performed in the dom0 and
>>>>get back results from the dom0?
>>> Look at the MCE polling Dom0 performs for example, or the memory pressure
>>> threshold handling: One model would be for Dom0 to set up a (dedicated)
>>> vIRQ for that purpose, and Xen trigger that vIRQ when it needs Dom0's help.
>>Just to clarify, will guest return the result of the operation using a
> First of all there's generally no "result" in the examples I gave. Instead,
> Xen simply requests a certain kind of action to be taken. And Xen in fact
> must not depend on whether or when that action is being taken. But in
> general it might well be that the action requested consists of one or more
> hypercalls.
> Jan

Let me clarify my question a bit more. My requirement is that I need
to perform some computations on an application data, but I cannot
allow the application to do so directly. I would like to provide the
computation as a service from, say dom0. Here are two approaches that
come to my mind -
Approach 1
1. Application makes a syscall into DomU kernel requesting for the computation.
2. DomU copies the application data into a kernel buffer and makes a
hypercall into Xen forwarding application's request.
3. Xen upcalls into dom0 kernel for the service (a new vIRQ?).
4. Dom0 performs the computation and sends the results back to Xen via
a hypercall.
5. Xen returns the results to DomU kernel through another upcall (another vIRQ).
6. DomU kernel forwards the result to the application and returns the syscall.

Approach 2
Replace steps 2-5 in the above approach with interdomain event channel
notification between dom0 and domU and sharing the data pages through
grant table mechanism. So domU will notify dom0 that it has sent a
request for the computation, after placing the data to be used in the
shared memory. dom0's handler will get the request and the shared
data, compute the result, place it in another shared memory region and
notify domU of the completion of the request.

Do the two approaches even make sense?
I looked at the blkfront-blkback drivers, and how they use event
channels, grant tables and xenbus. If I understand correctly, the
event channels have to be associated with the xenbus, but it seems
that xenbus can only be used by drivers. I do not understand how the
event channels can be setup ad hoc between two domains. How do I know
what xenbus_device to connect to?

Another question I have is, if a domU makes a hypercall into Xen and
if the hypercall is long running, does it block the entire domU until
the hypercall returns? What if there are multiple vcpus?

Thanks and regards,

Xen-devel mailing list



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