SlideShare une entreprise Scribd logo
1  sur  47
Télécharger pour lire hors ligne
Linux におけるカーネルパケット転送
浅間 正和 @ 有限会社 銀座堂
はじめまして?
• 新潟県三条市にある地域 ISP 有限会社銀座堂でサーバ管理やネット
ワーク管理をしています
• 弊社では上流 ISP(OCN さんと新潟県内の ISP) や Echigo-IX(新潟県
内の地域 IX) との接続に Linux(Vyatta Core) を使って BGP 接続を
しています
• 2010 年頃から Linux カーネルのパケット転送処理について調べ
InternetWeek で発表したりしていました
• 趣味では IETF で標準化が進められている MAP(Mapping of
Address and Port with Encapsulation) というプロトコルを Linux
カーネルに実装し Vyatta Core に組み込み ASAMAP という名前で
オープンソースで公開したりしています
2
ASAMAP?
• IPv4 over IPv6 技術のうち DS-Lite/464XLAT/MAP-E/MAP-T の
キャリア側装置と顧客側装置の両方に対応
• IPv4 over IPv6 技術とはキャリア内ネットワークを極力 IPv6 のみで
構築しつつ顧客ネットワークに IPv4 サービスも提供するための技術
• IPv4 ヘッダを IPv6 に書き換えるトランスレーションを用いる方法
(464XLAT/MAP-T) と IPv4 パケットを IPv6 でカプセル化する方法
(DS-Lite/MAP-E) の 2 種類に分けられ
• さらにキャリア側装置に NAPT 機能を持つ方法 (DS-Lite/464XLAT)
と持たない方法 (MAP-E/MAP-T) の 2 種類に分けられる
3
MAP 対応 Vyatta (ASAMAP) 仮置き場
http://enog.jp/ masakazu/vyatta/map/
ASAMAP 開発秘話
http://www.slideshare.net/m-asama/asamap
目次
• Receive Livelock と Linux NAPI
• 大量のパケット受信時の問題とそれに対して Linux カーネルが取っ
た対策
• 参考) ハードウェアによる負荷低減支援機能
• パケット転送の並列処理と RSS (Receive Side Scaling)
• パケット転送処理を複数の CPU コアで並列処理するための Linux
カーネルの仕組み
• 参考) RSS と NUMA
• 割り込み問題再び
• 参考) Intel DPDK
4
割り込みモデルとポーリング・モデル
5
NIC
CPU
① NIC が受信したパケットを

受信バッファに書き込む
② NIC が割り込みで CPU に

通知
③ CPU は実行中のタスクの

状態を保存し割り込み

ハンドラを実行
② CPU は定期的に受信バッファ

を確認し新しいパケットが

届いていたら処理する
① 受信したパケットを受信バッ
ファに書き込む
NIC
CPU
割り込みモデル ポーリング・モデル
割り込みモデルとポーリング・モデル
• 割り込みモデル
• メリット
• パケットの受信を CPU がすぐに気づくことが出来るので遅延が
小さい
• デメリット
• 割り込みによって生じるコンテキスト・スイッチは非常に重い処
理なため頻繁にパケット送受信を行う環境では性能劣化を招く
❖ Receive Livelock
• ポーリング・モデル
• メリット
• コンテキスト・スイッチによる処理コストはかからない
• デメリット
• ポーリング間隔のどこでパケットを受信するかによって遅延が
変動し全体としても遅延が大きくなる
6
Receive Livelock
• デッド・ロックしているわけでもないのに割り込みが れてしまうこ
とで割り込みハンドラしか実行していないような状態になること
• 割り込み処理はかなり高い優先度を割り当てられているためパケット
受信の際に何も考えず割り込みを発生させると他の処理を一切出来な
いような状態になる
7
※1) Eliminating Receive Livelock in an Interrupt-Driven Kernel
http://www.stanford.edu/class/cs240/readings/p217-mogul.pdf
1Gbps の Ethernet で 64 バイトのフレームを

ワイヤレートで流した際に発生する割り込みの回数

毎秒 1,488,100 回
(割り込み発生間隔 672 ナノ秒)
最近の Linux のタイマー割り込みの回数
毎秒 250 回
Linux NAPI
• 割り込みモデルとポーリング・モデルのいいとこ取り
• 基本的には割り込みモデルで動作
• パケットを受信した際に割り込みを無効化し処理が完了するまではポー
リング・モードで動作
• 処理すべきパケットの処理が完了したら割り込みを有効化
• 2002 年 11 月にリリースされた Linux カーネル 2.4.20 の tg3 ドラ
イバにおいて実装され順次その他の NIC ドライバでも採用
8
メモリ
Linux NAPI
9
CPU#2CPU#1
NIC#1 NIC#2
net_device 構造体他@NIC#1
softnet_data 構造体@CPU#1
net_device 構造体他@NIC#2
softnet_data 構造体@CPU#2
!
TX
!
RX
!
TX
!
RX
メモリ
Linux NAPI
10
CPU#2CPU#1
NIC#1 NIC#2
net_device 構造体他@NIC#1
softnet_data 構造体@CPU#1
net_device 構造体他@NIC#2
softnet_data 構造体@CPU#2
!
TX
!
RX
!
TX
!
RX
softnet_data 構造体は ksoftirqd
カーネル・スレッドがネットワーク絡
みの処理を行う際に必要とするデータ
をまとめた構造体
ksoftirqd は CPU の数だけ存在するの
で softnet_data 構造体も CPU の数
だけ存在する
メモリ
Linux NAPI
11
CPU#2CPU#1
NIC#1 NIC#2
net_device 構造体他@NIC#1
softnet_data 構造体@CPU#1
net_device 構造体他@NIC#2
softnet_data 構造体@CPU#2
!
TX
!
RX
!
TX
!
RX
net_device 構造体は NIC 1 つにつき
1 つ存在する構造体
通常はその直後に NIC ドライバ毎に異
なる構造体がくっついていて (例えば
e1000 の場合は e1000_adapter) そ
の中には NAPI の設定のための
napi_struct 構造体が含まれる
メモリ
Linux NAPI
12
CPU#2CPU#1
NIC#1 NIC#2
net_device 構造体他@NIC#1
softnet_data 構造体@CPU#1
net_device 構造体他@NIC#2
softnet_data 構造体@CPU#2
!
TX
!
RX
!
TX
!
RXNIC は受信 (RX) 用の受信バッファと
送信 (TX) 用の送信バッファを持つ
受信バッファと送信バッファは一般的
にリング構造をとっておりそれぞれ
NIC と CPU の間で排他制御無しで
データのやり取りを行う
メモリ
Linux NAPI
13
CPU#2CPU#1
NIC#1 NIC#2
net_device 構造体他@NIC#1
softnet_data 構造体@CPU#1
net_device 構造体他@NIC#2
softnet_data 構造体@CPU#2
!
TX
!
RX
!
TX
!
RX
パケット
(1) パケットを受信した
NIC#1 はパケットを受信
バッファに書き込む
メモリ
Linux NAPI
14
CPU#2CPU#1
NIC#1 NIC#2
net_device 構造体他@NIC#1
softnet_data 構造体@CPU#1
net_device 構造体他@NIC#2
softnet_data 構造体@CPU#2
!
TX
!
RX
!
TX
!
RX
パケット
(2) NIC#1 は割り込みを使って
CPU#1 に通知
メモリ
Linux NAPI
15
CPU#2CPU#1
NIC#1 NIC#2
net_device 構造体他@NIC#1
softnet_data 構造体@CPU#1
net_device 構造体他@NIC#2
softnet_data 構造体@CPU#2
!
TX
!
RX
!
TX
!
RX
パケット
(3) CPU#1 は実行中のタスクの
状態を保存し割り込みハンドラ
に移行する
メモリ
Linux NAPI
16
CPU#2CPU#1
NIC#1 NIC#2
net_device 構造体他@NIC#1
softnet_data 構造体@CPU#1
net_device 構造体他@NIC#2
softnet_data 構造体@CPU#2
!
TX
!
RX
!
TX
!
RX
パケット
(4) CPU#1 は NIC#1 の
割り込みを無効化
メモリ
Linux NAPI
17
CPU#2CPU#1
NIC#1 NIC#2
net_device 構造体他@NIC#1
softnet_data 構造体@CPU#1
net_device 構造体他@NIC#2
softnet_data 構造体@CPU#2
!
TX
!
RX
!
TX
!
RX
パケット
(5) softnet_data 構造体の poll_list
リストに NIC#1 の napi_struct 構
造体をリンクする
メモリ
Linux NAPI
18
CPU#2CPU#1
NIC#1 NIC#2
net_device 構造体他@NIC#1
softnet_data 構造体@CPU#1
net_device 構造体他@NIC#2
softnet_data 構造体@CPU#2
!
TX
!
RX
!
TX
!
RX
パケット
(6) 割り込みハンドラは終了しスケ
ジューラが呼び出され通常はそのま
ま ksoftirqd カーネル・スレッドに
処理が移る
メモリ
Linux NAPI
19
CPU#2CPU#1
NIC#1 NIC#2
net_device 構造体他@NIC#1
softnet_data 構造体@CPU#1
net_device 構造体他@NIC#2
softnet_data 構造体@CPU#2
!
TX
!
RX
!
TX
!
RX
パケット
(7) ksoftirqd は softnet_data 構造体
の poll_list にリンクされた
napi_struct 構造体の受信バッファか
らパケットを取り出し受信処理を行う
メモリ
Linux NAPI
20
CPU#2CPU#1
NIC#1 NIC#2
net_device 構造体他@NIC#1
softnet_data 構造体@CPU#1
net_device 構造体他@NIC#2
softnet_data 構造体@CPU#2
!
TX
!
RX
!
TX
!
RX
(8) 処理が終わったら NIC#1 の
割り込みを有効化する
ハードウェアによる負荷低減支援機能
• Ethernet Flow Control
• 一時的に対向装置 (Ethernet L2 スイッチ等) に送信をやめてもら
うことができる機能
• 自身の受信バッファがいっぱいになったときに対向装置に PAUSE
フレームを送信することで送信を一時的にやめるようお願いする
• NIC が対応している場合

