On Wed, Mar 06, 2019 at 01:07:50PM -0500, Nitesh Narayan Lal wrote:
> 
> On 3/6/19 11:09 AM, Michael S. Tsirkin wrote:
> > On Wed, Mar 06, 2019 at 10:50:42AM -0500, Nitesh Narayan Lal wrote:
> >> The following patch-set proposes an efficient mechanism for handing freed 
> >> memory between the guest and the host. It enables the guests with no page 
> >> cache to rapidly free and reclaims memory to and from the host 
> >> respectively.
> >>
> >> Benefit:
> >> With this patch-series, in our test-case, executed on a single system and 
> >> single NUMA node with 15GB memory, we were able to successfully launch 5 
> >> guests(each with 5 GB memory) when page hinting was enabled and 3 without 
> >> it. (Detailed explanation of the test procedure is provided at the bottom 
> >> under Test - 1).
> >>
> >> Changelog in v9:
> >>    * Guest free page hinting hook is now invoked after a page has been 
> >> merged in the buddy.
> >>         * Free pages only with order FREE_PAGE_HINTING_MIN_ORDER(currently 
> >> defined as MAX_ORDER - 1) are captured.
> >>    * Removed kthread which was earlier used to perform the scanning, 
> >> isolation & reporting of free pages.
> >>    * Pages, captured in the per cpu array are sorted based on the zone 
> >> numbers. This is to avoid redundancy of acquiring zone locks.
> >>         * Dynamically allocated space is used to hold the isolated guest 
> >> free pages.
> >>         * All the pages are reported asynchronously to the host via virtio 
> >> driver.
> >>         * Pages are returned back to the guest buddy free list only when 
> >> the host response is received.
> >>
> >> Pending items:
> >>         * Make sure that the guest free page hinting's current 
> >> implementation doesn't break hugepages or device assigned guests.
> >>    * Follow up on VIRTIO_BALLOON_F_PAGE_POISON's device side support. (It 
> >> is currently missing)
> >>         * Compare reporting free pages via vring with vhost.
> >>         * Decide between MADV_DONTNEED and MADV_FREE.
> >>    * Analyze overall performance impact due to guest free page hinting.
> >>    * Come up with proper/traceable error-message/logs.
> >>
> >> Tests:
> >> 1. Use-case - Number of guests we can launch
> >>
> >>    NUMA Nodes = 1 with 15 GB memory
> >>    Guest Memory = 5 GB
> >>    Number of cores in guest = 1
> >>    Workload = test allocation program allocates 4GB memory, touches it via 
> >> memset and exits.
> >>    Procedure =
> >>    The first guest is launched and once its console is up, the test 
> >> allocation program is executed with 4 GB memory request (Due to this the 
> >> guest occupies almost 4-5 GB of memory in the host in a system without 
> >> page hinting). Once this program exits at that time another guest is 
> >> launched in the host and the same process is followed. We continue 
> >> launching the guests until a guest gets killed due to low memory condition 
> >> in the host.
> >>
> >>    Results:
> >>    Without hinting = 3
> >>    With hinting = 5
> >>
> >> 2. Hackbench
> >>    Guest Memory = 5 GB 
> >>    Number of cores = 4
> >>    Number of tasks         Time with Hinting       Time without Hinting
> >>    4000                    19.540                  17.818
> >>
> > How about memhog btw?
> > Alex reported:
> >
> >     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.
> >
> Here are the results:
> 
> Procedure: 3 Guests of size 5GB is launched on a single NUMA node with
> total memory of 15GB and no swap. In each of the guest, memhog is run
> with 5GB. Post-execution of memhog, Host memory usage is monitored by
> using Free command.
> 
> Without Hinting:
>                  Time of execution    Host used memory
> Guest 1:        45 seconds            5.4 GB
> Guest 2:        45 seconds            10 GB
> Guest 3:        1  minute               15 GB
> 
> With Hinting:
>                 Time of execution     Host used memory
> Guest 1:        49 seconds            2.4 GB
> Guest 2:        40 seconds            4.3 GB
> Guest 3:        50 seconds            6.3 GB

OK so no improvement. OTOH Alex's patches cut time down to 5-7 seconds
which seems better. Want to try testing Alex's patches for comparison?

-- 
MST

Reply via email to