posix_fadvise不起作用
posix_fadvise not working
我有以下代码来打开所有文件:
int ret= open(zFile, flags, mode);
posix_fadvise (ret, 0, 0, POSIX_FADV_RANDOM);
posix_fadvise返回 0 表示成功。
但它无法正常工作。
操作系统: 乌班图 12.04
Strace 显示程序完成的读取是29088 字节。
我使用以下命令来计算从跟踪日志读取
cat fadvise3.log | grep read | awk '{SUM+=$NF} END {print SUM}'
但iotop显示该程序已经阅读了有关2.5 MB.
- 有没有办法知道为什么它读了这么多?
- 为什么 iotop O/p 与 strace 不匹配?
- 为什么posix_fadvise(ret, 0, 0, POSIX_FADV_RANDOM); 不起作用?
- 如何禁用进程的预读?
有关阅读的更多详细信息:我正在使用 sqlite 库。并修改了他们的函数posixOpen以打开数据库。读取由 sqlite 完成。
>posix_fadvise将更改内核内部完成的预读量。它不会更改用户空间应用程序将传递给读取系统调用的参数。因此,除了在 strace 下运行时读取系统调用的参数会有任何不同之外,您不应该这样做。
磁盘读取是在磁盘块中完成的,这是一个硬件限制,POSIX_FADV_RANDOM
无法更改它。如果您阅读的量少于一个块,您仍然需要支付该块的成本。
即便如此, posix_fadvise
顾名思义,只是对内核的建议。一个提示。不是严格的规定。
相关文章:
- 我的神经网络不起作用 [XOR 问题]
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- C++为什么尽管我调用了void函数,它却不起作用
- 为什么在保护模式下继承升级不起作用
- 循环在计数器中不起作用
- 在其他文件中创建类时在 c++ 项目中不起作用
- Visual studio代码重构似乎不起作用(例如,重命名符号-f2)
- 为什么二进制搜索在我的测试中不起作用
- 我的代码中有错误吗?使用BGI图形的C++代码对我不起作用
- 为什么 const std::p air<K,V>& 在 std::map 上基于范围的 for 循环不起作用?
- 带有指定长度字符* 参数的 std::regex_search 在 VS2017 中不起作用?
- Bjarne Stroustrup Book - std_lib_facilities.h - 不起作用(未知类型名称)
- 为什么简单的算术减法在"if"条件下不起作用?
- 为什么Stroustup书中的has_f不起作用
- 你能检查一下为什么在这个代码中从链接列表中删除项目不起作用吗
- 嵌套While循环不起作用(C++问题)
- C++Matching Brackets 2解决方案不起作用
- 为什么这段代码不起作用,我该如何解决?
- 我正在开发服务器,ip作为参数传递不起作用