SlideShare a Scribd company logo
DPDK QoS
May 17, 2015
Masaru OKI @masaru0714
● Linux上で動く、高速なパケットI/O処理を実現するためのライブラリ。
○ C言語で書かれている。C++からも呼び出し可能。
○ 特定のEthrenetポートを「DPDK専用」に切り替えて送受信する。
○ 特定のCPU(コア/スレッド)を「DPDK専用」として動作させる。
○ 受信パケットの単純転送で、10GbEワイヤーレートが出せる。
○ メモリープール管理やロックレスリングバッファなどの機能も提供。
○ ネットワークスタックは含まない。
● Intelが開発し、現在はhttp://dpdk.org/ にて開発が続いている。
● 2015年5月時点での最新バージョンはv2.0.0
● BSD Licenseで公開されている。
About DPDK
main() {
rte_mbuf *array[size]; /* パケット受信用バッファ */
init(); /* もろもろ初期化 */
for (;;) {
rte_eth_rx_burst(0, 0, array, size); /* API: portid 0のパケットを受信 */
rte_eth_tx_burst(1, 0, array, size); /* API: パケットをportid 1に送信 */
}
}
「パケットを受信」「データをパケットとして送信」がAPIになっているので呼び出す。
複数ポートを処理する場合はこれらを並べるか、スレッドを分けて並列に動かす。
DPDKのプログラム
QoS: Quality of Service (サービス品質)
通信パケットをすべて均等に扱うのではなく、種類や宛先、通信量等の
種類により流量を加減したり優先度を変えるなど、通信内容にに対して
要求される通信品質を適切に確保する技術および実装。
DPDKで提供されているQoSの実装は2つある。
● qos_meter: メータリング(パケットを流量によって3段階に色分けする)
● qos_sched: スケジューリング(優先度等によるパケットの並べ替え)
DPDKのQoS
RFCに基づく2種類のメータリングAPIが用意されている。
● RFC2697 srtcm (Single Rate Three Color Meter)
● RFC2698 trtcm (Two Rate Three Color Meter)
使い方
経過時間(Time Stamp Counterの値)とともにパケットをパラメータに与え
てrte_meter APIを呼び出すと、3種類のcolorのどれに相当するかが返っ
てくる。(パラメータ詳細はRFCやDPDKのドキュメントを参照)
○ GREEN
○ YELLOW
○ RED
ユーザプログラムはcolorに応じて処理をする。(REDはdropするなど)
DPDK QoS (meter)
階層化スケジューラが用意されている。
● あらかじめEthernetポートを論理的に分割しておく。
● 分割単位は階層化されている。
● ユーザプログラムは受信パケットに対して分割単位の情報を書き込む
● スケジューラは分割単位の優先度などに応じてパケットを並べ替える。
● スケジューラはキューを持っていて、あふれたパケットはdropされる。
階層は下記となっている。
1. Port
2. Subport
3. Pipe
4. Traffic Class
5. Queue
DPDK QoS (sched)
● Port
○ Ethernetポート。複数ポートの優先順位は均等。
● Subport
○ Portを単数あるいは複数に分割したもの。
○ それぞれ転送レートを指定できる。
● Pipe
○ Subportを単数あるいは複数に分割したもの。帯域は等分される。
● Traffic class
○ Pipeを流れるパケットを優先度別にクラスわけする。4クラス固定。
● Queue
○ Pipeを流れるパケットをキューイングする最小単位。
○ Traffic classごとに4固定。Weighted Round Robin(WRR)でdequeueされる。
QoS(sched)の各階層
4キュー
4クラス
図にするとこう
sched_port
subport 0 subport 1 subport 2
pipe 2pipe 1pipe 0 pipe 0 pipe 1
tc0 tc1 tc2 tc3
tc0 tc1 tc2 tc3
tc0 tc1 tc2 tc3
tc0 tc1 tc2 tc3
tc0 tc1 tc2 tc3
tc0 tc1 tc2 tc3q0 q1 q2 q3
q0 q1 q2 q3
q0 q1 q2 q3
q0 q1 q2 q3
q0 q1 q2 q3
q0 q1 q2 q3
q0 q1 q2 q3
q0 q1 q2 q3
任意の帯域
pipe 1pipe 0subportを等分割
1. 準備
1.1. rte_eth_dev_configure()等でポートの使用準備
1.2. rte_sched_port_config()
1.3. rte_sched_subport_config()
1.4. rte_sched_pipe_config()
2. 送受信
2.1. rte_eth_rx_burst()でパケット受信
2.2. rte_sched_port_pkt_write()
2.3. rte_sched_port_enqueue()
2.4. rte_sched_port_dequeue()
2.5. rte_eth_tx_burst()でパケット送信
使い方
1. rte_sched_*_config
あらかじめスケジューリングの階層パラメータを設定
2. rte_sched_port_pkt_write
パケットをどのキューに入れるか情報を書き込み
3. rte_sched_port_enqueue
キューイングすると
4. rte_sched_port_dequeue
スケジューリング設定に応じた順序でパケットを取り出せる。
大雑把な解説
4キュー
4クラス
rte_sched_port_pkt_write()
subport 0 subport 1 subport 2
pipe 2pipe 1pipe 0 pipe 0 pipe 1
tc0 tc1 tc2 tc3
tc0 tc1 tc2 tc3
tc0 tc1 tc2 tc3
tc0 tc1 tc2 tc3
tc0 tc1 tc2 tc3
tc0 tc1 tc2 tc3q0 q1 q2 q3
q0 q1 q2 q3
q0 q1 q2 q3
q0 q1 q2 q3
q0 q1 q2 q3
q0 q1 q2 q3
q0 q1 q2 q3
q0 q1 q2 q3
任意の帯域
pipe 1pipe 0subportを等分割
パケットをどのキューに書き込むかを具体的に指定。
sched_port

