Por que o QEMU não pode alocar a memória se os caches do Linux forem muito grandes?

7

Se eu usar minha máquina [Ubuntu 16.04 64 bit, kernel 4.4] por um tempo, o QEMU precisa que os caches do kernel sejam removidos, 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
    
por Marcus 09.10.2016 / 12:23

1 resposta

18

Nem todos os dados em cache podem ser descartados imediatamente. Por exemplo, páginas sujas em cache precisam ser gravadas no disco antes de poderem ser removidas da RAM. Você não tem swap, então, até que as 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 swap. Você não pode esperar que o gerenciador de memória faça um bom trabalho com uma mão amarrada atrás das costas.

    
por 09.10.2016 / 12:36