LeavaTailの日記

LeavaTailの日記

Linuxエンジニアを目指した技術者の備忘録

Phoronix Test Suite で Diskベンチマークを実施する

概要

dockerコンテナでPhoronix Test Suite のDiskベンチマークを実施した。

本記事のベンチマーク結果については、OpenBenchmarking.org にアップロードした。

openbenchmarking.org

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コンテナを提供している。

hub.docker.com

本記事では、このイメージを利用して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に結果をアップロードすることができる。

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: 記事公開

参考文献