More Related Content

PDF
BGP Unnumbered で遊んでみた
PDF
NETCONFとYANGの話
PPTX
FD.io VPP事始め
PDF
CXL_説明_公開用.pdf
PPTX
AVX-512(フォーマット)詳解
PDF
知っているようで知らないNeutron -仮想ルータの冗長と分散- - OpenStack最新情報セミナー 2016年3月
PPTX
VPP事始め
PDF
Multi Chassis LAG for Cloud builders
BGP Unnumbered で遊んでみた
NETCONFとYANGの話
FD.io VPP事始め
CXL_説明_公開用.pdf
AVX-512(フォーマット)詳解
知っているようで知らないNeutron -仮想ルータの冗長と分散- - OpenStack最新情報セミナー 2016年3月
VPP事始め
Multi Chassis LAG for Cloud builders

What's hot (20)

PDF
TCAMのしくみ
PDF
RHEL7/CentOS7 NetworkManager徹底入門
ODP
Dpdk performance
PDF
Dpdk pmd
PPT
整数列圧縮
PDF
大規模DCのネットワークデザイン
PDF
Ethernetの受信処理
PDF
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
ODP
eBPF maps 101
PDF
PostgreSQL13でのレプリケーション関連の改善について(第14回PostgreSQLアンカンファレンス@オンライン)
PDF
AbemaTVの動画配信を支えるサーバーサイドシステム
PPTX
「おうちクラウド」が今熱い!
PDF
DPDKによる高速コンテナネットワーキング
PPTX
Linux Network Stack
PDF
Building Network Functions with eBPF & BCC
PDF
AS45679 on FreeBSD
PDF
OSC2011 Tokyo/Fall 濃いバナ(virtio)
PDF
Magnum IO GPUDirect Storage 最新情報
PDF
12 分くらいで知るLuaVM
PPTX
冬のLock free祭り safe
TCAMのしくみ
RHEL7/CentOS7 NetworkManager徹底入門
Dpdk performance
Dpdk pmd
整数列圧縮
大規模DCのネットワークデザイン
Ethernetの受信処理
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
eBPF maps 101
PostgreSQL13でのレプリケーション関連の改善について(第14回PostgreSQLアンカンファレンス@オンライン)
AbemaTVの動画配信を支えるサーバーサイドシステム
「おうちクラウド」が今熱い!
DPDKによる高速コンテナネットワーキング
Linux Network Stack
Building Network Functions with eBPF & BCC
AS45679 on FreeBSD
OSC2011 Tokyo/Fall 濃いバナ(virtio)
Magnum IO GPUDirect Storage 最新情報
12 分くらいで知るLuaVM
冬のLock free祭り safe
Ad

