2011-11-11 41 views
4

我們一直在我們的幾個Linux機器上出現iptables問題,看起來被加載規則的剪切數導致vmalloc錯誤(vmap分配大小3506176失敗:使用vmalloc = to增加大小。)出現在dmesg中,並且任何其他規則停止加載。Linux內核,iptables和vmalloc大小

經過大量研究,我們將vmalloc大小從128MB增加到512MB,並重新啓動,並暫時解決了問題。 似乎64位內核沒有這個問題(?)。我檢查了我的CentOS 6盒(64位),它有VmallocTotal:34,359,738,367 kB(!)。

所以我的問題是,32位PAE內核是否也能解決這個問題? 這將是很容易改變的內核比跨多個站點的操作系統...

感謝, 的Jak

回答

6

32位PAE內核不會解決這個問題,因爲這個問題從分配碎片莖vmalloc空間。在x86-64中,vmalloc空間非常大(遠大於物理RAM大小),因此您不會陷入分佈失敗發生的足夠分散的情況。然而,在32位中,vmalloc空間要小得多 - 百萬MB。轉向PAE並不會使這個虛擬分配空間變得更大。

如果你想保持32位,你的問題的解決方法是修改內核,使iptables從預先分配的vmalloc空間分配,從而避免由其他調用者造成的碎片導致vmalloc(儘管如此,我們不能保證這會完美地解決你的問題,因爲它取決於iptables如何分配內存與你使用它相關的配置文件,這在這個問題的範圍中是未知的)。

+0

非常感謝:-) – Jak

+0

非常酷。感謝您的洞察力。 –

2

您可以使用32位用戶空間的64位內核 - 這將爲您帶來只有內核更改的巨大vmalloc舞臺的優勢。

+0

也非常感謝您對遠程站點的很好的修復 – Jak