关于数据库:可编程网卡芯片在滴滴云网络的应用实践

13次阅读

共计 4291 个字符,预计需要花费 11 分钟才能阅读完成。

​桔妹导读:随着云规模不断扩大以及业务层面对提早、带宽的要求越来越高,采纳 DPDK 减速网络报文解决的形式在横向纵向扩大都呈现了局限性。可编程芯片成为业界热点。本文次要讲述了可编程网卡芯片在滴滴云网络中的利用实际,遇到的问题、带来的收益以及开源社区奉献。

1. 数据中心面临的问题

随着滴滴云规模的不断扩大,业务层面对提早以及带宽的要求越来越高。2018 年滴滴云网络团队上线了基于开源社区的 OVS-DPDK 计划。DPDK 是 X86 平台报文疾速解决的库和驱动的汇合, 其次要劣势为通过 Bypass Linux 内核,Hugepage 内存以及 PMD(Poll Mode Driver)模型驱动的形式实现减速。咱们为 OVS-DPDK 提供了在线热降级性能,该性能保障了在降级过程中虚拟机业务无感知,并且网络 Downtime 工夫为毫秒级别。同时咱们优化了 OVS-DPDK 数据转发立体。实现了不同物理主机上的虚拟机网络提早 <150us,单核性能约~400w pps(双向)。

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

2. 技术计划抉择

云网络环境中,在计算节点 DPDK 不会占用过多的 CPU,否则会影响 CPU 售卖,个别会应用 1 -2 CPU 用于数据报文解决。同时 DPDK 解决数据报文的性能强依赖 CPU 算力。因而在计算节点网络的横向扩大以及纵向扩大都具备局限性。

在边际网关节点,咱们能够通过扩大服务器的形式,进步网络解决容量进而满足业务需要。然而大规模的扩大服务器,须要承当更多的机器、功耗以及运维老本。

软件定义网络(Software Defined Network,SDN)是一种新型网络翻新架构,是网络虚拟化的一种实现形式。其核心思想是将网络设备的管制面与数据面拆散开来。管制层面能够通过集中控制的形式实现不同的业务逻辑:拓扑发现,路由治理,安全策略,网络虚拟化等。数据立体更专一在数据报文转发。2018 年 AWS re:Invent,AWS 介绍了 Nitro System。该零碎通过硬件芯片减速虚拟机 IO 解决(网络、存储、平安等)。

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

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

3.1 硬件芯片抉择

  1. 传统 AISC 卡

该卡比拟成熟,但业务逻辑固定,很难适应云上简单的业务场景。

  1. 可编程门队列 FPGA

FPGA 实现网络减速须要业余 FPGA 技术人员,以及业余网络 RD。同时在老本,和研发周期都须要具备肯定的局限性。

  1. P4

P4 具备灵便的可编程性,较为适合做为网关节点数据处理。并不适宜在计算节点应用。同时价格也是须要思考的因素。

  1. 可编程网卡芯片

通过调研发现,可编程网卡除了具备通用网卡的性能外,还能够通过下发流表规定的形式,实现报文匹配并对报文执行特定的 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 网络报文散发到虚构网络服务节点。

  1. vRouter

提供弹性 EIP 服务。用户能够将一个公网 IP 地址绑定到虚拟机、容器、或者裸金属,从而取得公网拜访性能。

  1. iRouter

将滴滴数据中心和滴滴云虚构网络买通,滴滴数据中心能够方便快捷的拜访云上资源。

  1. SNAT

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

  1. 云企业网互联

互联服务反对将滴滴云上的多个 VPC 网络退出云互联,任意两个 VPC 网络即可实现资源之间的互访。

  1. 计算节点

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

3.5 遇到的问题

在调研开发过程中遇到诸多问题,在这里和大家总结分享下:

  1. OVS-DPDK 反对 Offload 水平无限

首先 OVS 社区并对 DPDK Offload 接口 (rte flow) 反对无限:实现的 action 十分无限。须要使用者独立实现开发:如 set action,meter offload,vxlan 隧道报文解决等。

  1. 端口转发限度

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

  1. Open vSwitch Crash

在删除蕴含 meter action 流表规定时,OVS 过程退出。该问题最终确认为 DPDK 的一个 bug,目前该问题曾经修复,发送到社区并接管。http://git.dpdk.org/next/dpdk…

调用 DPDK Meter API 接口导致 crash。目前该问题曾经修复,发送到社区并接管。
http://git.dpdk.org/next/dpdk…

批改 OVS 配置导致删除 offload flow crash,目前该问题曾经修复,发送到社区并接管。https://github.com/openvswitc…

  1. Meter offload

OVS 社区没有实现该性能,咱们依据业务特色形象出接口并在 OVS 实现了 meter offload。该系 列补丁文件正在 OVS 社区 review,不久会进入 upstream。

  1. Decap/Encap 流表限度

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

  1. Decap + Meter action 限度

decap + meter 做为 action 下发规定时失败。该问题最终确认为 DPDK 的一个 bug,目前该问题曾经修复,与社区 maintainer 协同修复 http://git.dpdk.org/next/dpdk…

  1. Hairpin 性能问题

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

  1. 流表数目限度

通过删除流表下限修复该问题:https://github.com/openvswitc…

  1. MAC 地址对 VxLAN 的影响

物理主机源 MAC 地址变更后 vxlan 报文仍旧应用原来 MAC 地址,这样会导致收不到响应报文:
https://git.kernel.org/pub/sc…

  1. 屡次批改报文不失效问题

屡次应用 TC Flower pedit 批改报文,offload 不失效问题, 最终确认是内核驱动问题:
https://git.kernel.org/pub/sc…

  1. 配置 vf rate、mac 不当导致内核 crash

https://git.kernel.org/pub/sc…

https://git.kernel.org/pub/sc… 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 开源社区。

延长浏览

内容编辑 | Charlotte & Teeo
分割咱们 | DiDiTech@didiglobal.com

滴滴技术 出品

正文完
 0