桔妹导读:随着云规模不断扩大以及业务层面对延迟、带宽的要求越来越高,采用DPDK 加速网络报文处理的方式在横向纵向扩展都出现了局限性。可编程芯片成为业界热点。本文主要讲述了可编程网卡芯片在滴滴云网络中的应用实践,遇到的问题、带来的收益以及开源社区贡献。

1.

数据中心面临的问题

随着滴滴云规模的不断扩大,业务层面对延迟以及带宽的要求越来越高。2018年滴滴云网络团队上线了基于开源社区的OVS-DPDK方案。DPDK是X86平台报文快速处理的库和驱动的集合, 其主要优势为通过Bypass Linux内核,Hugepage内存以及PMD(Poll Mode Driver)模型驱动的方式实现加速。我们为OVS-DPDK提供了在线热升级功能,该功能保证了在升级过程中虚拟机业务无感知,并且网络Downtime时间为毫秒级别。同时我们优化了OVS-DPDK数据转发平面。实现了不同物理主机上的虚拟机网络延迟<150us,单核性能约~400w pps(双向)。(具体介绍见使用 OVS-DPDK 加速滴滴云网络)

滴滴内部上云、高性能计算HPC,以及机器学习,对网络提出了更高的要求。通过CPU DPDK处理报文的方式,虽然在性能以及延迟方面远优于基于Linux 内核的转发实现。但CPU DPDK已经不能满足数据中心流量激增带来的需求。

2.

技术方案选择

云网络环境中,在计算节点DPDK不会占用过多的CPU,否则会影响CPU售卖,一般会使用1-2 CPU用于数据报文处理。同时DPDK 处理数据报文的性能强依赖CPU算力。因此在计算节点网络的横向扩展以及纵向扩展都具有局限性。

在边际网关节点,我们可以通过扩展服务器的方式,提高网络处理容量进而满足业务需求。但是大规模的扩展服务器,需要承担更多的机器、功耗以及运维成本。

软件定义网络(SoftwareDefinedNetwork,SDN)是一种新型网络创新架构,是网络虚拟化的一种实现方式。其核心思想是将网络设备的控制面与数据面分离开来。控制层面可以通过集中控制的方式实现不同的业务逻辑:拓扑发现,路由管理,安全策略,网络虚拟化等。数据平面更专注在数据报文转发。2018年AWS re:Invent,AWS 介绍了Nitro System。该系统通过硬件芯片加速虚拟机IO处理(网络、存储、安全等)。

目前工业界,加速网络处理的焦点聚集到了硬件层面:AISC,FPGA,P4,可编程网卡,以及智能网卡等。

3.

基于可编程芯片的解决方案

3.1 硬件芯片选择

  1. 传统AISC卡

    该卡比较成熟,但业务逻辑固定,很难适应云上复杂的业务场景。

  2. 可编程门队列FPGA

    FPGA 实现网络加速需要专业FPGA技术人员,以及专业网络RD。同时在成本,和研发周期都需要具有一定的局限性。

  3. P4

    P4 具有灵活的可编程性,较为合适做为网关节点数据处理。并不适合在计算节点使用。同时价格也是需要考虑的因素。

  4. 可编程网卡芯片

    通过调研发现,可编程网卡除了具有通用网卡的功能外,还可以通过下发流表规则的方式,实现报文匹配并对报文执行特定的action如:修改,封装,以及转发、上送报文至CPU等。这种具有灵活性、可编程性的硬件芯片,能够满足快速迭代的需求。

3.2转发模型

为了满足网元业务灵活性、多样性的需求,我们将网元业务和底层平台功能分离,舍去了传统的数据面Pipeline转发模型,采用了类似Open Flow的macth+action的方式。这样不同的match规则和不同action 匹配能够实现不同的业务逻辑。这种弱依赖的关系能够剥离了业务和底层细节,方便业务功能迭代、快速上线,同时底层可编程芯片的更新不会对业务逻辑产生影响。

**3.3网络平台化

**

随着云上业务场景的复杂化,以及上云的客户越来越多,云上网络的功能也复杂化。为了统一计算节点以及网关节点功能,我们实现了统一的编程框架。这样能够快速开发不同功能的网关节点,减少运维负担。

