More Related Content
Similar to Cost of ovs receiving process (20)
More from Takuya ASADA (20)
Cost of ovs receiving process
- 4. FDB: Forwarding
Database
• 256エントリのフォワーディング先データベース(キャッシュ)
• 構造体エントリ
• fdb->addr: MACアドレス
• fdb->dst: フォワード先NIC
• パケット着信毎に以下の作業を実施
• FDB上のエントリのaddrとパケットの送信元アドレスを順に比較して、一致するエ
ントリがあったらdstを更新
• 無かったら新しいエントリを作成
• FDB上のエントリのaddrとパケットの送信先アドレスを順に比較して、一致するエ
ントリがあったらdstへパケット転送
• 無かったら全ポートにパケット転送(flooding)
- 5. bridgeのコスト
1. foreach(fdb) /* < 256 entry */
if (memcmp(fdb->addr, source_addr))
update(fdb, source_port, source_addr)
2. foreach(fdb) /* < 256 entry */
if (memcmp(fdb->addr, dest_addr))
xmit(fdb->dst, packet)
- 7. Key作成
• ovs_flow_extract()でskbからsw_flow_key構造体へ以下の要素をコピー
• MACアドレス - memcpy
• IPv4
• アドレス - pointer
• プロトコル - value
• TOS - value
• TTL - value
• TCP
• ポート番号 - value
- 11. ACTIONの種類
• OVS_ACTION_ATTR_OUTPUT
• 指定されたNICへパケット出力
• OVS_ACTION_ATTR_USERSPACE
• ユーザランドでパケットハンドル
• OVS_ACTION_ATTR_PUSH_VLAN
• VLANタグをパケットに書き込み
• OVS_ACTION_ATTR_POP_VLAN
• VLANタグをパケットから削除
• OVS_ACTION_ATTR_SET
• パケットヘッダの書き換え(priority、MACヘッダ、IPヘッダ、TCP/UDPヘッダ)
• OVS_ACTION_ATTR_SAMPLE
• 上述のACTIONを実施するが、最終的にパケットをネットワークスタックへ引き渡
す(このノードで受信することを意図している?)
- 12. Netlink
• ユーザランドとのやり取りにNetlinkを使用
(よく知らないので詳しい人教えて下さい)
• ソケットインタフェースでカーネルと通信でき
る?
• ユーザランドとのパケットやり取りに使用
• ユーザランドからカーネルモジュールをコント
ロールするのにも使用?
- 13. 疑問点
• 何故skb->hashを使わないでわざわざkeyを作って改めて
ハッシュを計算するのか(非効率じゃない?)
• どんな時にユーザランドへ上げるのだろう?(特に
OVS_ACTION_ATTR_USERSPACE)
• bridge compatibleなioctlのハンドラはどこ?
→mainlineからは削られてたっぽい?
• OVS独自なコントロール操作はどこ?
• OVS_ACTION_ATTR_SAMPLEの用途は?
Editor's Notes
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n