[Xen-devel] RE: [PATCH] Virtual machine queue NIC support in control pan
> -----Original Message-----
> From: Zhao, Yu [mailto:yu.zhao@xxxxxxxxx]
> Sent: Saturday, February 02, 2008 11:07 PM
> To: Santos, Jose Renato G
> Cc: xen-devel@xxxxxxxxxxxxxxxxxxx; Keir.Fraser@xxxxxxxxxxxx
> Subject: RE: [PATCH] Virtual machine queue NIC support in
> control panel
> Thanks for your comments.
> "vmq-attach/detach" are intended to associate a device queue
> to a vif when this vif is running. These two "xm" options
> require a physical NIC name and a vif reference, so they can
> invoke low level utility to do the real work. If the physical
> NIC doesn't have any available queue, the low level utility
> is supposed to return an error, thus "xm vmq-attach" will
> report the failure.
> Using "accel" plug-in framework to do this is a decent
> solution. However, "accel" plug-in lacks dynamic association
> function, which means user cannot set up or change a
> accelerator for a VIF when this VIF is running (as I
> mentioned in another email to Kieran Mansley). If we can
> improve "accel" plug-in to support this and some other
> features that may be required by other acceleration
> technologies, "vmq" and other coming acceleration options can
> Any other comments or suggestions, please feel free to let me
> know. I'm trying to revise this patch to use "accel" and will
> send it out later.
I think we need to consider two use cases:
1) The system automatically controls the allocation of device queues:
In this mode some policy in netback will allocate vifs to device
queues. Initially this can be a very simple policy that just
allocates device queues on a first come first served basis until
all the queues are used and after that new vifs are mapped to a
default shared queue.
Over time we can have a more dynamic scheme which can use traffic
measurements to change queue assignments dynamically.
2) The user control the allocation of device queues:
In this mode the user specify that a particular vif should
use a dedicated device queue. In this case the user will
expect that the command either allocates a queue to that vif
or fail if it cannot do that. He will also expect that the
system do not dynamically change the assignment of that
queue to a different vif. Basically, this will pin
a device queue to a particular vif and avoid this queue
to be used by any other vif.
I think we need to support both cases. Probably we should assume
case 1 by default and switch to case 2 on explict user config
option or command. It probably makes sense to start with
only case 1 first and add support for case 2 later.
For case 1, the configuration parameter or command just needs to bind
a vif to a physical device and let the system choose if the
vif will use a dedicated queue or a shared queue. In this
case I think we can share the same parameter with the Solarflare
acelerator plugin framework, since all we are doing is binding a
vif to physical device.
For case 2 I am not sure if it is a good
idea to share the same framework with Solarflare accelerator
plugin. Since these are two different mechanisms it seems good
to expose them with different commands or config options.
This is really a phylosophical question: Should the user
be able to distinguish between pinning a vif to device queue
vs. a device context; or should these be hidden under
a higher level abstraction command? What if the same
device can support both the multi-queue model and the direct I/O
Anyway, we need to be clear about the meaning of each
command or parameter. Are they just binding a physical device
and letting the system automaticaly choose the allocation of
dedicated device queues or we allowing the user to directly
assign queues to vifs. Please make this clear on your
command and parameters.
Also, we will probably need some command to list the status of a vif
(i.e. using a dedicated queue or a shared queue)
Xen-devel mailing list