レンダリングツリー構築のプロセスを理解する
お弁当箱でイメージする領域確保
2024年10月20日
著者: 竹洞 陽一郎
実行
テスト種別
fioでは、I/Oエンジンを指定することで、様々なテストができます。
- sync
-
標準的な同期I/Oエンジン。デフォルトのI/Oエンジンで、すべての読み書き操作が同期的に行われ、I/Oが完了するまでプロセスがブロックされます。
用途としては、基本的なディスクI/Oテストに最適です。
シンプルでオーバーヘッドが少ない。fio --name=sync-test --ioengine=sync --rw=randwrite --bs=4k --size=1G --numjobs=4 --time_based --runtime=30s --group_reporting
- libaio (Linux Asynchronous I/O)
-
Linuxで利用可能な非同期I/Oエンジン。
I/Oが完了する前に他の作業を実行でき、複数のI/Oリクエストを同時に処理することができます。
用途としては、高スループットが求められる環境でのパフォーマンステストに最適です。
大規模な非同期I/O操作に最適。fio --name=libaio-test --ioengine=libaio --rw=randwrite --bs=4k --size=1G --numjobs=4 --time_based --runtime=30s --group_reporting
- psync
-
POSIX標準の同期I/Oエンジン。
syncエンジンと似ていますが、異なる低レベルのPOSIX I/Oシステムコールを使用します。
POSIX標準に準拠した同期I/Oテストに最適です。fio --name=psync-test --ioengine=psync --rw=randwrite --bs=4k --size=1G --numjobs=4 --time_based --runtime=30s --group_reporting
- mmap
-
メモリマッピングされたI/Oエンジン。
メモリとディスク間でファイルをマッピングし、直接メモリにアクセスしてI/Oを行います。
メモリマップI/Oのパフォーマンスを測定する際に使用します。fio --name=mmap-test --ioengine=mmap --rw=randwrite --bs=4k --size=1G --numjobs=4 --time_based --runtime=30s --group_reporting
- splice
- I/Oパターン
- ランダム書き込み (randwrite)
- ブロックサイズ
- 4KB (bs=4k)
- テストデータサイズ
- 1GB (size=1G)
- 並列ジョブ数
- 4 (numjobs=4)
- 実行時間
- 30秒 (runtime=30s)
- I/O深度
- 1 (iodepth=1)
ランダムリードテスト
fio --name=random-write-test --ioengine=libaio --rw=randwrite --bs=4k --size=1G --numjobs=4 --time_based --runtime=30s --group_reporting
このテストは「ランダム書き込み」(random write) のパフォーマンスを評価するための例で、以下のような設定にしてある。
### 主な結果: - **IOPS**: テストでは、934,000 IOPS(Input/Output Operations Per Second)のランダム書き込み性能が得られています。これは非常に高いI/O操作数であり、高速なストレージ(おそらくNVMe SSD)の性能を反映しています。 - **帯域幅(BW)**: 書き込み帯域幅は3648 MiB/s(= 3826 MB/s)です。これは、ディスクに対して非常に高い速度でデータを書き込んでいることを示しています。 - **レイテンシ**: - **送信遅延(slat)**: 書き込み操作がキューに入るまでの遅延(最小1.075マイクロ秒、最大2.319ミリ秒、平均1.656マイクロ秒) - **完了遅延(clat)**: 実際のI/O操作が完了するまでの遅延(最小0.234マイクロ秒、最大0.9586ミリ秒、平均0.256マイクロ秒) - **全体の遅延(lat)**: 全体のI/O遅延(最小1.327マイクロ秒、最大2.32ミリ秒、平均1.913マイクロ秒) レイテンシのパーセンタイル値も示されており、例えば99.95%の遅延が612ナノ秒以内であることがわかります。これも非常に低いレイテンシを示しており、優れたパフォーマンスを意味します。 - **CPU使用率**: - `usr=8.91%`(ユーザーモード)、`sys=78.87%`(システムモード)で、かなりの割合がカーネルによるI/O処理に費やされています。 - **ディスク統計**: - ディスク `nvme0n1` の書き込み操作は218,827回行われ、書き込まれたセクター数は222,737,912セクターでした。ディスクは約68.89%の利用率で稼働しており、これはストレージが大部分の時間で利用されていたことを示しています。 ### 詳細な分析: - **IOPS**: 934k IOPS は非常に高い数値であり、NVMe SSDのような高速ストレージを利用していることを示しています。この数値は、4KBのランダム書き込みに対して優れたパフォーマンスを提供しています。 - **帯域幅**: 3826 MB/s の書き込み速度は、テストのスループットが非常に高いことを意味します。仮想マシンやハードウェア環境に依存しますが、通常のHDDやSATA SSDではこのような高い帯域幅を実現するのは難しいため、これはNVMeベースのストレージのパフォーマンスです。 - **レイテンシ**: 平均レイテンシは約1.913マイクロ秒で、非常に低い値です。これは、ディスクI/O操作の遅延がほとんどないことを示しており、高性能なストレージであることを裏付けています。 - **CPU使用率**: システムCPU使用率が約78.87%と高いため、このテストでは多くのリソースがI/O処理に使われています。これは、高速なディスクI/Oを処理するためにCPUの負荷が高くなる典型的な状況です。 ### 結論: この `fio` テスト結果は、非常に高性能なストレージシステム、特にNVMe SSDなどを利用していることを示しています。IOPS、帯域幅、レイテンシともに優れており、I/Oパフォーマンスが求められる環境において非常に適したストレージといえます。また、CPUリソースが大きく消費されているため、高いI/O負荷がかかっていることが確認できますが、ストレージの利用率はまだ100%に達していないため、さらなる余力があると考えられます。