如何停止我的Linux系统中的磁盘I / O的页面caching?

这里是我的系统基于Linux2.6.32.12:
1它包含20个占用大量usr cpu的进程2需要将数据以100M / s的速率写入磁盘,并且这些数据最近不会被使用。

我期望的是:
它可以稳定运行,磁盘I / O不会影响我的系统。

我的问题:
一开始,系统按我的想法运行。 但随着时间的推移,Linux会为磁盘I / Ocaching大量数据,导致物理内存减less。 最后,将没有足够的内存,那么Linux将交换进出我的进程。 这会导致很多CPU时间用于I / O的I / O问题。

我有什么尝试:
我试图通过“fsync”来解决这个问题,每次我写一个大块。但是物理内存在caching的同时还在递减。

如何停止页面caching在这里,对我来说是没用的

更多信息:
当Top显示免费46963m时,一切都很好,包括cpu%wa低,vmstat显示没有si左右。
当Top显示免费273m时,%wa是如此之高以至于影响我的进程,而vmstat显示了很多si等等。

Solutions Collecting From Web of "如何停止我的Linux系统中的磁盘I / O的页面caching?"

我不确定改变什么会影响整体表现。

也许你可以在你的程序中使用posix_fadvise(2)和sync_file_range(2) (更常见的是 fsync(2)或fdatasync(2)或sync(2)或syncfs(2) …)。 另外看看madvise(2) , mlock(2)和munlock(2) ,当然还有mmap(2)和munmap(2) 。 也许ionice(1)可以帮助。

在读者的过程中,你可能会使用readhahead(2) (也许在一个单独的线程中)。

升级你的内核 (到3.6或者更高版本) 肯定会有所帮助 :从2.6.32开始,Linux已经有了很大的改进,

要删除页面缓存,您可以执行以下操作:

  "echo 1 > /proc/sys/vm/drop_caches" 

drop_caches通常是0.而且,可以根据需要进行更改。 正如你已经确定自己,你需要释放页面缓存,所以这是如何做到这一点。 你也可以看看dirty_writeback_centisecs(及其相关的可调参数)( http://lxr.linux.no/linux+*/Documentation/sysctl/vm.txt#L129 )来快速回写,但是请注意它可能会有后果,因为它调用内核闪光灯线程来写出脏页面。 此外,请注意dirty_expire_centices的用途,它定义了一些数据需要符合写入资格的时间。