こんにちは。GMOインターネット株式会社の斉藤です。
つい先日ですが、業務の中でいくつかのサーバーについてストレージの性能を測定、比較を行いました。そのときに利用したdiskspdというツールについてご紹介したいと思います。
目次
diskspdとは
いわゆるサーバーの性能測定やいわゆるベンチマークを行うツールはいくつかありますが、よく耳にするのはUnixBenchやfioなどではないでしょうか。どちらも各社がパフォーマンス競争でしのぎを削っている(?)ホスティングサービス/VPSの界隈では性能比較によく使われるツールになります。
今日お話しするdiskspdは、マイクロソフトのWindows Serverやクラウドを開発しているエンジニアリングチームによって開発とメンテナンスが行われているツールです。もともとはWindowsのコマンドラインで動作するツールでしたが、2018年に別プロジェクトでLinux版も登場しました。
Windows版
Linux版
他のツールと比較して個人的に良いと思っているポイントは、実行時の設定をかなり細かく設定できることでしょうか。実際のアプリケーションサーバーやDBサーバーに近いI/Oワークロードを作ることができます。
また、出力結果が分かりやすいこともポイントが高いです。では実際に使ってみましょう。
インストール
今回は以下の環境にインストールします。
root@test:~# cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=20.04
DISTRIB_CODENAME=focal
DISTRIB_DESCRIPTION="Ubuntu 20.04.2 LTS"diskspdはパッケージマネージャー(apt)には存在しないので、自分でソースコードをダウンロードしてビルドする必要があります。
まずビルドに必要な依存関係をインストールします。必要なのはbuild-essential、libaio1、libaio-devです。libaioとは聞き慣れないパッケージですが、LinuxにはAIOというカーネル空間で非同期I/Oを行う仕組みがあり、libaioはユーザー空間からそれらを利用するラッパーライブラリです。
apt install -y build-essential libaio1 libaio-devdiskspd-linuxをcloneします
git clone https://github.com/microsoft/diskspd-for-linux.gitビルドします
cd diskspd-for-linux/
make -j4すると実行ファイルが./bin/に作成されます
使ってみる
では早速使ってみましょう。
※注意※diskspdは設定次第でストレージだけでなくCPUなどにも大きな負荷をかけます。共有環境やクラウドサービス上での実行する場合は、注意してください。
性能測定したいストレージ(ブロックデバイス)を指定します。dfコマンドなどで探すと良いでしょう。以下はConoHa VPSの例で、この場合は/dev/vda2になります。
root@:~/diskspd-for-linux# df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            951M     0  951M   0% /dev
tmpfs           199M  1.1M  198M   1% /run
/dev/vda2        99G  5.5G   89G   6% /
tmpfs           994M     0  994M   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           994M     0  994M   0% /sys/fs/cgroup
/dev/loop1       56M   56M     0 100% /snap/core18/1988
/dev/loop3       71M   71M     0 100% /snap/lxd/19647
/dev/loop5       33M   33M     0 100% /snap/snapd/11402
/dev/loop6       33M   33M     0 100% /snap/snapd/13640
/dev/loop7       56M   56M     0 100% /snap/core18/2246
/dev/loop0       62M   62M     0 100% /snap/core20/1169
/dev/loop2       68M   68M     0 100% /snap/lxd/21835
tmpfs           199M     0  199M   0% /run/user/0まずはオプションを付けずに実行してみましょう。
# ./bin/diskspd /dev/vda2
Command Line: ./bin/diskspd /dev/vda2
System info:
        processor count: 3
        caching options: fua=0
Input parameters:
        job:   1
        ________
        duration: 10s
        warm up time: 5s
        random seed: 0
        total threads: 1
        path: '/dev/vda2'
                size: 107369971200B
                performing mix test (read/write ratio: 100/0)
                block size: 65536
                using sequential I/O (stride: 65536)
                number of outstanding I/O operations: 2)
                thread stride size: 0
                threads per file: 1
                block device: vda
                device scheduler: mq-deadline
Results for job 1:
test time:         10s
*****************************************************
 CPU  |  Usage  |   User  |  Kernel | IO Wait |   Idle
