Presentation is loading. Please wait.

Presentation is loading. Please wait.

[招待講演] オープンソース 仮想スイッチの実装に見る DPDKの使用方法と 性能への影響

Similar presentations


Presentation on theme: "[招待講演] オープンソース 仮想スイッチの実装に見る DPDKの使用方法と 性能への影響"— Presentation transcript:

1 [招待講演] オープンソース 仮想スイッチの実装に見る DPDKの使用方法と 性能への影響
平成28年11月24日 名古屋工業大学 川島 龍太

2 本日のテーマ DPDKの概要と性能向上のポイント 対象 Open vSwitch Lagopus

3 目次 背景 背景 DPDK 仮想スイッチ 性能評価(基礎) 性能評価(応用) まとめ

4 Network Functions Virtualization (NFV)
従来のNW機器 NFV時代のNW機器 Router VM vRouter FW vFW VM EPC vEPC VM HW-based SW-based 低いコスト 高い柔軟性 オープン 高いコスト 低い柔軟性 クローズド

5 NFVの課題 パケットの転送性能が低い パケット転送性能 (フロー単位、40 GbE) DPDKが性能向上の鍵 !

6 DPDK利用の広がり FD.io (Fast Data Input/Outpt) ScyllaDB 次世代のネットワークI/Oフレームワーク
DPDKをパケットI/Oコアとして利用 様々なプロジェクトが存在 (TLDK, Honeycomb, TRex, ONE) ScyllaDB Cassandra互換のNoSQLデータベース 10倍速い DPDK + Seastar framework

7 目次 背景 DPDK 仮想スイッチ 性能評価(基礎) 性能評価(応用) まとめ DPDK

8 DPDK概要 高速パケット処理のためのフレームワーク HWを意識した実装 SW実装の工夫 OS側の 対応 CPUコア/NUMA構成
メモリチャネル メモリアラインメント Poll Mode Driver (PMD) SW実装の工夫 マルチスレッド 競合緩和 ポーリング パケットバッファ管理 パケットバッチング CPUコアの占有 (setaffinity) Hugepages User-space I/O (UIO) OS側の 対応

9 EAL (Environment Abstraction Layer) スレッド
DPDKにおける実行単位(実際はpthread) PMDスレッド: NICをポーリング NUMAノードごとに作成 特定のCPUコアにバインド PMD スレッド PMD スレッド C0 C1 C2 C3 NUMAノード (Socket 0) C4 C5 C6 C7 NUMAノード (Socket 1) PCIe 3.0 PCIe 3.0

10 Run-to-Completionモデル
実行モデル パケット処理におけるEALスレッドの使い方 Run-to-Completionモデル Pipelineモデル

11 Run-to-Completionモデル
利点 シンプルな実装 低オーバヘッド L1/L2キャッシュ PMD スレッド 送信処理 本処理 本処理が重いと 取りこぼしが発生 CPUコアの活用 欠点 C0 C1 C2 C3 受信処理

12 Pipelineモデル 利点 欠点 送信処理 負荷分散 CPUコアの有効活用 本処理 大規模フロー処理向き 受信処理
Tx スレッド 利点 負荷分散 CPUコアの有効活用 本処理 Worker スレッド 大規模フロー処理向き 受信処理 PMD スレッド パケット受け渡しのオーバヘッド L1/L2キャッシュ 欠点 C0 C1 C2 C3

13 メモリ管理 Mbuf パケットバッファ Mempool バッファプール 起動時に割り当て Zone Zone Zone ヒープ領域
Hugepage NUMAノード

14 Mbuf パケットデータを格納するためのデータ構造 rte_mbuf Linuxにおけるskb、FreeBSDにおけるmbufに相当 ヘッダ
セグメント (固定長: 約2KB)

15 Mempool 固定長オブジェクトのプール rte_mempool rte_mbufを予めプール (数万~数十万)
各NUMAノードごとに作成 CPUコア間で共有 MBuf MBuf 競合 (CAS操作) C0 C1 C2 C3 Obj Mempool

16 Mempoolキャッシュ EALスレッド専用のオブジェクトキャッシュ rte_mempool_cache
Obj Obj Obj Obj Obj Obj Obj

17 パケットバッチング Linux DPDK (NAPI) Rx Tx Rx Tx バッチング無 バッチング有 (最大32個) Pkt Pkt
vSW vSW Pkt Pkt Pkt Pkt Pkt Pkt Pkt Pkt Pkt Pkt Pkt Pkt Rx Tx Rx Tx バッチング無 バッチング有 (最大32個)

18 目次 背景 DPDK 仮想スイッチ 性能評価(基礎) 性能評価(応用) まとめ 仮想スイッチ

19 仮想スイッチ概要 ソフトウェア化されたスイッチ HWスイッチ vSW 物理サーバ 仮想マシンにネットワーク接続を提供 VM vSW

