私のマシン[Ubuntu 16.04 64ビット、カーネル4.4]をしばらく使用すると、QEMUはカーネルキャッシュを削除する必要があります。そうしないと、RAMを割り当てることができません。
なぜそれが起こるのですか?
これはサンプル実行です:
~$ 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
キャッシュされたすべてのデータをすぐに破棄できるわけではありません。たとえば、キャッシュされたダーティページは、RAMから削除する前にディスクに書き戻す必要があります。スワップがないため、これらの書き込みが完了するまで、QEMUに使用できる十分なスペースがありません。
妥当な量のスワップを追加する必要があります。片方の手を後ろで結んでメモリマネージャーがうまく機能することは期待できません。