我有一个程序用于在 RAID 配置中运行多个磁盘单元。1 个进程同步 ( O_SYNC
) 使用 . 将随机数据写入文件write()
。然后,它将目录的名称放入共享内存队列中,其中第二个进程正在等待队列有条目以使用read()
.
我似乎无法克服的问题是,当第二个进程尝试将数据读回内存时,没有一个磁盘单元显示读取访问。该程序有代码来检查读回的数据是否等于写入磁盘的代码,并且数据总是匹配的。
我的问题是,如何使操作系统(IBM i)在将数据写入磁盘时不缓冲数据,以便read()
系统调用访问磁盘上的数据而不是缓存中的数据?我正在做简单的吞吐量计算,并且read()
操作总是比write
操作快 10 倍以上。
我曾尝试使用该O_DIRECT
标志,但似乎无法将数据写入文件。它可能与设置正确的对齐缓冲区有关。我也试过posix_fadvise(fd, offset,len, POSIX_FADV_DONTNEED)
系统调用。
我已经阅读了这个类似的问题,但没有找到解决方案。如果有帮助,我可以提供代码。