Linux

為什麼核心低記憶體區域小於 896 MB?

  • January 1, 2014

在我的系統中,核心 (NORMALZONE) 的 Lowmem 長度為 597424 kb。據我所知,最大應該是 890 MB。為什麼這個系統使用 ~590 MB?可調嗎?我問這個是因為,我在這個系統上不時

面臨低記憶體 oom 條件。所以我想盡可能大地使用lowmem。

Linux 3.10.24-2 #1 SMP Tue Dec 31 07:09:19 EET 2013 i686 i686 i386 GNU/Linux

# free -lk
            total       used       free     shared    buffers     cached
Mem:      37426296    3369432   34056864          0      36048    1373524
Low:        597424     278236     319188
High:     36828872    3091196   33737676
-/+ buffers/cache:    1959860   35466436
Swap:     35318864          0   35318864



# cat /proc/meminfo
MemTotal:       37426296 kB
MemFree:        33971268 kB
Buffers:           36172 kB
Cached:          1383668 kB
SwapCached:            0 kB
Active:          2034844 kB
Inactive:        1036224 kB
Active(anon):    1656904 kB
Inactive(anon):    12716 kB
Active(file):     377940 kB
Inactive(file):  1023508 kB
Unevictable:           0 kB
Mlocked:               0 kB
HighTotal:      36828872 kB
HighFree:       33667168 kB
LowTotal:         597424 kB
LowFree:          304100 kB
SwapTotal:      35318864 kB
SwapFree:       35318864 kB
Dirty:                 0 kB
Writeback:             0 kB
AnonPages:       1653176 kB
Mapped:           138320 kB
Shmem:             18348 kB
Slab:             117464 kB
SReclaimable:      44796 kB
SUnreclaim:        72668 kB
KernelStack:        7704 kB
PageTables:        97184 kB
NFS_Unstable:          0 kB
Bounce:              116 kB
WritebackTmp:          0 kB
CommitLimit:    65259900 kB
Committed_AS:    3876084 kB
VmallocTotal:     122880 kB
VmallocUsed:       27020 kB
VmallocChunk:      23732 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:       10232 kB
DirectMap2M:      901120 kB

我不確定這次是否會被聽到,但無論如何我都會嘗試:切換到x86_64並不像你想像的那麼難。

但我想你仍然需要某種解釋。我建議,如果你只有 4G 的記憶體,那麼 aLowTotal將等於 ~850mb,對於 16G,它將約為 ~750mb,而對於 64G,它將是 ~378mb。

讓我引用 Linux Torvalds

您所有的低記憶體都用於struct page描述其他所有內容的數組。

因此,實際上解決您的問題的方法是減少伺服器擁有的記憶體量(物理上或可能通過mem引導參數,但我尚未檢查)。

您還可以通過VMSPLIT_2G核心配置選項更改核心/使用者空間拆分。

但實際上,切換到 x86_64 更容易,不是嗎?=]

PS。您實際上可以將 x86 使用者空間與 x86_64 核心一起使用。

引用自:https://serverfault.com/questions/564279