summary refs log tree commit diff stats
path: root/results/scraper/launchpad/1609968
blob: 109a8fcfc897c13daef7d6566d5c418ed27ba26d (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
"cannot set up guest memory" b/c no automatic clearing of Linux' cache

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

Hi Celmor,
  That shouldn't happen! QEMU's allocation of memory is pretty normal, so really the question is for the kernel guys.
  Having chatted to a collague, two questions:
     a) Does it still happen if you set /proc/sys/vm/overcommit_memory to 1?
     b) What filesystem are you using (some have different behaviour when dealing with the caches).

@dgilbert-h / Dr. David Alan Gilbert
Thanks for your answer.

b)
Mounted/used block devices:
NAME    MOUNTPOINT TYPE  FSTYPE
sda                disk  crypto_LUKS
└─Data1            crypt zfs_member
├─sdb5  /          part  ext4
└─sdb6  /boot      part  vfat
sdd                disk  crypto_LUKS
└─Data2            crypt zfs_member
ZFS file system for extra space, also ZFS is the reason I'm not running the latest kernel...

a)
$ free
              total        used        free      shared  buff/cache   available
Mem:       16379476     7879216     1867196      188180     6633064     3587620
Swap:             0           0           0
$ qemu.sh -m 10240 && echo success || echo failed
qemu-system-x86_64: cannot set up guest memory 'pc.ram': Cannot allocate memory
failed
$ sudo sh -c 'echo 1 > /proc/sys/vm/overcommit_memory'
$ qemu.sh -m 10240 && echo success || echo failed
success

So setting /proc/sys/vm/overcommit_memory to 1 works, so I guess I'm gonna need to execute
sudo sh -c 'echo 1 > /proc/sys/vm/overcommit_memory'
at start of my qemu.sh script instead of the 'drop_caches' part.
I still think the kernel should do whatever function overcommit_memory is for automatically, bit it seams to be the fault of the kernel of my distribution then, thanks for your help.

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.