Re: [RFC PATCH 0/4] kvm: Report unused guest pages to host

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, 2019-02-05 at 12:25 -0500, Nitesh Narayan Lal wrote:
> On 2/4/19 1:15 PM, Alexander Duyck wrote:
> > This patch set provides a mechanism by which guests can notify the host of
> > pages that are not currently in use. Using this data a KVM host can more
> > easily balance memory workloads between guests and improve overall system
> > performance by avoiding unnecessary writing of unused pages to swap.
> > 
> > In order to support this I have added a new hypercall to provided unused
> > page hints and made use of mechanisms currently used by PowerPC and s390
> > architectures to provide those hints. To reduce the overhead of this call
> > I am only using it per huge page instead of of doing a notification per 4K
> > page. By doing this we can avoid the expense of fragmenting higher order
> > pages, and reduce overall cost for the hypercall as it will only be
> > performed once per huge page.
> > 
> > Because we are limiting this to huge pages it was necessary to add a
> > secondary location where we make the call as the buddy allocator can merge
> > smaller pages into a higher order huge page.
> > 
> > This approach is not usable in all cases. Specifically, when KVM direct
> > device assignment is used, the memory for a guest is permanently assigned
> > to physical pages in order to support DMA from the assigned device. In
> > this case we cannot give the pages back, so the hypercall is disabled by
> > the host.
> > 
> > Another situation that can lead to issues is if the page were accessed
> > immediately after free. For example, if page poisoning is enabled the
> > guest will populate the page *after* freeing it. In this case it does not
> > make sense to provide a hint about the page being freed so we do not
> > perform the hypercalls from the guest if this functionality is enabled.
> > 
> > My testing up till now has consisted of setting up 4 8GB VMs on a system
> > with 32GB of memory and 4GB of swap. To stress the memory on the system I
> > would run "memhog 8G" sequentially on each of the guests and observe how
> > long it took to complete the run. The observed behavior is that on the
> > systems with these patches applied in both the guest and on the host I was
> > able to complete the test with a time of 5 to 7 seconds per guest. On a
> > system without these patches the time ranged from 7 to 49 seconds per
> > guest. I am assuming the variability is due to time being spent writing
> > pages out to disk in order to free up space for the guest.
> 
> Hi Alexander,
> 
> Can you share the host memory usage before and after your run. (In both
> the cases with your patch-set and without your patch-set)

Here are some snippets from the /proc/meminfo for the system both
before and after the test.

W/O patch
-- Before --
MemTotal:       32881396 kB
MemFree:        21363724 kB
MemAvailable:   25891228 kB
Buffers:            2276 kB
Cached:          4760280 kB
SwapCached:            0 kB
Active:          7166952 kB
Inactive:        1474980 kB
Active(anon):    3893308 kB
Inactive(anon):     8776 kB
Active(file):    3273644 kB
Inactive(file):  1466204 kB
Unevictable:       16756 kB
Mlocked:           16756 kB
SwapTotal:       4194300 kB
SwapFree:        4194300 kB
Dirty:             29812 kB
Writeback:             0 kB
AnonPages:       3896540 kB
Mapped:            75568 kB
Shmem:             10044 kB

-- After --
MemTotal:       32881396 kB
MemFree:          194668 kB
MemAvailable:      51356 kB
Buffers:              24 kB
Cached:           129036 kB
SwapCached:       224396 kB
Active:         27223304 kB
Inactive:        2589736 kB
Active(anon):   27220360 kB
Inactive(anon):  2481592 kB
Active(file):       2944 kB
Inactive(file):   108144 kB
Unevictable:       16756 kB
Mlocked:           16756 kB
SwapTotal:       4194300 kB
SwapFree:          35616 kB
Dirty:                 0 kB
Writeback:             0 kB
AnonPages:      29476628 kB
Mapped:            22820 kB
Shmem:              5516 kB

W/ patch
-- Before --
MemTotal:       32881396 kB
MemFree:        26618880 kB
MemAvailable:   27056004 kB
Buffers:            2276 kB
Cached:           781496 kB
SwapCached:            0 kB
Active:          3309056 kB
Inactive:         393796 kB
Active(anon):    2932728 kB
Inactive(anon):     8776 kB
Active(file):     376328 kB
Inactive(file):   385020 kB
Unevictable:       16756 kB
Mlocked:           16756 kB
SwapTotal:       4194300 kB
SwapFree:        4194300 kB
Dirty:                96 kB
Writeback:             0 kB
AnonPages:       2935964 kB
Mapped:            75428 kB
Shmem:             10048 kB

-- After --
MemTotal:       32881396 kB
MemFree:        22677904 kB
MemAvailable:   26543092 kB
Buffers:            2276 kB
Cached:          4205908 kB
SwapCached:            0 kB
Active:          3863016 kB
Inactive:        3768596 kB
Active(anon):    3437368 kB
Inactive(anon):     8772 kB
Active(file):     425648 kB
Inactive(file):  3759824 kB
Unevictable:       16756 kB
Mlocked:           16756 kB
SwapTotal:       4194300 kB
SwapFree:        4194300 kB
Dirty:           1336180 kB
Writeback:             0 kB
AnonPages:       3440528 kB
Mapped:            74992 kB
Shmem:             10044 kB




[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux