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.