-------------------------------------------------------
    0 |  86.55% |  13.87% |  72.68% |  13.45% |   0.00%
    1 |  25.50% |   0.10% |  25.40% |   0.20% |  74.30%
    2 |   1.65% |   0.72% |   0.93% |   1.24% |  97.10%
-------------------------------------------------------
 avg:    37.90% |   4.90% |  33.00% |   4.96% |  57.13%
Total IO
thread |           bytes |         I/Os |       MB/s |  I/O per s | file
-------------------------------------------------------------------------------
     0 |     17568301056 |       268071 |    1675.44 |   26807.10 | /dev/vda2 (107369971200B)
-------------------------------------------------------------------------------
total:       17568301056 |       268071 |    1675.44 |   26807.10
Read IO
thread |           bytes |         I/Os |       MB/s |  I/O per s | file
-------------------------------------------------------------------------------
     0 |     17568301056 |       268071 |    1675.44 |   26807.10 | /dev/vda2 (107369971200B)
-------------------------------------------------------------------------------
total:       17568301056 |       268071 |    1675.44 |   26807.10
Write IO
thread |           bytes |         I/Os |       MB/s |  I/O per s | file
-------------------------------------------------------------------------------
     0 |               0 |            0 |       0.00 |       0.00 | /dev/vda2 (107369971200B)
-------------------------------------------------------------------------------
total:                 0 |            0 |       0.00 |       0.00
最初に計測中のCPU利用率などが表示され、その下にはブロックデバイスの測定結果が表示されます。MB/sやI/Os(いわゆるIOPS)あたりが指標になりそうですね。
今回のようにdiskspdにオプションを付けずに実行した場合、結果は Linuxのページキャッシュが有効な状態でシーケンシャルリード性能を測定した結果 となります。比較的良い結果が出やすいですし、キャッシュが効くので再実行すると数字が変わってくるでしょう。
さて、diskspdはオプションで様々なI/Oワークロードを作り出せます。少しオプションを追加してみましょう。
# ./bin/diskspd -Sd -t2 -b4K -r4K -L /dev/vda2
Command Line: ./bin/diskspd -Sd -t2 -b4K -r4K -L /dev/vda2
System info:
        processor count: 3
        caching options: fua=0
Input parameters:
        job:   1
        ________
        duration: 10s
        warm up time: 5s
        measuring latency
        random seed: 0
        total threads: 2
        path: '/dev/vda2'
                size: 107369971200B
                using O_DIRECT
                performing mix test (read/write ratio: 100/0)
                block size: 4096
                using random I/O (alignment: 4096)
                number of outstanding I/O operations: 2)
                thread stride size: 0
                threads per file: 2
                block device: vda
                device scheduler: mq-deadline
Results for job 1:
test time:         10s
*****************************************************
 CPU  |  Usage  |   User  |  Kernel | IO Wait |   Idle
-------------------------------------------------------
    0 |  12.46% |   5.49% |   6.97% |   0.00% |  87.54%
    1 |  12.04% |   5.07% |   6.97% |   0.11% |  87.86%
    2 |   0.63% |   0.63% |   0.00% |   0.11% |  99.26%
-------------------------------------------------------
 avg:     8.38% |   3.73% |   4.65% |   0.07% |  91.55%
Total IO
thread |           bytes |         I/Os |       MB/s |  I/O per s | AvgLat(ms) | LatStdDev  | file
-------------------------------------------------------------------------------------------------------
     0 |       170782720 |        41695 |      16.29 |    4169.50 |       0.480 |       0.510 | /dev/vda2 (107369971200B)
     1 |       172642304 |        42149 |      16.46 |    4214.90 |       0.475 |       0.495 | /dev/vda2 (107369971200B)
-------------------------------------------------------------------------------------------------------
total:         343425024 |        83844 |      32.75 |    8384.40 |       0.477 |       0.502
Read IO
thread |           bytes |         I/Os |       MB/s |  I/O per s | AvgLat(ms) | LatStdDev  | file
-------------------------------------------------------------------------------------------------------
     0 |       170782720 |        41695 |      16.29 |    4169.50 |       0.480 |       0.510 | /dev/vda2 (107369971200B)
     1 |       172642304 |        42149 |      16.46 |    4214.90 |       0.475 |       0.495 | /dev/vda2 (107369971200B)
