posix_fadvise(WILLNEED)使IO更慢?

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

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

是否有可能内核忙于从磁盘获取数据,由于调用时间过长,并最终延迟其他计划的任务? 这似乎与预期的asynchronous预取行为相反,我们期望从一个非常时尚的呼叫。

我的问题是:是否有任何可调内核参数可以用来强制asynchronous行为posix_fadvise(WILLNEED)? 像增加内核IO线程一样,页面caching?

这是刚刚在LKML上被问到的 。 这就是它的设计。 如果你需要一个非阻塞的fadvise ,在另一个线程中执行。