ethtool -A ethX (options…)

で設定することができる
• Interrupt Coalescing (Interrupt Moderation)
• パケット受信時に NIC が割り込みを間引くことで OS の負担を低
減させる機能
• NIC が対応している場合

ethtool -C ethX (options…)

で設定することができる
21
Receive Side Scaling (RSS)
• 背景
• 最近のシステムでは CPU コアを複数持っているものが当たり前と
なっておりネットワークの処理もそれらで並列実行したい
• 仕組み
• NIC 側で複数のキューを持たせる
• パケットの受信時にヘッダ情報からキューを選択し対応する CPU
に割り込みする
• 同一フローのパケット (IP アドレスと TCP/UDP ポート番号が同
じパケット) は同じキューが選択されるためリオーダは生じない
• どの情報からキューを選択するかは変更可能
• 前提
• PCI-Express バスに接続された複数キューに対応した NIC
• PCI-Express で導入された MSI/MSI-X を用いて NIC から割り
込みのルーティングする必要があるため
22
Receive Side Scaling (RSS)
• 受信キューと割り込み番号の対応の確認
!
!
!
!
!
!
!
• 受信キューと割り込み先 CPU の対応付け
23
[root@linux ~]# cat /proc/interrupts
CPU0 CPU1
...
52: 0 0 PCI-MSI-edge p1p1-TxRx-0
53: 0 0 PCI-MSI-edge p1p1-TxRx-1
54: 0 0 PCI-MSI-edge p1p1
55: 0 0 PCI-MSI-edge p1p2-TxRx-0
56: 0 0 PCI-MSI-edge p1p2-TxRx-1
57: 0 0 PCI-MSI-edge p1p2
...
[root@linux ~]# echo 1 > /proc/irq/52/smp_affinity
[root@linux ~]# echo 2 > /proc/irq/53/smp_affinity
[root@linux ~]# echo 1 > /proc/irq/55/smp_affinity
[root@linux ~]# echo 2 > /proc/irq/56/smp_affinity
Receive Side Scaling (RSS)
• CPU の個数等の情報から自動的に IRQ の割り込み先を設定してくれ
る irqbalance というコマンドがある
• デーモンとして起動する場合は以下のように実行
!
• 一度だけ設定しデーモンとして起動させたくない場合は以下のように
実行
24
[root@linux ~]# irqbalance
[root@linux ~]# irqbalance --oneshot
メモリ
Receive Side Scaling (RSS)
25
CPU#2CPU#1
NIC#1 NIC#2
net_device 構造体他@NIC#1
softnet_data 構造体@CPU#1
net_device 構造体他@NIC#2
softnet_data 構造体@CPU#2
!
TX
!
RX
!
TX
!
RX
メモリ
Receive Side Scaling (RSS)
26
CPU#2CPU#1
NIC#1 NIC#2
net_device 構造体他@NIC#1
softnet_data 構造体@CPU#1
net_device 構造体他@NIC#2
softnet_data 構造体@CPU#2
TX
#1
TX
#2
RX
#1
RX
#2
TX
#1
TX
#2
RX
#1
RX
#2
メモリ
Receive Side Scaling (RSS)
27
CPU#2CPU#1
NIC#1 NIC#2
net_device 構造体他@NIC#1
softnet_data 構造体@CPU#1
net_device 構造体他@NIC#2
softnet_data 構造体@CPU#2
TX
#1
TX
#2
RX
#1
RX
#2
TX
#1
TX
#2
RX
#1
RX
#2
napi_struct 構造体はキューの数だけ
用意される
メモリ
Receive Side Scaling (RSS)
28
CPU#2CPU#1
NIC#1 NIC#2
net_device 構造体他@NIC#1
softnet_data 構造体@CPU#1
net_device 構造体他@NIC#2
softnet_data 構造体@CPU#2
TX
#1
TX
#2
RX
#1
RX
#2
TX
#1
TX
#2
RX
#1
RX
#2
パケット
(1) パケットを受信した NIC#1
は受信したパケットのヘッダ情報
からキューを決定しそのキューの
受信バッファに書き込む
メモリ
Receive Side Scaling (RSS)
29
CPU#2CPU#1
NIC#1 NIC#2
net_device 構造体他@NIC#1
softnet_data 構造体@CPU#1
net_device 構造体他@NIC#2
softnet_data 構造体@CPU#2
TX
#1
TX
#2
RX
#1
RX
#2
TX
#1
TX
#2
RX
#1
RX
#2
パケット
(2) NIC#1 は割り込みを使って
CPU#2 に通知
メモリ
Receive Side Scaling (RSS)
30
CPU#2CPU#1
NIC#1 NIC#2
net_device 構造体他@NIC#1
softnet_data 構造体@CPU#1
net_device 構造体他@NIC#2
softnet_data 構造体@CPU#2
TX
#1
TX
#2
RX
#1
RX
#2
TX
#1
TX
#2
RX
#1
RX
#2
パケット
(3) CPU#2 は実行中のタスクの
状態を保存し割り込みハンドラ
に移行する
メモリ
Receive Side Scaling (RSS)
31
CPU#2CPU#1
NIC#1 NIC#2
net_device 構造体他@NIC#1
softnet_data 構造体@CPU#1
net_device 構造体他@NIC#2
softnet_data 構造体@CPU#2
TX
#1
TX
#2
RX
#1
RX
#2
TX
#1
TX
#2
RX
#1
RX
#2
パケット
(4) CPU#2 は NIC#1 の自分に
対する割り込みを無効化
メモリ
Receive Side Scaling (RSS)
32
CPU#2CPU#1
NIC#1 NIC#2
net_device 構造体他@NIC#1
softnet_data 構造体@CPU#1
net_device 構造体他@NIC#2
softnet_data 構造体@CPU#2
TX
#1
TX
#2
RX
#1
RX
#2
TX
#1
TX
#2
RX
#1
RX
#2
パケット
(5) CPU#2 の softnet_data 構造
体の poll_list リストに NIC#1 の
RX#2 に対応する napi_struct 構
造体をリンクする
メモリ
Receive Side Scaling (RSS)
33
CPU#2CPU#1
NIC#1 NIC#2
net_device 構造体他@NIC#1
softnet_data 構造体@CPU#1
net_device 構造体他@NIC#2
softnet_data 構造体@CPU#2
TX
#1
TX
#2
RX
#1
RX
#2
TX
#1
TX
#2
RX
#1
RX
#2
パケット
(6) 割り込みハンドラは終了しスケ
ジューラが呼び出され通常はそのま
ま ksoftirqd カーネル・スレッドに
処理が移る
メモリ
Receive Side Scaling (RSS)
34
CPU#2CPU#1
NIC#1 NIC#2
net_device 構造体他@NIC#1
softnet_data 構造体@CPU#1
net_device 構造体他@NIC#2
softnet_data 構造体@CPU#2
TX
#1
TX
#2
RX
#1
RX
#2
TX
#1
TX
#2
RX
#1
RX
#2
パケット
(7) ksoftirqd は softnet_data 構造体
の poll_list にリンクされた
napi_struct 構造体の受信バッファか
らパケットを取り出し受信処理を行う
メモリ
Receive Side Scaling (RSS)
35
CPU#2CPU#1
NIC#1 NIC#2
net_device 構造体他@NIC#1
softnet_data 構造体@CPU#1
net_device 構造体他@NIC#2
softnet_data 構造体@CPU#2
TX
#1
TX
#2
RX
#1
RX
#2
TX
#1
TX
#2
RX
#1
RX
#2
(8) 処理が終わったら NIC#1 の自
分に対する割り込みを有効化する
性能測定・構成
3613
性能測定・構成
Unidirectional Bidirectional
DELL PowerEdge R410!
Xeon L5520 @ 2.27GHz x 2(8 cores)!
Fedora 15/Linux Kernel 3.0.6(2.6.40.6)
DELL PowerEdge R410!
Xeon L5520 @ 2.27GHz x 2(8 cores)!
Fedora 15/Linux Kernel 3.0.6(2.6.40.6)
Spirent TestCenter Spirent TestCenter
Intel X520-SR2!
10G NIC(82599EB)!
SourceForge ixgbe
Intel X520-SR2!
10G NIC(82599EB)!
SourceForge ixgbe
128flow
128flow
128flow
Loss < 0.01% Loss < 0.01%30 sec.30 sec.
RSS による性能改善 (Unidirectional)
37
0Mbps
2,000Mbps
4,000Mbps
6,000Mbps
8,000Mbps
10,000Mbps
64 128 256 512 1024 1280 1518
RSS=1,1 CPU:0,0 RSS=1,1 CPU:4,6
RSS=4,4 CPU:0,2,4,6 RSS=8,8 CPU:0,1,..,7
RSS による性能改善 (Unidirectional)
38
0pps
1,000,000pps
2,000,000pps
3,000,000pps
4,000,000pps
5,000,000pps
6,000,000pps
64 128 256 512 1024 1280 1518
RSS=1,1 CPU:0,0 RSS=1,1 CPU:4,6
RSS=4,4 CPU:0,2,4,6 RSS=8,8 CPU:0,1,..,7
RSS による性能改善 (Bidirectional)
39
0Mbps
4,000Mbps
8,000Mbps
12,000Mbps
16,000Mbps
20,000Mbps
64 128 256 512 1024 1280 1518
RSS=1,1 CPU:0,0 RSS=1,1 CPU:4,6
RSS=4,4 CPU:0,2,4,6 RSS=8,8 CPU:0,1,..,7
RSS による性能改善 (Bidirectional)
40
0pps
1,000,000pps
2,000,000pps
3,000,000pps
4,000,000pps
5,000,000pps
6,000,000pps
64 128 256 512 1024 1280 1518
RSS=1,1 CPU:0,0 RSS=1,1 CPU:4,6
RSS=4,4 CPU:0,2,4,6 RSS=8,8 CPU:0,1,..,7
NUMA とメモリの距離
41
#0
CPU ソケット#0
#2 #4 #6
メモリ・コントローラ#0
メモリ・ノード#0
#1
CPU ソケット#1
#3 #5 #7
メモリ・コントローラ#1
メモリ・ノード#1
NIC#1 NIC#2
NUMA とメモリの距離
42
#0
CPU ソケット#0
#2 #4 #6
メモリ・コントローラ#0
メモリ・ノード#0
#1
CPU ソケット#1
#3 #5 #7
メモリ・コントローラ#1
メモリ・ノード#1
#0 #1 #2 #3 #4 #5 #6 #7
#0 #1 #2 #3 #4 #5 #6 #7
NIC#1 NIC#2
ロス許容と性能評価
43
0Mbps
4,000Mbps
8,000Mbps
12,000Mbps
16,000Mbps
20,000Mbps
64 128 256 512 1024 1280 1518
RSS=8,8 Loss<0.01 RSS=8,8 Loss<0.1 RSS=8,8 Loss<1.0
ロス許容と性能評価
44
0pps
1,000,000pps
2,000,000pps
3,000,000pps
4,000,000pps
5,000,000pps
6,000,000pps
64 128 256 512 1024 1280 1518
RSS=8,8 Loss<0.01 RSS=8,8 Loss<0.1 RSS=8,8 Loss<1.0
割り込みモデルとポーリング・モデル (再
45
NIC
CPU
① NIC が受信したパケットを

受信バッファに書き込む
② NIC が割り込みで CPU に

通知
③ CPU は実行中のタスクの

状態を保存し割り込み

ハンドラを実行
② CPU は定期的に受信バッファ

を確認し新しいパケットが

届いていたら処理する
① 受信したパケットを受信バッ
ファに書き込む
NIC
CPU
割り込みモデル ポーリング・モデル
参考) Intel DPDK
• Intel 社がオープン・ソース (BSD ライセンス) で開発しているデータ・
プレーンを開発するための SDK (Data Plane Development Kit)
• http://www.dpdk.org/
• 割り込みではなくすべてポーリングでパケット処理を行う
• Linux の UIO (デバイスをユーザ・ランドから直接制御するための仕
組み) を用いて割り込みモードではなくポーリング・モードで動作す
るドライバ (PMD: Poll-Mode Driver) で NIC を制御する
• 実はオープン・ソースになっていないだけで UIO でなくカーネル
内で動作させるモノも存在する?
• どこにも define されていないのに存在する大量の ifdef
RTE_EXEC_ENV_BAREMETAL
• DMA 転送されたパケットを CPU の LLC にプリ・フェッチしていた
りページ・サイズ大きくすることで TLB ミスがあまり起こらないよ
うにしていたりと小細工も満載
46
参考) Intel DPDK
47
TRANSFORMING COMMUNICATIONSIntel Confidential8 TRANSFORMING COMMUNICATIONS8
IA パフォーマンスの年々の向上
iAでのPv4 レイヤー 3 フォワード性能
0
20
40
60
80
100
120
140
160
2006
2x2C Sossaman
2.0 GHz
2007
2x4C Clovertown
2.33 GHz
2008
2x4C Harpertown
2.33 GHz
2009
2x4C Nehalem
2.53 GHz
2010
2x6C Westmere
2.40 GHz
2011
1x8C Sandy Bridge
2.0 GHz
2012
2x8C Sandy Bridge
2.0 GHZ
(PCIe* Gen2 の機器でテスト)
標準の“off-the-shelf” IAプラットフォームで魅力的な性能を提供します
* Other names and brands may be
claimed as the property of others.
64B
Mpps
10G
40G
100G
内蔵PCIe* コントローラー
80G
内蔵メモリーコントローラー
の登場
+
インテル® DPDK
Internet Week 2012 D1 パケットフォワーディングを支える技術
3) パケットフォワーディング高速化技術(幸村 裕子/インテル株式会社)から引用
https://www.nic.ad.jp/ja/materials/iw/2012/proceedings/d1/d1-Kohmura.pdf