Viewers also liked (20)

PDF
Dpdk環境の話
PPTX
apps of nanotech
PDF
Cuaderno caligrafia anaya 2
PPT
8 Campaign Tactics if I am a 2016 Presidentiable
PPT
8 Colorful Ideas for My Country (The Filipino Youth)
PPTX
Thailand (Socio-Cultural Setting)
PPTX
Myanmar: Political Setting
PPTX
Vietnam: Socio-Cultural Setting
PPTX
PPTX
PDF
Lagopus on small arm board
PPTX
Singapore: Political Setting
PPT
Philippine Civil War Theories
PPTX
The One Who Deserves (Silent Protest)
PPTX
cgfh
PPTX
Dracula presentation with answers ok
PPTX
Thailand (Political Setting)
PPT
PARADIGMAS URBANOS. Guía sitio 2016
PPTX
Indonesia: Socio-Cultural Setting
DOCX
Bao cao thuc_tap
Dpdk環境の話
apps of nanotech
Cuaderno caligrafia anaya 2
8 Campaign Tactics if I am a 2016 Presidentiable
8 Colorful Ideas for My Country (The Filipino Youth)
Thailand (Socio-Cultural Setting)
Myanmar: Political Setting
Vietnam: Socio-Cultural Setting
Lagopus on small arm board
Singapore: Political Setting
Philippine Civil War Theories
The One Who Deserves (Silent Protest)
cgfh
Dracula presentation with answers ok
Thailand (Political Setting)
PARADIGMAS URBANOS. Guía sitio 2016
Indonesia: Socio-Cultural Setting
Bao cao thuc_tap
Ad

Similar to DPDK QoS (20)

PDF
DPDKを用いたネットワークスタック,高性能通信基盤開発
PDF
DPDKを拡張してみた話し
PPT
20140310 fpgax
PDF
about Eucalyptus (20121026) NII
PDF
Fpga local 20130322
PPTX
Cloud Foundry as Containerized Services - Cloud Foundry Days Tokyo 2016
PDF
OpenStack Kilo with 6Wind VA High-Performance Networking Using DPDK - OpenSta...
PDF
近頃のDockerネットワーク
PDF
CEDEC 2025 『ゲームにおけるリアルタイム通信への QUIC導入事例の紹介』
PDF
Docker技術情報アップデート v1.9 ネットワークとオーケストレーション
PDF
FPGA+SoC+Linux実践勉強会資料
PDF
retrobsd-2012-JUL-07 at JNUG BSD BoF
PDF
Bossan dentoo
PDF
GPUを用いたSSLリバースプロキシの実装についての論文を読んだ
PDF
TCP connectionの保存と復元
PDF
High speed-pc-router 201505
PDF
Hydrogen → Helium での Linux kernel の違い
PDF
Lagopus + DockerのDPDK接続
PDF
Lagopus Router v19.07.1
PDF
Apache cloudstack4.0インストール
DPDKを用いたネットワークスタック,高性能通信基盤開発
DPDKを拡張してみた話し
20140310 fpgax
about Eucalyptus (20121026) NII
Fpga local 20130322
Cloud Foundry as Containerized Services - Cloud Foundry Days Tokyo 2016
OpenStack Kilo with 6Wind VA High-Performance Networking Using DPDK - OpenSta...
近頃のDockerネットワーク
CEDEC 2025 『ゲームにおけるリアルタイム通信への QUIC導入事例の紹介』
Docker技術情報アップデート v1.9 ネットワークとオーケストレーション
FPGA+SoC+Linux実践勉強会資料
retrobsd-2012-JUL-07 at JNUG BSD BoF
Bossan dentoo
GPUを用いたSSLリバースプロキシの実装についての論文を読んだ
TCP connectionの保存と復元
High speed-pc-router 201505
Hydrogen → Helium での Linux kernel の違い
Lagopus + DockerのDPDK接続
Lagopus Router v19.07.1
Apache cloudstack4.0インストール

