Jeśli korzystam z mojego komputera [Ubuntu 16.04 64 bit, jądro 4.4], QEMU potrzebuje pamięci podręcznej jądra, aby zostać upuszczonym, w przeciwnym razie nie uda mu się przydzielić pamięci RAM.
Dlaczego tak się dzieje?
To jest przykładowy przebieg:
~$ 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
źródło
źródło
Odpowiedzi:
Nie wszystkie buforowane dane można natychmiast usunąć. Na przykład buforowane brudne strony muszą zostać zapisane z powrotem na dysk, zanim można je usunąć z pamięci RAM. Nie masz zamiany, więc dopóki zapisy nie zostaną ukończone, po prostu nie ma wystarczającej ilości miejsca dla QEMU.
Naprawdę powinieneś dodać rozsądną ilość zamiany. Nie można oczekiwać, że menedżer pamięci wykona dobrą robotę, trzymając jedną rękę za plecami.
źródło
malloc()
wywołanie może znaleźć wystarczającej ilości pamięci?