All of lore.kernel.org
 help / color / mirror / Atom feed
From: Alexander Duyck <alexander.duyck@gmail.com>
To: nitesh@redhat.com
Cc: yang.zhang.wz@gmail.com, pagupta@redhat.com, kvm@vger.kernel.org,
	riel@surriel.com, david@redhat.com, linux-kernel@vger.kernel.org,
	lcapitulino@redhat.com, linux-mm@kvack.org, wei.w.wang@intel.com,
	aarcange@redhat.com, mst@redhat.com, dhildenb@redhat.com,
	pbonzini@redhat.com, dodgen@google.com, konrad.wilk@oracle.com
Subject: Re: [RFC][QEMU Patch] KVM: Enable QEMU to free the pages hinted by the guest
Date: Wed, 06 Mar 2019 16:35:13 -0800	[thread overview]
Message-ID: <20190307003207.25058.4638.stgit@localhost.localdomain> (raw)
In-Reply-To: <CAKgT0Ue=kGB4D2oV1WUmWHiYhrXa64KWBP2ZhLgHNgvWyOng5A@mail.gmail.com>

Here are some changes I made to your patch in order to address the sizing
issue I called out. You may want to try testing with this patch applied to
your QEMU as I am finding it is making a signficant difference. It has cut
the test time for the 32G memhog test I called out earlier in half.

Signed-off-by: Alexander Duyck <alexander.h.duyck@linux.intel.com>
---
 hw/virtio/virtio-balloon.c |   28 +++++++++++++++++-----------
 1 file changed, 17 insertions(+), 11 deletions(-)

diff --git a/hw/virtio/virtio-balloon.c b/hw/virtio/virtio-balloon.c
index d2cf66ada3c0..3ca6b1c6d511 100644
--- a/hw/virtio/virtio-balloon.c
+++ b/hw/virtio/virtio-balloon.c
@@ -285,7 +285,7 @@ static void balloon_stats_set_poll_interval(Object *obj, Visitor *v,
     balloon_stats_change_timer(s, 0);
 }
 
-static void *gpa2hva(MemoryRegion **p_mr, hwaddr addr, Error **errp)
+static void *gpa2hva(MemoryRegion **p_mr, unsigned long *size, hwaddr addr, Error **errp)
 {
     MemoryRegionSection mrs = memory_region_find(get_system_memory(),
                                                  addr, 1);
@@ -302,6 +302,7 @@ static void *gpa2hva(MemoryRegion **p_mr, hwaddr addr, Error **errp)
     }
 
     *p_mr = mrs.mr;
+    *size = mrs.mr->size - mrs.offset_within_region;
     return qemu_map_ram_ptr(mrs.mr->ram_block, mrs.offset_within_region);
 }
 
@@ -313,30 +314,35 @@ void page_hinting_request(uint64_t addr, uint32_t len)
     struct guest_pages *guest_obj;
     int i = 0;
     void *hvaddr_to_free;
-    unsigned long pfn, pfn_end;
     uint64_t gpaddr_to_free;
-    void * temp_addr = gpa2hva(&mr, addr, &local_err);
+    unsigned long madv_size, size;
+    void * temp_addr = gpa2hva(&mr, &madv_size, addr, &local_err);
 
     if (local_err) {
         error_report_err(local_err);
         return;
     }
