Если я какое-то время пользуюсь моей машиной [Ubuntu 16.04 64 bit, kernel 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
cache
kernel
linux-kernel
qemu
Маркус
источник
источник
Ответы:
Не все кэшированные данные могут быть немедленно удалены. Например, кешированные грязные страницы должны быть записаны обратно на диск, прежде чем их можно будет удалить из ОЗУ. У вас нет свопа, поэтому до тех пор, пока эти записи не завершатся, для QEMU просто не хватит места.
Вы действительно должны добавить разумное количество свопа. Вы не можете ожидать, что менеджер памяти сделает хорошую работу с одной рукой, связанной за его спиной.
источник
malloc()
вызова возможно найти достаточно памяти?