
t0mmy
学習履歴詳細
Linuxのしくみ 増量改訂版 9章 ブロック層 読了
やったこと
- Linuxのしくみ 増量改訂版 9章 ブロック層 読了
学んだこと
ポイント
- ブロック層
- 推測するな、計測せよ
- I/O メトリクス
- ブロック層の機能
- I/O スケジューラ
- readahead(先読み)
- ストレージデバイス高速化と、ブロック層の機能の関係
学び
- I/O スケジューラによる、読み書き最適化
- 推測するな、計測せよ
- ハードウェア性能が上昇するほど、I/O スケジューラのデメリットが際立つようになる
- I/O スケジューラの「I/O要求をためて、最適化する」という仕組みがほとんど活きず、I/Oスケジューラ動作分のオーバーヘッドだけが残る
- NVMe SSD では、I/Oスケジューラがデフォルトで off に
- 通常SSD と NVMe の違い
- HDD と同じI/Fでアクセスできるか否かの違い
気づき
- ワークロードによって、注視すべき I/O メトリクスは変化する
メモ
HDD の特徴
元々ブロック層は、HDDをターゲットとしていた。
技術革新によってSSDが台頭すると、SSD向けにブロック層も変化していった。
HDD は、データの読み書きが機械的な処理であり、この処理が非常に遅い。
そのため、HDDのパフォーマンスは、データの読み書き(≒機械的な処理)をいかに減らせるかが焦点だった。
ブロック層の基本機能
代表的な機能は、「I/Oスケジューラ」と「readahead(先読み)」。
I/O スケジューラ
データの読み書き命令を一定期間ストックし、最適化した後に読み書きする。
雑に言えばバッチ&最適化処理。
I/O スケジューラ側で最適化してくれるので、プログラマがHDDのI/O最適化を意識する必要が(ある程度)なくなった。
readahead (先読み)
「次はこの辺りのデータを読み込むはず」と当たりをつけて、事前にデータを読み込んでページキャッシュに保存する。
配列など、連続したデータ領域へのアクセスを試みる場合に効果がある。
ブロックデバイスの性能指標
大きく、次の指標がある。
- スループット
- 単位時間当たりのデータ転送量
- データコピー時に注視される
- レイテンシ
- 一回の I/O に要する時間
- 小さなI/Oが大量に発生するような場合に注視される
- IOPS
- I/O per second。そのまま、一秒間に処理できるI/O数
並列処理が可能な場合、上記指標の計算に注意する事。
推測するな、計測せよ
カタログスペックだけ見てスペックを判断するのではなく、実際に動かして、メトリクスを計測してスペックを判断しよう。
動かしてみて初めて分かることもある。
ただし、推測を全否定しているわけではない。
性能測定ツール fio
ファイルシステム/デバイス の性能測定ツールとして使用できる。
fio の特徴
* I/Oのパターンや、並列数、その時に使うI/Oの仕組み(fioでは I/O engine と呼ぶ)を細かく決めることが出来る
* レイテンシ、スループット、IOPS など、様々な種類の性能情報を採取できる
何のための性能測定
「性能測定を行う目的」をしっかり定めて、目的を達成できるメトリクスを採取しよう。
言い換えると、余計なメトリクスは採取せず、目的を達成できる最低限のメトリクスだけ採取しよう。
よくある失敗は、「目的無くやみくもに有名なベンチマークツールを使って、採取したら満足して終わり」という事態。
「どういうパターンで性能測定するか」「そのために、どのようなベンチマークツールを使うか」
技術革新に伴うブロック層の変化
大きく、以下の技術革新が、ブロック層の変化に影響を与えた。
- SSD の登場
- HDDと比較して機械的な動作が一切なく、高速に動作する
- SATA SSD , SAS SSD : HDD と同じI/Fでマシンに接続できるSSD
- NVMe SSD : HDD と全く異なるI/Fでマシンに接続できる
- HDDと比較して機械的な動作が一切なく、高速に動作する
- CPUのマルチコア化
- I/Oスケジューラは、マルチコア未対応だった
- 現在のIOスケジューラは、マルチキューを用いて複数CPU動作を実現している
ハードウェア性能が上昇するほど、I/O スケジューラのデメリットが際立つようになる。
NVMe SSD では、I/Oスケジューラがデフォルトで off になっている。
2023年04月30日(日)
2.0時間