20 OpenFlowに対応した代表的な仮想スイッチ
Open vSwitch (OVS) OpenFlowに対応した代表的な仮想スイッチ Linux/FreeBSD/Windows上で動作 豊富な利用実績 Linuxカーネル標準 VTEP機能 (VXLAN, Geneve, STTなど)

21 OVSの基本アーキテクチャ User VM VM … DPDK Kernel ovsdb-server CLI ovs-vswitchd
dpif ofproto netdev netdev-dpdk netdev-linux DPDK Kernel Datapath module Socket Network stack TAP

22 Run-to-Completionモデル
DPDKの使われ方 (OVS) Run-to-Completionモデル PMD スレッド 受信処理 送信処理 ユーザ空間のみ Mbuf数: 16K〜256K個 NICキュー長: 2K RSS対応 (L3/L4) vhost-user対応 アクション処理 C0 C1 C2 C3 マッチング処理

23 キャリアNWで利用可能な国産OpenFlow仮想スイッチ
Lagopus キャリアNWで利用可能な国産OpenFlow仮想スイッチ Linux/FreeBSD上で動作 DPDKネイティブ OpenFlow 1.3.4への準拠性 MPLS/PBB/QinQに対応 100万フローエントリ

24 Lagopusの基本アーキテクチャ User DPDK Kernel Switch agent Dataplane CLI Driver
Rawsock DPDK OpenFlow Pipeline DPDK Socket TAP Network stack

25 DPDKの使われ方 (Lagopus) Pipelineモデル Ring マッチング処理 アクション処理 Ring 送信処理
Worker スレッド マッチング処理 アクション処理 Ring Tx スレッド 送信処理 1024個分のキュー 最大144個単位で読み書き Ring PMD スレッド 受信処理 Ring Ring CPUコアの割り当て方法は? ユーザ空間のみ Mbuf数: 32K個 NICキュー長: 1K RSS対応 (L3) vhost-user非対応 C0 C1 C2 C3

26 目次 背景 DPDK 仮想スイッチ 性能評価(基礎) 性能評価(応用) まとめ 性能評価(基礎)

27 評価概要 目的: 基本構成での性能を評価 評価項目 評価対象 OVS-DPDK / OVS 転送スループット Lagopus
目的: 基本構成での性能を評価 評価項目 転送スループット 転送遅延/ジッタ 評価対象 OVS-DPDK / OVS Lagopus L2FWD (DPDK sample) VALE (netmap) Linux Bridge ※ R. Kawashima, S. Muramatsu, H. Nakayama, T. Hayashi, and H. Matsuo, “A Host-based Performance Comparison of 40G NFV Environments Focusing on Packet Processing Architectures and Virtual Switches”, Proc. EWSDN, 2016.

28 評価環境 Server 2 Server 1 PM pktgen-dpdk OSTA vSwitch UDP traffic (DUT)
(Throughput) OSTA (Latency) vSwitch UDP traffic eth2 eth1 eth1 eth2 Server 1 Server 2 (DUT) 40GbE 単一フロー (UDP) 単一CPUコア (Lagopus以外) 単一Worker (Lagopus) (3CPUコア)

29 評価結果(転送スループット) Intel XL710 Mellanox ConnectX-3 EN
Lagopusの性能が出ていない DPDK (またはnetmap) によって性能は大幅に向上する DPDKの使い方やNICの種類によって性能差が生じる

30 評価結果(転送遅延/ジッタ) Intel XL710 DPDKの効果はそれほど大きく無い DPDKの使い方によって性能差が生じる
Lagopusの遅延/ジッタもやや悪い L2FWDの遅延/ジッタが極めて悪い DPDKの効果はそれほど大きく無い DPDKの使い方によって性能差が生じる

31 疑問点 DPDKの使い方によって性能差が生じる理由は? 転送スループットや転送遅延を改善する方法は?
Lagopusのスループット (ショートパケット) L2FWDとLagopusの転送遅延/ジッタ 転送スループットや転送遅延を改善する方法は? OVS-DPDK, Lagopus, L2FWD

32 目次 背景 DPDK 仮想スイッチ 性能評価(基礎) 性能評価(応用) まとめ 性能評価(応用)

33 性能向上への道 上級 中級 初級 CPUコアの割り当て方 パケットバッチングの落とし穴 マルチスレッド/マルチキュー
(for Lagopus) 上級 パケットバッチングの落とし穴 (for Lagopus, L2FWD) 中級 マルチスレッド/マルチキュー (for All) 初級

34 並列化によってポート単位の転送性能を向上させる
[初級編] マルチスレッド/マルチキュー 並列化によってポート単位の転送性能を向上させる PMD スレッド C0 C1 C2 C3 Rx #0 #1 #2 #3 NIC Dispatcher OVS-DPDK (L3/L4) Lagopus (L3) Hash function

