Wenn ich meinen Computer [Ubuntu 16.04 64-Bit, Kernel 4.4] für eine Weile verwende, muss QEMU die Kernel-Caches löschen, da es sonst nicht gelingt, den RAM zuzuweisen.
Warum passiert das?
Dies ist ein Probelauf:
~$ 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
quelle
quelle
Antworten:
Nicht alle zwischengespeicherten Daten können sofort verworfen werden. Beispielsweise müssen zwischengespeicherte schmutzige Seiten auf die Festplatte zurückgeschrieben werden, bevor sie aus dem RAM entfernt werden können. Sie haben keinen Swap. Bis diese Schreibvorgänge abgeschlossen sind, ist einfach nicht genügend Speicherplatz für QEMU verfügbar.
Sie sollten wirklich eine angemessene Menge an Swap hinzufügen. Sie können nicht erwarten, dass der Speichermanager mit einer Hand hinter dem Rücken gute Arbeit leistet.
quelle
malloc()
Anruf möglicherweise genügend Speicherplatz findet?