Installation guide
Chapter 18. Storage I/O Alignment and Size
110
18.2. Userspace Access
Always take care to use properly aligned and sized I/O. This is especially important for Direct I/O
access. Direct I/O should be aligned on a logical_block_size boundary, and in multiples of the
logical_block_size.
With native 4K devices (i.e. logical_block_size is 4K) it is now critical that applications perform
direct I/O in multiples of the device's logical_block_size. This means that applications will fail
with native 4k devices that perform 512-byte aligned I/O rather than 4k-aligned I/O.
To avoid this, an application should consult the I/O parameters of a device to ensure it is using the
proper I/O alignment and size. As mentioned earlier, I/O parameters are exposed through the both
sysfs and block device ioctl interfaces.
For more details, refer to man libblkid. This man page is provided by the libblkid-devel
package.
sysfs Interface
• /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
The kernel will still export these sysfs attributes for "legacy" devices that do not provide I/O
parameters information, for example:
alignment_offset: 0
physical_block_size: 512
logical_block_size: 512
minimum_io_size: 512
optimal_io_size: 0
Block Device ioctls
• BLKALIGNOFF: alignment_offset
• BLKPBSZGET: physical_block_size
• BLKSSZGET: logical_block_size
• BLKIOMIN: minimum_io_size
• BLKIOOPT: optimal_io_size
18.3. Standards
This section describes I/O standards used by ATA and SCSI devices.