gpt4 book ai didi

c - 写入后从磁盘读取而不是缓存

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:53:29 29 4
gpt4 key购买 nike

这是我尝试在 linux 主机上使用 C 程序执行的任务:

将随机数据写入磁盘,调用fysnc()将数据刷新到磁盘,然后从磁盘读回写入的内容,以确保磁盘 Controller 写入数据正确。我遇到的问题是读取似乎是由服务器端缓存而不是设备本身来回答的。这是我已经尝试过的:

 1. O_DIRECT (a gigantic pain in the butt, abandoned)
2. posix_fadvise(fd,0,0,POSIX_FADV_DONTNEED)
3. posix_fadvise(fd,0,0,POSIX_FADV_NOREUSE)
4. O_SYNC
5. O_ASYNC

在每种情况下,iostat 都会显示 0 rrqm/s 和数千个写入请求。我可能是一个非常无知的 linux 用户,但我相信如果 rrqm/s 中没有显示 IO,那么读取将由操作系统缓存而不是设备本身来应答。

“为什么不使用 iozone 或 iometer,或任何其他已经对磁盘施加压力的数十亿工具?”好吧,老实说,如果 HP-UX 的 HAZARD 对 HP-UX 以外的任何东西都有效,我会的,但没有其他任何东西能接近 hazard 的作用,所以我自己做。

最佳答案

您需要执行与以下 shell 命令等效的操作:

sync                               # Instruct all data to get flushed to disk
echo 3 > /proc/sys/vm/drop_caches # Instruct VM system to clear caches

然后再次尝试读取文件。

从 C 实现的一种方法是近似:

sync();
int fd = open("/proc/sys/vm/drop_caches", O_WRONLY|O_TRUNC)
write(fd, "3\n");
close(fd);

关于c - 写入后从磁盘读取而不是缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25187428/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com