CPUベンチマークの採取方法

CPUの性能を調べる方法を紹介、というかメモです。

次の記事が長くなりすぎないように分割したやつ。



CPU Benchmark Charts

最も手軽にCPU性能を調べられるのが、このサイトです。

  • PassMark Software – CPU Benchmark Charts

  • 私の場合は、サイドバーの『Single Thread』を眺めたり、ヘッダの検索から型番のページに行って、Single Thread の値を確認したりします。

    マルチコアでの総合力も大事なんですが、個人的には Single での性能がレスポンスタイムなどに直結するので、重要視しています。


    CPU情報

    /proc/cpuinfo

    Linux なら、これで大体の情報を確認できます。

    model name で型番を確認できます。が、最近のAWSで新しいArmのCPUだと、見れません。

    physical id が物理的なCPUの番号で、
    core id がCPU内でのコア番号、
    先頭の processor がスレッド番号です。

    例えば、1つのサーバーに4core, multi-threaed のCPUが2つ搭載されている場合、physical id が [0-1]、さらにそれぞれに core id が [0-7]、processor が [0-15] となります。core id 0 の中の multi-thread の番号が 0,1 が対なのか、0,4 が対なのかは忘れました。

    クラウド時代なので、もうそこまで気にしてませんが、プライベートクラウドを作った時は、子への割り当てスレッドが重複しないように、とか考慮してたので重要なポイントでした。

    lscpu

    このコマンドでは、また少し違った情報が見れます。


    top

    普通に top を表示すると、全体100%として見れますが

    表示中に 1 を入力すると、スレッド表示になります。これは vCPU=40 で中略したやつ。

    スレッドごとの使用率を診ると、想定通りの使用スレッド数になっているかとか、平均的な使用率なのか、master的プロセスのみ多く使っているのか、といったことを確認することができます。


    姫野ベンチマーク

    以下、Amazon Linux 2 AMI での準備内容になります。

    lha

    lha コマンドがパッケージでなさげなので、入れます。


    himeno mpirun

    ダウンロードページはこちら

    インストールします。並列数ごとにファイルを用意するのは何か間違ってそうと思いつつ。

    実行するとこんな感じ。最後の MFLOPS measured の値をメモります。


    OpenSSL speed

    思いっきり特化した処理内容だけど、簡単なので。多分入っている openssl で、暗号化方式やスレッド数を指定して実行します。

    最後の一番うしろの値で比較など。


    PassMark PerformanceTest

    冒頭のCPU Benchmark Chartsを公開しているところのテストツールです。

    上記ページにも書いてありますが、ちょい不足を補いつつ準備します。

    実行するとこんな感じ。最下部にあるとおり、A を入力すると全部実行し始めるので待ちます。

    CPU Mark が総合結果ですが、処理ごとに結構差が出たりするので、真面目に比較する場合はそれぞれの数値を比較するとよいです。

    また、試験内容は更新されていくものらしいので、昔の数値と比べるのはよくないようです。


    ミドルウェアで負荷試験

    CPUは新しいほど高性能な傾向にはありますが、処理内容や並列度合いで、それなりに得意不得意があったりするので、よほど世代が離れていなければ絶対早くなるというわけではありません。

    なので、CPUテストは参考程度にして、実際に動かすミドルウェアなどで試験するのが肝要です。

    アプリケーション・サーバー

    いわゆるWEBサーバーなど、並列に負荷分散できる環境の場合、負荷試験ツールで試験するのも良いですが、もし本番環境が既にあって、新しいCPUとの比較をしてみたい場合、わりと簡単に計測することができます。

    既存の分散グループに対して、CPUは新しいけどOSや設定が同じサーバーをグループに投入します。分散アルゴリズムがラウンドロビンなど均等の場合、その状態で新旧の数値を見たり、グラフに残すなどして比較することで性能比を確認することができます。

    もし旧CPU使用率が 40% で、新CPU使用率が 30% ならば、性能比としては 40/30% の向上となり、入れ替えれば台数を 30/40% に削減しても、ほぼ元の平均使用率40%になり節約できる、と推算できます。

    イメージを使い回せばそれが最も確実ですが、x86 -> Arm だと作り直しが必要なので、その場合はインフラの構築がコード化されていればサクッと作り直し、念の為、単発で起動後に動作確認し、それからグループに投入すればリスクはありません。

    データベース・サーバー

    DBの場合はアプリケーションみたいにソッと混ぜて試すことができないので、キャッシュをOFFにして、クエリの値をランダムにして、クライアント接続数をvCPUの倍くらい用意してガーッとぶん回す。っていつものをテスト環境でやる感じでしょうか。

    その環境もテストデータ作成を省くならば、本番バックアップから新旧CPUで2台起動し、そこでテストすればかなりリアルな計測値となります。



    肝心なのは、あくまでCPU単体テストは参考値、実際に扱うミドルウェアやソフトウェアを通したテストこそが信用できる値ということです。

    まぁサーバーを購入していた昔なら、このへんは事前にテスト機を借りて計測して、納得してから買う。みたいな流れがありましたが……今はクラウドでポチポチ気軽に変更できるので、そこまで厳密に測定する必要なくて、費用/性能面でアプリケーションが健全に動けばよい。くらいの感覚でよいのだと思います。



    ……という感じで次記事へ派生します:-)