On 17.07.19 13:20, Michael S. Tsirkin wrote: > Wei, others, > > ATM virtio_balloon_shrinker_scan will only get registered > when deflate on oom feature bit is set. > > Not sure whether that's intentional. Assuming it is: > > virtio_balloon_shrinker_scan will try to locate and free > pages that are processed by host. > The above seems broken in several ways: > - count ignores the free page list completely > - if free pages are being reported, pages freed > by shrinker will just get re-allocated again
Trying to answer your questions (not sure if I fully understood what you mean) virtio_balloon_shrinker_scan() will not be called due to inflation requests (balloon_page_alloc()). It will be called whenever the system is OOM, e.g., when starting a new application. I assume you were expecting the shrinker getting called due to balloon_page_alloc(). however, that is not the case as we pass "__GFP_NORETRY". To test, something like: 1. Start a VM with -device virtio-balloon-pci,deflate-on-oom=true 2. Inflate the balloon, e.g., QMP: balloon 1024 QMP: info balloon -> 1024 See how "MemTotal" in /proc/meminfo in the guest won't change 3. Run a workload that exhausts memory in the guest (OOM). See how the balloon was automatically deflated QMP: info balloon -> Something bigger than 1024 Not sure if it is broken, last time I played with it, it worked, but that was ~1-2 years ago. -- Thanks, David / dhildenb