転載・引用について

ユーザ用ツール

サイト用ツール


tweet:2016:0406_01

pfSenseとXenServer

XenServerでpfSenseを使っていると、非常に限定された状況で、通信性能が激烈に劣化することがある。

この劣化は、以下の条件で発生することがわかっている。(ただし、これに限定されるかどうかは未確定)

  • 同一のXenServer上に配置されているVM間での通信である
  • XenServer側及びVM側双方でTSO(TCP Checksum Offloading)が生きている

この条件に合致する場合に、TCP Checksumがおかしくなって性能が激烈に低下するように見える。 こういう場合には、以下の設定をVM側で行えば良い

  1. /boot/loader.conf.localを作成し、以下を記載
    • net.inet.tcp.tso=0
      kern.ipc.nmbclusters=1000000	# この行は、NICがIntel系(em等)の場合に入れておくと良い
  2. /etc/sysctl.confに以下を記載
    • net.inet.tcp.tso=0
      kern.ipc.nmbclusters=1000000	# この行は、NICがIntel系(em等)の場合に入れておくと良い

加えて、rc.confなどで設定するifconfigの引数に -tso を加えると良い。自分の場合は、 -rxcsum -txcsum -tso -lro を加えている

これをpfSenseで行うには以下を実行する。

  1. System → Advanced → System Tunables を選択
    1. net.inet.tcp.tso エントリーがあれば、それを編集、なければ、「+」をクリックして作成し、値を 0 にする
    2. kern.ipc.nmbclusters エントリーがあれば、それを編集、なければ、「+」をクリックして作成し、値を 1000000 にする
  2. Diagnostics → Edit File を選択
    1. ファイル名に /boot/loader.conf.local を指定し Load をクリック
      • 以下を記載する
        net.inet.tcp.tso=0
        kern.ipc.nmbclusters=1000000	# この行は、NICがIntel系(em等)の場合に入れておくと良い

これで、再起動すればOK。

なお、XenServer側からの設定に関しては、

    xe vif-param-set uuid=VMに割り当てられているVIFのUUID other-config:ethtool-gso="off"
    xe vif-param-set uuid=VMに割り当てられているVIFのUUID other-config:ethtool-ufo="off"
    xe vif-param-set uuid=VMに割り当てられているVIFのUUID other-config:ethtool-tso="off"
    xe vif-param-set uuid=VMに割り当てられているVIFのUUID other-config:ethtool-sg="off"
    xe vif-param-set uuid=VMに割り当てられているVIFのUUID other-config:ethtool-tx="off"
    xe vif-param-set uuid=VMに割り当てられているVIFのUUID other-config:ethtool-rx="off"

とすれば良いのだが、自分の場合は面倒なので、全VMのTSO類をoffにするために以下のようなscript実行している

#! /bin/sh
# See http://cloudnull.io/2012/07/xenserver-network-tuning/
#
# for All VM's VIF NIC offloading to off.
#
for VMUUID in `xe vm-list | awk '/uuid/ {print $5}'`; do
  INSTANCEID=`xe vm-list uuid=$VMUUID | awk '/name-label/' | grep -v "Control domain" | sed 's/     name-label ( RW): //'`
  for VIFUUID in `xe vif-list vm-uuid=$VMUUID | awk '/uuid/ {print $5}' | sed '/^$/d'`; do
    echo $INSTANCEID
    xe vif-param-list uuid=$VIFUUID | grep "other-config"

    xe vif-param-set uuid=$VIFUUID other-config:ethtool-gso="off"
    xe vif-param-set uuid=$VIFUUID other-config:ethtool-ufo="off"
    xe vif-param-set uuid=$VIFUUID other-config:ethtool-tso="off"
    xe vif-param-set uuid=$VIFUUID other-config:ethtool-sg="off"
    xe vif-param-set uuid=$VIFUUID other-config:ethtool-tx="off"
    xe vif-param-set uuid=$VIFUUID other-config:ethtool-rx="off"

    xe vif-param-list uuid=$VIFUUID | grep "other-config"
  done
done

この時、XenServerのdom0側も設定したいのであれば、併せて以下のscriptを実行するのも良い。

#! /bin/sh
# See http://cloudnull.io/2012/07/xenserver-network-tuning/
#
# for All XenServer PIF NIC offloading to off
#
for PIFUUID in `xe pif-list | awk '/uuid/ {print $5}' | sed '/^$/d'`
  do
    xe pif-param-list uuid=$PIFUUID | grep "other-config"

    xe pif-param-set uuid=$PIFUUID other-config:ethtool-gso="off";
    xe pif-param-set uuid=$PIFUUID other-config:ethtool-ufo="off";
    xe pif-param-set uuid=$PIFUUID other-config:ethtool-tso="off";
    xe pif-param-set uuid=$PIFUUID other-config:ethtool-sg="off";
    xe pif-param-set uuid=$PIFUUID other-config:ethtool-tx="off";
    xe pif-param-set uuid=$PIFUUID other-config:ethtool-rx="off";

    xe pif-param-list uuid=$PIFUUID | grep "other-config"
done
このウェブサイトはクッキーを使用しています。 Webサイトを使用することで、あなたはあなたのコンピュータにクッキーを保存することに同意します。 また、あなたはあなたが私たちのプライバシーポリシーを読んで理解したことを認めます。 同意しない場合はウェブサイトを離れてください。クッキーに関する詳細情報
tweet/2016/0406_01.txt · 最終更新: 2018/05/14 13:50 by 127.0.0.1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki