Si uso mi máquina [Ubuntu 16.04 64 bit, kernel 4.4] por un tiempo, QEMU necesita que se eliminen los cachés del kernel, de lo contrario, no logrará asignar la RAM.
¿Por que sucede?
Esta es una muestra de ejecución:
~$ 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
fuente
fuente
Respuestas:
No todos los datos almacenados en caché se pueden descartar de inmediato. Por ejemplo, las páginas sucias almacenadas en caché deben volver a escribirse en el disco antes de que puedan eliminarse de la RAM. No tiene intercambio, así que hasta que esas escrituras se completen, simplemente no hay suficiente espacio disponible para QEMU.
Realmente debería agregar una cantidad razonable de intercambio. No puede esperar que el administrador de memoria haga un buen trabajo con una mano atada a la espalda.
fuente
malloc()
llamada a tal vez encontrar suficiente memoria?