Contenu connexe

Tendances

Scapyで作る・解析するパケット
Scapyで作る・解析するパケットScapyで作る・解析するパケット
Scapyで作る・解析するパケットTakaaki Hoyo
 
DPDK: Multi Architecture High Performance Packet Processing
DPDK: Multi Architecture High Performance Packet ProcessingDPDK: Multi Architecture High Performance Packet Processing
DPDK: Multi Architecture High Performance Packet ProcessingMichelle Holley
 
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話Kumazaki Hiroki
 
DPDKを用いたネットワークスタック,高性能通信基盤開発
DPDKを用いたネットワークスタック,高性能通信基盤開発DPDKを用いたネットワークスタック,高性能通信基盤開発
DPDKを用いたネットワークスタック,高性能通信基盤開発slankdev
 
プログラマ目線から見たRDMAのメリットと その応用例について
プログラマ目線から見たRDMAのメリットとその応用例についてプログラマ目線から見たRDMAのメリットとその応用例について
プログラマ目線から見たRDMAのメリットと その応用例についてMasanori Itoh
 
今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門Masahito Zembutsu
 
EthernetやCPUなどの話
EthernetやCPUなどの話EthernetやCPUなどの話
EthernetやCPUなどの話Takanori Sejima
 
PostgreSQL14の pg_stat_statements 改善(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL14の pg_stat_statements 改善(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)PostgreSQL14の pg_stat_statements 改善(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL14の pg_stat_statements 改善(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)NTT DATA Technology & Innovation
 
OpenStackクラウド基盤構築ハンズオンセミナー 第2日:講義No2
OpenStackクラウド基盤構築ハンズオンセミナー 第2日:講義No2OpenStackクラウド基盤構築ハンズオンセミナー 第2日:講義No2
OpenStackクラウド基盤構築ハンズオンセミナー 第2日:講義No2Etsuji Nakai
 
分散ストレージソフトウェアCeph・アーキテクチャー概要
分散ストレージソフトウェアCeph・アーキテクチャー概要分散ストレージソフトウェアCeph・アーキテクチャー概要
分散ストレージソフトウェアCeph・アーキテクチャー概要Etsuji Nakai
 
PG-REXで学ぶPacemaker運用の実例
PG-REXで学ぶPacemaker運用の実例PG-REXで学ぶPacemaker運用の実例
PG-REXで学ぶPacemaker運用の実例kazuhcurry
 
DPDK in Containers Hands-on Lab
DPDK in Containers Hands-on LabDPDK in Containers Hands-on Lab
DPDK in Containers Hands-on LabMichelle Holley
 
VirtualBox と Rocky Linux 8 で始める Pacemaker ~ VirtualBox でも STONITH 機能が試せる! Vi...
VirtualBox と Rocky Linux 8 で始める Pacemaker  ~ VirtualBox でも STONITH 機能が試せる! Vi...VirtualBox と Rocky Linux 8 で始める Pacemaker  ~ VirtualBox でも STONITH 機能が試せる! Vi...
VirtualBox と Rocky Linux 8 で始める Pacemaker ~ VirtualBox でも STONITH 機能が試せる! Vi...ksk_ha
 
地理分散DBについて
地理分散DBについて地理分散DBについて
地理分散DBについてKumazaki Hiroki
 
Hokkaido.cap #osc11do Wiresharkを使いこなそう!
Hokkaido.cap #osc11do Wiresharkを使いこなそう!Hokkaido.cap #osc11do Wiresharkを使いこなそう!
Hokkaido.cap #osc11do Wiresharkを使いこなそう!Panda Yamaki
 
ネットワークコンフィグ分析ツール Batfish との付き合い方
ネットワークコンフィグ分析ツール Batfish との付き合い方ネットワークコンフィグ分析ツール Batfish との付き合い方
ネットワークコンフィグ分析ツール Batfish との付き合い方akira6592
 
PostgreSQLの冗長化について
PostgreSQLの冗長化についてPostgreSQLの冗長化について
PostgreSQLの冗長化についてSoudai Sone
 
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)NTT DATA Technology & Innovation
 
大規模DCのネットワークデザイン
大規模DCのネットワークデザイン大規模DCのネットワークデザイン
大規模DCのネットワークデザインMasayuki Kobayashi
 
Docker道場オンライン#1 Docker基礎概念と用語の理解
Docker道場オンライン#1 Docker基礎概念と用語の理解Docker道場オンライン#1 Docker基礎概念と用語の理解
Docker道場オンライン#1 Docker基礎概念と用語の理解Masahito Zembutsu
 

Tendances (20)

Scapyで作る・解析するパケット
Scapyで作る・解析するパケットScapyで作る・解析するパケット
Scapyで作る・解析するパケット
 
DPDK: Multi Architecture High Performance Packet Processing
DPDK: Multi Architecture High Performance Packet ProcessingDPDK: Multi Architecture High Performance Packet Processing
DPDK: Multi Architecture High Performance Packet Processing
 
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話
 
DPDKを用いたネットワークスタック,高性能通信基盤開発
DPDKを用いたネットワークスタック,高性能通信基盤開発DPDKを用いたネットワークスタック,高性能通信基盤開発
DPDKを用いたネットワークスタック,高性能通信基盤開発
 
プログラマ目線から見たRDMAのメリットと その応用例について
プログラマ目線から見たRDMAのメリットとその応用例についてプログラマ目線から見たRDMAのメリットとその応用例について
プログラマ目線から見たRDMAのメリットと その応用例について
 
今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門
 
EthernetやCPUなどの話
EthernetやCPUなどの話EthernetやCPUなどの話
EthernetやCPUなどの話
 
PostgreSQL14の pg_stat_statements 改善(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL14の pg_stat_statements 改善(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)PostgreSQL14の pg_stat_statements 改善(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL14の pg_stat_statements 改善(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
OpenStackクラウド基盤構築ハンズオンセミナー 第2日:講義No2
OpenStackクラウド基盤構築ハンズオンセミナー 第2日:講義No2OpenStackクラウド基盤構築ハンズオンセミナー 第2日:講義No2
OpenStackクラウド基盤構築ハンズオンセミナー 第2日:講義No2
 
分散ストレージソフトウェアCeph・アーキテクチャー概要
分散ストレージソフトウェアCeph・アーキテクチャー概要分散ストレージソフトウェアCeph・アーキテクチャー概要
分散ストレージソフトウェアCeph・アーキテクチャー概要
 
PG-REXで学ぶPacemaker運用の実例
PG-REXで学ぶPacemaker運用の実例PG-REXで学ぶPacemaker運用の実例
PG-REXで学ぶPacemaker運用の実例
 
DPDK in Containers Hands-on Lab
DPDK in Containers Hands-on LabDPDK in Containers Hands-on Lab
DPDK in Containers Hands-on Lab
 
VirtualBox と Rocky Linux 8 で始める Pacemaker ~ VirtualBox でも STONITH 機能が試せる! Vi...
VirtualBox と Rocky Linux 8 で始める Pacemaker  ~ VirtualBox でも STONITH 機能が試せる! Vi...VirtualBox と Rocky Linux 8 で始める Pacemaker  ~ VirtualBox でも STONITH 機能が試せる! Vi...
VirtualBox と Rocky Linux 8 で始める Pacemaker ~ VirtualBox でも STONITH 機能が試せる! Vi...
 
地理分散DBについて
地理分散DBについて地理分散DBについて
地理分散DBについて
 
Hokkaido.cap #osc11do Wiresharkを使いこなそう!
Hokkaido.cap #osc11do Wiresharkを使いこなそう!Hokkaido.cap #osc11do Wiresharkを使いこなそう!
Hokkaido.cap #osc11do Wiresharkを使いこなそう!
 
ネットワークコンフィグ分析ツール Batfish との付き合い方
ネットワークコンフィグ分析ツール Batfish との付き合い方ネットワークコンフィグ分析ツール Batfish との付き合い方
ネットワークコンフィグ分析ツール Batfish との付き合い方
 
PostgreSQLの冗長化について
PostgreSQLの冗長化についてPostgreSQLの冗長化について
PostgreSQLの冗長化について
 
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
 
大規模DCのネットワークデザイン
大規模DCのネットワークデザイン大規模DCのネットワークデザイン
大規模DCのネットワークデザイン
 
Docker道場オンライン#1 Docker基礎概念と用語の理解
Docker道場オンライン#1 Docker基礎概念と用語の理解Docker道場オンライン#1 Docker基礎概念と用語の理解
Docker道場オンライン#1 Docker基礎概念と用語の理解
 

En vedette

Kvm performance optimization for ubuntu
Kvm performance optimization for ubuntuKvm performance optimization for ubuntu
Kvm performance optimization for ubuntuSim Janghoon
 
仮想化環境におけるパケットフォワーディング
仮想化環境におけるパケットフォワーディング仮想化環境におけるパケットフォワーディング
仮想化環境におけるパケットフォワーディングTakuya ASADA
 
高スループットなサーバアプリケーションの為の新しいフレームワーク
「Seastar」
高スループットなサーバアプリケーションの為の新しいフレームワーク
「Seastar」高スループットなサーバアプリケーションの為の新しいフレームワーク
「Seastar」
高スループットなサーバアプリケーションの為の新しいフレームワーク
「Seastar」Takuya ASADA
 
Interrupt Affinityについて
Interrupt AffinityについてInterrupt Affinityについて
Interrupt AffinityについてTakuya ASADA
 
Seastar in 歌舞伎座.tech#8「C++初心者会」
Seastar in 歌舞伎座.tech#8「C++初心者会」Seastar in 歌舞伎座.tech#8「C++初心者会」
Seastar in 歌舞伎座.tech#8「C++初心者会」Takuya ASADA
 
Try andstudy cloud_20111108_tokyo
Try andstudy cloud_20111108_tokyoTry andstudy cloud_20111108_tokyo
Try andstudy cloud_20111108_tokyoEtsuji Nakai
 
低遅延10Gb EthernetによるGPUクラスタの構築と性能向上手法について
低遅延10Gb EthernetによるGPUクラスタの構築と性能向上手法について低遅延10Gb EthernetによるGPUクラスタの構築と性能向上手法について
低遅延10Gb EthernetによるGPUクラスタの構築と性能向上手法についてAtsushi Suzuki
 
Tremaとtrema edgeの違い
Tremaとtrema edgeの違いTremaとtrema edgeの違い
Tremaとtrema edgeの違いhiroshi oshiba
 
Lively Walk-Through: A Lightweight Formal Method in UI/UX design
Lively Walk-Through: A Lightweight Formal Method in UI/UX designLively Walk-Through: A Lightweight Formal Method in UI/UX design
Lively Walk-Through: A Lightweight Formal Method in UI/UX designTomohiro Oda
 
信学会IA研(広島市立大,2011年12月)招待講演発表資料,小川晃通,「2011年インターネット関連ニュース総括」
信学会IA研(広島市立大,2011年12月)招待講演発表資料,小川晃通,「2011年インターネット関連ニュース総括」信学会IA研(広島市立大,2011年12月)招待講演発表資料,小川晃通,「2011年インターネット関連ニュース総括」
信学会IA研(広島市立大,2011年12月)招待講演発表資料,小川晃通,「2011年インターネット関連ニュース総括」Keisuke Ishibashi
 
2016.03.04 NetOpsCoding#2
2016.03.04 NetOpsCoding#22016.03.04 NetOpsCoding#2
2016.03.04 NetOpsCoding#2Shuichi Ohkubo
 
Open vSwitchソースコードの全体像
Open vSwitchソースコードの全体像 Open vSwitchソースコードの全体像
Open vSwitchソースコードの全体像 Sho Shimizu
 
ドメイン名の ライフサイクルマネージメント
ドメイン名の ライフサイクルマネージメントドメイン名の ライフサイクルマネージメント
ドメイン名の ライフサイクルマネージメントYoshiki Ishida
 
昨今のトラフィック状況
昨今のトラフィック状況昨今のトラフィック状況
昨今のトラフィック状況Yoshiki Ishida
 
運用自動化に向けての現場からの課題
運用自動化に向けての現場からの課題運用自動化に向けての現場からの課題
運用自動化に向けての現場からの課題Yoshiki Ishida
 
Jun4Pharo @ Smalltalk勉強会 2015/5/29
Jun4Pharo @ Smalltalk勉強会 2015/5/29Jun4Pharo @ Smalltalk勉強会 2015/5/29
Jun4Pharo @ Smalltalk勉強会 2015/5/29Tomohiro Oda
 

En vedette (20)

Kernel vm-2014-05-25
Kernel vm-2014-05-25Kernel vm-2014-05-25
Kernel vm-2014-05-25
 
Kvm performance optimization for ubuntu
Kvm performance optimization for ubuntuKvm performance optimization for ubuntu
Kvm performance optimization for ubuntu
 
仮想化環境におけるパケットフォワーディング
仮想化環境におけるパケットフォワーディング仮想化環境におけるパケットフォワーディング
仮想化環境におけるパケットフォワーディング
 
高スループットなサーバアプリケーションの為の新しいフレームワーク
「Seastar」
高スループットなサーバアプリケーションの為の新しいフレームワーク
「Seastar」高スループットなサーバアプリケーションの為の新しいフレームワーク
「Seastar」
高スループットなサーバアプリケーションの為の新しいフレームワーク
「Seastar」
 
Interrupt Affinityについて
Interrupt AffinityについてInterrupt Affinityについて
Interrupt Affinityについて
 
Seastar in 歌舞伎座.tech#8「C++初心者会」
Seastar in 歌舞伎座.tech#8「C++初心者会」Seastar in 歌舞伎座.tech#8「C++初心者会」
Seastar in 歌舞伎座.tech#8「C++初心者会」
 
Try andstudy cloud_20111108_tokyo
Try andstudy cloud_20111108_tokyoTry andstudy cloud_20111108_tokyo
Try andstudy cloud_20111108_tokyo
 
カーネルモジュールプログラミング超入門 #1(仮)
カーネルモジュールプログラミング超入門 #1(仮)カーネルモジュールプログラミング超入門 #1(仮)
カーネルモジュールプログラミング超入門 #1(仮)
 
低遅延10Gb EthernetによるGPUクラスタの構築と性能向上手法について
低遅延10Gb EthernetによるGPUクラスタの構築と性能向上手法について低遅延10Gb EthernetによるGPUクラスタの構築と性能向上手法について
低遅延10Gb EthernetによるGPUクラスタの構築と性能向上手法について
 
Tremaとtrema edgeの違い
Tremaとtrema edgeの違いTremaとtrema edgeの違い
Tremaとtrema edgeの違い
 
Lively Walk-Through: A Lightweight Formal Method in UI/UX design
Lively Walk-Through: A Lightweight Formal Method in UI/UX designLively Walk-Through: A Lightweight Formal Method in UI/UX design
Lively Walk-Through: A Lightweight Formal Method in UI/UX design
 
信学会IA研(広島市立大,2011年12月)招待講演発表資料,小川晃通,「2011年インターネット関連ニュース総括」
信学会IA研(広島市立大,2011年12月)招待講演発表資料,小川晃通,「2011年インターネット関連ニュース総括」信学会IA研(広島市立大,2011年12月)招待講演発表資料,小川晃通,「2011年インターネット関連ニュース総括」
信学会IA研(広島市立大,2011年12月)招待講演発表資料,小川晃通,「2011年インターネット関連ニュース総括」
 
Fablab baisc
Fablab baiscFablab baisc
Fablab baisc
 
2016.03.04 NetOpsCoding#2
2016.03.04 NetOpsCoding#22016.03.04 NetOpsCoding#2
2016.03.04 NetOpsCoding#2
 
Open vSwitchソースコードの全体像
Open vSwitchソースコードの全体像 Open vSwitchソースコードの全体像
Open vSwitchソースコードの全体像
 
ドメイン名の ライフサイクルマネージメント
ドメイン名の ライフサイクルマネージメントドメイン名の ライフサイクルマネージメント
ドメイン名の ライフサイクルマネージメント
 
昨今のトラフィック状況
昨今のトラフィック状況昨今のトラフィック状況
昨今のトラフィック状況
 
Benchmarkspec
BenchmarkspecBenchmarkspec
Benchmarkspec
 
運用自動化に向けての現場からの課題
運用自動化に向けての現場からの課題運用自動化に向けての現場からの課題
運用自動化に向けての現場からの課題
 
Jun4Pharo @ Smalltalk勉強会 2015/5/29
Jun4Pharo @ Smalltalk勉強会 2015/5/29Jun4Pharo @ Smalltalk勉強会 2015/5/29
Jun4Pharo @ Smalltalk勉強会 2015/5/29
 

Similaire à Linux packet-forwarding

Faster SRv6 D-plane with XDP
Faster SRv6 D-plane with XDPFaster SRv6 D-plane with XDP
Faster SRv6 D-plane with XDPRyoga Saito
 
FPGA+SoC+Linux実践勉強会資料
FPGA+SoC+Linux実践勉強会資料FPGA+SoC+Linux実践勉強会資料
FPGA+SoC+Linux実践勉強会資料一路 川染
 
Trema day 1
Trema day 1Trema day 1
Trema day 1ykuga
 
Ictsc9 infra解説スライド
Ictsc9 infra解説スライドIctsc9 infra解説スライド
Ictsc9 infra解説スライドnasuhorse
 
OSC 2011 Hokkaido 自宅SAN友の会(後半)
OSC 2011 Hokkaido 自宅SAN友の会(後半)OSC 2011 Hokkaido 自宅SAN友の会(後半)
OSC 2011 Hokkaido 自宅SAN友の会(後半)Satoshi Shimazaki
 
フロー技術によるネットワーク管理
フロー技術によるネットワーク管理フロー技術によるネットワーク管理
フロー技術によるネットワーク管理Motonori Shindo
 
システムパフォーマンス勉強会#8
システムパフォーマンス勉強会#8システムパフォーマンス勉強会#8
システムパフォーマンス勉強会#8shingo suzuki
 
Apache cloudstack4.0インストール
Apache cloudstack4.0インストールApache cloudstack4.0インストール
Apache cloudstack4.0インストールYasuhiro Arai
 
SDN Japan: ovs-hw
SDN Japan: ovs-hwSDN Japan: ovs-hw
SDN Japan: ovs-hwykuga
 
20171206 d3 health_tech発表資料
20171206 d3 health_tech発表資料20171206 d3 health_tech発表資料
20171206 d3 health_tech発表資料dcubeio
 
OpenStack Kilo with 6Wind VA High-Performance Networking Using DPDK - OpenSta...
OpenStack Kilo with 6Wind VA High-Performance Networking Using DPDK - OpenSta...OpenStack Kilo with 6Wind VA High-Performance Networking Using DPDK - OpenSta...
OpenStack Kilo with 6Wind VA High-Performance Networking Using DPDK - OpenSta...VirtualTech Japan Inc.
 
about Eucalyptus (20121026) NII
about Eucalyptus (20121026) NIIabout Eucalyptus (20121026) NII
about Eucalyptus (20121026) NIIOsamu Habuka
 
FD.io VPP事始め
FD.io VPP事始めFD.io VPP事始め
FD.io VPP事始めtetsusat
 
Dbts2012 unconference wttrw_yazekatsu_publish
Dbts2012 unconference wttrw_yazekatsu_publishDbts2012 unconference wttrw_yazekatsu_publish
Dbts2012 unconference wttrw_yazekatsu_publishYohei Azekatsu
 
第162回情報処理学会ハイパフォーマンスコンピューティング研究発表会
第162回情報処理学会ハイパフォーマンスコンピューティング研究発表会第162回情報処理学会ハイパフォーマンスコンピューティング研究発表会
第162回情報処理学会ハイパフォーマンスコンピューティング研究発表会Hitoshi Sato
 
OpenStack with OpenFlow
OpenStack with OpenFlowOpenStack with OpenFlow
OpenStack with OpenFlowToshiki Tsuboi
 
NetApp XCP データ移行ツールインストールと設定
NetApp XCP データ移行ツールインストールと設定NetApp XCP データ移行ツールインストールと設定
NetApp XCP データ移行ツールインストールと設定Kan Itani
 
知っているようで知らないNeutron -仮想ルータの冗長と分散- - OpenStack最新情報セミナー 2016年3月
知っているようで知らないNeutron -仮想ルータの冗長と分散- - OpenStack最新情報セミナー 2016年3月 知っているようで知らないNeutron -仮想ルータの冗長と分散- - OpenStack最新情報セミナー 2016年3月
知っているようで知らないNeutron -仮想ルータの冗長と分散- - OpenStack最新情報セミナー 2016年3月 VirtualTech Japan Inc.
 

Similaire à Linux packet-forwarding (20)

Faster SRv6 D-plane with XDP
Faster SRv6 D-plane with XDPFaster SRv6 D-plane with XDP
Faster SRv6 D-plane with XDP
 
FPGA+SoC+Linux実践勉強会資料
FPGA+SoC+Linux実践勉強会資料FPGA+SoC+Linux実践勉強会資料
FPGA+SoC+Linux実践勉強会資料
 
Trema day 1
Trema day 1Trema day 1
Trema day 1
 
計算機理論入門08
計算機理論入門08計算機理論入門08
計算機理論入門08
 
Ictsc9 infra解説スライド
Ictsc9 infra解説スライドIctsc9 infra解説スライド
Ictsc9 infra解説スライド
 
OSC 2011 Hokkaido 自宅SAN友の会(後半)
OSC 2011 Hokkaido 自宅SAN友の会(後半)OSC 2011 Hokkaido 自宅SAN友の会(後半)
OSC 2011 Hokkaido 自宅SAN友の会(後半)
 
フロー技術によるネットワーク管理
フロー技術によるネットワーク管理フロー技術によるネットワーク管理
フロー技術によるネットワーク管理
 
システムパフォーマンス勉強会#8
システムパフォーマンス勉強会#8システムパフォーマンス勉強会#8
システムパフォーマンス勉強会#8
 
Cmc cmd slim
Cmc cmd slimCmc cmd slim
Cmc cmd slim
 
Apache cloudstack4.0インストール
Apache cloudstack4.0インストールApache cloudstack4.0インストール
Apache cloudstack4.0インストール
 
SDN Japan: ovs-hw
SDN Japan: ovs-hwSDN Japan: ovs-hw
SDN Japan: ovs-hw
 
20171206 d3 health_tech発表資料
20171206 d3 health_tech発表資料20171206 d3 health_tech発表資料
20171206 d3 health_tech発表資料
 
OpenStack Kilo with 6Wind VA High-Performance Networking Using DPDK - OpenSta...
OpenStack Kilo with 6Wind VA High-Performance Networking Using DPDK - OpenSta...OpenStack Kilo with 6Wind VA High-Performance Networking Using DPDK - OpenSta...
OpenStack Kilo with 6Wind VA High-Performance Networking Using DPDK - OpenSta...
 
about Eucalyptus (20121026) NII
about Eucalyptus (20121026) NIIabout Eucalyptus (20121026) NII
about Eucalyptus (20121026) NII
 
FD.io VPP事始め
FD.io VPP事始めFD.io VPP事始め
FD.io VPP事始め
 
Dbts2012 unconference wttrw_yazekatsu_publish
Dbts2012 unconference wttrw_yazekatsu_publishDbts2012 unconference wttrw_yazekatsu_publish
Dbts2012 unconference wttrw_yazekatsu_publish
 
第162回情報処理学会ハイパフォーマンスコンピューティング研究発表会
第162回情報処理学会ハイパフォーマンスコンピューティング研究発表会第162回情報処理学会ハイパフォーマンスコンピューティング研究発表会
第162回情報処理学会ハイパフォーマンスコンピューティング研究発表会
 
OpenStack with OpenFlow
OpenStack with OpenFlowOpenStack with OpenFlow
OpenStack with OpenFlow
 
NetApp XCP データ移行ツールインストールと設定
NetApp XCP データ移行ツールインストールと設定NetApp XCP データ移行ツールインストールと設定
NetApp XCP データ移行ツールインストールと設定
 
知っているようで知らないNeutron -仮想ルータの冗長と分散- - OpenStack最新情報セミナー 2016年3月
知っているようで知らないNeutron -仮想ルータの冗長と分散- - OpenStack最新情報セミナー 2016年3月 知っているようで知らないNeutron -仮想ルータの冗長と分散- - OpenStack最新情報セミナー 2016年3月
知っているようで知らないNeutron -仮想ルータの冗長と分散- - OpenStack最新情報セミナー 2016年3月
 

Plus de Masakazu Asama

Plus de Masakazu Asama (8)

openconfigd
openconfigdopenconfigd
openconfigd
 
NETCONFとYANGの話
NETCONFとYANGの話NETCONFとYANGの話
NETCONFとYANGの話
 
Hydrogen → Helium での Linux kernel の違い
Hydrogen → Helium での Linux kernel の違いHydrogen → Helium での Linux kernel の違い
Hydrogen → Helium での Linux kernel の違い
 
VTI の中身
VTI の中身VTI の中身
VTI の中身
 
ASAMAP Update
ASAMAP UpdateASAMAP Update
ASAMAP Update
 
ASAMAP 開発秘話
ASAMAP 開発秘話ASAMAP 開発秘話
ASAMAP 開発秘話
 
Vyatta 改造入門
Vyatta 改造入門Vyatta 改造入門
Vyatta 改造入門
 
MAP 実装してみた
MAP 実装してみたMAP 実装してみた
MAP 実装してみた
 

Linux packet-forwarding

  • 2. はじめまして? • 新潟県三条市にある地域 ISP 有限会社銀座堂でサーバ管理やネット ワーク管理をしています • 弊社では上流 ISP(OCN さんと新潟県内の ISP) や Echigo-IX(新潟県 内の地域 IX) との接続に Linux(Vyatta Core) を使って BGP 接続を しています • 2010 年頃から Linux カーネルのパケット転送処理について調べ InternetWeek で発表したりしていました • 趣味では IETF で標準化が進められている MAP(Mapping of Address and Port with Encapsulation) というプロトコルを Linux カーネルに実装し Vyatta Core に組み込み ASAMAP という名前で オープンソースで公開したりしています 2
  • 3. ASAMAP? • IPv4 over IPv6 技術のうち DS-Lite/464XLAT/MAP-E/MAP-T の キャリア側装置と顧客側装置の両方に対応 • IPv4 over IPv6 技術とはキャリア内ネットワークを極力 IPv6 のみで 構築しつつ顧客ネットワークに IPv4 サービスも提供するための技術 • IPv4 ヘッダを IPv6 に書き換えるトランスレーションを用いる方法 (464XLAT/MAP-T) と IPv4 パケットを IPv6 でカプセル化する方法 (DS-Lite/MAP-E) の 2 種類に分けられ • さらにキャリア側装置に NAPT 機能を持つ方法 (DS-Lite/464XLAT) と持たない方法 (MAP-E/MAP-T) の 2 種類に分けられる 3 MAP 対応 Vyatta (ASAMAP) 仮置き場 http://enog.jp/ masakazu/vyatta/map/ ASAMAP 開発秘話 http://www.slideshare.net/m-asama/asamap
  • 4. 目次 • Receive Livelock と Linux NAPI • 大量のパケット受信時の問題とそれに対して Linux カーネルが取っ た対策 • 参考) ハードウェアによる負荷低減支援機能 • パケット転送の並列処理と RSS (Receive Side Scaling) • パケット転送処理を複数の CPU コアで並列処理するための Linux カーネルの仕組み • 参考) RSS と NUMA • 割り込み問題再び • 参考) Intel DPDK 4
  • 5. 割り込みモデルとポーリング・モデル 5 NIC CPU ① NIC が受信したパケットを
 受信バッファに書き込む ② NIC が割り込みで CPU に
 通知 ③ CPU は実行中のタスクの
 状態を保存し割り込み
 ハンドラを実行 ② CPU は定期的に受信バッファ
 を確認し新しいパケットが
 届いていたら処理する ① 受信したパケットを受信バッ ファに書き込む NIC CPU 割り込みモデル ポーリング・モデル
  • 6. 割り込みモデルとポーリング・モデル • 割り込みモデル • メリット • パケットの受信を CPU がすぐに気づくことが出来るので遅延が 小さい • デメリット • 割り込みによって生じるコンテキスト・スイッチは非常に重い処 理なため頻繁にパケット送受信を行う環境では性能劣化を招く ❖ Receive Livelock • ポーリング・モデル • メリット • コンテキスト・スイッチによる処理コストはかからない • デメリット • ポーリング間隔のどこでパケットを受信するかによって遅延が 変動し全体としても遅延が大きくなる 6
  • 7. Receive Livelock • デッド・ロックしているわけでもないのに割り込みが れてしまうこ とで割り込みハンドラしか実行していないような状態になること • 割り込み処理はかなり高い優先度を割り当てられているためパケット 受信の際に何も考えず割り込みを発生させると他の処理を一切出来な いような状態になる 7 ※1) Eliminating Receive Livelock in an Interrupt-Driven Kernel http://www.stanford.edu/class/cs240/readings/p217-mogul.pdf 1Gbps の Ethernet で 64 バイトのフレームを
 ワイヤレートで流した際に発生する割り込みの回数
 毎秒 1,488,100 回 (割り込み発生間隔 672 ナノ秒) 最近の Linux のタイマー割り込みの回数 毎秒 250 回
  • 8. Linux NAPI • 割り込みモデルとポーリング・モデルのいいとこ取り • 基本的には割り込みモデルで動作 • パケットを受信した際に割り込みを無効化し処理が完了するまではポー リング・モードで動作 • 処理すべきパケットの処理が完了したら割り込みを有効化 • 2002 年 11 月にリリースされた Linux カーネル 2.4.20 の tg3 ドラ イバにおいて実装され順次その他の NIC ドライバでも採用 8
  • 9. メモリ Linux NAPI 9 CPU#2CPU#1 NIC#1 NIC#2 net_device 構造体他@NIC#1 softnet_data 構造体@CPU#1 net_device 構造体他@NIC#2 softnet_data 構造体@CPU#2 ! TX ! RX ! TX ! RX
  • 10. メモリ Linux NAPI 10 CPU#2CPU#1 NIC#1 NIC#2 net_device 構造体他@NIC#1 softnet_data 構造体@CPU#1 net_device 構造体他@NIC#2 softnet_data 構造体@CPU#2 ! TX ! RX ! TX ! RX softnet_data 構造体は ksoftirqd カーネル・スレッドがネットワーク絡 みの処理を行う際に必要とするデータ をまとめた構造体 ksoftirqd は CPU の数だけ存在するの で softnet_data 構造体も CPU の数 だけ存在する
  • 11. メモリ Linux NAPI 11 CPU#2CPU#1 NIC#1 NIC#2 net_device 構造体他@NIC#1 softnet_data 構造体@CPU#1 net_device 構造体他@NIC#2 softnet_data 構造体@CPU#2 ! TX ! RX ! TX ! RX net_device 構造体は NIC 1 つにつき 1 つ存在する構造体 通常はその直後に NIC ドライバ毎に異 なる構造体がくっついていて (例えば e1000 の場合は e1000_adapter) そ の中には NAPI の設定のための napi_struct 構造体が含まれる
  • 12. メモリ Linux NAPI 12 CPU#2CPU#1 NIC#1 NIC#2 net_device 構造体他@NIC#1 softnet_data 構造体@CPU#1 net_device 構造体他@NIC#2 softnet_data 構造体@CPU#2 ! TX ! RX ! TX ! RXNIC は受信 (RX) 用の受信バッファと 送信 (TX) 用の送信バッファを持つ 受信バッファと送信バッファは一般的 にリング構造をとっておりそれぞれ NIC と CPU の間で排他制御無しで データのやり取りを行う
  • 13. メモリ Linux NAPI 13 CPU#2CPU#1 NIC#1 NIC#2 net_device 構造体他@NIC#1 softnet_data 構造体@CPU#1 net_device 構造体他@NIC#2 softnet_data 構造体@CPU#2 ! TX ! RX ! TX ! RX パケット (1) パケットを受信した NIC#1 はパケットを受信 バッファに書き込む
  • 14. メモリ Linux NAPI 14 CPU#2CPU#1 NIC#1 NIC#2 net_device 構造体他@NIC#1 softnet_data 構造体@CPU#1 net_device 構造体他@NIC#2 softnet_data 構造体@CPU#2 ! TX ! RX ! TX ! RX パケット (2) NIC#1 は割り込みを使って CPU#1 に通知
  • 15. メモリ Linux NAPI 15 CPU#2CPU#1 NIC#1 NIC#2 net_device 構造体他@NIC#1 softnet_data 構造体@CPU#1 net_device 構造体他@NIC#2 softnet_data 構造体@CPU#2 ! TX ! RX ! TX ! RX パケット (3) CPU#1 は実行中のタスクの 状態を保存し割り込みハンドラ に移行する
  • 16. メモリ Linux NAPI 16 CPU#2CPU#1 NIC#1 NIC#2 net_device 構造体他@NIC#1 softnet_data 構造体@CPU#1 net_device 構造体他@NIC#2 softnet_data 構造体@CPU#2 ! TX ! RX ! TX ! RX パケット (4) CPU#1 は NIC#1 の 割り込みを無効化
  • 17. メモリ Linux NAPI 17 CPU#2CPU#1 NIC#1 NIC#2 net_device 構造体他@NIC#1 softnet_data 構造体@CPU#1 net_device 構造体他@NIC#2 softnet_data 構造体@CPU#2 ! TX ! RX ! TX ! RX パケット (5) softnet_data 構造体の poll_list リストに NIC#1 の napi_struct 構 造体をリンクする
  • 18. メモリ Linux NAPI 18 CPU#2CPU#1 NIC#1 NIC#2 net_device 構造体他@NIC#1 softnet_data 構造体@CPU#1 net_device 構造体他@NIC#2 softnet_data 構造体@CPU#2 ! TX ! RX ! TX ! RX パケット (6) 割り込みハンドラは終了しスケ ジューラが呼び出され通常はそのま ま ksoftirqd カーネル・スレッドに 処理が移る
  • 19. メモリ Linux NAPI 19 CPU#2CPU#1 NIC#1 NIC#2 net_device 構造体他@NIC#1 softnet_data 構造体@CPU#1 net_device 構造体他@NIC#2 softnet_data 構造体@CPU#2 ! TX ! RX ! TX ! RX パケット (7) ksoftirqd は softnet_data 構造体 の poll_list にリンクされた napi_struct 構造体の受信バッファか らパケットを取り出し受信処理を行う
  • 20. メモリ Linux NAPI 20 CPU#2CPU#1 NIC#1 NIC#2 net_device 構造体他@NIC#1 softnet_data 構造体@CPU#1 net_device 構造体他@NIC#2 softnet_data 構造体@CPU#2 ! TX ! RX ! TX ! RX (8) 処理が終わったら NIC#1 の 割り込みを有効化する
  • 21. ハードウェアによる負荷低減支援機能 • Ethernet Flow Control • 一時的に対向装置 (Ethernet L2 スイッチ等) に送信をやめてもら うことができる機能 • 自身の受信バッファがいっぱいになったときに対向装置に PAUSE フレームを送信することで送信を一時的にやめるようお願いする • NIC が対応している場合
 ethtool -A ethX (options…)
 で設定することができる • Interrupt Coalescing (Interrupt Moderation) • パケット受信時に NIC が割り込みを間引くことで OS の負担を低 減させる機能 • NIC が対応している場合
 ethtool -C ethX (options…)
 で設定することができる 21
  • 22. Receive Side Scaling (RSS) • 背景 • 最近のシステムでは CPU コアを複数持っているものが当たり前と なっておりネットワークの処理もそれらで並列実行したい • 仕組み • NIC 側で複数のキューを持たせる • パケットの受信時にヘッダ情報からキューを選択し対応する CPU に割り込みする • 同一フローのパケット (IP アドレスと TCP/UDP ポート番号が同 じパケット) は同じキューが選択されるためリオーダは生じない • どの情報からキューを選択するかは変更可能 • 前提 • PCI-Express バスに接続された複数キューに対応した NIC • PCI-Express で導入された MSI/MSI-X を用いて NIC から割り 込みのルーティングする必要があるため 22
  • 23. Receive Side Scaling (RSS) • 受信キューと割り込み番号の対応の確認 ! ! ! ! ! ! ! • 受信キューと割り込み先 CPU の対応付け 23 [root@linux ~]# cat /proc/interrupts CPU0 CPU1 ... 52: 0 0 PCI-MSI-edge p1p1-TxRx-0 53: 0 0 PCI-MSI-edge p1p1-TxRx-1 54: 0 0 PCI-MSI-edge p1p1 55: 0 0 PCI-MSI-edge p1p2-TxRx-0 56: 0 0 PCI-MSI-edge p1p2-TxRx-1 57: 0 0 PCI-MSI-edge p1p2 ... [root@linux ~]# echo 1 > /proc/irq/52/smp_affinity [root@linux ~]# echo 2 > /proc/irq/53/smp_affinity [root@linux ~]# echo 1 > /proc/irq/55/smp_affinity [root@linux ~]# echo 2 > /proc/irq/56/smp_affinity
  • 24. Receive Side Scaling (RSS) • CPU の個数等の情報から自動的に IRQ の割り込み先を設定してくれ る irqbalance というコマンドがある • デーモンとして起動する場合は以下のように実行 ! • 一度だけ設定しデーモンとして起動させたくない場合は以下のように 実行 24 [root@linux ~]# irqbalance [root@linux ~]# irqbalance --oneshot
  • 25. メモリ Receive Side Scaling (RSS) 25 CPU#2CPU#1 NIC#1 NIC#2 net_device 構造体他@NIC#1 softnet_data 構造体@CPU#1 net_device 構造体他@NIC#2 softnet_data 構造体@CPU#2 ! TX ! RX ! TX ! RX
  • 26. メモリ Receive Side Scaling (RSS) 26 CPU#2CPU#1 NIC#1 NIC#2 net_device 構造体他@NIC#1 softnet_data 構造体@CPU#1 net_device 構造体他@NIC#2 softnet_data 構造体@CPU#2 TX #1 TX #2 RX #1 RX #2 TX #1 TX #2 RX #1 RX #2
  • 27. メモリ Receive Side Scaling (RSS) 27 CPU#2CPU#1 NIC#1 NIC#2 net_device 構造体他@NIC#1 softnet_data 構造体@CPU#1 net_device 構造体他@NIC#2 softnet_data 構造体@CPU#2 TX #1 TX #2 RX #1 RX #2 TX #1 TX #2 RX #1 RX #2 napi_struct 構造体はキューの数だけ 用意される
  • 28. メモリ Receive Side Scaling (RSS) 28 CPU#2CPU#1 NIC#1 NIC#2 net_device 構造体他@NIC#1 softnet_data 構造体@CPU#1 net_device 構造体他@NIC#2 softnet_data 構造体@CPU#2 TX #1 TX #2 RX #1 RX #2 TX #1 TX #2 RX #1 RX #2 パケット (1) パケットを受信した NIC#1 は受信したパケットのヘッダ情報 からキューを決定しそのキューの 受信バッファに書き込む
  • 29. メモリ Receive Side Scaling (RSS) 29 CPU#2CPU#1 NIC#1 NIC#2 net_device 構造体他@NIC#1 softnet_data 構造体@CPU#1 net_device 構造体他@NIC#2 softnet_data 構造体@CPU#2 TX #1 TX #2 RX #1 RX #2 TX #1 TX #2 RX #1 RX #2 パケット (2) NIC#1 は割り込みを使って CPU#2 に通知
  • 30. メモリ Receive Side Scaling (RSS) 30 CPU#2CPU#1 NIC#1 NIC#2 net_device 構造体他@NIC#1 softnet_data 構造体@CPU#1 net_device 構造体他@NIC#2 softnet_data 構造体@CPU#2 TX #1 TX #2 RX #1 RX #2 TX #1 TX #2 RX #1 RX #2 パケット (3) CPU#2 は実行中のタスクの 状態を保存し割り込みハンドラ に移行する
  • 31. メモリ Receive Side Scaling (RSS) 31 CPU#2CPU#1 NIC#1 NIC#2 net_device 構造体他@NIC#1 softnet_data 構造体@CPU#1 net_device 構造体他@NIC#2 softnet_data 構造体@CPU#2 TX #1 TX #2 RX #1 RX #2 TX #1 TX #2 RX #1 RX #2 パケット (4) CPU#2 は NIC#1 の自分に 対する割り込みを無効化
  • 32. メモリ Receive Side Scaling (RSS) 32 CPU#2CPU#1 NIC#1 NIC#2 net_device 構造体他@NIC#1 softnet_data 構造体@CPU#1 net_device 構造体他@NIC#2 softnet_data 構造体@CPU#2 TX #1 TX #2 RX #1 RX #2 TX #1 TX #2 RX #1 RX #2 パケット (5) CPU#2 の softnet_data 構造 体の poll_list リストに NIC#1 の RX#2 に対応する napi_struct 構 造体をリンクする
  • 33. メモリ Receive Side Scaling (RSS) 33 CPU#2CPU#1 NIC#1 NIC#2 net_device 構造体他@NIC#1 softnet_data 構造体@CPU#1 net_device 構造体他@NIC#2 softnet_data 構造体@CPU#2 TX #1 TX #2 RX #1 RX #2 TX #1 TX #2 RX #1 RX #2 パケット (6) 割り込みハンドラは終了しスケ ジューラが呼び出され通常はそのま ま ksoftirqd カーネル・スレッドに 処理が移る
  • 34. メモリ Receive Side Scaling (RSS) 34 CPU#2CPU#1 NIC#1 NIC#2 net_device 構造体他@NIC#1 softnet_data 構造体@CPU#1 net_device 構造体他@NIC#2 softnet_data 構造体@CPU#2 TX #1 TX #2 RX #1 RX #2 TX #1 TX #2 RX #1 RX #2 パケット (7) ksoftirqd は softnet_data 構造体 の poll_list にリンクされた napi_struct 構造体の受信バッファか らパケットを取り出し受信処理を行う
  • 35. メモリ Receive Side Scaling (RSS) 35 CPU#2CPU#1 NIC#1 NIC#2 net_device 構造体他@NIC#1 softnet_data 構造体@CPU#1 net_device 構造体他@NIC#2 softnet_data 構造体@CPU#2 TX #1 TX #2 RX #1 RX #2 TX #1 TX #2 RX #1 RX #2 (8) 処理が終わったら NIC#1 の自 分に対する割り込みを有効化する
  • 36. 性能測定・構成 3613 性能測定・構成 Unidirectional Bidirectional DELL PowerEdge R410! Xeon L5520 @ 2.27GHz x 2(8 cores)! Fedora 15/Linux Kernel 3.0.6(2.6.40.6) DELL PowerEdge R410! Xeon L5520 @ 2.27GHz x 2(8 cores)! Fedora 15/Linux Kernel 3.0.6(2.6.40.6) Spirent TestCenter Spirent TestCenter Intel X520-SR2! 10G NIC(82599EB)! SourceForge ixgbe Intel X520-SR2! 10G NIC(82599EB)! SourceForge ixgbe 128flow 128flow 128flow Loss < 0.01% Loss < 0.01%30 sec.30 sec.
  • 37. RSS による性能改善 (Unidirectional) 37 0Mbps 2,000Mbps 4,000Mbps 6,000Mbps 8,000Mbps 10,000Mbps 64 128 256 512 1024 1280 1518 RSS=1,1 CPU:0,0 RSS=1,1 CPU:4,6 RSS=4,4 CPU:0,2,4,6 RSS=8,8 CPU:0,1,..,7
  • 38. RSS による性能改善 (Unidirectional) 38 0pps 1,000,000pps 2,000,000pps 3,000,000pps 4,000,000pps 5,000,000pps 6,000,000pps 64 128 256 512 1024 1280 1518 RSS=1,1 CPU:0,0 RSS=1,1 CPU:4,6 RSS=4,4 CPU:0,2,4,6 RSS=8,8 CPU:0,1,..,7
  • 39. RSS による性能改善 (Bidirectional) 39 0Mbps 4,000Mbps 8,000Mbps 12,000Mbps 16,000Mbps 20,000Mbps 64 128 256 512 1024 1280 1518 RSS=1,1 CPU:0,0 RSS=1,1 CPU:4,6 RSS=4,4 CPU:0,2,4,6 RSS=8,8 CPU:0,1,..,7
  • 40. RSS による性能改善 (Bidirectional) 40 0pps 1,000,000pps 2,000,000pps 3,000,000pps 4,000,000pps 5,000,000pps 6,000,000pps 64 128 256 512 1024 1280 1518 RSS=1,1 CPU:0,0 RSS=1,1 CPU:4,6 RSS=4,4 CPU:0,2,4,6 RSS=8,8 CPU:0,1,..,7
  • 41. NUMA とメモリの距離 41 #0 CPU ソケット#0 #2 #4 #6 メモリ・コントローラ#0 メモリ・ノード#0 #1 CPU ソケット#1 #3 #5 #7 メモリ・コントローラ#1 メモリ・ノード#1 NIC#1 NIC#2
  • 42. NUMA とメモリの距離 42 #0 CPU ソケット#0 #2 #4 #6 メモリ・コントローラ#0 メモリ・ノード#0 #1 CPU ソケット#1 #3 #5 #7 メモリ・コントローラ#1 メモリ・ノード#1 #0 #1 #2 #3 #4 #5 #6 #7 #0 #1 #2 #3 #4 #5 #6 #7 NIC#1 NIC#2
  • 43. ロス許容と性能評価 43 0Mbps 4,000Mbps 8,000Mbps 12,000Mbps 16,000Mbps 20,000Mbps 64 128 256 512 1024 1280 1518 RSS=8,8 Loss<0.01 RSS=8,8 Loss<0.1 RSS=8,8 Loss<1.0
  • 45. 割り込みモデルとポーリング・モデル (再 45 NIC CPU ① NIC が受信したパケットを
 受信バッファに書き込む ② NIC が割り込みで CPU に
 通知 ③ CPU は実行中のタスクの
 状態を保存し割り込み
 ハンドラを実行 ② CPU は定期的に受信バッファ
 を確認し新しいパケットが
 届いていたら処理する ① 受信したパケットを受信バッ ファに書き込む NIC CPU 割り込みモデル ポーリング・モデル
  • 46. 参考) Intel DPDK • Intel 社がオープン・ソース (BSD ライセンス) で開発しているデータ・ プレーンを開発するための SDK (Data Plane Development Kit) • http://www.dpdk.org/ • 割り込みではなくすべてポーリングでパケット処理を行う • Linux の UIO (デバイスをユーザ・ランドから直接制御するための仕 組み) を用いて割り込みモードではなくポーリング・モードで動作す るドライバ (PMD: Poll-Mode Driver) で NIC を制御する • 実はオープン・ソースになっていないだけで UIO でなくカーネル 内で動作させるモノも存在する? • どこにも define されていないのに存在する大量の ifdef RTE_EXEC_ENV_BAREMETAL • DMA 転送されたパケットを CPU の LLC にプリ・フェッチしていた りページ・サイズ大きくすることで TLB ミスがあまり起こらないよ うにしていたりと小細工も満載 46
  • 47. 参考) Intel DPDK 47 TRANSFORMING COMMUNICATIONSIntel Confidential8 TRANSFORMING COMMUNICATIONS8 IA パフォーマンスの年々の向上 iAでのPv4 レイヤー 3 フォワード性能 0 20 40 60 80 100 120 140 160 2006 2x2C Sossaman 2.0 GHz 2007 2x4C Clovertown 2.33 GHz 2008 2x4C Harpertown 2.33 GHz 2009 2x4C Nehalem 2.53 GHz 2010 2x6C Westmere 2.40 GHz 2011 1x8C Sandy Bridge 2.0 GHz 2012 2x8C Sandy Bridge 2.0 GHZ (PCIe* Gen2 の機器でテスト) 標準の“off-the-shelf” IAプラットフォームで魅力的な性能を提供します * Other names and brands may be claimed as the property of others. 64B Mpps 10G 40G 100G 内蔵PCIe* コントローラー 80G 内蔵メモリーコントローラー の登場 + インテル® DPDK Internet Week 2012 D1 パケットフォワーディングを支える技術 3) パケットフォワーディング高速化技術(幸村 裕子/インテル株式会社)から引用 https://www.nic.ad.jp/ja/materials/iw/2012/proceedings/d1/d1-Kohmura.pdf