More from Masaru Oki (20)

PDF
NetBSD移植の昔話
PDF
Rust-DPDK
PDF
Rust-DPDK
PDF
Lagopusとvagrant
PDF
OpenFlowでいろんなプロトコルを 話そうとするとどうなるか
PDF
今よりも少し(?)昔、 Windowsを作ろうとした話
PDF
Onieで遊んでみようとした話
PDF
GPD WINが来た!
PDF
新生Lagopus2017(仮称)
PDF
Lagopus as open flow hybrid switch 実践編
PDF
LagopusでPPPoEを使えるか考えてみた件
PDF
Lagopus どれだけ速いのか
PDF
Lagopus 0.2.7
PDF
Ryu+Lagopusで OpenFlowの動きを見てみよう
PDF
Lagopus match improvements
PDF
Lagopus 0.2.4
PDF
Open flow tunnel extension on lagopus vswitch
PDF
Lagopus as open flow hybrid switch
PDF
Net bsd advent calendar 2015 bpf
PDF
Using rump on NetBSD 7.0
NetBSD移植の昔話
Rust-DPDK
Rust-DPDK
Lagopusとvagrant
OpenFlowでいろんなプロトコルを 話そうとするとどうなるか
今よりも少し(?)昔、 Windowsを作ろうとした話
Onieで遊んでみようとした話
GPD WINが来た!
新生Lagopus2017(仮称)
Lagopus as open flow hybrid switch 実践編
LagopusでPPPoEを使えるか考えてみた件
Lagopus どれだけ速いのか
Lagopus 0.2.7
Ryu+Lagopusで OpenFlowの動きを見てみよう
Lagopus match improvements
Lagopus 0.2.4
Open flow tunnel extension on lagopus vswitch
Lagopus as open flow hybrid switch
Net bsd advent calendar 2015 bpf
Using rump on NetBSD 7.0

