見出し画像

CPU使用率と処理能力の関係は比例ではない            

1.はじめに

こんにちは。株式会社SHIFT 技術統括部の力石です。主にお客さまのアプリケーション開発プロジェクトで、性能改善、品質向上などの非機能関連のコンサルティングをしています。

システムの将来のマシンリソース予測をする際に、CPU使用率と処理量の関係の考え方を誤解しているのを何度か見かけました。この記事では実例を使いながらHTによる処理能力向上を説明します。

執筆者プロフィール:力石 知也
大手SIなどでアプリケーション開発からインフラ関連まで幅広く約30年経験。現在は性能改善、品質向上などの非機能関連のコンサルティングを実施。

2.どのように考えますか?

以下例の場合、あなたはどのように考えていますか?
商用環境でLinuxのAPサーバーはアクティブ・アクティブの2台構成で、冗長構成となっています。両サーバーとも稼働している状況で、両サーバーともCPU使用率が40%でした。片方のサーバーが障害で停止した場合、もう片方のサーバーですべてを処理します。そのとき稼働しているサーバーのCPU使用率は何%になるでしょうか?
前提条件としてCPUのHTは有効となっています。

いろいろな条件があるので簡単に答えは出ませんが、細かい条件を無視した場合、両サーバーの合計値の80%と考えて障害発生時も問題なく動作可能と結論づけてないでしょうか?今回お話しするのは、HT使用時の机上計算で100%を超えてしまい、2台構成時の処理量を達成できないというお話です。

3.ハイパースレッディング・テクノロジーとは

どのように考えればいいかを説明する前に、以下の前提とします。

  • サーバーのCPUはIntelやAMDを使用しており、ハイパースレッディング・テクノロジー(※)を使用しています。
    ※インテル社の商標で一般的な名称はSimultaneous Multi-Threading(SMT)です。 ※この記事では略してHTとします
    ※OS上のプロセスの中で動く、スレッドとは別の概念です

