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 设备的应用程序执行 512 字节校准的 I/O,而不是 4k 校准的 I/O 时将失败。
为避免这种情况,应用程序应参考设备的 I/O 参数来确保使用了正确的 I/O 校准和大小。如前文所述,I/O 参数通过 sysfs 和块设备 ioctl 接口公开。
如需更多信息,请参阅 man libblkid。此 man page 由 libblkid-devel 软件包提供。

sysfs 接口

  • /sys/block/disk/alignment_offset
    或者
    /sys/block/disk/partition/alignment_offset
    注意
    文件位置取决于磁盘是物理磁盘(即本地磁盘、本地 RAID 或者多路径 LUN)还是虚拟磁盘。第一个文件位置适用于物理磁盘,第二个文件位置适用于虚拟磁盘。其原因是 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
  • BLKIOOPToptimal_io_size
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.