当サイトは、アフィリエイト広告を利用しています
プロジェクトでシステムに負荷をかけることが必要になり
その時にベンチマークツールである「sysbench」を使ったので
使い方を忘備録として残す。
sysbenchはCPUやメモリ、diskioなどの性能を評価するための
ベンチマークテストを実行できるツール。
インストールしてコマンド実行することで
簡単にシステムに負荷をかけることができる。
sysbenchでは下記のベンチマークを実行することができる
実際にdockerでlinuxのubuntuコンテナを作って
sysbenchのベンチマークテストを動かしてみる
下記の環境で行う
Docker for Windowsのインストール方法については下記記事で 紹介しています
まずはubuntuのコンテナをdocker-comopseを使って
準備する
ディレクトリ構成は下記のようになる
|-- Dockerfile`-- docker-compose.yml
任意のディレクトリ内に
を作成する
docker-composeでコンテナを作る。
buildはDockerfileを使う。
version: "3"# コンテナservices:ubuntu:container_name: "ubuntu"# Dockerfileをビルドbuild:context: .dockerfile: Dockerfiletty: true
# イメージFROM ubuntu:24.04# sysbenchのインストールRUN apt-get -y updateRUN apt-get -y install sysbench
build時にsysbenchもインストールする。
コンテナを作成してからインストールする場合は
コンテナ作成後、ログインして同じコマンドを実行すれば
sysbenchをインストールすることができる。
ubunu以外を使う場合は下記参照
コンテナを作る
docker compose up -d
Docker for Windowsを起動しておくないと失敗するので注意
$ docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES478e7932eeb3 sysbench-ubuntu "/bin/bash" 16 minutes ago Up 16 minutes ubuntu
コンテナが作成され、起動していることを確認
$ docker exec -it ubuntu bashroot@478e7932eeb3:/#
$ docker exec -it ubuntu bashroot@478e7932eeb3:/# sysbench --versionsysbench 1.0.20
versionコマンドでversionが表示されれば
インストールできている。
sysbenchはコマンド実行することで実行できる。
sysbenchは下記のようにコマンドを打って実行する。
sysbench [options]... [testname] [command]
テスト実行のオプションを指定する
ちょっと全部詳しくは調べきれないので下記を参照してください
何のベンチマークを実行するかを指定する
例えばcpu,memory,fileioなど
commandにはprepare/run/cleanup のいずれかを指定し
それぞれ
の処理が実行される。
作成したコンテナで
のベンチマークを実行してみる
cpuのテストでは、指定した最大探索数(未設定の場合は10000)以下の素数を数えるという
処理を行い、それにかかった時間を測定する。
sysbench cpu run
実行すると下記のようにベンチマークの結果が
コマンド出力される。
root@478e7932eeb3:/# sysbench cpu runsysbench 1.0.20 (using system LuaJIT 2.1.0-beta3)Running the test with following options:Number of threads: 1Initializing random number generator from current timePrime numbers limit: 10000Initializing worker threads...Threads started!CPU speed:events per second: 2848.79General statistics:total time: 10.0005stotal number of events: 28500Latency (ms):min: 0.31avg: 0.35max: 9.1695th percentile: 0.47sum: 9984.97Threads fairness:events (avg/stddev): 28500.0000/0.00execution time (avg/stddev): 9.9850/0.00
cpuのテストではオプションで最大素数を指定することが
できる。
この値が大きいほど、負荷が上がる
sysbench cpu --cpu-max-prime=1000000 --threads=4 runrun
threadsは実行するスレッド数を指定できる。
このオプションはcpu以外でも使える。
このようにオプションはtestname個別のオプションと
共通のオプションがある
メモリのベンチマークテストでは
メモリに対する連続した書き込みおよび読み出しを行って
それにかかった時間を測定している。
sysbench memory --memory-block-size=4G --memory-total-size=100G --threads=4 run
memoryテスト時のみ指定できるオプション
このオプションは、メモリブロックのサイズを設定する
各操作でこのサイズのデータがメモリに読み書きされる。
memoryテスト時のみ指定できるオプション
このオプションは、テスト全体で書き込みまたは読み出しを行うメモリの合計サイズを設定する
テストが終了するまでに合計でこのサイズのデータがメモリに読み書きされる
root@478e7932eeb3:/# sysbench memory --memory-block-size=4G --memory-total-size=100G --threads=4 runsysbench 1.0.20 (using system LuaJIT 2.1.0-beta3)Running the test with following options:Number of threads: 4Initializing random number generator from current timeRunning memory speed test with the following options:block size: 4194304KiBtotal size: 102400MiBoperation: writescope: globalInitializing worker threads...Threads started!Total operations: 24 ( 5.28 per second)98304.00 MiB transferred (21633.45 MiB/sec)General statistics:total time: 4.5422stotal number of events: 24Latency (ms):min: 445.04avg: 753.15max: 885.1295th percentile: 877.61sum: 18075.68Threads fairness:events (avg/stddev): 6.0000/0.00execution time (avg/stddev): 4.5189/0.02
fileioではファイルへの読み書きを行って
それにかかった時間を測定してる。
fileioのテストは他と違い、下記の3つのコマンド
で実行する
このコマンドでテストで使うファイルを用意する。
コマンドを実行すると合計1Gのファイルが作成される。
作成されるファイルの数を指定したい場合は「--file-num=3」
で指定できる
「--file-num=3」をつけた場合、3ファイル作成され、
その合計サイズが1Gになる
fileioのテストを実行する
「--file-test-mode=rndrw」でテストモードを設定している
モードは下記の通り
注意としてはprepareで「--file-num」を
つけていた場合、runでも「--file-num」をつける必要がある
つけないとエラーになる
下記のような感じ
sysbench fileio --file-total-size=1G --file-test-mode=rndrw run
テストで使ったファイルを削除する
ファイルが大量にできるので「--file-num」
オプションはつけて実行する
# 準備root@478e7932eeb3:/# sysbench fileio --file-total-size=1G --file-num=3 preparesysbench 1.0.20 (using system LuaJIT 2.1.0-beta3)3 files, 349525Kb each, 1023Mb totalCreating files for the test...Extra file open flags: (none)Creating file test_file.0Creating file test_file.1Creating file test_file.21073774592 bytes written in 0.82 seconds (1243.49 MiB/sec).# 実行root@478e7932eeb3:/# sysbench fileio --file-total-size=1G --file-test-mode=rndrw --file-num=3 runsysbench 1.0.20 (using system LuaJIT 2.1.0-beta3)Running the test with following options:Number of threads: 1Initializing random number generator from current timeExtra file open flags: (none)3 files, 341.33MiB each1024MiB total file sizeBlock size 16KiBNumber of IO requests: 0Read/Write ratio for combined random IO test: 1.50Periodic FSYNC enabled, calling fsync() each 100 requests.Calling fsync() at the end of test, Enabled.Using synchronous I/O modeDoing random r/w testInitializing worker threads...Threads started!File operations:reads/s: 10115.18writes/s: 6743.45fsyncs/s: 505.86Throughput:read, MiB/s: 158.05written, MiB/s: 105.37General statistics:total time: 10.0051stotal number of events: 173759Latency (ms):min: 0.00avg: 0.06max: 83.7595th percentile: 0.01sum: 9933.62Threads fairness:events (avg/stddev): 173759.0000/0.00execution time (avg/stddev): 9.9336/0.00# クリーンアップroot@478e7932eeb3:/# sysbench fileio cleanupsysbench 1.0.20 (using system LuaJIT 2.1.0-beta3)Removing test files...root@478e7932eeb3:/#
キャッシュの影響でうまく性能が測定できない場合がある。
その時はrunに「--file-extra-flags=direct」オプションをつける
このオプションはsysbenchの内部ファイルキャッシュを無効にするので
実際のディスクからの読み書き操作が実行されるようになる。
sysbenchを使ったベンチマークの実行方法を
まとめてみた。
実際には性能テストをしたい場合はsysbenchだけでなくて
システム性能を計測できるツール「Glances」などと
併用することになるかと思う。
Glancesnについては下記で紹介しています