Почему доступная физическая память увеличивается после загрузки?

Рассмотрим следующее:

$ dmesg  | grep 'Memory:'                                                                                                                                              
[    0.000000] Memory: 8009456K/8272776K available (8474K kernel code, 1293K rwdata, 3984K rodata, 1488K init, 1316K bss, 263320K reserved, 0K cma-reserved)

Фактически, это говорит о том, что при загрузке система имеет 8009456K, доступных для задач (за исключением зарезервированных ресурсов). Тем не менее, после загрузки free и vmstat сообщают о чем-то очень странном

$ free -k ; vmstat -s | head -n 1                                                                                                                                      
              total        used        free      shared  buff/cache   available
Mem:        8059880     2774996     2667600      394196     2617284     4529964
Swap:       1048572         412     1048160
      8059880 K total memory

Как ни странно, система, которая уже загрузилась, имеет больше доступной памяти, что кажется логически противоположной что и следовало ожидать - во время загрузки должно быть запущено меньше процессов, поэтому должно быть доступно больше общего объема используемой памяти. Как это можно объяснить?

1
задан 26 November 2017 в 00:11

1 ответ

Во время загрузки и на более поздней стадии, чем извлеченная строка dmseg, обычно освобождается некоторая память. Давайте рассмотрим пример с моего компьютера:

Сначала немного изменим команду извлечения dmesg (отредактировано):

$ dmesg  | grep -i 'Memory:'
 ...[snip]...
[    0.000000] Memory: 15829128K/16472972K available (8480K kernel code, 1294K rwdata, 3984K rodata, 1492K init, 1316K bss, 643844K reserved, 0K cma-reserved)
[    0.009844] Freeing SMP alternatives memory: 32K
[    0.868465] Freeing initrd memory: 37044K
[    2.621648] Freeing unused kernel memory: 1492K
[    2.624095] Freeing unused kernel memory: 1748K
[    2.625334] Freeing unused kernel memory: 112K

Обратите внимание на освобожденную память выше, после итоговой строки. Суммируя их все, я получаю, что у меня должно быть всего 15869556. Теперь давайте проверим, используя ту же команду:

$ free -k ; vmstat -s | head -n 1
              total        used        free      shared  buff/cache   available
Mem:       15869556      113352    15461820        9792      294384    15454760
Swap:      16472060           0    16472060
     15869556 K total memory

Обратите внимание, что ожидаемая сумма точно равна фактической сумме.

4
ответ дан 26 November 2017 в 00:11

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

Похожие вопросы: