最近AMDの素晴らしいプロセッサであるEPYCを触ることが出来たのでちょっとだけ記事にします。これからはEPYCの時代が来そうですね!(もう来てるか)
EPYCプロセッサはNPS (Node Per Socket)という機能がありまして、詳しくはこの記事をご覧ください
進化し続けるメモリのアーキテクチャー!! | Dell eカタログサイト
NPSはCPUとメモリを最大4つに分割して処理をしてくれるというイメージです。
そのため、Node1のCPUの処理はNode1のメモリを使うので、メモリとCPUの距離が短くなり、メモリアクセスが改善するというわけらしいです。
この機能はNUMAというのを使っておるらしく、2ソケットのラックサーバーなどに使われる技術を活用しているとかです。
というわけでこのNPSとやらを活用したらHyper-Vの仮想マシンはどのようにパフォーマンスに影響が出るのか調査します。
NPS変更の調査結果
サーバースペック
- AMD EPYC milan搭載サーバー
仮想マシンのスペック
- EPYC搭載 vCPU 4つ
- メモリ 4GB
- SSD搭載
NPSは1と2と4が設定できます。
NPS1の場合
NPSを何も設定しない場合がNPS1です。つまりどのコアもどのメモリにアクセスしてもOKというわけです。
端っこのコアから端っこのメモリにアクセスしたら遅くなるというイメージです。
くそ適当ですがこれがイメージ図です。真ん中の四角がCPUで右と左にある長方形がメモリで16スロットに分けています。
丸がコアです。
というわけでベンチがこちらです。ベンチはnovabenchで取っています。
誤差をなるべく縮めるために5回取って平均値に近いものを挙げています。
違いはまだわかりませんので次に行きましょう
NPS2の場合
NPS1ではどのメモリもアクセスできましたが、真ん中で分割されているような状態のNPS2ではメモリがアクセスする距離が短くなっています。
イメージ図を見てもらった方が早いと思います。左側のコアは右側のメモリにアクセスできないので、一番遠くのメモリでも右側の一番下という具合です。
ではベンチはこちらです。
CPUのパフォーマンスが向上しています。少なくともNPSを設定する意義はありそうです。
NPS4の場合
こちらもイメージを見たほうが早しですね
左上のコアは左下にもアクセスできないのでかなりメモリアクセスの距離が短くなっています
ベンチはこちらです。
そんな変わってないかも。。。。
ただRAM Speedは改善されていると思います。
NUMAノードにまたがるメモリ割り当てをオフにする
Hyper-VマネージャーからHyper-Vの設定に行くと以下の画像のような設定があります
この設定をオフにすると実行可能なVM数を減らす代わりに同一NUMAノード内のメモリしか割り当てないためにパフォーマンスが改善すると思われます。
(さっきまでNUMAノードをまたがってメモリにアクセスしていたのなら今までの話はなんだったんだとなりますが。。。。。。)
僕はサーバーにVMを詰め込むのが仕事なので使いませんが、これを使えばパフォーマンスが改善されるかもしれません。
設定してベンチをとってみましょう。(設定するにはチェックボックスをオフにした上でHyper-Vマネージャーの操作のところにあるサービスの停止をしたあとにサービスの開始をする必要があります)
ベンチがこちら
変わらない。。。。もしかしたらHyper-VのいうNUMAは2ソケットCPUとかのNUMAのことでNPSにはこの設定は対応していないとかありえるかもですね。。。
まとめ
- Hyper-VでおすすめのNPSは2か4
- NUMAノードにまたがるメモリ割り当てはオンでOK
簡単な検証でしたがこのような結果となりました。
EPYCプロセッサは消費電力とコア数のバランスがXeonよりも優れており、次のGenoa世代でも大幅進化しているみたいなのでサーバーのスタンダードはEPYCになっていくかもしれませんね。。。。