Por que a memória física disponível parece aumentar após a inicialização?

1

Considere o seguinte:

$ 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)

Efetivamente, isso sugere que no sistema de inicialização há 8009456K disponível para tarefas (menos material reservado). No entanto, após a inicialização, free e vmstat relatam algo muito peculiar

$ 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

Curiosamente, um sistema que já inicializou tem mais memória disponível, o que parece logicamente o oposto do que se esperaria - no momento da inicialização, deveria haver menos processos sendo executados, portanto, mais memória utilizável deveria estar disponível. Como isso pode ser explicado?

    
por Sergiy Kolodyazhnyy 25.11.2017 / 21:40

1 resposta

4

Durante a inicialização, e em um estágio posterior à sua linha dmseg extraída, normalmente alguma memória é liberada. Vamos trabalhar com um exemplo do meu computador:

Primeiro, alteramos o comando de extração do dmesg um pouco (editado):

$ 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

Observe a memória liberada acima, após a linha de resumo. Adicionando-os todos eu entendo que eu deveria ter 15869556 total. Agora vamos verificar, usando o mesmo comando:

$ 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

Observe que o total esperado é exatamente igual ao total real.

    
por Doug Smythies 25.11.2017 / 22:33