Si j'utilise ma machine [Ubuntu 16.04 64 bits, noyau 4.4] pendant un certain temps, QEMU a besoin que les caches du noyau soient supprimés, sinon, il n'arrivera pas à allouer la RAM.
Pourquoi cela arrive-t-il?
Voici un exemple d'exécution:
~$ 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
la source
la source
Réponses:
Toutes les données mises en cache ne peuvent pas être supprimées immédiatement. Par exemple, les pages sales mises en cache doivent être réécrites sur le disque avant de pouvoir être supprimées de la RAM. Vous n'avez aucun échange, donc jusqu'à ce que ces écritures soient terminées, il n'y a tout simplement pas assez d'espace disponible pour QEMU.
Vous devriez vraiment ajouter une quantité raisonnable de swap. Vous ne pouvez pas vous attendre à ce que le gestionnaire de mémoire fasse du bon travail avec une main attachée derrière le dos.
la source
malloc()
appel trouve peut-être suffisamment de mémoire?