第22章 ストレージの I/O 調整とサイズ

最近の SCSI および ATA 標準への強化により、ストレージデバイスが推奨の (また、場合によっては必須の) I/O 調整 I/O サイズ を示すようになりました。この情報は特に物理的なセクターサイズを 512 バイトから 4 キロバイトに増加させている新しいディスクドライブで役に立ちます。また、チャンクサイズやストライプのサイズがパフォーマンスに影響を与える可能性がある RAID デバイスに対しても役に立ちます。
ベンダー提供の I/O 調整と I/O サイズの情報を処理するために Linux I/O スタックが強化され、ストレージ管理ツール (partedlvmmkfs.* など) によるデータ配置とアクセスの最適化が可能になります。レガシーデバイスが I/O 調整や I/O サイズなどのデータをエクスポートしない場合、Red Hat Enterprise Linux 7 のストレージ管理ツールは安全のため 4k (または 4k より大きい 2 の累乗) の境界で I/O を調整します。これにより、4k セクターのデバイスが必須または推奨の I/O 調整やサイズを表示しない場合であっても正しく動作するようになります。
デバイスから取得したオペレーティングシステムの情報を確定する方法については 「ユーザー領域のアクセス」 を参照してください。このデータはこの後にデータの配置を確定するためにストレージ管理ツールによって使用されます。
IO スケジューラーは Red Hat Enterprise Linux 7 から変更されました。デフォルトの IO スケジューラーは、SATA ドライブの場合を除き、Deadline です。CFQ は SATA ドライブのデフォルト IO スケジューラーです。高速なストレージの場合、Deadline のパフォーマンスは CFQ を上回り、Deadline の使用時には、特別なチューニングなしにパフォーマンスが強化されます。
一部のディスク (SAS 回転ディスクなど) に適したデフォルトが設定されていない場合は、IO スケジューラーを CFQ に変更してください。これはワークロードによって異なります。

22.1. ストレージアクセス用のパラメーター

オペレーティングシステムは、次の情報を使って I/O の調整とサイズを確定します。
physical_block_size
デバイスが動作できる最小の内部ユニット
logical_block_size
デバイス上の場所指定に外部で使用される
alignment_offset
基礎となる物理的なアライメントのオフセットとなる Linux ブロックデバイス (パーティション/MD/LVM デバイス) の先頭部分のバイト数
minimum_io_size
ランダムな I/O に対して推奨のデバイス最小ユニット
optimal_io_size
ストリーミング I/O に対するデバイスの推奨ユニット
たとえば、特定の 4K セクターのデバイスでは、内部では physical_block_size に 4K を使用しているのに、Linux に対してはより小さい 512 バイトの logical_block_size を公開している場合があります。この違いが I/O の調整ミスを招くことがあります。これに対処するため、ブロックデバイスの先頭が基礎となる物理的なアライメントのオフセットとなる場合、Red Hat Enterprise Linux 7 の I/O スタックは必ず alignment_offset に十分なサイズとなるよう必然的に調整される境界 (physical_block_size) 上ですべてのデータエリアを開始しようとします。
ストレージの製造元では、デバイスのランダムな I/O (minimum_io_size) およびストリーミングの I/O (optimal_io_size) に対して推奨となる最小ユニットに関する I/O hints も提供しています。たとえば、 minimum_io_sizeoptimal_io_size は RAID デバイスのチャンクサイズとストライプサイズにそれぞれ該当します。