3.4落地实践

我们基于OVS-DPDK Offload 框架实现流表规则offload。OVS 采用首个报文触发的方式下发硬件流表规则,该方式的优点为在必须的时候下发规则,能够达到节省流表的目的,但是缺点却会导致首个报文延迟。经调研我们发现网卡支持至少百万级流表量(使用x86内存或者其他扩展内存),最终我们舍去OVS-DPDK ofproto 转发层,使用dpctl 接口下发流表,这样就不存在首个报文延迟问题,同时也缩减了使用TC Flower时数据面过多问题(这些转发平面包括:硬件芯片转发,TC数据面,OVS Linux 内核模块转发,以及ofproto层)。我们修改了OVS-DPDK 流表老化方式,保证通过dpctl 下发的规则不会被删除。最后通过upcall limit 限制了upcall 报文处理。

滴滴云网络数据平面主要分为两大部分:计算节点和网关节点。计算节点主要负责虚拟机、容器网络的虚拟化,网关节点主要负责各种边际节点业务如:SLB负载均衡、vRouter EIP报文处理,分流器、SNAT、FullNAT、云企业网等。可编程网卡芯片通过平台化的方式在两个主要节点均有应用。

  1. SLB负载均衡
    提供四层负载均衡,根据用户策略将underlayer网络报文分发到虚拟网络服务节点。

  2. vRouter
    提供弹性EIP服务。用户可以将一个公网IP地址绑定到虚拟机、容器、或者裸金属,从而获得公网访问功能。

  3. iRouter
    将滴滴数据中心和滴滴云虚拟网络打通,滴滴数据中心可以方便快捷的访问云上资源。

  4. SNAT
    为虚拟机、容器以及裸金属提供访问公网服务。

  5. 云企业网互联
    互联服务支持将滴滴云上的多个VPC网络加入云互联,任意两个VPC网络即可实现资源之间的互访。

  6. 计算节点
    在计算节点主要有两大应用场景:一种场景为在计算节点为虚拟机、容器提供VPC服务(网络隧道,限速,转发,报文修改,公网服务),RDMA网络。另外一个场景使用智能网卡为裸金属提供VPC服务。

3.5遇到的问题

在调研开发过程中遇到诸多问题,在这里和大家总结分享下:
  1. OVS-DPDK 支持Offload 程度有限
    首先OVS 社区并对DPDK Offload接口(rte flow)支持有限:实现的action非常有限。需要使用者独立完成开发:如set action,meter offload,vxlan 隧道报文处理等。

  2. 端口转发限制

    目前mellanox网卡芯片并不支持从一个PF端口转发到该芯片另一个端口, 最终我们通过SRIOV+Hairpin的方式解决该问题。据了解后续的网卡芯片开始支持该功能(功能也受限于固件)。

  3. Open vSwitch Crash
    在删除包含meter action 流表规则时,OVS 进程退出。该问题最终确认为DPDK的一个bug,目前该问题已经修复,发送到社区并接收。http://git.dpdk.org/next/dpdk-next-net/commit/id=0d7d180a0dda4b97021fc1f580d6bfe3b42a332d

    调用DPDK Meter API 接口导致crash。目前该问题已经修复,发送到社区并接收。

    http://git.dpdk.org/next/dpdk-next-net/commit/id=4f19f4140e058c92822f228dcdc55c44bd88b613

    修改OVS 配置导致删除offload flow crash,目前该问题已经修复,发送到社区并接收。https://github.com/openvswitch/ovs/commit/058b80d3de31b2c539d9e6f5f6687bde78ef08e9

  4. Meter offload

    OVS社区没有实现该功能,我们根据业务特征抽象出接口并在OVS实现了meter offload。该系 列补丁文件正在OVS 社区review,不久会进入upstream。

  5. Decap/Encap 流表限制

    下发多条带有decap/encap的流表规则时报错。该问题最终确认为DPDK的一个bug,目前该问题已经修复,与社区maintainer 协同修复。http://git.dpdk.org/next/dpdk-next-net/commit/id=64927f72a72fad39898b084e0cf66cc97b40959f

  6. Decap + Meter action限制

    decap + meter 做为action 下发规则时失败。该问题最终确认为DPDK的一个bug,目前该问题已经修复,与社区maintainer 协同修复http://git.dpdk.org/next/dpdk-next-net/commit/id=431f199883e5b7eeea87a2f9f0272daf3354c1da

  7. Hairpin 性能问题

    在高并发情况下,mellanox 网卡芯片性能会下降约40%,最终确认是网卡驱动hairpin问题。目前mellanox 确认该问题并给出修复方式。

  8. 流表数目限制

    通过删除流表上限修复该问题:https://github.com/openvswitch/ovs/commit/df5c293642cc07013e796e588eb7aead917e20a1

  9. MAC 地址对VxLAN的影响

    物理主机源MAC地址变更后vxlan 报文依旧使用原来MAC地址,这样会导致收不到响应报文:

    https://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next.git/commit/ id=6707f74be8621ae067d2cf1c4485900e2742c20f

  10. 多次修改报文不生效问题

