VMware ESXの大きな特徴の1つに、標準機能で柔軟なNICチーミングが実現できることがあげられる。
NICチーミングと言えば、冗長性の確保と負荷分散による帯域の有効活用の2つの目的があるが、自動での負荷分散については3つのアルゴリズムを選択できる。このアルゴリズムの選択と物理スイッチ側のLink Aggregationの設定には関連性がある。具体的には、IPハッシュベースの場合は物理スイッチ側でLink Aggregationが必須であり、MACハッシュベースおよびポートIDベースの場合にはLink Aggregation禁止となっている。特に後者は「禁止」という点が重要だ。(http://kb.vmware.com/kb/1001938)
禁止の理由は「リバースチーミング(Reverse Teaming)」と呼ばれる実装。これはポートIDベースやMACハッシュベースの場合にはLink Aggregationされていないことを前提に、マルチキャストとブロードキャストがチーミングされた複数のNICから重複して仮想マシンに到達することを防ぐために、仮想マシンが送信に使用している物理NIC以外からのパケットをドロップするという機能。これは物理ネットワークにおけるReverse Path Forwardingと呼ばれるマルチキャストの重複転送を防ぐ機能を参考にした機能で、万一Link Aggregationされていると、ドロップすべき物理NICからのみパケットが受信され、結局仮想マシンには届かないという事態が発生しうる。
ここまでは物理スイッチでLink Aggregationを有効にするか無効にするかというだけの話だが、それでは、同じ仮想スイッチ(同じNICチーミング)を使用する複数のポートグループで負荷分散のアルゴリズムを分けて併用したい場合はどうすればよいだろうか。本来は、Link Aggregation必須と禁止のグループが共存することはできないはずだが、一つだけ抜け穴がある。それは、リバースチーミングを無効にしてしまうこと。リバースチーミングのオフは、ESXの詳細設定(Advanced Settings)のNet.ReversePathFwdCheckを0に設定することで実現できる。もちろん、この場合にはアルゴリズムに関わらず物理スイッチ側ではLink Aggregationが必須になる。さもなければ、ブロードキャストやマルチキャストは、チーミングを構成する物理NICの枚数だけ複製され、重複して仮想マシンに届くことになる。
なお、この設定が正式サポートである可能性は低いと思われる。