-------------------------------------------------------------------------------------------------------
total:         343425024 |        83844 |      32.75 |    8384.40 |       0.477 |       0.502
Write IO
thread |           bytes |         I/Os |       MB/s |  I/O per s | AvgLat(ms) | LatStdDev  | file
-------------------------------------------------------------------------------------------------------
     0 |               0 |            0 |       0.00 |       0.00 |       0.000 |       N/A | /dev/vda2 (107369971200B)
     1 |               0 |            0 |       0.00 |       0.00 |       0.000 |       N/A | /dev/vda2 (107369971200B)
-------------------------------------------------------------------------------------------------------
total:                 0 |            0 |       0.00 |       0.00 |       0.000 |          N/A
  %-ile |       Read (ms) | Write (ms) | Total (ms)
----------------------------------------------
    min |      0.033 |        N/A |      0.033
   25th |      0.116 |        N/A |      0.116
   50th |      0.232 |        N/A |      0.232
   75th |      0.714 |        N/A |      0.715
   90th |      1.142 |        N/A |      1.143
   95th |      1.418 |        N/A |      1.419
   99th |      2.168 |        N/A |      2.171
3-nines |      3.744 |        N/A |      3.786
4-nines |      7.070 |        N/A |      7.114
5-nines |      8.499 |        N/A |      8.478
6-nines |      8.499 |        N/A |      8.499
7-nines |      8.499 |        N/A |      8.499
8-nines |      8.499 |        N/A |      8.499
9-nines |      8.499 |        N/A |      8.499
    max |      8.499 |        N/A |      8.499
結果が大分変わりましたね。
オプションの意味ですが、
-Sdでブロックキャッシュを介さないよう指定しました(open(2)時にO_DIRECTフラグがセットされます)。これで純粋にデバイスの能力がわかるようになります。
-b4Kで4KBのブロックサイズを指定しました。これは標準的なLinuxシステムのブロックサイズです。
-r4Kで4KBのランダムリードを指定しました。実際の用途ではランダムアクセスが多いでしょう
-Lで実行結果に統計情報を追加しました。それぞれのI/O実行時間のばらつきがパーセンタイルで表示されます。簡単に言うと50thのところの0.232は 実行したI/Oの実行時間に関して、50%は0.232ms以内に収まっている と言う意味になります。これにより、ストレージが常に一定のパフォーマンスを出しているのか、それともばらつきがある(いわゆるpeekyである)のか判断することができます。
となります。
そして今回は試しませんでしたが、書き込みをテストする場合は-wオプションを使えますし、-dオプションで計測時間を変更することもできます。
おわりに
diskspdはとても使いやすいストレージの性能測定ツールです。オプションにもちょうど必要そうなものが揃っていて使い勝手が抜群です。ぜひお試しください。
それではまた次回お目にかかりましょう。
ブログの著者欄
採用情報
関連記事
KEYWORD
CATEGORY
- 
                  技術情報(516)
 - 
                  イベント(193)
 - 
                  カルチャー(50)
 - 
                  デザイン(47)
 
