Would there be interest in virtualization of the ixgbe driver?

Ryan Stone rysto32 at gmail.com
Fri Jan 14 02:51:49 UTC 2011


On Thu, Jan 13, 2011 at 3:04 PM, Brandon Gooch
<jamesbrandongooch at gmail.com> wrote:
> It would be nice to split up the hardware for use with vnet jails. The
> virtualization technique you are describing -- it sounds similar to
> how network device virtualization is done in the Solaris "Project
> Crossbow" implementation. Can you comment on this?

It looks like what I've done is implement what they call "L2
virtualization" in Project Crossbow.

> In other words, would we have the ability to have a vnet jail tied to
> specific hardware resources (Rx/Tx rings with their own DMA channels
> and interrupts, etc...).

Exactly right.  And the rx ring has a unique MAC, so that's how
incoming packets are multiplexed across multiple rings(and ultimately
vnets).  Also, you can use RSS on top of VMDq.  To use the terminology
used in the 82599's datasheet, each MAC(and vnet) would be associated
with a pool of 1 or more rx and tx rings.  Packets are multiplexed
across the pools by MAC, and then packets are multiplexed across the
rx rings in that pool by a hash over the IP addresses and the TCP/UDP
ports.  All of this, of course, is subject to the limits of the
hardware.  The 82598 is quite restrictive: something like 16 pools and
up to 4 rings per pool.  The 82599 has a lot more pools and queues to
work with.

On Thu, Jan 13, 2011 at 10:46 AM, Nikos Vassiliadis <nvass9573 at gmx.com> wrote:
> Yet, I don't know if the number of changes in the infrastructure worth the
> labor, for just one specific hardware. Is ixgbe the only hardware that
> support such things?
> Or maybe it is some trend of the future?

Basically all of the changes are within the ixgbe driver.  No
infrastructure should have to change to support the feature.  Also,
Project Crossbow was implemented for a number of different drivers,
including ixgbe and igb, so it should be possible to implement similar
features for other drivers.  However, this will always end up being
quite hardware-specific so while it'd probably be possible to use the
same concepts across the different drivers, it would have to
re-implemented for each driver.  The if_cloner used to create the
virtual ifnets could be shared but that's probably <1% of the work.


More information about the freebsd-virtualization mailing list