概要
dockerコンテナでPhoronix Test Suite のDiskベンチマークを実施した。
本記事のベンチマーク結果については、OpenBenchmarking.org にアップロードした。
はじめに
Phoronix Test Suite は Linux含め様々なOSで利用できるベンチマークプラットフォームである。
これによって、テストのインストールから実行・レポートまでを完全に自動化された方法でテストすることができる。
また、その特徴から Extensible Architecture (拡張可能容易性) に優れており、XMLファイルやbashスクリプトで構成されるアーキテクチャから簡単にテストを追加することができる。
Phoronix Test Suite では、600以上のテストプロファイルと、200以上のテストスイートがデフォルトで用意されている。
これらのテストスイートは、"Processor", "Graphics", "Disk", "Memory"などで分類されている。
ここでは、Diskベンチマーク ("sqlite", "fs-mark", "compilebench", "ior", "iozone" "dbench", "postmark", "fio") を 実行し、手順や拡張方法などを確認する。
実験環境
本記事で使用した開発用PC (Host PC)の構成は次の通りとなっている。
環境 | 概要 |
---|---|
CPU | AMD Ryzen 3 3300X |
RAM | DDR4-2666 16GB ×2 |
Host OS | Ubuntu Desktop 22.04.1 |
kernel | v5.15.0-47-generic |
Storage | SL-MG5 |
File-Syste | f2fs |
Mount Option | errors=remount-ro relatime rw |
Disk Scheduler | MQ-DEADLINE |
Disk Details | BlockSize: 4096 |
また、開発用PCにはDockerがインストールされており、ログインユーザはroot権限なしでdockerを実行できるものとする。
Phoronix Test Suite のインストール
Phoronix Test Suiteでは、必要なパッケージがインストールされたDockerコンテナを提供している。
本記事では、このイメージを利用してDiskベンチマークを実施する。
$ docker pull phoronix/pts/
Phoronix Test Suite が動作することを確認する。
$ docker run -it phoronix/pts
Updated OpenBenchmarking.org Repository Index
pts: 495 Distinct Tests, 2101 Test Versions, 56 Suites
Available Changes From 13 February To 3 October
Updated Test: pts/ai-benchmark v1.0.2 AI Benchmark Alpha
Updated Test: pts/aircrack-ng v1.3.0 Aircrack-ng
Updated Test: pts/aom-av1 v3.5.0 AOM AV1
Updated Test: pts/apache v2.0.1 Apache HTTP Server
Updated Test: pts/astcenc v1.4.0 ASTC Encoder
Updated Test: pts/avifenc v1.2.0 libavif avifenc
Updated Test: pts/blender v3.3.1 Blender
Updated Test: pts/blosc v1.2.0 C-Blosc
Updated Test: pts/brl-cad v1.3.0 BRL-CAD
Updated Test: pts/build-erlang v1.2.0 Timed Erlang/OTP Compilation
Updated Test: pts/build-linux-kernel v1.14.0 Timed Linux Kernel Compilation
Updated Test: pts/build-mplayer v1.5.0 Timed MPlayer Compilation
Updated Test: pts/build-nodejs v1.2.0 Timed Node.js Compilation
Updated Test: pts/build-php v1.6.0 Timed PHP Compilation
New Test: pts/build-python v1.0.0 Timed CPython Compilation
Updated Test: pts/build-wasmer v1.2.0 Timed Wasmer Compilation
Updated Test: pts/chia-vdf v1.1.0 Chia Blockchain VDF
New Test: pts/clickhouse v1.1.0 ClickHouse
Updated Test: pts/compress-7zip v1.10.0 7-Zip Compression
Updated Test: pts/couchdb v1.2.0 Apache CouchDB
Updated Test: pts/csgo v1.7.1 Counter-Strike: Global Offensive
Updated Test: pts/dav1d v1.12.0 dav1d
Updated Test: pts/ddnet v1.3.0 DDraceNetwork
New Test: pts/dragonflydb v1.0.0 Dragonflydb
Updated Test: pts/encode-flac v1.8.0 FLAC Audio Encoding
New Test: pts/etcd v1.0.0 etcd
Updated Test: pts/etcpak v1.1.0 Etcpak
Updated Test: pts/ethr v1.2.0 Ethr
New Test: pts/fast-cli v1.0.0 fast-cli
Updated Test: pts/glibc-bench v1.7.2 Glibc Benchmarks
Updated Test: pts/graphics-magick v2.1.0 GraphicsMagick
Updated Test: pts/gravitymark v1.7.0 GravityMark
Updated Test: pts/gromacs v1.7.0 GROMACS
Updated Test: pts/influxdb v1.0.1 InfluxDB
Updated Test: pts/java-jmh v1.0.1 Java JMH
Updated Test: pts/lammps v1.4.0 LAMMPS Molecular Dynamics Simulator
New Test: pts/memcached v1.0.0 Memcached
Updated Test: pts/memtier-benchmark v1.4.0 memtier_benchmark
Updated Test: pts/mnn v2.1.0 Mobile Neural Network
Updated Test: pts/mysqlslap v1.3.0 MariaDB
Updated Test: pts/natron v1.1.0 Natron
Updated Test: pts/ncnn v1.4.0 NCNN
Updated Test: pts/nettle v1.1.0 Nettle
Updated Test: pts/nginx v2.0.1 nginx
Updated Test: pts/node-web-tooling v1.0.1 Node.js V8 Web Tooling Benchmark
Updated Test: pts/onednn v2.7.0 oneDNN
Updated Test: pts/onnx v1.5.0 ONNX Runtime
Updated Test: pts/opencv v1.2.0 OpenCV
Updated Test: pts/openfoam v1.2.0 OpenFOAM
Updated Test: pts/openvino v1.1.0 OpenVINO
Updated Test: pts/ospray v2.10.0 OSPRay
New Test: pts/ospray-studio v1.1.0 OSPRay Studio
Updated Test: pts/paraview v1.3.0 ParaView
Updated Test: pts/perf-bench v1.0.4 perf-bench
Updated Test: pts/portal2 v1.1.1 Portal 2
Updated Test: pts/primesieve v1.9.0 Primesieve
Updated Test: pts/qmcpack v1.5.0 QMCPACK
Updated Test: pts/redis v1.4.0 Redis
Updated Test: pts/renaissance v1.3.0 Renaissance
Updated Test: pts/rocksdb v1.3.0 Facebook RocksDB
Updated Test: pts/simdjson v2.0.1 simdjson
Updated Test: pts/smhasher v1.1.0 SMHasher
New Test: pts/spark v1.0.0 Apache Spark
New Test: pts/specviewperf2020 v1.0.0 SPECViewPerf 2020
New Test: pts/speedtest-cli v1.0.0 speedtest-cli
Updated Test: pts/srsran v1.2.0 srsRAN
Updated Test: pts/stockfish v1.4.0 Stockfish
Updated Test: pts/stress-ng v1.5.1 Stress-NG
Updated Test: pts/svt-av1 v2.6.0 SVT-AV1
Updated Test: pts/svt-hevc v1.2.1 SVT-HEVC
Updated Test: pts/svt-vp9 v1.3.1 SVT-VP9
Updated Test: pts/tensorflow-lite v1.1.0 TensorFlow Lite
Updated Test: pts/tf2 v1.2.4 Team Fortress 2
New Test: pts/tww3 v1.0.1 Total War: WARHAMMER III
Updated Test: pts/unpack-linux v1.2.0 Unpacking The Linux Kernel
Updated Test: pts/unvanquished v1.7.0 Unvanquished
Updated Test: pts/v-ray v1.4.0 Chaos Group V-RAY
Updated Test: pts/vkmark v1.3.1 VKMark
Updated Test: pts/webp v1.2.0 WebP Image Encode
Updated Test: pts/webp2 v1.2.0 WebP2 Image Encode
Updated Test: pts/x264 v2.7.0 x264
Updated Test: pts/xonotic v1.6.0 Xonotic
Updated Test: pts/y-cruncher v1.2.0 Y-Cruncher
Updated Test: pts/yquake2 v1.3.0 yquake2
Updated Suite: pts/compilation v1.2.8 Timed Code Compilation
Updated Suite: pts/database v1.3.6 Database Test Suite
New Suite: pts/internet-speed v1.0.0 Internet Speed
Updated Suite: pts/oneapi v1.3.3 Intel oneAPI
Updated Suite: pts/raytracing v1.0.2 Raytracing
Updated Suite: pts/steam v1.0.7 Steam
Updated OpenBenchmarking.org Repository Index
system: 41 Distinct Tests, 125 Test Versions
Available Changes From 13 February To 3 October
Updated Test: system/blender v1.2.1 Blender
Updated Test: system/inkscape v1.0.1 Inkscape
Updated Test: system/selenium v1.0.31 Selenium
New Test: system/timed-battery-test v1.0.0 Timed Battery Test
Updated OpenBenchmarking.org Repository Index
git: 8 Distinct Tests, 11 Test Versions
Available Changes From 13 February To 3 October
Updated Test: git/dav1d v1.1.0 dav1d
Phoronix Test Suite v10.8.3
An outdated version of the Phoronix Test Suite is installed.
The version in use is 10.8.3 (10830), but the latest is pts-core 10840.
Visit https://www.phoronix-test-suite.com/ to update this software.
Interactive Shell
Generating Shell Cache...
Refreshing OpenBenchmarking.org Repository Cache...
PROCESSOR: AMD Ryzen 3 3300X 4-Core @ 3.80GHz
Core Count: 4
Thread Count: 8
Extensions: SSE 4.2 + AVX2 + AVX + RDRAND + FSGSBASE
Cache Size: 16 MB
Microcode: 0x8701013
Core Family: Zen 2
Scaling Driver: acpi-cpufreq schedutil (Boost: Enabled)
GRAPHICS:
MOTHERBOARD: ASRock B450M Steel Legend
BIOS Version: P2.90
MEMORY: 32GB
DISK: 2000GB Western Digital WD20EZRZ-22Z
+ 250GB Samsung SSD 860
+ 500GB Western Digital WDS500G2B0B
+ 512GB Storage
File-System: overlayfs
Disk Scheduler: MQ-DEADLINE
OPERATING SYSTEM: Ubuntu 20.04.4 LTS
Kernel: 5.15.0-48-generic (x86_64)
System Layer: Docker
Security: itlb_multihit: Not affected
+ l1tf: Not affected
+ mds: Not affected
+ meltdown: Not affected
+ mmio_stale_data: Not affected
+ retbleed: Mitigation of untrained return thunk; SMT enabled with STIBP protection
+ spec_store_bypass: Mitigation of SSB disabled via prctl and seccomp
+ spectre_v1: Mitigation of usercopy/swapgs barriers and __user pointer sanitization
+ spectre_v2: Mitigation of Retpolines IBPB: conditional STIBP: always-on RSB filling
+ srbds: Not affected
+ tsx_async_abort: Not affected
CPU Temperature: 32.25 C CPU Usage (Summary): 0.00 % GPU Temperature: 40.00 C Memory Usage: 736 MB System Uptime 2822 M
Phoronix Test Suite command to run or help for all possible options, commands for a quick overview of options, interactive for a guided experience, system-info to view system hardware/software information, exit to exit. For new users, benchmark is the simplest and most important sub-command. Tab auto-completion support available.
# phoronix-test-suite
このイメージでは、デフォルトで /phoronix-test-suite/phoronix-test-suite shell
が起動するようになっており、CLIインターフェースが提供されている。
ベンチマークテストのセットアップ
コンテナ内でブロックデバイスに直接アクセスするため--privileged
オプションを、環境をセットアップしたいので/bin/bash
で起動する。
$ docker run --privileged -it phoronix/pts /bin/bash
root@f3739e0f6d23:/#
コンテナ内のパッケージキャッシュは古いので、手動で更新する。
root@f3739e0f6d23:/# apt update
測定対象のストレージ (/dev/sdd1
) を /mnt
にマウントしておく。
root@f3739e0f6d23:/# mount -t f2fs /dev/sdd1 /mnt/
測定対象のストレージで計測するように、Phoronix Test Suiteの設定ファイルを更新する。 ((システム全体のファイルは /etc/phoronix-test-suite.xml
に格納され、ユーザ設定は${HOME}/.phoronix-test-suite
で管理される。 ))
root@f3739e0f6d23:/# /phoronix-test-suite/phoronix-test-suite user-config-set EnvironmentDirectory=/mnt/.
EnvironmentDirectory
は、テストがインストールされるディレクトリとなっており、デフォルトでは~/.phoronix-test-suite/installed-tests/
となっている。
テスト実行
/bin/bash
から、CLIインターフェースを起動させるためには/phoronix-test-suite/phoronix-test-suite shell
を実行する必要がある。
root@f3739e0f6d23:/# /phoronix-test-suite/phoronix-test-suite shell
Phoronix Test Suite v10.8.3
Interactive Shell
Generating Shell Cache...
Refreshing OpenBenchmarking.org Repository Cache...
PROCESSOR: AMD Ryzen 3 3300X 4-Core @ 3.80GHz
Core Count: 4
Thread Count: 8
Extensions: SSE 4.2 + AVX2 + AVX + RDRAND + FSGSBASE
Cache Size: 16 MB
Microcode: 0x8701013
Core Family: Zen 2
Scaling Driver: acpi-cpufreq schedutil (Boost: Enabled)
GRAPHICS:
MOTHERBOARD: ASRock B450M Steel Legend
BIOS Version: P2.90
MEMORY: 32GB
DISK: 2000GB Western Digital WD20EZRZ-22Z
+ 250GB Samsung SSD 860
+ 500GB Western Digital WDS500G2B0B
+ 512GB Storage
File-System: f2fs
Mount Options: acl active_logs=6 alloc_mode=default background_gc=on checkpoint_merge discard_unit=block extent_cache flush_merge fsync_mode=posix inline_data inline_dentry inline_xattr lazytime mode=adaptive no_heap nodiscard relatime rw user_xattr
Disk Scheduler: MQ-DEADLINE
Disk Details: Block Size: 4096
OPERATING SYSTEM: Ubuntu 20.04.4 LTS
Kernel: 5.15.0-48-generic (x86_64)
Compiler: GCC 9.4.0
System Layer: Docker
Security: itlb_multihit: Not affected
+ l1tf: Not affected
+ mds: Not affected
+ meltdown: Not affected
+ mmio_stale_data: Not affected
+ retbleed: Mitigation of untrained return thunk; SMT enabled with STIBP protection
+ spec_store_bypass: Mitigation of SSB disabled via prctl and seccomp
+ spectre_v1: Mitigation of usercopy/swapgs barriers and __user pointer sanitization
+ spectre_v2: Mitigation of Retpolines IBPB: conditional STIBP: always-on RSB filling
+ srbds: Not affected
+ tsx_async_abort: Not affected
CPU Temperature: 42.25 C CPU Usage (Summary): 0.25 % GPU Temperature: 40.00 C Memory Usage: 723 MB System Uptime 2857 M
Phoronix Test Suite command to run or help for all possible options, commands for a quick overview of options, interactive for a guided experience, system-info to view system hardware/software information, exit to exit. For new users, benchmark is the simplest and most important sub-command. Tab auto-completion support available.
# phoronix-test-suite
ここで、File-System:
が対象ストレージのフォーマットされたファイルシステム (今回はf2fs
でフォーマットしている) になっていることを確認しておく。
CLIインターフェース上でbenchmark
コマンドを実行することで、「依存パッケージのインストール」から「テストの実行」までを実行してくれる。
benchmark disk
を実行することで、Diskベンチマークを実行することができる。
# phoronix-test-suite benchmark disk
<-- snipped -->
SQLite 3.30.1:
pts/sqlite-2.1.0 [Threads / Copies: 8]
Test 2 of 42
Estimated Trial Run Count: 3
Estimated Test Run-Time: 3 Minutes
Estimated Time To Completion: 7 Hours, 13 Minutes [04:57 JST]
Running Pre-Test Script @ 21:44:28
Started Run 1 @ 21:44:28
Running Interim Test Script @ 21:45:48
Started Run 2 @ 21:45:50
Running Interim Test Script @ 21:46:43
Started Run 3 @ 21:46:45
Running Interim Test Script @ 21:47:38
Started Run 4 @ 21:47:40 *
Running Interim Test Script @ 21:48:31
Started Run 5 @ 21:48:33 *
Running Interim Test Script @ 21:49:23
Started Run 6 @ 21:49:25 *
Running Interim Test Script @ 21:50:15
Started Run 7 @ 21:50:17 *
Running Interim Test Script @ 21:51:09
Started Run 8 @ 21:51:11 *
Running Interim Test Script @ 21:52:03
Started Run 9 @ 21:52:05 *
Running Interim Test Script @ 21:52:56
Started Run 10 @ 21:52:58 *
Running Interim Test Script @ 21:53:53
Started Run 11 @ 21:53:55 *
Running Interim Test Script @ 21:54:48
Started Run 12 @ 21:54:50 *
Running Interim Test Script @ 21:55:41
Started Run 13 @ 21:55:43 *
Running Interim Test Script @ 21:56:35
Started Run 14 @ 21:56:37 *
Running Interim Test Script @ 21:57:28
Started Run 15 @ 21:57:30 *
Running Post-Test Script @ 21:58:22
Threads / Copies: 8:
78.656
51.155
50.141
49.025
48.573
47.527
49.982
49.911
49.744
52.275
51.123
49.219
49.668
49.019
50.29
Average: 51.754 Seconds
Deviation: 14.55%
Samples: 15
Comparison of 2,536 OpenBenchmarking.org samples since 25 October 2019; median result: 33.69 Seconds. Box plot of samples:
[ *--------------------------*-------------------------------------------------############*##*#*#!*#*|]
This Result (41st Percentile): 51.754 ^
15GB SD16G: 701 ^ 32GB SE32G: 513 ^ 6001GB Western Digital WD60EFAX-68S: 23.2 ^
500GB CT500P5SSD8: 32.04 ^
4 x 400GB KXG50ZNV512G TOSHIBA: 65 ^
1 TB APPLE HDD HTS541010A9E662: 87 ^
<-- snipped -->
上記の実行例では、42個あるDiskベンチマークテストのうち2個目のpts/sqlite-2.1.0
(パラメータ: Threads / copies: 8
) を切り出している。
各ベンチマークの計測ごとに、OpenBenchmarking.orgのサンプルと共に統計情報も含めレポートされる。
Would you like to save these test results (Y/n):
で y
とすることで、OpenBenchmarking.orgに結果をアップロードすることができる。
run
コマンドでもテストの実行することができる。
このとき、テストにパラメータが指定可能であれば、対話的に決めることができる。
# phoronix-test-suite run pts/fio
Flexible IO Tester 3.29:
pts/fio-1.15.0
Disk Test Configuration
1: Random Read
2: Random Write
3: Sequential Read
4: Sequential Write
5: Test All Options
** Multiple items can be selected, delimit by a comma. **
Type: 2,4
1: IO_uring
2: POSIX AIO
3: Sync
4: Linux AIO
5: Test All Options
** Multiple items can be selected, delimit by a comma. **
Engine: 3,4
1: Yes
2: No
3: Test All Options
** Multiple items can be selected, delimit by a comma. **
Buffered: 1
1: No
2: Yes
3: Test All Options
** Multiple items can be selected, delimit by a comma. **
Direct: 1
1: 4KB
2: 8KB
3: 16KB
4: 32KB
5: 64KB
6: 128KB
7: 256KB
8: 512KB
9: 1MB
10: 2MB
11: 4MB
12: 8MB
13: Test All Options
** Multiple items can be selected, delimit by a comma. **
Block Size: 9
1: Default Test Directory
2: /mnt
3: Test All Options
** Multiple items can be selected, delimit by a comma. **
Disk Target: 2
おわりに
本稿では、Phoronix Test SuiteによりDiskベンチマークを実行する手順を確認した。
変更履歴
- 2022/10/4: 記事公開
参考文献
- Phoronix Test Suite公式ページ
- Phoronix Test Suite の利用例