Xeon E5/E3とXeon 5500/5600系CPU混在環境にてvMotionするときに必要な設定についてのメモです。
VMwareにはEVC(Enhanced vMotion Capability)という機能がありますが、
SandyBridge以降ではIntel AVCという命令コードが追加されており、vSphereからはそれを無効に出来ないため、
ESX5.5ではXeon E5が混ざると5500/5600マシンからE5へvMotionするとEVCが有効でもE5から5600系に戻れなくなります。
それを防ぐためのメモです。
※E5のマシン上で既に動いているマシンについては、適用するにはPowerOff→PowerOnが必要です。
前提
EVCが有効になっていること
(5600系とE5が混ざることを想定し、Westmare世代で揃えている前提で進めます)
ちなみに、設定すると以下の内容がホストに配布されるようです。
featureCompat.evc.completeMasks = "TRUE" featMask.evc.cpuid.Intel = "Val:1" featMask.evc.cpuid.FAMILY = "Val:6" featMask.evc.cpuid.MODEL = "Val:0x25" featMask.evc.cpuid.STEPPING = "Val:1" featMask.evc.cpuid.NUMLEVELS = "Val:0xb" featMask.evc.cpuid.NUM_EXT_LEVELS = "Val:0x80000008" featMask.evc.cpuid.CMPXCHG16B = "Val:1" featMask.evc.cpuid.DS = "Val:1" featMask.evc.cpuid.LAHF64 = "Val:1" featMask.evc.cpuid.LM = "Val:1" featMask.evc.cpuid.MWAIT = "Val:1" featMask.evc.cpuid.NX = "Val:1" featMask.evc.cpuid.SS = "Val:1" featMask.evc.cpuid.SSE3 = "Val:1" featMask.evc.cpuid.SSSE3 = "Val:1" featMask.evc.cpuid.SSE41 = "Val:1" featMask.evc.cpuid.POPCNT = "Val:1" featMask.evc.cpuid.RDTSCP = "Val:1" featMask.evc.cpuid.SSE42 = "Val:1" featMask.evc.cpuid.VMX = "Val:1" featMask.evc.hv.capable = "Val:1" featMask.evc.cpuid.AES = "Val:1" featMask.evc.cpuid.PCLMULQDQ = "Val:1" featMask.evc.vt.realmode = "Val:1"
設定手順
E5を搭載したESXホストへSSHアクセスを可能にする
SSH以外にもESXシェルを有効にしてローカルコンソールから編集しても良いです。手入力になるので大変ですが。
その辺の手順は省略します。
/etc/vmware/configを編集する
編集するにあたりバックアップを取得します。
cp /etc/vmware/config /etc/vmware/config_`date +%F`
viで編集します。
vi /etc/vmware/config
以下の行を一番下に追加します(任意の場所に追加しても反映されますが)
cpuid.1.ecx = "-00-:----:----:----:----:----:----:----"
保存します
:wq
ESXホストの再起動は不要です。
E5/E3ホスト上のマシンの電源停止を行ったあと、起動する
上記設定を適用するには、一度動いているマシンを完全停止する必要があります。再起動では駄目です。
VMが起動するタイミングでVMに対して上記CPUマスクがVMに適用され、以降vMotionが出来るようになります。
vSphere6ではどうなっているか未検証です
Related articles
コメントの追加