Почему в зоне памяти ядра меньше 896 МБ?

В моей системе Lowmem ядра (NORMALZONE) имеет длину 597424 кб. Насколько я знаю, это должно быть около 890 МБ в макс. Почему эта система использует ~590 МБ? Это настраивается?
Я спрашиваю об этом, потому что время от времени я сталкиваюсь с низкими условиями в этой системе. Поэтому я хочу использовать lowmem как можно больше.

Linux 3.10.24-2 # 1 SMP вт 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

1 ответ

Решение

Я не уверен, что меня услышат на этот раз, но я все равно попробую: переключиться на x86_64 не так сложно, как вы думаете.

Но я думаю, вам все еще нужно какое-то объяснение. Я предполагаю, что если у вас будет только 4G памяти, то LowTotal будет равно ~850 МБ, для 16G это будет около ~750 МБ, а для 64G это будет ~378 МБ.

Позвольте мне привести Linux Торвальдса:

Вся ваша нехватка памяти используется для struct page массивы, которые описывают все остальное.

Таким образом, на самом деле обходной путь для вашей проблемы состоит в том, чтобы уменьшить объем памяти сервера (физически или, возможно, через mem параметр загрузки но я не проверял).
Также вы можете изменить ядро ​​/ разделение пространства пользователя через VMSPLIT_2G опция конфигурации ядра.
Но на самом деле перейти на x86_64 проще, не так ли? знак равно

PS. Вы можете использовать x86 userland с ядром x86_64.

Другие вопросы по тегам