DPDK QoS

  • 1. DPDK QoS May 17, 2015 Masaru OKI @masaru0714
  • 2. ● Linux上で動く、高速なパケットI/O処理を実現するためのライブラリ。 ○ C言語で書かれている。C++からも呼び出し可能。 ○ 特定のEthrenetポートを「DPDK専用」に切り替えて送受信する。 ○ 特定のCPU(コア/スレッド)を「DPDK専用」として動作させる。 ○ 受信パケットの単純転送で、10GbEワイヤーレートが出せる。 ○ メモリープール管理やロックレスリングバッファなどの機能も提供。 ○ ネットワークスタックは含まない。 ● Intelが開発し、現在はhttp://dpdk.org/ にて開発が続いている。 ● 2015年5月時点での最新バージョンはv2.0.0 ● BSD Licenseで公開されている。 About DPDK
  • 3. main() { rte_mbuf *array[size]; /* パケット受信用バッファ */ init(); /* もろもろ初期化 */ for (;;) { rte_eth_rx_burst(0, 0, array, size); /* API: portid 0のパケットを受信 */ rte_eth_tx_burst(1, 0, array, size); /* API: パケットをportid 1に送信 */ } } 「パケットを受信」「データをパケットとして送信」がAPIになっているので呼び出す。 複数ポートを処理する場合はこれらを並べるか、スレッドを分けて並列に動かす。 DPDKのプログラム
  • 4. QoS: Quality of Service (サービス品質) 通信パケットをすべて均等に扱うのではなく、種類や宛先、通信量等の 種類により流量を加減したり優先度を変えるなど、通信内容にに対して 要求される通信品質を適切に確保する技術および実装。 DPDKで提供されているQoSの実装は2つある。 ● qos_meter: メータリング(パケットを流量によって3段階に色分けする) ● qos_sched: スケジューリング(優先度等によるパケットの並べ替え) DPDKのQoS
  • 5. RFCに基づく2種類のメータリングAPIが用意されている。 ● RFC2697 srtcm (Single Rate Three Color Meter) ● RFC2698 trtcm (Two Rate Three Color Meter) 使い方 経過時間(Time Stamp Counterの値)とともにパケットをパラメータに与え てrte_meter APIを呼び出すと、3種類のcolorのどれに相当するかが返っ てくる。(パラメータ詳細はRFCやDPDKのドキュメントを参照) ○ GREEN ○ YELLOW ○ RED ユーザプログラムはcolorに応じて処理をする。(REDはdropするなど) DPDK QoS (meter)
  • 6. 階層化スケジューラが用意されている。 ● あらかじめEthernetポートを論理的に分割しておく。 ● 分割単位は階層化されている。 ● ユーザプログラムは受信パケットに対して分割単位の情報を書き込む ● スケジューラは分割単位の優先度などに応じてパケットを並べ替える。 ● スケジューラはキューを持っていて、あふれたパケットはdropされる。 階層は下記となっている。 1. Port 2. Subport 3. Pipe 4. Traffic Class 5. Queue DPDK QoS (sched)
  • 7. ● Port ○ Ethernetポート。複数ポートの優先順位は均等。 ● Subport ○ Portを単数あるいは複数に分割したもの。 ○ それぞれ転送レートを指定できる。 ● Pipe ○ Subportを単数あるいは複数に分割したもの。帯域は等分される。 ● Traffic class ○ Pipeを流れるパケットを優先度別にクラスわけする。4クラス固定。 ● Queue ○ Pipeを流れるパケットをキューイングする最小単位。 ○ Traffic classごとに4固定。Weighted Round Robin(WRR)でdequeueされる。 QoS(sched)の各階層
  • 8. 4キュー 4クラス 図にするとこう sched_port subport 0 subport 1 subport 2 pipe 2pipe 1pipe 0 pipe 0 pipe 1 tc0 tc1 tc2 tc3 tc0 tc1 tc2 tc3 tc0 tc1 tc2 tc3 tc0 tc1 tc2 tc3 tc0 tc1 tc2 tc3 tc0 tc1 tc2 tc3q0 q1 q2 q3 q0 q1 q2 q3 q0 q1 q2 q3 q0 q1 q2 q3 q0 q1 q2 q3 q0 q1 q2 q3 q0 q1 q2 q3 q0 q1 q2 q3 任意の帯域 pipe 1pipe 0subportを等分割
  • 9. 1. 準備 1.1. rte_eth_dev_configure()等でポートの使用準備 1.2. rte_sched_port_config() 1.3. rte_sched_subport_config() 1.4. rte_sched_pipe_config() 2. 送受信 2.1. rte_eth_rx_burst()でパケット受信 2.2. rte_sched_port_pkt_write() 2.3. rte_sched_port_enqueue() 2.4. rte_sched_port_dequeue() 2.5. rte_eth_tx_burst()でパケット送信 使い方
  • 10. 1. rte_sched_*_config あらかじめスケジューリングの階層パラメータを設定 2. rte_sched_port_pkt_write パケットをどのキューに入れるか情報を書き込み 3. rte_sched_port_enqueue キューイングすると 4. rte_sched_port_dequeue スケジューリング設定に応じた順序でパケットを取り出せる。 大雑把な解説
  • 11. 4キュー 4クラス rte_sched_port_pkt_write() subport 0 subport 1 subport 2 pipe 2pipe 1pipe 0 pipe 0 pipe 1 tc0 tc1 tc2 tc3 tc0 tc1 tc2 tc3 tc0 tc1 tc2 tc3 tc0 tc1 tc2 tc3 tc0 tc1 tc2 tc3 tc0 tc1 tc2 tc3q0 q1 q2 q3 q0 q1 q2 q3 q0 q1 q2 q3 q0 q1 q2 q3 q0 q1 q2 q3 q0 q1 q2 q3 q0 q1 q2 q3 q0 q1 q2 q3 任意の帯域 pipe 1pipe 0subportを等分割 パケットをどのキューに書き込むかを具体的に指定。 sched_port