2015年4月27日月曜日

ESXiにおけるTPSのデフォルト無効化

ESXiにおける透過的なページ共有 (TPS) によってAES暗号キーの決定に用いられるメモリタイミングの計測が可能であるとの学術研究を受けて、特定のESXi Updateよりデフォルトで仮想マシン間のTPSが行われないように変更されるようです。

【参考】セキュリティの考慮事項および仮想マシン間透過的なページ共有の禁止
http://kb.vmware.com/kb/2100628

TPSがデフォルトで無効となるvSphereバージョンならびにパッチレベルは以下の通り。
ESXi 5.0 パッチ ESXi500-201412401-BG 2014年12月4日
ESXi 5.1 パッチ ESXi510-201410401-BG 2014年10月30日
ESXi 5.5 パッチ ESXi550-201410401-BG 2014年10月16日
ESXi 6.0 2015年3月12日

Windows Vista以降、ラージページが採用され、TPSの効果はあまり期待出来ないと言われていますが、VDIなどのように同じOSやアプリケーションがたくさん集約されるような環境では活用出来た方がよいということで、有効にする方法や実態について確認してみました。

ご興味のある方は続きをどうぞ。

ESXi6ならびに上記のパッチを適用した5.xのESXiホストは、デフォルトではTPSが無効な状態となります。

vSphere Web ClientよりESXiホストを選択し、[管理]-[設定]-[システムの詳細設定]より確認出来ます。
パラメータ:Mem.ShareForceSalting
デフォルト値:2

Mem.ShareForceSaltingパラメータがデフォルトの場合、仮想マシンオプションの構成パラメータに"ソルト値"(sched.mem.pshare.salt)が存在するかしないか、存在する場合には一致するかしないかでTPSを行うかどうかが判断されます。

"ソルト値"は仮想マシンを作成しただけでは定義されないため、その場合、"vc.uuid"が比較対象となり、こちらは基本的には仮想マシンごとで一意の為、仮想マシン間でのTPSが行われないという挙動になります。

vc.uuidはvmxファイルを参照することで確認出来ます。

TPSの活用が期待出来るView環境では、プール構成時の"詳細ストレージオプション"に"透過的ページ共有の範囲"というパラメータが追加されています。(View6.1以降)
# 気付かないかもしれませんが、下にスクロールするとオプションが追加されています。(笑

このパラメータはTPSを行う範囲を定義するもので、デフォルトは"仮想マシン"となっており、他に"デスクトッププール"、"ポッド"、"グローバル"より選択が可能です。

透過的ページ共有の範囲:仮想マシン
デフォルトの"仮想マシン"では個々の仮想マシンごとにソルト値が定義されるため、同一プール内でも仮想マシン間のTPSは行われません

TPS-1 sched.mem.pshare.salt:a4396194-71fa-40c7-8170-97839912e22b

TPS-2 sched.mem.pshare.salt:81538b21-53b5-497d-acb0-1c167219a3f4

透過的ページ共有の範囲:デスクトッププール
"デスクトッププール"を設定した場合、プール内の仮想マシンにおいて同一のソルト値が定義され、同一プール内の仮想マシン間でTPSが行えるようになります。

TPS-1 sched.mem.pshare.salt:tps-pool-78a57464-3262-4bb1-a5a2-1c220670ec50

TPS-2 sched.mem.pshare.salt:tps-pool-78a57464-3262-4bb1-a5a2-1c220670ec50

但し、TPSを有効にしたとしても、通常運用時はラージページは対象外となります。

ラージページは通常のページサイズである4KBに比べ、2MBと大きな領域でメモリがアサインされるため、その内容が完全に一致する可能性が低く、一致するかどうかをビット単位で比較するオーバヘッドが非常に大きいためです。

では、どのような時にTPSが行われるのかと言うと、ESXiホストの空きメモリが不足した(オーバーコミットされた)時です。

ESXiホストは、仮想マシンに割り当てるメモリが不足した場合、仮想マシンのスワップアウトを行うよりも、ESXiホストはラージページメモリに対して、2MBではなく4KBに区切ってTPSを図ることで空き容量を確保しようとします。
# スワップアウトによるパフォーマンス劣化よりはTPSのオーバーヘッドの方が小さいため。

【参考】ハードウェア MMU システムでの透過的なページ共有(TPS)
http://kb.vmware.com/kb/2078411

実際にプールの仮想マシン台数を増やしてESXiホストの空きメモリを少なくしてみました。

すると、TPSが行われました。

但し、共有されているメモリ内容まで確認が出来ていないので、本当に他の仮想マシンとで共有が行われているかは不明ですが。。

ちなみに、Viewプールによるソルト値の一致がなくとも、ESXiホストのメモリがオーバーコミットされると、同一仮想マシン内でのメモリ共有は行われます

"ソルト値"のないプールに属していないスタンドアロン仮想マシンでも、ESXiホストのメモリオーバーコミット時は、TPSが行われました。

このことは以下のドキュメントにも記載がありますが、下のイメージで言うところの「a」「c」が同一仮想マシン内でのTPS、「b」が異なる仮想マシン間でのTPSとなります。


【参考】メモリ使用量の測定とタイプの識別
http://pubs.vmware.com/vsphere-60/index.jsp#com.vmware.vsphere.resmgmt.doc/GUID-BFDC988B-F53D-4E97-9793-A002445AFAE1.html

0 件のコメント:

コメントを投稿