多次使用TC Flower pedit 修改报文,offload 不生效问题, 最终确认是内核驱动问题:https://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next.git/commit/id=218d05ce326f9e1b40a56085431fa1068b43d5d9
  1. 配置vf rate、mac不当导致内核crashhttps://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next.git/commit/ id=6e77c413e8e73d0f36b5358b601389d75ec4451c
https://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next.git/commit/ id=24319258660a84dd77f4be026a55b10a12524919

3.6性能数据

以实现的vRouter 弹性公网网关为例(基础网络10Gpbs):

pps(64B)

Mpbs(64B)

pps(1500B)

Mpbs(1500B)

9495892

8660.25

811935

10067.98

业务延迟数据如下(使用pktgen-dpdk latency):

背景流量

网关延迟

10W条流表以及并发1Gbps 64B流量

3u

10W条流表以及并发5Gbps 64B流量

6u

4.

开源社区贡献

除了为开源社区提供 bug patch,我们也将新增特性、性能优化patch回馈至开源社区:OVS、DPDK、Linux 内核社区(约80+ patch), 其中Linux 内核补丁列表如下:

团队介绍

滴滴云平台事业群滴滴SDN网络团队负责云网络产品的规划、设计、以及研发等工作。为公有云提供负载均衡SLB、专有网络VPC、弹性公网EIP、SNAT 以及云互联等服务。团队针对云网络业务需求,在Linux 内核网络虚拟化、DPDK、OVS、可编程芯片、RDMA、智能网卡以及系统优化等领域均有广泛深入的研究。团队具有多名开源社区contributor,涉及OVS、DPDK、Linux 内核等。

作者介绍

专注于高性能网络技术,从事云网络研发工作。活跃于Linux 内核、OVS、DPDK开源社区。

延伸阅读

[这里是图片016]

[这里是图片017]

[这里是图片018]

内容编辑 | Charlotte & Teeo联系我们 | DiDiTech@didiglobal.com

