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

Slides:



Advertisements
Similar presentations
研究目標 研究目標 提案手法 仮想ネットワーク上でのブロードキャスト、マルチキャスト通信の実現
Advertisements

Linuxを組み込んだマイコンによる 遠隔監視システムの開発
情報理工学系研究科 コンピュータ科学専攻 上嶋裕樹
Webプロキシサーバにおける 動的資源管理方式の提案と実装
最新ファイルの提供を保証する代理FTPサーバの開発
セキュリティ機構のオフロードを考慮した仮想マシンへの動的メモリ割当
榮樂 英樹 LilyVM と仮想化技術 榮樂 英樹
IaaS 仮想マシン(VM)をネットワーク経由で提供 負荷に応じてVM数や性能を変更できる ハードウェアの導入・管理・維持コストの削減
全体ミーティング (4/25) 村田雅之.
分散コンピューティング環境上の Webリンク収集システムの実装
Androidの 画面描画機構を チューニングする!
仮想マシンの並列処理性能に対するCPU割り当ての影響の評価
研究背景 クラウドコンピューティングサービスの普及 マルチテナント方式を採用 データセンタの需要が増加
OSが乗っ取られた場合にも機能するファイルアクセス制御システム
発表の流れ 研究背景 マルチテナント型データセンタ 関連研究 IPマルチキャスト ユニキャスト変換手法 提案手法 性能評価.
TranSwitch:ネットワークフロー毎における最適な TCP への動的切替機構
研究背景 クラウドコンピューティングサービスの普及 ユーザ数の増加に伴う問題 マルチテナント方式の採用 データセンタの需要が増加
ネストした仮想化を用いた VMの安全な帯域外リモート管理
ネットワーク性能に合わせた 分散遺伝的アルゴリズムにおける 最適な移住についての検討
サーバ構成と運用 ここから私林がサーバ構成と運用について話します.
Ibaraki Univ. Dept of Electrical & Electronic Eng.
(B2) 親: minami, kazuki 多様な認証機器に対応する 認証システム (B2) 親: minami, kazuki.
ユーザ毎にカスタマイズ可能な Web アプリケーション用のフレームワークの実装
サーバ負荷分散におけるOpenFlowを用いた省電力法
Copyright Yumiko OHTAKE
型付きアセンブリ言語を用いた安全なカーネル拡張
過負荷時の分散ソフトウェアの 性能劣化を改善する スケジューリングの提案
オペレーティングシステムJ/K (実時間処理システム)
特定ユーザーのみが利用可能な仮想プライベート・ネットワーク
2009年度卒業論文発表 CDNコンテンツサーバの動的負荷分散
VM専用仮想メモリとの連携による VMマイグレーションの高速化
IaaS型クラウドにおける インスタンス構成の動的最適化手法
リモートホストの異常を検知するための GPUとの直接通信機構
卒論進捗発表(1) 10/ 山崎孝裕.
仮想メモリを用いた VMマイグレーションの高速化
複数ホストに分割されたメモリを用いる仮想マシンの監視機構
仮想計算機を用いたサーバ統合に おける高速なリブートリカバリ
各種ルータに対応する P2P通信環境に関する研究
クラウドにおけるIntel SGXを用いた VMの安全な監視機構
DPDKの処理モデルに基づく NFVノード可視化機構の開発 ー負荷計測手法の一検討ー
ATLAS実験イベントビルダへの 品質保証機能の適用と性能評価
J-PARC E16実験におけるDAQ-Middleware を用いたDAQソフトウェアの開発
未使用メモリに着目した 複数ホストにまたがる 仮想マシンの高速化
Intel SGXを用いた仮想マシンの 安全な監視機構
仮想ネットワークを考慮した SoftIRQ制御によるCPU割当ての手法
VMMのソフトウェア若化を考慮した クラスタ性能の比較
ネットワークをシンプルにする エンタープライズ NFV
VMが利用可能なCPU数の変化に対応した 並列アプリケーション実行の最適化
Virtualizing a Multiprocessor Machine on a Network of Computers
仮想環境を用いた 侵入検知システムの安全な構成法
Peer-to-Peerシステムにおける動的な木構造の生成による検索の高速化
仮想マシンの監視を継続可能なマイグレーション機構
福岡工業大学 情報工学部 情報工学科 種田研究室 于 聡
仮想マシンとホスト間の通信に着目した 段階的なパケット集約によるNFV効率化手法
全体ミーティング (5/23) 村田雅之.
仮想マシンに対する 高いサービス可用性を実現する パケットフィルタリング
Mondriaan Memory Protection の調査
VMリダイレクト攻撃を防ぐための 安全なリモート管理機構
GbEにおける TCP/IP の研究について
理工学部情報学科 情報論理工学研究室 延山 周平
ゼロコピー・マイグレーションを 用いた軽量なソフトウェア若化手法
強制パススルー機構を用いた VMの安全な帯域外リモート管理
異種セグメント端末による 分散型仮想LAN構築機構の設計と実装
IPmigrate:複数ホストに分割されたVMの マイグレーション手法
複数ホストにまたがるVMの 高速かつ柔軟な 部分マイグレーション
特定ユーザーのみが利用可能な仮想プライベート・ネットワーク
複数ホストにまたがるVMの メモリ使用状況に着目した高速化
MPIを用いた 並列処理 情報論理工学研究室 06‐1‐037‐0246 杉所 拓也.
ソケットの拡張によるJava用分散ミドルウエアの高信頼化
強制パススルー機構を用いた VMの安全な帯域外リモート管理
Presentation transcript:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

パケットバッチング 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個)

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

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

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

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

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

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

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

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

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

評価概要 目的: 基本構成での性能を評価 評価項目 評価対象 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.

評価環境 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コア)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

[上級編] 割り当てパターン一覧 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

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

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

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

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

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

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

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