Red Hat Training

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

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

適切にアライメントおよびサイズ設定された I/O を使用するように常に注意してください。これは、ダイレクト I/O アクセスでは特に重要です。ダイレクト I/O は、logical_block_size 境界と、logical_block_size の倍数で整列する必要があります。
ネイティブ 4K デバイス( logical_block_size が 4K)の場合は、アプリケーションがデバイスの logical_block_size の倍数でダイレクト I/O を実行することが重要です。つまり、アプリケーションは、4k 境界で整列された 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
    注記
    ファイルの場所は、ディスクが物理ディスク (ローカルディスク、ローカル RAID、またはマルチパス LUN) か、仮想ディスクかによって異なります。最初のファイルの場所は物理ディスクに適用され、2 番目のファイルの場所は仮想ディスクに適用されます。これは、virtio-blk がパーティションのアラインメント値を常に報告するためです。物理ディスクは、アライメント値を報告する場合と報告しない場合があります。
  • /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