可编程网卡芯片在滴滴云网络的应用实践相关推荐

  1. mininet编程实现交换机规则的插入、删除与修改。_可编程网卡芯片在滴滴云网络的应用实践...

    桔妹导读:随着云规模不断扩大以及业务层面对延迟.带宽的要求越来越高,采用DPDK 加速网络报文处理的方式在横向纵向扩展都出现了局限性.可编程芯片成为业界热点.本文主要讲述了可编程网卡芯片在滴滴云网络中 ...

  2. 滴滴云AI超分辨率实践 | AI大师码产品折扣

    前言 经实验室导师介绍,参加了下面一场"CCF滴滴专场"直播,3位滴滴出行技术专家王琤.朱中涛和鲁健捷与大家分享了滴滴云计算服务体系,领先的AI能力和AI工程落地经验,并现场带领我 ...

  3. 华为云--网络类服务实践

    网络类服务实践 华为云 创建网络环境 实验任务: 在上海一区域创建 2 个 VPC:VPC-SH01(2 个子网:subnet-01.subnet-02)和VPC-SH02(subnet-03). 在 ...

  4. 中国银联与上海银行基于SDN的下一代金融云网络联合研究与应用实践:从分层分区传统架构向云网架构转型...

    本文作者: 上海银行 马永祥等 中国银联 祖立军等 0.引言 中国银联与上海银行就金融云与SDN技术研究等达成合作,其中中国银联的电子商务与电子支付国家工程实验室与上海银行数据中心以下一代金融云数据中 ...

  5. 阿里洛神云网络这局妥了!集齐“软硬结合、创新NFV、智能管理”三张牌

    晶少 发自 凹非寺 量子位 报道 | 公众号 QbitAI 导语:在云网络风靡的今天,洛神云网络作为阿里云飞天的虚拟网络系统核心,目前在软硬一体.NFV平台创新以及智能性方面究竟有何新意?对用户与开发 ...

  6. 华为云网络覆盖全球2500+站点,打造高品质、低成本接入体验

    点击上方"LiveVideoStack"关注我们 9月23日,华为云举办了线上华为全联接大会,今年的全联接大会以"深耕数字化"为主题,探讨了各行各业如何通过打造 ...

  7. 阿里云飞天洛神2.0:开放弹性的云网络NFV平台

    云网络架构 阿里云操作系统叫飞天,云网络平台称为洛神.作为飞天系统的核心组件,洛神平台支撑了超大规模租户.超大规模虚拟机的高性能云网络. 洛神平台由很多网络设备组成,在架构上主要可以分为两类:虚拟交换 ...

  8. 揭秘2019双11背后的云网络 – 双11网络架构和洛神系统

    图1 天猫双11成交额 2019年天猫双11成交额,2684亿!核心系统100%上云!全球最大流量洪峰,阿里云扛住了.  狂欢背后的技术栈 网上轻松购物体验实际上是背后复杂的技术组成的,这是一个简化 ...

  9. VMware发布虚拟云网络创新技术,连接和保护分布式多云企业

    全球领先的企业软件创新者VMware(NYSE:VMW)本周在VMworld 2020大会上发布多项虚拟云网络创新,将帮助客户构建现代化网络, 更好地支持当前和未来业务计划.凭借VMware不断升级的 ...

最新文章

  1. String.Format()方法
  2. mysql大表迁移_MySQL 大表迁移
  3. 原创 | 从智慧交通、智慧安防、智能电网三大应用场景看我国智慧城市建设现状...
  4. 成功解决graphviz\backend.py, line 162, in pipe raise ExecutableNotFound(args) graphviz.backend.Executab
  5. 2. Python3输入与输出
  6. 3、构建bass服务及model
  7. (hdu step 7.2.1)The Euler function(欧拉函数模板题——求phi[a]到phi[b]的和)
  8. 【Tiny4412】 Android系统的烧写
  9. Android实现飘动的旗帜效果实例
  10. 实战系列-使用Mybatis-Plus生成器生成代码
  11. MATLAB2016笔记(六):数据可视化
  12. 小米商场html幻灯片代码,小米商城商品详情页布局(HTML代码太长贴不上去,只能贴jQuery代码)...
  13. 基于微信小程序的校园论坛系统开发过程
  14. latex下的实数集R的写法
  15. 中国人民银行招聘计算机考什么,求中国人民银行招聘计算机专业人员的考试题。...
  16. 红米Note5官方刷机日记 - 小米助手Recovery刷机
  17. 86版五笔单字效率分析
  18. 你知道吗?申报深圳市专精特新企业必须先申报创新型中小企业!
  19. PaddlePaddle/PaddleOCR 中英文文字识别
  20. 163vip邮箱手机快速注册,163手机邮箱如何登录?

热门文章

  1. 电脑安装了WPS之后,文档无法用原来的office打开,右键新建的文档是wps类型的而不是office类型的解决方案
  2. 考不上rdf学计算机以后能干什么,OWL 简介
  3. html怎么绘制晶圆图,晶圆图案化制程的制作方法
  4. 如何使用eclipse编写一个简单的java程序
  5. 用操作符堆栈和操作数堆栈实现四则运算表达式
  6. [学习笔记]拉格朗日插值法求多项式系数
  7. java代码实现曼彻斯特编码
  8. 各种 “代码编译 / 格式转换” 大全 在线工具库
  9. 按时间抽取的FFT算法及蝶形运算
  10. 【详解】IIC通讯上拉电阻的选择和计算公式