我需要在存储设备上执行 direct-io。
这个问题对于缓冲池程序员也有效。
需要的对齐是4096字节, 我在做
// Given: 7,000(count), 14,000(offset)
u64
aligned_offset = (offset >> 12/* from 4096's width */), // value: 12288
aligned_offset_remainder = (offset - aligned_offset), // value: 1712
aligned_count = ((count + 4096) >> 12); // value: 8192
问题是,
aligned_count
应该是12288,才能得到(aligned_count + aligned_offset)
为24576;而不是 (aligned_count/*8192*/ + aligned_offset/*12288*/)
,它给出 20480,小于 21,000,因此所需的字节未读满
谢谢
当然!当在 Linux 中使用
O_DIRECT
标志进行存储 I/O 操作时,理解和计算某些方面(例如对齐、偏移和计数)对于最佳性能和正确功能至关重要。
这些方面对于在 Linux 存储 I/O 操作中有效利用
O_DIRECT
、确保最佳性能以及与存储设备特性的兼容性至关重要。