【】SRIOV:智能网卡就靠它了!( 二 )


上面还有一种设备绑定 , 就是在Guest的用户态通过DPDK访问在Guest中的VF网卡设备 。
SRIOV For Mapping NIC to Guest
对于在Guest空间的SRIOV设备 , 在实现通过memory的映射的机制进行网路报文的快速收发 , 有两条路径:使用Guest 的kernel驱动 。使用网卡厂家的驱动 , 通过直接映射IO memeory , 网卡的硬件设备可以直接访问guest kernel的内存 。基本上支持SRIOV的厂家都有类似的实现 , 例如AWS的ENA , Intel的ixgbegbe , 以及Mellanox的MLX4/5.在Guest上使用DPDK , 利用厂家提供的VF的PMD驱动 , 通过DPDK的内存映射 , 网卡设备可以访问Guest的用户态内存 。
【】SRIOV:智能网卡就靠它了!
文章图片

文章图片

在这个场景中:整个数据通路是厂家定义的 , 并且直接由VF功能来实现 。对SRIOV , 需要在Host的kernel (PF 驱动)以及Guest的用户态(VF-PMD)Host kernel的驱动和Guest的用户态的VF-PMD不能直接通信 。因此PF/VF驱动需要通过其他的接口进行 。厂家的VF-PMD主要用来配置NIC的VF , 而host kernel的PF驱动则负责整个网卡的配置 。
这个里面 , 的确可以实现线速的网络性能 , 但是因为接口都需要网卡厂家来提供 , 这样对于整个系统的升级相对比较麻烦 。
Virtio Full HW Offloading
这个的确是摆脱厂家驱动的一个办法 , 把virtio的数据和控制通路都卸载到硬件中 , 物理网卡通过SRIOV提供VF给Guest 。这个设备同样支持virtio ring的layout , 在guest和NIC之间建立内存映射 。
【】SRIOV:智能网卡就靠它了!
文章图片

文章图片

在Virtio Full Offloading中 , 在Host kernel甚至不需要驱动 , 物理网卡是一个支持SRIOV的virtio网卡 , VF和PF都是基于virtio协议的实现 。
在这个图中 , SRIOV带来的控制路径和数据路径bypass可能会对管理带来挑战 。同样 ,我们可以在Guest的OS 中使用virtio的kernel驱动 , 而不是PMD 。
vDPA --标准化数据通路
vDPA -虚拟的数据通路加速 , 它的主要目的是标准化网卡的SRIOV数据通路 , 让SRIOV的VF可以支持virtio ring的layout , 并且在Guest的空间可以使用标准的virtio驱动 , 而不是厂家的驱动 。通过这个抽象 , 可以在为未来支持类似于scalable IOV的技术 。
和上图不同 , 在SRIOV的VF的控制路径上可以让厂家继续使用自己的驱动(支持vDPA addon) , 并通过一个标准的vDPA驱动在厂家驱动/virtio之间进行翻译 。
在数据路径 , 基本上和上图的Virtio Full hardware offloading类似 。
vDPA的主要好处:
【】SRIOV:智能网卡就靠它了!
文章图片

文章图片

开放的标准 , 和virtio一样线速性能 , 和SRIOV一样 , 没有中间的memory地址翻译 。可以支持未来的Scaleble IOV统一了Guest的网卡驱动 。可以在两个vDPA的网卡之间做冗余保护 。支持live migration , 因为了vDPA一个控制链路的中间层 , 因此可以在不同的网卡厂家之间进行live migration 。在裸金属的场景下 , virtio的驱动可以成为一个事实上的标准驱动 , 和NVMe驱动一样 , 通过vDPA的框架支持不同厂家的网卡 。
对比:
【】SRIOV:智能网卡就靠它了!
文章图片

文章图片

这个里面可能要纠正一点就是 , Virtio Full HW offloading对于live migration的支持 , 这里主要是指在不同的厂家之间进行live migration 。


推荐阅读