2013-05-13 50 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的用途,它定義了一些數據需要符合寫入資格的時間。