Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Cost of ovs receiving process

1,093 views

Published on

  • Login to see the comments

  • Be the first to like this

Cost of ovs receiving process

  1. 1. Cost of OVS receiving process @syuu1228
  2. 2. http://bit.ly/kernelvm_study_1http://bit.ly/kernelvm_study_1_slide
  3. 3. Bridgeの話
  4. 4. FDB: Forwarding Database• 256エントリのフォワーディング先データベース(キャッシュ)• 構造体エントリ • fdb->addr: MACアドレス • fdb->dst: フォワード先NIC• パケット着信毎に以下の作業を実施 • FDB上のエントリのaddrとパケットの送信元アドレスを順に比較して、一致するエ ントリがあったらdstを更新 • 無かったら新しいエントリを作成 • FDB上のエントリのaddrとパケットの送信先アドレスを順に比較して、一致するエ ントリがあったらdstへパケット転送 • 無かったら全ポートにパケット転送(flooding)
  5. 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)
  6. 6. OpenVSwitchの話
  7. 7. Key作成• ovs_flow_extract()でskbからsw_flow_key構造体へ以下の要素をコピー • MACアドレス - memcpy • IPv4 • アドレス - pointer • プロトコル - value • TOS - value • TTL - value • TCP • ポート番号 - value
  8. 8. ハッシュ生成• jhash関数でsw_flow_key構造体をハッ シュ
  9. 9. テーブルルックアップ1. ハッシュ値からbucketを検索2. bucketをイテレートして各エントリのkey と先ほど作ったkeyをmemcmp3. 一致したらreturnで返す4. 見つからなかったらユーザランドのデー モンへ聞きに行く
  10. 10. ACTIONの実行• テーブルに登録されていたエントリに はフローに対するACTION群が登録さ れている• ACTIONを開いて順に実施
  11. 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. 12. Netlink• ユーザランドとのやり取りにNetlinkを使用 (よく知らないので詳しい人教えて下さい)• ソケットインタフェースでカーネルと通信でき る?• ユーザランドとのパケットやり取りに使用• ユーザランドからカーネルモジュールをコント ロールするのにも使用?
  13. 13. 疑問点• 何故skb->hashを使わないでわざわざkeyを作って改めて ハッシュを計算するのか(非効率じゃない?)• どんな時にユーザランドへ上げるのだろう?(特に OVS_ACTION_ATTR_USERSPACE)• bridge compatibleなioctlのハンドラはどこ? →mainlineからは削られてたっぽい?• OVS独自なコントロール操作はどこ?• OVS_ACTION_ATTR_SAMPLEの用途は?

×