Linux、macOSなどのUnix環境でCPUベンチマークツール「UnixBench」を必要パッケージごと一括インストールするシェルスクリプト(バッチ処理プログラム) ~RHEL、CentOS、Fedora、Ubuntu、macOS、Cygwinなどに対応したCPU性能評価ソフトウェア~
LinuxやmacOSなどの性能を比較する場合にはベンチマークツールを用いることが一般的ですが、広く多種類のOSで使用できなければ同じ基準で性能評価をすることはできません。
特に最近ではCPUのマルチコアによるマルチスレッド処理(複数同時処理)が一般的になってきており、単純にクロック周波数の数値だけでは性能評価が難しくなってきました。
そのようなマルチコアにも対応し、Linux、macOS、Cygwin(Windows)などのUnix系OSで幅広く使用できるCPUベンチマークソフトに「UnixBench」があります。
今回はUnix系OSのCPU性能評価に活用できる「UnixBench」をRHEL、CentOS、Fedora、Ubuntu、macOS、Cygwinに必要モジュールも含め、一括インストールするシェルスクリプト(バッチ処理プログラム)を紹介します。
Linux、macOSなどのUnix環境でCPUベンチマークツール「UnixBench」を必要パッケージごと一括インストールするシェルスクリプト(バッチ処理プログラム) ~RHEL、CentOS、Fedora、Ubuntu、macOS、Cygwinなどに対応したCPU性能評価ソフトウェア~
UnixBenchで測定できる主なテストケース
一括インストールのシェルスクリプト(バッチ処理プログラム)の紹介の前にUnixBenchで測定できる主なテストケースについて紹介します。
- Dhrystone 2 using register variables [テストケース名:dhry2reg]
- Double-Precision Whetstone [テストケース名:whetstone-double]
- Execl Throughput [テストケース名:execl]
- File Copy 1024 bufsize 2000 maxblocks [テストケース名:fstime]
- File Copy 256 bufsize 500 maxblocks [テストケース名:fsbuffer]
- File Copy 4096 bufsize 8000 maxblocks [テストケース名:fsdisk]
- Pipe Throughput [テストケース名:pipe]
- Pipe-based Context Switching [テストケース名:context1]
- Process Creation [テストケース名:spawn]
- System Call Overhead [テストケース名:syscall]
- Shell Scripts (1 concurrent) [テストケース名:shell1]
- Shell Scripts (8 concurrent) [テストケース名:shell8]
- Shell Scripts (16 concurrent) [テストケース名:shell16]
整数演算処理の古典的なベンチマークテストDhrystoneを用いて、CPU処理性能を測定します。
結果数値は1秒間の処理回数が表示されます。
浮動小数点数演算処理の古典的なベンチマークテストWhetstoneを用いて、数値演算の処理性能を測定します。
結果数値は1秒間の処理命令数が表示されます。
プロセスイメージを置き換えるexecl関数を用いてシステムコール処理性能(OS・CPUの処理性能)を測定します。
結果数値は1秒間のシステムコール処理回数が表示されます。
2MBのファイルを1024Byte毎に処理するファイルの書き込みと読み込みを繰り返すテストケースでファイルコピー速度を測定します。
※CPU、メモリ上へのキャッシュが測定に影響するため、CPU処理性能を測定することに使用されます。
結果数値は1秒間のファイル処理容量(KB)です。
0.5MBのファイルを256Byte毎に処理するファイルの書き込みと読み込みを繰り返すテストケースでファイルコピー速度を測定します。
※CPU、メモリ上へのキャッシュが測定に影響するため、CPU処理性能を測定することに使用されます。
結果数値は1秒間のファイル処理容量(KB)です。
8MBのファイルを4096Byte毎に処理するファイルの書き込みと読み込みを繰り返すテストケースでファイルコピー速度を測定します。
※CPU、メモリ上へのキャッシュが測定に影響するため、CPU処理性能を測定することに使用されます。
結果数値は1秒間のファイル処理容量(KB)です。
512Byte単位でデータを繰り返しパイプ処理するスループットを計測してCPU・OSの処理性能を測定します。
結果数値はパイプ処理回数です。
プロセス間通信で更新されるデータをパイプ処理する際のコンテキストスイッチングでCPU・OSの処理性能を測定します。
結果数値はパイプ処理回数です。
プロセスのフォークを繰り返すテストケースでCPU・OSの処理性能を測定します。
結果数値はフォーク処理回数です。
プロセスIDを返却するgetpid関数を用いてシステムコール処理性能(OS・CPUの処理性能)を測定します。
結果数値は1秒間のシステムコール処理回数が表示されます。
シェル(/bin/sh)でsort, od, grep, tee, wc, rmコマンド、パイプ・リダイレクトによるファイル処理を行うテストシェルスクリプトを1個ループ実行してCPU・OSの処理性能を測定します。
結果数値はループ処理回数です。
シェル(/bin/sh)でsort, od, grep, tee, wc, rmコマンド、パイプ・リダイレクトによるファイル処理を行うテストシェルスクリプトを8個同時にループ実行してCPU・OSの処理性能を測定します。
結果数値はループ処理回数です。
シェル(/bin/sh)でsort, od, grep, tee, wc, rmコマンド、パイプ・リダイレクトによるファイル処理を行うテストシェルスクリプトを16個同時にループ実行してCPU・OSの処理性能を測定します。
結果数値はループ処理回数です。
Linux、macOSなどのUnix環境でCPUベンチマークツール「UnixBench」を必要パッケージごと一括インストールするシェルスクリプト(バッチ処理プログラム)
基本方針としては各OSに合わせてUnixBenchの実行に必要なモジュールをインストールし、UnixBenchやパッチをダウンロードしてビルドし、テストを実行します。
シェルスクリプト(バッチ処理プログラム)の処理の流れとしては、まずOSに合わせたコマンドで必要モジュールをインストールします。
LinuxのうちRHEL、CentOS、Fedoraなどyumコマンドが存在すればyumでパッケージインストールし、yumコマンドがなければdnfコマンドでインストールを試みます。
※Fedora 22でyumコマンドは廃止となりdnfコマンドが採用されました。そのため将来的にRHEL8、CentOS8などでもyumコマンドが廃止され、dnfコマンドが採用される可能性が非常に高いです。
LinuxのうちUbuntuなどapt-getコマンドが存在すればapt-getでパッケージインストールします。
また、macOSは専用のパッチを当てる必要があるため、パッチをダウンロードして適用します。
UnixBenchをインストールした後は「./Run -i 5 pipe」でCPUのPipe Throughputのみを計測します。
必要に応じて「./Run -i 5 pipe」の引数部分を自分の好きなテストケース名に変更して使用します。
全てのベンチマークを実行する場合は「./Run」を実行するように書き換える必要がありますが、全てのベンチマークの計測にはかなりの時間を要しますのでご注意ください。
初回のUnixBenchのインストール以降は計測コマンドのみを実行するので繰り返して使用するベンチマークコマンドとして使用できます。
[root@localhost ~]# vim unixbench_installer_and_run.sh
#!/bin/bash #UnixBenchを配置するディレクトリ UNIX_BENCH_DIR=/usr/local cd ${UNIX_BENCH_DIR}/ if [ ! -d ${UNIX_BENCH_DIR}/UnixBench ]; then if [ "$(uname)" == 'Darwin' ]; then echo "OS: Mac" #macOSの場合、必要なインストールパッケージがあればここにbrewなどインストールコマンドを記載する。 elif [ "$(expr substr $(uname -s) 1 5)" == 'Linux' ]; then echo "OS: Linux" #RHEL, CentOS, Fedoraの場合 which yum > /dev/null 2>&1 IS_PKG=$? IS_PKG=`echo "${IS_PKG}" | sed 's/ //g' | sed 's/\t//g' | tr -d '\n'` if [ "${IS_PKG}" = "0" ]; then yum install -y gcc make perl perl-Time-HiRes else #yumコマンドが廃止されていればdnfコマンドでインストールする。 which dnf > /dev/null 2>&1 IS_PKG=$? IS_PKG=`echo "${IS_PKG}" | sed 's/ //g' | sed 's/\t//g' | tr -d '\n'` if [ "${IS_PKG}" = "0" ]; then dnf install -y gcc make perl perl-Time-HiRes fi fi #Ubuntuの場合 which apt-get > /dev/null 2>&1 IS_PKG=$? IS_PKG=`echo "${IS_PKG}" | sed 's/ //g' | sed 's/\t//g' | tr -d '\n'` if [ "${IS_PKG}" = "0" ]; then apt-get install -y libx11-dev libgl1-mesa-dev libxext-dev perl perl-modules make gcc fi elif [ "$(expr substr $(uname -s) 1 9)" == 'CYGWIN_NT' ]; then echo "OS: Cygwin" #Cygwinの場合、必要なインストールパッケージがあればここにapt-cygなどインストールコマンドを記載する。 fi curl -k -L -O https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/byte-unixbench/UnixBench5.1.3.tgz tar xvzf UnixBench5.1.3.tgz rm -f UnixBench5.1.3.tgz #macOSの場合はパッチを適用する。 if [ "$(uname)" == 'Darwin' ]; then cd ${UNIX_BENCH_DIR}/UnixBench/ curl -k -L -O https://gist.github.com/barusan/11033924/archive/a4f8041dd651ba14b03710b383b9b8a194c323fb.zip unzip a4f8041dd651ba14b03710b383b9b8a194c323fb.zip patch -p1 < ./a4f8041dd651ba14b03710b383b9b8a194c323fb/UnixBench5.1.3.mavericks.patch make rm -rf a4f8041dd651ba14b03710b383b9b8a194c323fb.zip fi fi cd ${UNIX_BENCH_DIR}/UnixBench/ chmod 755 ./Run chmod 755 ./kill_run #全てのベンチマークを実行する場合 #./Run #簡易テストとしてCPUのPipe Throughputのみを5回実行 ./Run -i 5 pipe
Linux、macOSなどのUnix環境でCPUベンチマークツール「UnixBench」をインストールするシェルスクリプト(バッチ処理プログラム)の実行例
「./Run -i 5 pipe」の実行では数分程度の短時間でCPU性能が簡易測定でき、下記のように結果が表示されます。
[root@localhost ~]# chmod 755 unixbench_installer_and_run.sh [root@localhost ~]# ./unixbench_installer_and_run.sh # # # # # # # ##### ###### # # #### # # # # ## # # # # # # # ## # # # # # # # # # # # ## ##### ##### # # # # ###### # # # # # # ## # # # # # # # # # # # # ## # # # # # # # ## # # # # #### # # # # # ##### ###### # # #### # # Version 5.1.3 Based on the Byte Magazine Unix Benchmark Multi-CPU version Version 5 revisions by Ian Smith, Sunnyvale, CA, USA January 13, 2011 johantheghost at yahoo period com 1 x Pipe Throughput 1 2 3 4 5 4 x Pipe Throughput 1 2 3 4 5 ======================================================================== BYTE UNIX Benchmarks (Version 5.1.3) System: webserver-gce: GNU/Linux OS: GNU/Linux -- 3.10.0-693.11.1.el7.x86_64 -- #1 SMP Mon Dec 4 23:52:40 UTC 2017 Machine: x86_64 (x86_64) Language: en_US.utf8 (charmap="UTF-8", collate="UTF-8") CPU 0: Intel(R) Xeon(R) CPU @ 2.20GHz (4400.0 bogomips) Hyper-Threading, x86-64, MMX, Physical Address Ext, SYSENTER/SYSEXIT, SYSCALL/SYSRET CPU 1: Intel(R) Xeon(R) CPU @ 2.20GHz (4400.0 bogomips) Hyper-Threading, x86-64, MMX, Physical Address Ext, SYSENTER/SYSEXIT, SYSCALL/SYSRET CPU 2: Intel(R) Xeon(R) CPU @ 2.20GHz (4400.0 bogomips) Hyper-Threading, x86-64, MMX, Physical Address Ext, SYSENTER/SYSEXIT, SYSCALL/SYSRET CPU 3: Intel(R) Xeon(R) CPU @ 2.20GHz (4400.0 bogomips) Hyper-Threading, x86-64, MMX, Physical Address Ext, SYSENTER/SYSEXIT, SYSCALL/SYSRET 10:11:58 up 14:40, 1 user, load average: 0.68, 0.60, 0.37; runlevel 3 ------------------------------------------------------------------------ Benchmark Run: 金 12月 08 2017 10:11:58 - 10:13:03 4 CPUs in system; running 1 parallel copy of tests Pipe Throughput 1923370.9 lps (10.0 s, 4 samples) System Benchmarks Partial Index BASELINE RESULT INDEX Pipe Throughput 12440.0 1923370.9 1546.1 ======== System Benchmarks Index Score (Partial Only) 1546.1 ------------------------------------------------------------------------ Benchmark Run: 金 12月 08 2017 10:13:03 - 10:14:09 4 CPUs in system; running 4 parallel copies of tests Pipe Throughput 6529801.6 lps (10.0 s, 4 samples) System Benchmarks Partial Index BASELINE RESULT INDEX Pipe Throughput 12440.0 6529801.6 5249.0 ======== System Benchmarks Index Score (Partial Only) 5249.0Reference: Tech Blog citing related sources