Назад | Перейти на главную страницу

Почему QEMU не может выделить память, если кеши Linux слишком велики?

Если я какое-то время использую свою машину [Ubuntu 16.04 64 бит, ядро ​​4.4], QEMU необходимо удалить кеши ядра, иначе ему не удастся выделить оперативную память.

Почему это происходит?

Это пробный запуск:

~$ free -m
              total        used        free      shared  buff/cache   available
Mem:          15050        5427        3690          56        5931        4803
Swap:             0           0           0

~$ sudo qemu-system-x86_64 -m 10240 # and other options
qemu-system-x86_64: cannot set up guest memory 'pc.ram': Cannot allocate memory

~$ echo 3 | sudo tee /proc/sys/vm/drop_caches
3

~$ free -m
              total        used        free      shared  buff/cache   available
Mem:          15050        1799        9446          56        3803        9414
Swap:             0           0           0

~$ sudo qemu-system-x86_64 -m 10240 # and other options
qemu-system-x86_64: cannot set up guest memory 'pc.ram': Cannot allocate memory

~$ echo 3 | sudo tee /proc/sys/vm/drop_caches
3

~$ free -m
              total        used        free      shared  buff/cache   available
Mem:          15050        1502       10819          56        2727       10784
Swap:             0           0           0

~$ sudo qemu-system-x86_64 -m 10240 # and other options
# Now QEMU starts

Не все кэшированные данные можно сразу удалить. Например, кэшированные грязные страницы должны быть записаны обратно на диск, прежде чем их можно будет удалить из ОЗУ. У вас нет свопа, поэтому, пока эти записи не будут завершены, для QEMU просто не хватит места.

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