1. 程式人生 > >使用 OVS-DPDK 加速滴滴雲網絡

使用 OVS-DPDK 加速滴滴雲網絡

在基於現有 OVS-DPDK 開源軟體基礎上,滴滴雲技術團隊通過創新性的改進,實現了 ms 級別的熱升級,同時保持現有的高效能轉發能力。

背景

滴滴雲初期採⽤學習 OpenStack 的思路,採用核心態的 OVS 實現了 SDN OverLay 網路。這個實踐過程中,我們也遇到了一些問題,可以歸納為以下幾個⽅面:

  • 效能不高
  • ⽆法熱升級
  • 開發難度⼤
  • 維護成本高

原型設計

針對這些問題,經過技術調研,也參考了國內外同⾏的已有解決方案,在過程中和 Intel 團隊緊密合作,我們採用 OVS-DPDK 進⾏開發部署,並最終取得了不錯的效果。如下是資料流模型:

在這裡插入圖片描述

資料層面的⼏個重要改造

1. 底層:⽹卡硬體相關

基於 VF 的資料流改造

藉助硬體將 OverLay 的流量與宿主機的其他⽹絡流量進⾏分離。通過 flow classification 命令將前者導⼊到 VF 上,而後者仍然是通過 PF 口到核心進行處理,保持原有處理邏輯不變。OVS- DPDK 只接管 VF ⽹口,⽽不觸碰 PF 口上的非 SDN OverLay ⽹絡流量。

這樣既簡化了 OVS-DPDK 的處理邏輯,同時也避免了因 OVS-DPDK 本身的穩定性,而影響其他⾮ SDN ⽹絡模組的穩定性。

2. 中間層:OVS 報⽂處理

無狀態的轉發功能

⽬前,我們對計算節點⽹絡層面的需求,可以分為兩大類:VM 流量的轉發和 VM 網路的安全監控。其中後者是內部開發的,暫時略過。

針對 VM 流量轉發的這個需求,⼜拆解為兩部分:OverLay 外層頭的處理和內層報文的轉發。

藉助 OVS-DPDK 的 flow 表實現這兩部分功能。因為沒有啟⽤ conntrack 功能,因此我們這部分的實現是⽆狀態的。這個拆解,特別是無狀態的特性,在熱升級的時候取得了不錯的效果。

在這裡插入圖片描述

OVS 單網橋

之前參考 OpenStack 的模型,我們使⽤了 br-int,br-tunnel 兩個網橋。在這個模型裡,OVS ⽹橋的使⽤方式跟傳統的 Bridge 使⽤⽅式差別不大,沒有充分發揮 OVS ⽹橋的優勢。

在我們的模型中,把兩個網橋整合為一個網橋,將 VXLAN ⼝和 vhost-user 的⼝都放到⽤⼀個網橋上。VM 發出的報⽂經過 OVS 轉發處理後,攜帶外層頭資訊進入 VXLAN 驅動,經過 VXLAN 網口的封裝後,傳送給 VF 網口。

根據我們的資料模型,進入 VF ⼝的報⽂只可能是發往 VM 的 VXLAN 型別的報文。這些報文,在被剝除 VXLAN 頭後,經過 VXLAN ⼝進⼊網橋,經過⽹橋轉發到各個 VM 的 VPORT 。

降低與核心的耦合性

原有的 OVS 橋的路由和 ARP 表需要去核心查詢,跟核心的耦合性很強。

我們通過 SDN 控制器下發到 OVS-DPDK,來規避直接與核心的互動。這樣⼀方⾯簡化了 Bridge 的配置(不用單獨設定IP地址等),降低了核心的耦合性,另⼀方⾯也降低了熱升級時候的複雜度。

3. 上層: vhost-user 與 VM 互動層

vhost-user增強

我們使用的是 QEMU 作為 vhost-user 的 Server 端,OVS-DPDK 程序通過 unixsocket 連線到 QEMU。QEMU 預設僅支援一個這樣的連線,改造 QEMU 後,使得 QEMU 支援兩個主備倒換的連線,這樣熱升級的時候,可以通過控制 OVS-DPDK 端的開關,輕鬆的在新⽼兩個程序間切換。

記憶體模型採用 2M/4k。

儘量減少對現有 VM 的影響,為以後升級和遷移做準備。

方案優勢

在這裡插入圖片描述

  1. 升級時間短:業內⽬前的熱升級方案基本都是秒級的,切換時間⽐較長。而在我們的框架下,每個VM的熱升級時間大約 80ms 左右,極大的縮短了 VM 的網路中斷時間,基本做到⽤戶無感知。
  2. 可擴充套件性好:熱升級過程中,VM ⽹絡中斷時間跟 VM 規模無關。熱升級的時候,我們逐個把 VM 的流量從⽼的 OVS-DPDK 程序裡,切換到新的程序裡。這種逐個切換的模式,使得單個 VM 的流量切換,不會影響其他的 VM 網路功能。即使上百個 VM,總的升級時間達到⼏秒甚至⼏十秒的情況下,單個 VM 的⽹絡中斷時間仍然是 80ms。
  3. 故障恢復快:我們熱升級的模型中採⽤的是兩個獨⽴的 OVS-DPDK 程序,因此提前啟動一個新的 OVS-DPDK 程序作為後備程序,這個程序完成所有熱升級相關的初始化,比如初始化 vf2。這樣當原有 OVS-DPDK 程序 Crash 後,新的程序可以做快速的切換,實驗室環境下,單 VM 測試可以做到跟熱升級時間差不多。

附上測試資料

  • 效能:單核效能 400wpps 左右
  • 熱升級:單 VM 網路中斷時間 80ms 左右
  • DPDK version:17.11
  • OVS version:2.9.0
  • QEMU version:2.9
  • CPU:Intel® Xeon® CPU E5-2630 v4 @ 2.20GHz kernel:3.10.0-514.16.1.el7.x86_64
  • NIC:Ethernet Controller X710 for 10GbE SFP+ 1572