Menu Close

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