使用 libaio 从 iSCSI 磁盘读取数据时,我遇到了数据损坏问题。
执行的步骤:
- 使用 posix_memalign 和 4K Allignemnt 分配缓冲区 (1MB)。
- 在提交 io 之前用 9 填充缓冲区。
- 使用 O_DIRECT 标志打开 iSCSI 磁盘。
- 使用 libaio 的 io_submit 提交读取请求
- 并行执行 vfork()
- 调用 io_getevents 并等待 io 完成
- 检查 io_getevents 中检索到的缓冲区的 crc 以检查数据是否一致。
某些偏移量的 CRC 匹配失败。
某些 io 的 CRC 检查失败。在提交 io 请求之前,我正在使用模式“9”填充缓冲区,并且我分析了损坏的缓冲区并观察到缓冲区中的某些部分数据保持不变,即缓冲区的某些部分中存在相同的 9。使用 posix_memalign() 分配缓冲区,4K 对齐。
是不是有人也面临过类似的问题?如果有任何已知的限制,请与我分享。