+    if (madv_size < sizeof(*guest_obj)) {
+	printf("\nBad guest object ptr\n");
+	return;
+    }
     guest_obj = temp_addr;
     while (i < len) {
-        pfn = guest_obj[i].pfn;
-	pfn_end = guest_obj[i].pfn + (1 << guest_obj[i].order) - 1;
-	trace_virtio_balloon_hinting_request(pfn,(1 << guest_obj[i].order));
-	while (pfn <= pfn_end) {
-	        gpaddr_to_free = pfn << VIRTIO_BALLOON_PFN_SHIFT;
-	        hvaddr_to_free = gpa2hva(&mr, gpaddr_to_free, &local_err);
+        gpaddr_to_free = guest_obj[i].pfn << VIRTIO_BALLOON_PFN_SHIFT;
+	size = (1 << VIRTIO_BALLOON_PFN_SHIFT) << guest_obj[i].order;
+	while (size) {
+	        hvaddr_to_free = gpa2hva(&mr, &madv_size, gpaddr_to_free, &local_err);
 	        if (local_err) {
 			error_report_err(local_err);
 		        return;
 		}
-		ret = qemu_madvise((void *)hvaddr_to_free, 4096, QEMU_MADV_DONTNEED);
+		if (size < madv_size)
+			madv_size = size;
+		ret = qemu_madvise((void *)hvaddr_to_free, madv_size, QEMU_MADV_DONTNEED);
 		if (ret == -1)
 		    printf("\n%d:%s Error: Madvise failed with error:%d\n", __LINE__, __func__, ret);
-		pfn++;
+		gpaddr_to_free += madv_size;
+		size -= madv_size;
 	}
 	i++;
     }


  reply	other threads:[~2019-03-07  0:35 UTC|newest]

Thread overview: 105+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-03-06 15:50 [RFC][Patch v9 0/6] KVM: Guest Free Page Hinting Nitesh Narayan Lal
2019-03-06 15:50 ` [RFC][Patch v9 1/6] KVM: Guest free page hinting support Nitesh Narayan Lal
2019-03-06 23:43   ` Alexander Duyck
2019-03-06 23:43     ` Alexander Duyck
2019-03-07 19:32     ` Nitesh Narayan Lal
2019-03-06 15:50 ` [RFC][Patch v9 2/6] KVM: Enables the kernel to isolate guest free pages Nitesh Narayan Lal
2019-03-07 18:30   ` Alexander Duyck
2019-03-07 18:30     ` Alexander Duyck
2019-03-07 19:23     ` Nitesh Narayan Lal
2019-03-07 19:30       ` David Hildenbrand
2019-03-07 21:32         ` Alexander Duyck
2019-03-07 21:32           ` Alexander Duyck
2019-03-07 21:40           ` David Hildenbrand
2019-03-07 22:35             ` Alexander Duyck
2019-03-07 22:35               ` Alexander Duyck
2019-03-08  2:28               ` Michael S. Tsirkin
2019-03-08  2:32               ` Michael S. Tsirkin
2019-03-08 18:06                 ` Alexander Duyck
2019-03-08 18:06                   ` Alexander Duyck
2019-03-08 18:59                   ` Michael S. Tsirkin
2019-03-08 19:10                   ` Nitesh Narayan Lal
2019-03-08 19:25                     ` Alexander Duyck
2019-03-08 19:25                       ` Alexander Duyck
2019-03-08 19:38                       ` Nitesh Narayan Lal
2019-03-08 21:39                         ` Alexander Duyck
2019-03-08 21:39                           ` Alexander Duyck
2019-03-12 19:46                           ` Nitesh Narayan Lal
2019-03-12 21:13                             ` Alexander Duyck
2019-03-12 21:13                               ` Alexander Duyck
2019-03-12 21:53                               ` David Hildenbrand
2019-03-12 22:56                                 ` Alexander Duyck
2019-03-12 22:56                                   ` Alexander Duyck
2019-03-13 11:54                               ` Nitesh Narayan Lal
2019-03-13 12:17                                 ` David Hildenbrand
2019-03-13 13:08                                   ` Nitesh Narayan Lal
2019-03-13 16:37                                   ` Alexander Duyck
2019-03-13 16:37                                     ` Alexander Duyck
2019-03-13 16:39                                     ` David Hildenbrand
2019-03-13 22:54                                       ` Alexander Duyck
2019-03-13 22:54                                         ` Alexander Duyck
2019-03-13 23:18                                         ` David Hildenbrand
2019-03-06 15:50 ` [RFC][Patch v9 3/6] KVM: Enables the kernel to report isolated pages Nitesh Narayan Lal
2019-03-06 21:30   ` Alexander Duyck
2019-03-06 21:30     ` Alexander Duyck
2019-03-07 13:23     ` Nitesh Narayan Lal
2019-03-06 15:50 ` [RFC][Patch v9 4/6] KVM: Reporting page poisoning value to the host Nitesh Narayan Lal
2019-03-06 15:50 ` [RFC][Patch v9 5/6] KVM: Enabling guest free page hinting via static key Nitesh Narayan Lal
2019-03-06 15:50 ` [RFC][Patch v9 6/6] KVM: Adding tracepoints for guest free page hinting Nitesh Narayan Lal
2019-03-06 15:52 ` [RFC][QEMU Patch] KVM: Enable QEMU to free the pages hinted by the guest Nitesh Narayan Lal
2019-03-06 23:49   ` Alexander Duyck
2019-03-07  0:35     ` Alexander Duyck [this message]
2019-03-07 12:23       ` Nitesh Narayan Lal
2019-03-06 16:09 ` [RFC][Patch v9 0/6] KVM: Guest Free Page Hinting Michael S. Tsirkin
2019-03-06 18:07   ` Nitesh Narayan Lal
2019-03-06 18:12     ` Michael S. Tsirkin
2019-03-06 18:30       ` Nitesh Narayan Lal
2019-03-06 18:38         ` Michael S. Tsirkin
2019-03-06 18:40           ` Nitesh Narayan Lal
2019-03-06 18:43             ` Alexander Duyck
2019-03-06 18:43               ` Alexander Duyck
2019-03-06 18:43         ` Michael S. Tsirkin
2019-03-06 18:59           ` David Hildenbrand
2019-03-06 19:08             ` Alexander Duyck
2019-03-06 19:08               ` Alexander Duyck
2019-03-06 19:18               ` David Hildenbrand
2019-03-06 19:24                 ` Alexander Duyck
2019-03-06 19:24                   ` Alexander Duyck
2019-03-06 20:31                   ` Nitesh Narayan Lal
2019-03-06 20:32             ` Michael S. Tsirkin
2019-03-06 21:40               ` David Hildenbrand
2019-03-06 22:18                 ` Michael S. Tsirkin
2019-03-06 23:12                   ` Alexander Duyck
2019-03-06 23:12                     ` Alexander Duyck
2019-03-14 16:42       ` Nitesh Narayan Lal
2019-03-14 16:58         ` Alexander Duyck
2019-03-14 16:58           ` Alexander Duyck
2019-03-18 15:57           ` Nitesh Narayan Lal
2019-03-19 13:33             ` David Hildenbrand
2019-03-19 16:04               ` Nitesh Narayan Lal
2019-03-19 17:38                 ` Alexander Duyck
2019-03-19 17:59                   ` Nitesh Narayan Lal
2019-03-20 13:18                     ` Nitesh Narayan Lal
2019-03-25 14:27                       ` Nitesh Narayan Lal
2019-03-25 15:37                         ` Michael S. Tsirkin
2019-03-25 15:42                           ` Nitesh Narayan Lal
2019-03-06 18:00 ` Alexander Duyck
2019-03-06 19:07   ` Nitesh Narayan Lal
2019-03-06 22:05     ` Alexander Duyck
2019-03-06 22:05       ` Alexander Duyck
2019-03-07 13:09       ` Nitesh Narayan Lal
2019-03-07 18:45         ` Alexander Duyck
2019-03-07 18:45           ` Alexander Duyck
2019-03-07 18:53           ` Michael S. Tsirkin
2019-03-07 19:27             ` David Hildenbrand
2019-03-08  2:24               ` Michael S. Tsirkin
2019-03-08 11:53                 ` David Hildenbrand
2019-03-07 21:14             ` Alexander Duyck
2019-03-07 21:14               ` Alexander Duyck
2019-03-07 21:28               ` David Hildenbrand
2019-03-07 22:19                 ` Alexander Duyck
2019-03-07 22:19                   ` Alexander Duyck
2019-03-07 19:45           ` Nitesh Narayan Lal
2019-03-07 19:49           ` David Hildenbrand
2019-03-07 18:46   ` Michael S. Tsirkin
2019-03-12 19:58     ` David Hildenbrand

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190307003207.25058.4638.stgit@localhost.localdomain \
    --to=alexander.duyck@gmail.com \
    --cc=aarcange@redhat.com \
    --cc=david@redhat.com \
    --cc=dhildenb@redhat.com \
    --cc=dodgen@google.com \
    --cc=konrad.wilk@oracle.com \
    --cc=kvm@vger.kernel.org \
    --cc=lcapitulino@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=mst@redhat.com \
    --cc=nitesh@redhat.com \
    --cc=pagupta@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=riel@surriel.com \
    --cc=wei.w.wang@intel.com \
    --cc=yang.zhang.wz@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.