posix_fadvise(WILLNEED) 使 IO 变慢?

Posted

技术标签:

【中文标题】posix_fadvise(WILLNEED) 使 IO 变慢?【英文标题】:posix_fadvise(WILLNEED) makes IO slower? 【发布时间】:2011-06-23 14:51:00 【问题描述】:

在运行 Linux 内核版本 2.6.18-194.26.1.el5 的 CentOS 5.5 机器上,我注意到 posix_fadvise(WILLNEED) 使读取 60K 文件比普通 IO 慢了近 200%。

看起来实际的 fadvise 调用是同步的,它还会延迟调度应用程序中使用从文件中读取的数据的其他线程。

是否可能由于 fadvise 调用,内核正忙于从磁盘获取数据,并最终延迟了其他计划任务?这似乎与我们期望通过 fadvise 调用所期望的异步预取行为相反。

我的问题是:是否有任何可调内核参数可用于强制 posix_fadvise(WILLNEED) 的异步行为?比如增加内核 IO 线程、页面缓存?

【问题讨论】:

【参考方案1】:

这是最近的asked on LKML。这就是它的设计方式。如果您需要非阻塞fadvise,请在另一个线程中进行。

【讨论】:

感谢您的回答。链接中提供的答案暗示了内核中正在服务的 IO 请求的数量。这是一个可配置的数字吗?如果系统有很多资源,增加这个队列可以帮助减少同步行为的影响...... nr_requests per queue, so you can tune it。我不确定它是从什么初始化的。

以上是关于posix_fadvise(WILLNEED) 使 IO 变慢?的主要内容,如果未能解决你的问题,请参考以下文章

“第二信使”都有哪些?与它作用的物质都有哪些?

使引导容器大小变大会使页面无响应

Css使Div自适应居中

如何用word使图片上下居中

如何使 RelativeLayout 半透明但不使活动

如何使图像自动调整大小,使宽度为 100% 并相应调整高度?