第23章 ストレージ I/O アライメントとサイズ
最近の SCSI 規格および ATA 規格の強化により、ストレージデバイスには推奨される (場合によっては必須の) I/O アライメント および I/O サイズ を示すことができるようになりました。この情報は、物理セクターのサイズを 512 バイトから 4k バイトに増やす新しいディスクドライブで特に役立ちます。この情報は、チャンクサイズやストライプサイズがパフォーマンスに影響を与える RAID デバイスにも役立ちます。
Linux I/O スタックは、ベンダーが提供する I/O アライメントと I/O サイズ情報を処理するように強化され、ストレージ管理ツール(parted、lvm、mkfs.* など)がデータの配置とアクセスを最適化できるようになりました。レガシーデバイスが I/O のアラインメントとサイズのデータをエクスポートしていない場合、Red Hat Enterprise Linux 7 のストレージ管理ツールは、4k (またはそれ以上の 2 の累乗) 境界で I/O を控えめに調整します。これにより、必要/推奨される I/O アライメントやサイズが記載されていなくても、4k セクターデバイスが正しく動作するようになります。
オペレーティングシステムがデバイスから取得した情報を特定する方法は、「ユーザー空間アクセス」 を参照してください。このデータは、その後にストレージ管理ツールによってデータ配置を決定するために使用されます。
Red Hat Enterprise Linux 7 では IO スケジューラーが変更されました。SATA ドライブを除き、デフォルトの IO スケジューラーが期限になりました。CFQ は、SATA ドライブのデフォルトの IO スケジューラーです。ストレージを高速化するために、Deadline は CFQ を上回り、使用時には特別なチューニングなしでパフォーマンスが向上します。
一部のディスク (SAS ローテーションディスクなど) ではデフォルトが適切でない場合は、IO スケジューラーを CFQ に変更します。このインスタンスはワークロードによって異なります。
23.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 セクターデバイスは内部で 4K physical_block_size を使用しますが、より詳細な 512 バイト logical_block_size を Linux に公開する場合があります。この不一致により、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 ヒント を提供することもできます。たとえば、minimum_io_size と optimal_io_size は、それぞれ RAID デバイスのチャンクサイズとストライプサイズに対応している可能性があります。