«Неправильный» общий объем памяти в виртуальной машине [дубликат]

Из man bash

       edit-and-execute-command (C-xC-e)
          Invoke an editor on the current command line, and execute the result as shell commands.  Bash attempts to invoke $VISUAL, $EDITOR, and emacs as the editor, in that order.
5
24.02.2018, 18:26
2 ответа

free, /proc/meminfoetc. solo muestran la memoria realmente disponible para el espacio del usuario; el kernel reserva algo de memoria para su propio uso. Si busca una línea Memory:en sus registros de arranque(/var/log/dmesg.0o algo así, o journalctl), verá algo como

Memory: 32818828K/33439808K available (5612K kernel code, 1083K rwdata, 1896K rodata, 1264K init, 832K bss, 620980K reserved, 0K cma-reserved)

La cantidad de memoria disponible después del arranque suele ser un poco mayor que la cantidad indicada aquí, porque parte de la memoria utilizada para la inicialización se devuelve al sistema y la cantidad de memoria reservada puede cambiar (, p. si está reservado para una GPU integrada ); en mi caso, MemTotalmuestra 32062 MiB en lugar de los 32049 MiB indicados anteriormente.

En su caso, solo se reservan 62MiB (2048 – 1986 ); eso es suficiente para cubrir el código y los datos del kernel, además de algo de memoria reservada. Los registros de arranque también incluirán detalles del mapa de memoria del sistema, que debería representar la mayor parte de la memoria reservada (está reservada para el firmware, ACPI, etc., incluso en una VM ).

MemTotalnunca corresponde a la cantidad de memoria física instalada o memoria asignada para una VM, y eso es perfectamente normal .

6
27.01.2020, 20:39

Complementando la respuesta de @StephenKitt, confirmando que MemTotalno es el valor de toda la RAM disponible:

De las fuentes del kernel,Documentation/filesystems/proc.txt

MemTotal - Total usable ram (i.e. physical ram minus a few reserved bits and the kernel binary code)

También en el momento del arranque,x86/boot/compressed/kaslr.c:

enum mem_avoid_index {
    MEM_AVOID_ZO_RANGE = 0,
    MEM_AVOID_INITRD,
    MEM_AVOID_CMDLINE,
    MEM_AVOID_BOOTPARAMS,
    MEM_AVOID_MEMMAP_BEGIN,
    MEM_AVOID_MEMMAP_END = MEM_AVOID_MEMMAP_BEGIN + MAX_MEMMAP_REGIONS - 1,
    MEM_AVOID_MAX,
};
0
27.01.2020, 20:39

Теги

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