我有以下代码用于打开所有文件:
int ret= open(zFile, flags, mode);
posix_fadvise (ret, 0, 0, POSIX_FADV_RANDOM);
和posix_fadvise返回0表示成功。
但它无法正常工作。
操作系统:Ubuntu 12.04
Strace表明该程序已完成读取操作 29088字节。
我使用以下命令计算从strace日志中读取的数据
cat fadvise3.log | grep read | awk '{SUM+=$NF} END {print SUM}'
但iotop显示该程序已阅读2.5 MB.
有关阅读的更多细节: 我正在使用sqlite库。并修改了它们的函数posixOpen来打开数据库。读取由sqlite完成。
答案 0 :(得分:3)
posix_fadvise将改变内核中内部的预读量。它不会更改用户空间应用程序将传递给read syscall的参数。因此,除了在strace下运行它时读取系统调用的参数会有任何不同之外,你不应该这样做。
答案 1 :(得分:1)
磁盘读取是在磁盘块中完成的,这是硬件限制,POSIX_FADV_RANDOM
无法更改。如果你读的少于块,你仍然需要支付该块的费用。
即便如此,顾名思义,posix_fadvise
只是对内核的建议。一个提示。不是严格的规则。