Skip to main content

Google Cloud の vCPU は物理コアではない気がする

最近 Google Cloud を使うことがあり、CPU の特性調査をした際に気づいたことがありました。
それは、vCPU は物理コアと1対1で紐づいているわけではなさそう?ということでした。

なにがあったか

CPU の特性を調査する際に、ワークロードのベンチマークを取りました。その際に、CPU 使用量が50%より高くならないな?となったのでした。
正確には、GKE 上で検証を実施し、 kubectl top pod の結果がノードの CPU 数 * 500m となることを確認しました。
ワークロードの効率が悪いのかなと思ったのですが、よくノードの設定を見ると、以下のような項目があることを発見しました。
Untitledn4-standard-2(2 vCPU、1コア、8GBメモリ) とあるように、 「コアあたり 2vCPU」がデフォルトの設定ですね。
物理コアを論理的に2分割して見せているようです。なるほど、半分になるわけだなあ。
コアあたり1vCPUとすると、ノード上の見かけのコア数 (/proc/cpuinfo で確認できる数) は半分になりますが、きれいにコアを使い切れる挙動を示しました。
HT などの CPU の機能を使っているのではなく、おそらくエミュレーションの層でなんかやってそうです。
極端に CPU バウンドなワークロードを動かす場合、「コアあたり 1vCPU」 を選んでおくと、オーバーヘッドが減ってお得そうでした。