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 变慢?的主要内容,如果未能解决你的问题,请参考以下文章