35 [初級編] 並列化の効果 マルチスレッド/マルチキューによって性能がスケール 5PMD(5q)で理論値相当の性能に到達 (40GbEの場合)
OVS-DPDKの転送スループット (複数フロー, 64B) 性能がスケール 並列化の効果が 出ていない マルチスレッド/マルチキューによって性能がスケール 5PMD(5q)で理論値相当の性能に到達 (40GbEの場合)

36 DPDKとアプリ内で二重にバッチング処理を行っている
[中級編] パケットバッチングの落とし穴 DPDKとアプリ内で二重にバッチング処理を行っている Lagopus/L2FWD vSW Pkt Pkt 更にバッチング DPDK Pkt バッチング Rx Tx NIC NIC

37 [中級編] L2FWDの場合 パケットの送信時にバッファリング処理を行っている rte_eth_tx_buffer
送信前にバッファリング 指定された個数分 (32) rte_eth_tx_burst (OVS/Lagopus) 処理中のパケットをまとめて送信 パケット数は任意 rte_eth_tx_burst関数を使ってみる

38 [中級編] L2FWDの改善結果 転送スループット 転送遅延/ジッタ 転送スループットは変化なし 遅延/ジッタは大幅に改善

39 Ringの読み書き時にバースト処理を行っている
[中級編] Lagopusの場合 Ringの読み書き時にバースト処理を行っている R W R W R W Rx Rx スレッド Ring Worker スレッド Ring Tx スレッド Tx 144個単位で読み書き DPDKに合わせて32個単位に変更

40 [中級編] Lagopusの改善結果 転送スループット 転送遅延/ジッタ スループットが大幅に改善 遅延/ジッタは変化なし
(読み書き単位を32に変更) スループットが大幅に改善 遅延/ジッタは変化なし

41 [中級編] 転送スループットが向上した理由
src/dataplane/dpdk/dpdk_io.c (app_lcore_io_tx関数) パケット数 (Default: 144) 実際の数 送れなかった分を 全て破棄 毎回112個のパケットを破棄! 32個単位で送信すれば破棄されない

42 どのようにCPUコアを割り当てるべきか?
集中? 分散? バランス? Tx スレッド Worker スレッド Rx スレッド Core

43 [上級編] 割り当てパターン一覧 C0 C1 C2 C3 C4 C5 C6 C7 デフォルトモデル C0 C1 C2 C3 C4 C5 C6
Rx W Tx Com C0 C1 C2 C3 C4 C5 C6 C7 I/O共存モデル W Tx Com Rx C0 C1 C2 C3 C4 C5 C6 C7 擬似Run-to-Completionモデル W Tx Com Rx C0 C1 C2 C3 C4 C5 C6 C7 擬似Rx/Worker共存モデル Rx W Tx Com C0 C1 C2 C3 C4 C5 C6 C7 擬似Tx/Worker共存モデル Rx W Tx Com C0 C1 C2 C3 C4 C5 C6 C7 擬似I/O共存モデル Rx W Tx Com

44 RxとTxを同一コアに割り当てると速い!
[上級編] 各パターンにおける転送性能 RxとTxを同一コアに割り当てると速い!

45 Lagopus/DPDKの特性を考慮すると・・・
[上級編] 考察 Rx/Tx処理を別々のコアで実行するとオーバヘッドが大きい Lagopus/DPDKの特性を考慮すると・・・ Mbufの取得と解放が別々のコアで行われる Mempoolキャッシュが活用されない Mempoolで競合が発生!

46 [上級編] Mempoolキャッシュの利用状況
デフォルトモデル I/O共存モデル src/dpdk/lib/librte_mempool/rte_mempool.h (__mempool_get_bulk関数) キャッシュ数が不十分 Mempoolから補填 Mempoolキャッシュ からMbufを割り当て デフォルトモデルでは 頻繁にキャッシュを補填

47 [上級編] Mempoolキャッシュの影響
I/O共存モデルだとMempoolキャッシュを有効活用できる

48 [上級編] Lagopusの性能向上まとめ
転送スループット (Intel XL710, UDPシングルフロー, 64 B) DPDKの使い方を変更するだけで性能が7.5倍 転送遅延/ジッタは改善されず

49 目次 背景 DPDK 仮想スイッチ 性能評価(基礎) 性能評価(応用) まとめ まとめ

50 まとめ DPDKは次世代ネットワーク処理フレームワークの要 DPDKのアーキテクチャやAPIを正しく理解することで
さらなる性能を引き出すことができる


Download ppt "[招待講演] オープンソース 仮想スイッチの実装に見る DPDKの使用方法と 性能への影響"

Similar presentations


Ads by Google