你们要的干货来了!FD.io 大会技术分享

0?wx_fmt=gif

王志宏,Intel工程师

0?wx_fmt=jpeg 

三个话题

在刚刚结束的FD.io minisummit上,有三个话题是关于虚拟化数据通道协议性能探讨的:

1. Towards a single virtualized data path for VPP

2. High Speed Solutions in VPP to Accelerate Container Networking: Howto and Deep Dive

3. VPP performance tuning from the perspective of virtual networking

三个对比

     目前主流的高性能虚拟化数据通道基本都是基于内存共享机制,例如Virtio和Netmap。VPP中实现的SSVM也是基于内存共享机制,目前还没有推出正式的标准。

    对这些协议进行性能分析和对比是一个很有意思的话题。

    关于性能的讨论分为两部分:协议开销,和数据拷贝开销。协议开销包括通信两端对ring、desc、index的维护;数据拷贝开销则是真正将需要传输的数据从发送发拷贝到接收方。

    基于内存共享机制的数据传输通常会有ring、desc、index等数据结构,用于通信双方确定收发的位置和状态,我们可以用一个提水的例子来快速理解其中的原理。

0?wx_fmt=jpeg

    假设有两个人分别有一个水池,其中A需要将自己水池中的水用水桶传给B,B将接收到的水倒进自己的水池。

    对于Virtio协议,A和B中的一个人作为前端的角色,另一个为后端。前端负责管理所有的水桶。假设B是前端,那么A需要向B申请水桶,然后打水,再将水桶递给B。反之,如果A是前端,那么他直接可以用水桶装水,然后递给B,最后B将空桶还给A。

    对于Netmap协议,A和B都有很多水桶。A只需要从自己空桶中拿出一个,装满水,B则从自己的空桶中拿出一个,然后A和B进行互换,则完成了一次水的传递。此外,在Netmap的设计中,A和B的水池实际上在同一个地方,因此这个互换操作开销非常低。

    对于SSVM,A和B都没有自己的水桶,而在他们之间有一堆水桶。这时,A需要从这一堆水桶中取出一个空桶,装满水,然后传递给B。反之亦然。这个过程中由于A和B有可能同时取到同一个空桶,因此取水桶这个操作需要加锁。

    当然,这个比喻反映的是协议的大体设计思路,其描述对于真实协议的具体实现细节来说不够精确。

一个结论

     在我们初步的测试中,对于64B的小包,Netmap的性能最好,这是由于它的收发操作最简单,协议开销最小,而Virtio和SSVM都还有提升的空间。随着包大小的增加,数据拷贝开销的比例逐渐升高,各种协议的性能也趋于一致。

    如果从发展的角度来看,所有的基于内存共享机制的虚拟化数据交换协议,如果持续进行优化,其协议开销都会趋于最小化,最终接近一致。这个优化的过程,就是对传输协议的数据结构和收发操作进行改进的过程,以使其具有更简单的操作,更亲和硬件执行的状态维护。或许最终所有这些协议的数据结构和收发操作都会变得大同小异。

    网络相关的功能性方面,Virtio支持较多的offloading功能,例如TSO、checksum,而Netmap和SSVM暂时不支持这些功能。

    在这三个协议中,Virtio拥有标准的协议文档,具有很好的实现兼容性。DPDK中实现了Virtio/Vhost的库,并且通过Vhost PMD将其抽象成一个标准端口,简化了使用。同时,DPDK持续对Virtio/Vhost进行优化,并积极对下一代Virtio协议进行探讨以提升功能和性能,希望通过Virtio/Vhost来加速所有的vSwitch。

    被广泛应用的OvS(Open vSwitch)通过集成DPDK,性能得到了数倍的提升。目前DPDK团队也正在将 Vhost PMD集成到VPP中。

    同时,通过在Container中引入一个Vhost-user适配器来代替虚拟机中的PCI驱动,DPDK成功地将Virtio PMD引入Container进行网络加速。 

0?wx_fmt=jpeg

DPDK开源社区

更多资讯,敬请期待

0?wx_fmt=jpeg

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值