まずはHTがどんな技術か、Wikipedia(https://ja.wikipedia.org/wiki/ハイパースレッディング・テクノロジー)の内容を要約すると以下となります。

HTとは、従来CPUのコア1つに1つしか搭載していなかったコードを実行する機能を複数搭載して コードの処理能力を向上するものです。これにより、HTを搭載・有効化したCPUでは、 ホストOSからはあたかも実際に搭載しているコア数より多くのコア(疑似コア)を搭載しているように見え、 スレッドやプロセスの割り当てを個々の疑似コアに対してスケジューリングできるようになります。 この見かけのプロセッサコア数を論理コア数または論理プロセッサ数と呼び、 実際にCPUに実装されているコアの数を物理コア数または物理プロセッサ数と呼ぶことがあります。

HTをどのようにして実現しているか興味のある方は、ネットを検索して調べてみてくださ い。要約すると次のようになります。
CPUの内部は、命令を翻訳する部分、翻訳した命令を実行する部分、 命令を実行する箇所は整数の計算・少数の計算・論理演算などと分かれており、 それぞれ複数存在します。CPU内でそれらがすべてがいつも動いている訳ではありません。 論理的にプロセッサを増やして、動いていない部分を使用して処理量を増やす技術です。

4.PC上でHTが有効か確認する方法

実際にあなたが使用しているWindowsでHTが有効か確認してみましょう。タスクマネージャでコアと論理プロセッサ数の欄をみてください。 それぞれの値が違う場合はHTが有効になっています。 以下の例では、コア:4 論理プロセッサ:8となっています。 8個もありますので、1コアに比べて8倍も速いと考える間違いです。
また値が同じ場合はHTが無効になっており、HTが使えれば2倍速くなるのに... とがっかりするのも間違いです。

5.処理能力を実測

何倍になるのかを実測した結果が以下となります。

実測例1

測定条件

  • CPU:Intel Core i7 4800M

  • OS:Windows 11

測定方法
BIOSでHTの有効/無効を変更して、ベンチマーク(Passmark※)を取得し値を比較します。ベンチマーク結果は値にばらつきがありますが、最大能力で比較をするため最大値を採用します。
https://www.passmark.com/japanese/index.php を使用します。数多くのCPU・メモリ・SSDなどの結果が取得できるため私のお気に入りです。

測定結果

ベンチマークの値は、HTを有効にした場合、無効時に比べて7%増えています。

実測例2

測定条件

  • CPU:AMD Ryzen 5700U

  • OS:Ubuntu Server 22.04

測定方法
CPUのみ使用する(ディスクI/Oが発生しない)処理の多重度を1から16まで変化させながら、CPU使用率と処理量の関係を調べます。
※経験上LinuxにおいてCPU使用率が50%まではHTが動いていない状態、50%以上はHTが動いている状態になるため、50%を境にHTによる効果がわかります。

測定結果

CPU使用率50%まではHT未使用状態なので、CPU使用率50%時の処理能力を100%とした場合、CPU使用率100%時の処理能力は53%増えています。

実測例3

測定条件

  • CPU:Intel Corei7 12700

  • OS:Windows 11

測定方法
タスクマネージャを使用すると、プロセスが使用する論理プロセッサを固定化することができます。HTが有効になっているので1つの物理コアに2つの論理プロセッサが紐付いており、ここではそれぞれ論理プロセッサ1,2とします。
CPUのみ使用する(ディスクI/Oが発生しない)処理を、1多重で動かす際に論理プロセッサ1に紐付け、2多重で動かす際は論理プロセッサ1と論理プロセッサ2にそれぞれ紐付けて、処理時間の変化からHTの効果を調べます。

測定結果

HT状態の場合に2多重合わせた処理量は1.19倍にしかなっていません。(9.43÷7.90≒1.19)
単純化して考えると、このサーバーが1物理コア、2論理プロセッサだった場合、 1多重の場合はCPU使用率50%で7.90処理/秒。 2多重の場合はCPU使用率100%で9.43処理/秒となります。 HT状態になってCPU使用率は2倍になっても処理量は19%増えていません。

6.ネット上の情報

実測例1と2の結果だと効果が7%と53%で大きく違いますが、どちらの値も実測値なので正しい値です。
一般的にはどの程度向上すると言われているか、Google検索の結果は以下となります。

e-words.jpの場合

最良の場合で1クロックあたり20~30%程度の高速化
https://e-words.jp/w/ハイパースレッディング.html

Intelのサイト(1つ目)の場合

ハイパースレッディング・テクノロジーは CPU スループットをサーバーアプリケーションで最高 30% 向上することが可能です。
https://www.intel.co.jp/content/www/jp/ja/gaming/resources/hyper-threading.html

Intelのサイト(2つ目)の場合

ハイパー・スレッディング・テクノロジを有効にしたインテル Xeon プロセッサ MP では、一般的なサーバ・アプリケーション・ベンチマークで最大30% の性能向上が認められます。実測で16~28%向上した。
https://www.intel.co.jp/content/dam/www/public/ijkk/jp/ja/documents/developer/vol6iss1_art01_j.pdf

Oracle社の資料の場合

Exadata関連の資料で18%向上の記述あり。

YouTubeで見つけた内容の場合

HT無効の方が15%速い
https://www.youtube.com/watch?v=J5W5ULzxZGI

7.HTによる性能向上はどう判断すれば良いのか?

これらからわかるように、HTの効果はxx%向上と決まった値はありません。 アプリケーション、CPUメーカー、CPUの世代によって変わってきます。 机上計算が必要でIntelのCPUを使用しているのなら、上記のIntelのページに載っている16~30%の値を使用するのがお勧めです。 例えば30%の値を採用した場合、CPU50%時の処理量を50とした場合、CPUが50~100%に上昇しても処理量は15※しか上昇せず、CPU使用率100%になっても処理量は65にしかなりません。 最初にあげた質問の場合、1サーバーのCPU使用率40%で処理量が40とした場合、2サーバーで処理量が80になります。1台の処理最大量は65なので、2サーバー分の処理ができないという結論になります。 ※(100-50)×0.3=15

正確な値が必要であればで、実際に動かすアプリケーションを動かして実測することをお勧めします。そうするとより精度の高い結果が得られます。

8.HT以外にも考えることがあります

ここまでの内容は理解できたでしょうか?しかし最近はこれだけではありません。 VMwareなどのVirtual Machine(以下VM)や、Cloudを使用しシステムを構築することが多くなってきました。その場合、1台の物理マシン上に複数のVMが動いています。その場合は他にも考慮する点が出てきます。その内容は別の機会にお話したいと思います。


|あわせて読みたい関連記事

|この公式ブロガーの他の記事

お問合せはお気軽に
https://service.shiftinc.jp/contact/

SHIFTについて(コーポレートサイト)
https://www.shiftinc.jp/

SHIFTのサービスについて(サービスサイト)
https://service.shiftinc.jp/

SHIFTの導入事例
https://service.shiftinc.jp/case/

お役立ち資料はこちら
https://service.shiftinc.jp/resources/

SHIFTの採用情報はこちら
https://recruit.shiftinc.jp/career/

PHOTO:UnsplashFrancesco Vantini