Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

23.2. ユーザー空間アクセス

常に適切に調整された I/O を使用し、サイズ付けされた I/O を使用するようにしてください。これは、ダイレクト I/O アクセスに特に重要です。ダイレクト I/O は logical_block_size の境界で調整する必要があり、また logical_block_size の倍数に調整する必要があります
ネイティブ 4K デバイス(つまり logical_block_size が 4K)の場合、アプリケーションはデバイスの logical_block_size の倍数に対してダイレクト I/O を実行することが重要になります。つまり、アプリケーションは 4k-aligned I/O ではなく、512 バイトのアラインメント I/O を実行するネイティブの 4k デバイスで失敗します。
これを回避するには、適切な I/O 調整とサイズを使用するように、アプリケーションはデバイスの I/O パラメーターを参照してください。上記のように、I/O パラメーターは sysfs インターフェースおよびブロックデバイス ioctl インターフェースの両方で公開されます。
詳細は man libblkid を参照してください。この man ページは、libblkid-devel パッケージで提供されます。

sysfs インターフェース

  • /sys/block/disk/alignment_offset
  • /sys/block/disk/partition/alignment_offset
  • /sys/block/disk/queue/physical_block_size
  • /sys/block/disk/queue/logical_block_size
  • /sys/block/disk/queue/minimum_io_size
  • /sys/block/disk/queue/optimal_io_size
カーネルは、I/O パラメーター情報を提供しない「レガシー」デバイスの sysfs 属性をエクスポートします。以下に例を示します。

例23.1 sysfs インターフェース

alignment_offset:    0
physical_block_size: 512
logical_block_size:  512
minimum_io_size:     512
optimal_io_size:     0

ブロックデバイス ioctls

  • BLKALIGNOFF: alignment_offset
  • BLKPBSZGET: physical_block_size
  • BLKSSZGET: logical_block_size
  • BLKIOMIN: minimum_io_size
  • BLKIOOPT: optimal_io_size