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

在DPDK的那一篇中 , 其实有一个重要的笔误 , 但是除了一个朋友看到后指出外 , 基本上没有人说到这个 。这个就是DPDK是Kernel-Bypass的 , 本写成了Kernel-By 。
看样子 , 大家都有深知kernel-bypass对于高速网络的重要性 。在云计算的VPC业务主流之前 , 大部分都预见了kernel的瓶颈 。
一个MTU 1500的帧的Time budget [1]
10Gbit/s =1230.4ns (812, 774 PPS)
25Gbit/s = 492.3ns (2,031,859 PPS)
40Gbit/s = 307.6ns (3,251,096 PPS)
100Gbit/s= 123.0ns (8,127,740 PPS)
同样 , 对于最小的以太帧84Byte ,
10Gbit/s = 67.2ns ( 14,880,952 PPS)
以一个主流的Intel的X86 的CPU , 3.0G为例:67.2ns 差不多就是201个CPU Cycle 。[2]
而linux kernel主要的机制的代价如下:
【】SRIOV:智能网卡就靠它了!
文章图片

文章图片

因此结论也很明确 , 目前linux 缺省的网络协议最高也只能handle
1-2MPPS的性能 , 大家需要考虑kernel-bypass 。[3]
目前Linux已知的Kernel-ByPass 框架:DPDK (Intel/LF)RDMA/IBVerbs (Mellanox/OFA)eBPF/XDP (Vmware/FB/RedHat/Huawei)netmap (FreeBSD)PF_RING/DNA (ntop)Open (Xilinx)Maglev (Google)Snabb (Deutsche Telekom)FD.IO/VPP (Cisco)
这里就在回应上一篇ARM同学的话 , 原来做硬件的网卡厂家只需要照顾自己的Linux驱动 , 但是现在为了让自己Smart起来 , 就要支持不同的kernel-bypass的框架 , 这个的确是伤不起 。关键还有一点就是 , 这样的硬件厂家本来也就不多了 。
个人觉得Redhat关于DPDK项目的声明是非常好的例子[4],总结下来如下:Redhat的网络总监是从Broadcom过来的 , 之前参加了很多项目 。包括:upstream and downstream development of Linux kernel networking, DPDK, OVS OVN, NFV, MPTCP, ebpf XDP.Redhat和DPDK之间的关系只要是使用DPDK进行OVS的packet转发 。对于DPDK , 在新的硬件出现之后 , 不用等待kernel的驱动upstream , 就可以使用新硬件 。Telco 是Redhat主要关注的客户 , 他们希望使用X86和Redhat的开源软件 。目前DPDK的贡献者太少了 , 只有Redhat , Mellanox和Intel 。最后就是DPDK如何和SmartNIC结合 , 这个是Redhat和一些硬件厂家一起比较关心的 。
对于软件人员来讲 , 需要通过各种不同的编程框架来实现Kernel-bypass , 但是PCIE设备的一个SRIOV能力就可以非常简单的实现了对于host kernel的bypass 。
SRIOV的问题也是很明显的:[5]Rigid: Composability issuesControl plane is pass through, puts pressure on Hardware resourcesParts of the PCIe config space are direct map from HardwareLimited scalability (16 bit)SR-IOV NIC forces switching features into the HWAll the Switching Features in the Hardware or nothing
因此 , 就有了Redhat系列的新思路:
SRIOV隔离VM的流量:
【】SRIOV:智能网卡就靠它了!
文章图片

文章图片

OVS的kernel和SRIOV 不使用PF , 而是VF上提供多个网络接口给OVS kernel模块 。每个VF都有一段kernel 内存空间 。OVS DPDK和SRIOV 直接使用VF可以bypass kernel空间直接对接用户态的OVS DPDK模块 。我们把host用户态的内存映射到每个网卡的VF 。Guest的 SRIOV 如上图最右边 , 我们把Guest的内存空间映射到网卡的VF 。在这种设备绑定中 , 网卡的ring 的layout在物理网卡和Guest之间共享 。因为这部分的信息都是私有的 , 因此Guest上需要制定网卡厂家的驱动 。


推荐阅读