Se eu usar minha máquina [Ubuntu 16.04 64 bits, kernel 4.4] por um tempo, o QEMU precisará que os caches do kernel sejam eliminados; caso contrário, ele não conseguirá alocar a RAM.
Por que isso acontece?
Esta é uma amostra de execução:
~$ 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
Marcus
fonte
fonte
Respostas:
Nem todos os dados em cache podem ser descartados imediatamente. Por exemplo, as páginas sujas armazenadas em cache precisam ser gravadas de volta no disco antes de poderem ser removidas da RAM. Você não tem troca, portanto, até que essas gravações sejam concluídas, simplesmente não há espaço disponível suficiente para o QEMU.
Você realmente deve adicionar uma quantidade razoável de troca. Você não pode esperar que o gerenciador de memória faça um bom trabalho com uma mão amarrada nas costas.
fonte
malloc()
chamada para talvez encontrar memória suficiente?