ハッシュポリシー xmit_hash_policyオプション

はじめに

Linuxのネットワークボンディングのいくつかのモードで利用されるxmit_hash_policyオプション(xmittransmitの略)の詳細をまとめた

オプションまとめ

Layer2

  • Layer2の情報を利用したハッシュポリシー
    • Layer2はOSI参照モデルのデータリンク層
  • xmit_hash_policyオプションのデフォルト値
  • 802.3adに準拠したアルゴリズム
  • 計算式
    • hash値 = 送信元MACアドレス XOR 送信先MACアドレス XOR パケットタイプID
    • 使うSlaveの番号 = (hash値 ÷ Slaveの数) の余り

Layer 2+3

  • Layer2とLayer3の情報を利用したハッシュポリシー
    • Layer3はOSI参照モデルのネットワーク層のこと
  • 802.3adに準拠したアルゴリズム
  • 計算式
    • hash値1 = 送信元MACアドレス XOR 送信先MACアドレス XOR パケットタイプID
    • hash値2 = hash値1 XOR 送信元IPアドレス XOR 送信先IPアドレス
    • hash値3 = hash値2 XOR (hash値2を16bit右シフト)
    • hash値 = hash値3 XOR (hash値3を8bit右シフト)
    • 使うSlaveの番号 = (hash値 ÷ Slaveの数) の余り
  • もし、プロトコルがIPv6だった場合、IPアドレスはまずipv6_addr_hashを用いてハッシュ化される
  • 特にほとんどの宛先に到達するためにL3スイッチが必要な環境で、L2スイッチのみよりもバランスの取れたトラフィックの分散を提供することを目的としている

Layer 3+4

  • Layer3とLayer4の情報を利用したハッシュポリシー
    • Layer4はOSI参照モデルのトランスポート層のこと
  • 計算式
    • hash値1 = TCPヘッダーのSource Port(16bit)とDestination Port(16bit)を連結した値(32bit)
    • hash値2 = hash値1 XOR 送信元IPアドレス XOR 送信先IPアドレス
    • hash値3 = hash値2 XOR (hash値2を16bit右シフト)
    • hash値 = hash値3 XOR (hash値3を8bit右シフト)
    • 使うSlaveの番号 = (hash値 ÷ Slaveの数) の余り
  • もし、プロトコルがIPv6だった場合、IPアドレスはまずipv6_addr_hashを用いてハッシュ化される
  • 802.3ad に完全には準拠していない
    • 詳細を調査中

encap 2+3

  • Layer2+3と同じ計算式でSlave番号を求めるが、カプセル化を行うプロトコルで通信している場合、ヘッダーフィールドの値を取得するためにskb_flow_dissectに依存しているため、内部ヘッダーを利用する可能性がある
    • カプセル化されたフローに従ってパケットが分散されるため、パフォーマンスが向上する可能性がある

encap 3+4

  • Layer3+4と同じ計算式でSlave番号を求めるが、カプセル化を行うプロトコルで通信している場合、ヘッダーフィールドの値を取得するためにskb_flow_dissectに依存しているため、内部ヘッダーを利用する可能性がある
    • カプセル化されたフローに従ってパケットが分散されるため、パフォーマンスが向上する可能性がある

参考