Thanks Celmor; that might be one for the zfs guys then if that's what's holding onto the caches; I suspect their caching is a bit different from the rest of the Linux filesystems.
I'm going to close this as 'invalid' because I'm pretty sure this isn't a qemu bug; the kernel should be giving us the RAM we asked for if it's got it. ** Changed in: qemu Status: New => Invalid -- You received this bug notification because you are a member of qemu- devel-ml, which is subscribed to QEMU. https://bugs.launchpad.net/bugs/1609968 Title: "cannot set up guest memory" b/c no automatic clearing of Linux' cache Status in QEMU: Invalid Bug description: Version: qemu-2.6.0-1 Kernel: 4.4.13-1-MANJARO Full script (shouldn't matter though): https://pastebin.com/Hp24PWNE Problem: When host has been up and used for a while cache has been filled as much that guest can't be started without droping caches. Expected behavior: Qemu should be able to request as much Memory as it needs and cause Linux to drop cache pages if needed. A user shouldn't be required to have to come to this conclusion and having to drop caches to start Qemu with the required amount of memory. My fix: Following command (as root) required before qemu start: # sync && echo 3 > /proc/sys/vm/drop_caches Example: $ sudo qemu.sh -m 10240 && echo success || echo failed qemu-system-x86_64: cannot set up guest memory 'pc.ram': Cannot allocate memory failed $ free total used free shared buff/cache available Mem: 16379476 9126884 3462688 148480 3789904 5123572 Swap: 0 0 0 $ sudo sh -c 'sync && echo 3 > /proc/sys/vm/drop_caches' $ free total used free shared buff/cache available Mem: 16379476 1694528 14106552 149772 578396 14256428 Swap: 0 0 0 $ sudo qemu.sh -m 10240 && echo success || echo failed success To manage notifications about this bug go to: https://bugs.launchpad.net/qemu/+bug/1609968/+subscriptions