2013-05-13 30 views
0

这里是基于Linux2.6.32.12我的系统:
1它包含20个进程占用大量CPU USR的 2它需要写速度100M/s的磁盘的数据,并将这些数据不会最近使用。如何在我的linux系统中停止磁盘I/O的页面缓存?

我想到:
它运行稳定和磁盘I/O会不会影响我的系统。

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

我有什么尝试:
我试图解决的问题,通过“FSYNC”每次我写一个大block.But物理内存仍然减少,而缓存增加。

如何到此为止页面缓存也没用,我

更多资料:
当状元秀免费46963米,一切都很好,包括CPU%WA低,vmstat显示没有SI左右。
当Top显示免费的273m时,%wa太高而影响我的进程,而vmstat显示很多si等等。

+0

为什么这对你很重要?阅读http://www.linuxatemyram。com/ – 2013-05-13 09:15:35

+0

根据linuxatemyram.com的说法,“如果应用程序需要更多的内存,他们只是从磁盘缓存中取回它们,它们不会开始交换。”
但在我的情况下,我看到交换。 – wilsonwen 2013-05-13 09:35:47

+0

你为什么认为改变这种行为会改善整体表现? – 2013-05-13 10:21:55

回答

1

我不确定改变什么会影响整体性能。

也许你可以在程序中使用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或更好)肯定会帮助:Linux已经从2.6.32这是真的老了在这些问题上显著改善。

+0

看来posix_fadvise是解决方案。让我尝试。非常感谢 – wilsonwen 2013-05-14 03:23:11

+0

请尝试内核升级。 – 2013-05-14 05:26:38

1

要删除页缓存,你可以做到以下几点:

​​

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