TAG
- "eVTOL"
 - "Japan Drone"
 - "ロボティクス"
 - "空飛ぶクルマ"
 - 5G
 - Adam byGMO
 - AGI
 - AI
 - AI人財
 - APT攻撃
 - AWX
 - BIT VALLEY
 - Blade
 - blockchain
 - Canva
 - ChatGPT
 - ChatGPT Team
 - Claude Team
 - cloudflare
 - cloudnative
 - CloudStack
 - CM
 - CNDO
 - CNDT
 - CODEGYM Academy
 - ConoHa
 - ConoHa、Dify
 - CS
 - CSS
 - CTF
 - DC
 - design
 - Designship
 - Desiner
 - DeveloperExper
 - DeveloperExpert
 - DevRel
 - DevSecOpsThon
 - DiceCTF
 - Dify
 - DNS
 - Docker
 - DTF
 - Expert
 - Felo
 - GitLab
 - GMO AIR
 - GMO AIロボティクス大会議&表彰式
 - GMO DESIGN AWARD
 - GMO Developers Day
 - GMO Developers Night
 - GMO Developers ブログ
 - GMO Flatt Security
 - GMO GPUクラウド
 - GMO Hacking Night
 - GMO kitaQ
 - GMO SONIC
 - GMOアドパートナーズ
 - GMOアドマーケティング
 - GMOイエラエ
 - GMOインターネット
 - GMOインターネットグループ
 - GMOクラウド]
 - GMOグローバルサイン
 - GMOサイバーセキュリティbyイエラエ
 - GMOサイバーセキュリティ大会議
 - GMOサイバーセキュリティ大会議&表彰式
 - GMOソリューションパートナー
 - GMOデジキッズ
 - GMOブランドセキュリティ
 - GMOペイメントゲートウェイ
 - GMOペパボ
 - GMOメディア
 - GMOリサーチ
 - GMO大会議
 - Go
 - GPU
 - GPUクラウド
 - GTB
 - Hardning
 - Harvester
 - HCI
 - iOS
 - IoT
 - ISUCON
 - JapanDrone
 - Java
 - JJUG
 - K8s
 - Kaigi on Rails
 - Kids VALLEY
 - KidsVALLEY
 - LLM
 - MCP
 - MetaMask
 - MySQL
 - NFT
 - NVIDIA
 - NW構成図
 - NW設定
 - Ollama
 - OpenStack
 - Perl
 - perplexity
 - PHP
 - PHPcon
 - PHPerKaigi
 - PHPカンファレンス
 - QUIC
 - Rancher
 - RPA
 - Ruby
 - Selenium
 - Slack
 - Slack活用
 - Spectrum Tokyo Meetup
 - splunk
 - SRE
 - SSL
 - Terraform
 - TLS
 - TypeScript
 - UI/UX
 - vibe
 - VLAN
 - VS Code
 - Webアプリケーション
 - WEBディレクター
 - XSS
 - アドベントカレンダー
 - イベントレポート
 - インターンシップ
 - インハウス
 - オブジェクト指向
 - オンボーディング
 - お名前.com
 - カルチャー
 - クリエイター
 - クリエイティブ
 - コーディング
 - コンテナ
 - サイバーセキュリティ
 - システム研修
 - スクラム
 - スペシャリスト
 - セキュリティ
 - ソフトウェアテスト
 - チームビルディング
 - デザイン
 - ドローン
 - ネットのセキュリティもGMO
 - ネットワーク
 - ビジネス職
 - ヒューマノイド
 - ヒューマノイドロボット
 - プログラミング教育
 - ブロックチェーン
 - ベイズ統計学
 - マルチプレイ
 - ミドルウェア
 - モバイル
 - ゆめみらいワーク
 - リモートワーク
 - レンタルサーバー
 - ロボット
 - 京大ミートアップ
 - 人材派遣
 - 出展レポート
 - 動画
 - 協賛レポート
 - 基礎
 - 多拠点開発
 - 大学授業
 - 宮崎オフィス
 - 展示会
 - 応用
 - 技育プロジェクト
 - 技術広報
 - 採用
 - 採用サイトリニューアル
 - 採用活動
 - 新卒
 - 新卒研修
 - 日本科学未来館
 - 映像
 - 映像クリエイター
 - 暗号
 - 業務効率化
 - 業務時間削減
 - 機械学習
 - 決済
 - 物理暗号
 - 生成AI
 - 視覚暗号
 - 開発生産性
 - 開発生産性向上
 - 階層ベイズ
 - 高機能暗号
 
PICKUP
- 
                  
                    
                                        東京・福島・福岡の専門学校3校でConoHa AI Canvasを用いた講義を実施しました
技術情報
 - 
                  
                    
                                        【協賛レポート・前編】Designship 2025|参加者と“共につくる”デザインのかたち──私たちの挑戦を振り返る
デザイン
 - 
                  
                    
                                        NFSのパフォーマンストラブルに対応した話
技術情報
 - 
                  
                    
                                        Microsoft Entra アプリケーション プロキシ × Windows 統合認証環境での NTLM 廃止影響と対策
技術情報
 - 
                  
                    
                                        GMOインターネットグループ合同テクノロジーインターンシップ2025 体験記~ML/Webコース編①~
カルチャー
 - 
                  
                    
                                        ChatGPTとConoHa AI Canvasで検証:生成AIが変えるクリエイティブ制作
技術情報