From: Wei Wang <wei.w.wang@intel.com>
To: Michal Hocko <mhocko@kernel.org>
Cc: "Michael S. Tsirkin" <mst@redhat.com>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"qemu-devel@nongnu.org" <qemu-devel@nongnu.org>,
"virtualization@lists.linux-foundation.org"
<virtualization@lists.linux-foundation.org>,
"kvm@vger.kernel.org" <kvm@vger.kernel.org>,
"linux-mm@kvack.org" <linux-mm@kvack.org>,
"david@redhat.com" <david@redhat.com>,
"cornelia.huck@de.ibm.com" <cornelia.huck@de.ibm.com>,
"akpm@linux-foundation.org" <akpm@linux-foundation.org>,
"mgorman@techsingularity.net" <mgorman@techsingularity.net>,
"aarcange@redhat.com" <aarcange@redhat.com>,
"amit.shah@redhat.com" <amit.shah@redhat.com>,
"pbonzini@redhat.com" <pbonzini@redhat.com>,
"liliang.opensource@gmail.com" <liliang.opensource@gmail.com>,
"virtio-dev@lists.oasis-open.org"
<virtio-dev@lists.oasis-open.org>,
"yang.zhang.wz@gmail.com" <yang.zhang.wz@gmail.com>,
"quan.xu@aliyun.com" <quan.xu@aliyun.com>
Subject: [virtio-dev] Re: [PATCH v12 6/8] mm: support reporting free page blocks
Date: Wed, 26 Jul 2017 19:44:23 +0800 [thread overview]
Message-ID: <59788097.6010402@intel.com> (raw)
In-Reply-To: <20170726102458.GH2981@dhcp22.suse.cz>
On 07/26/2017 06:24 PM, Michal Hocko wrote:
> On Wed 26-07-17 10:22:23, Wei Wang wrote:
>> On 07/25/2017 10:53 PM, Michal Hocko wrote:
>>> On Tue 25-07-17 14:47:16, Wang, Wei W wrote:
>>>> On Tuesday, July 25, 2017 8:42 PM, hal Hocko wrote:
>>>>> On Tue 25-07-17 19:56:24, Wei Wang wrote:
>>>>>> On 07/25/2017 07:25 PM, Michal Hocko wrote:
>>>>>>> On Tue 25-07-17 17:32:00, Wei Wang wrote:
>>>>>>>> On 07/24/2017 05:00 PM, Michal Hocko wrote:
>>>>>>>>> On Wed 19-07-17 20:01:18, Wei Wang wrote:
>>>>>>>>>> On 07/19/2017 04:13 PM, Michal Hocko wrote:
>>>>>>>>> [...
>>>>>> We don't need to do the pfn walk in the guest kernel. When the API
>>>>>> reports, for example, a 2MB free page block, the API caller offers to
>>>>>> the hypervisor the base address of the page block, and size=2MB, to
>>>>>> the hypervisor.
>>>>> So you want to skip pfn walks by regularly calling into the page allocator to
>>>>> update your bitmap. If that is the case then would an API that would allow you
>>>>> to update your bitmap via a callback be s sufficient? Something like
>>>>> void walk_free_mem(int node, int min_order,
>>>>> void (*visit)(unsigned long pfn, unsigned long nr_pages))
>>>>>
>>>>> The function will call the given callback for each free memory block on the given
>>>>> node starting from the given min_order. The callback will be strictly an atomic
>>>>> and very light context. You can update your bitmap from there.
>>>> I would need to introduce more about the background here:
>>>> The hypervisor and the guest live in their own address space. The hypervisor's bitmap
>>>> isn't seen by the guest. I think we also wouldn't be able to give a callback function
>>> >from the hypervisor to the guest in this case.
>>> How did you plan to use your original API which export struct page array
>>> then?
>>
>> That's where the virtio-balloon driver comes in. It uses a shared ring
>> mechanism to
>> send the guest memory info to the hypervisor.
>>
>> We didn't expose the struct page array from the guest to the hypervisor. For
>> example, when
>> a 2MB free page block is reported from the free page list, the info put on
>> the ring is just
>> (base address of the 2MB continuous memory, size=2M).
> So what exactly prevents virtio-balloon from using the above proposed
> callback mechanism and export what is needed to the hypervisor?
I thought about it more. Probably we can use the callback function with
a little change like this:
void walk_free_mem(void *opaque1, void (*visit)(void *opaque2, unsigned
long pfn,
unsigned long nr_pages))
{
...
for_each_populated_zone(zone) {
for_each_migratetype_order(order, type) {
report_unused_page_block(zone, order, type,
&page); // from patch 6
pfn = page_to_pfn(page);
visit(opaque1, pfn, 1 << order);
}
}
}
The above function scans all the free list and directly sends each free
page block to the
hypervisor via the virtio_balloon callback below. No need to implement a
bitmap.
In virtio-balloon, we have the callback:
void *virtio_balloon_report_unused_pages(void *opaque, unsigned long pfn,
unsigned long nr_pages)
{
struct virtio_balloon *vb = (struct virtio_balloon *)opaque;
...put the free page block to the the ring of vb;
}
What do you think?
Best,
Wei
---------------------------------------------------------------------
To unsubscribe, e-mail: virtio-dev-unsubscribe@lists.oasis-open.org
For additional commands, e-mail: virtio-dev-help@lists.oasis-open.org
WARNING: multiple messages have this Message-ID (diff)
From: Wei Wang <wei.w.wang@intel.com>
To: Michal Hocko <mhocko@kernel.org>
Cc: "aarcange@redhat.com" <aarcange@redhat.com>,
"virtio-dev@lists.oasis-open.org"
<virtio-dev@lists.oasis-open.org>,
"amit.shah@redhat.com" <amit.shah@redhat.com>,
"kvm@vger.kernel.org" <kvm@vger.kernel.org>,
"Michael S. Tsirkin" <mst@redhat.com>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"liliang.opensource@gmail.com" <liliang.opensource@gmail.com>,
"qemu-devel@nongnu.org" <qemu-devel@nongnu.org>,
"virtualization@lists.linux-foundation.org"
<virtualization@lists.linux-foundation.org>,
"linux-mm@kvack.org" <linux-mm@kvack.org>,
"yang.zhang.wz@gmail.com" <yang.zhang.wz@gmail.com>,
"quan.xu@aliyun.com" <quan.xu@aliyun.com>,
"cornelia.huck@de.ibm.com" <cornelia.huck@de.ibm.com>,
"pbonzini@redhat.com" <pbonzini@redhat.com>,
"akpm@linux-foundation.org" <akpm@linux-foundation.org>,
"mgorman@techsingularity.net" <mgorman@techsingularity.net>
Subject: Re: [PATCH v12 6/8] mm: support reporting free page blocks
Date: Wed, 26 Jul 2017 19:44:23 +0800 [thread overview]
Message-ID: <59788097.6010402@intel.com> (raw)
In-Reply-To: <20170726102458.GH2981@dhcp22.suse.cz>
On 07/26/2017 06:24 PM, Michal Hocko wrote:
> On Wed 26-07-17 10:22:23, Wei Wang wrote:
>> On 07/25/2017 10:53 PM, Michal Hocko wrote:
>>> On Tue 25-07-17 14:47:16, Wang, Wei W wrote:
>>>> On Tuesday, July 25, 2017 8:42 PM, hal Hocko wrote:
>>>>> On Tue 25-07-17 19:56:24, Wei Wang wrote:
>>>>>> On 07/25/2017 07:25 PM, Michal Hocko wrote:
>>>>>>> On Tue 25-07-17 17:32:00, Wei Wang wrote:
>>>>>>>> On 07/24/2017 05:00 PM, Michal Hocko wrote:
>>>>>>>>> On Wed 19-07-17 20:01:18, Wei Wang wrote:
>>>>>>>>>> On 07/19/2017 04:13 PM, Michal Hocko wrote:
>>>>>>>>> [...
>>>>>> We don't need to do the pfn walk in the guest kernel. When the API
>>>>>> reports, for example, a 2MB free page block, the API caller offers to
>>>>>> the hypervisor the base address of the page block, and size=2MB, to
>>>>>> the hypervisor.
>>>>> So you want to skip pfn walks by regularly calling into the page allocator to
>>>>> update your bitmap. If that is the case then would an API that would allow you
>>>>> to update your bitmap via a callback be s sufficient? Something like
>>>>> void walk_free_mem(int node, int min_order,
>>>>> void (*visit)(unsigned long pfn, unsigned long nr_pages))
>>>>>
>>>>> The function will call the given callback for each free memory block on the given
>>>>> node starting from the given min_order. The callback will be strictly an atomic
>>>>> and very light context. You can update your bitmap from there.
>>>> I would need to introduce more about the background here:
>>>> The hypervisor and the guest live in their own address space. The hypervisor's bitmap
>>>> isn't seen by the guest. I think we also wouldn't be able to give a callback function
>>> >from the hypervisor to the guest in this case.
>>> How did you plan to use your original API which export struct page array
>>> then?
>>
>> That's where the virtio-balloon driver comes in. It uses a shared ring
>> mechanism to
>> send the guest memory info to the hypervisor.
>>
>> We didn't expose the struct page array from the guest to the hypervisor. For
>> example, when
>> a 2MB free page block is reported from the free page list, the info put on
>> the ring is just
>> (base address of the 2MB continuous memory, size=2M).
> So what exactly prevents virtio-balloon from using the above proposed
> callback mechanism and export what is needed to the hypervisor?
I thought about it more. Probably we can use the callback function with
a little change like this:
void walk_free_mem(void *opaque1, void (*visit)(void *opaque2, unsigned
long pfn,
unsigned long nr_pages))
{
...
for_each_populated_zone(zone) {
for_each_migratetype_order(order, type) {
report_unused_page_block(zone, order, type,
&page); // from patch 6
pfn = page_to_pfn(page);
visit(opaque1, pfn, 1 << order);
}
}
}
The above function scans all the free list and directly sends each free
page block to the
hypervisor via the virtio_balloon callback below. No need to implement a
bitmap.
In virtio-balloon, we have the callback:
void *virtio_balloon_report_unused_pages(void *opaque, unsigned long pfn,
unsigned long nr_pages)
{
struct virtio_balloon *vb = (struct virtio_balloon *)opaque;
...put the free page block to the the ring of vb;
}
What do you think?
Best,
Wei
WARNING: multiple messages have this Message-ID (diff)
From: Wei Wang <wei.w.wang@intel.com>
To: Michal Hocko <mhocko@kernel.org>
Cc: "Michael S. Tsirkin" <mst@redhat.com>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"qemu-devel@nongnu.org" <qemu-devel@nongnu.org>,
"virtualization@lists.linux-foundation.org"
<virtualization@lists.linux-foundation.org>,
"kvm@vger.kernel.org" <kvm@vger.kernel.org>,
"linux-mm@kvack.org" <linux-mm@kvack.org>,
"david@redhat.com" <david@redhat.com>,
"cornelia.huck@de.ibm.com" <cornelia.huck@de.ibm.com>,
"akpm@linux-foundation.org" <akpm@linux-foundation.org>,
"mgorman@techsingularity.net" <mgorman@techsingularity.net>,
"aarcange@redhat.com" <aarcange@redhat.com>,
"amit.shah@redhat.com" <amit.shah@redhat.com>,
"pbonzini@redhat.com" <pbonzini@redhat.com>,
"liliang.opensource@gmail.com" <liliang.opensource@gmail.com>,
"virtio-dev@lists.oasis-open.org"
<virtio-dev@lists.oasis-open.org>,
"yang.zhang.wz@gmail.com" <yang.zhang.wz@gmail.com>,
"quan.xu@aliyun.com" <quan.xu@aliyun.com>
Subject: Re: [PATCH v12 6/8] mm: support reporting free page blocks
Date: Wed, 26 Jul 2017 19:44:23 +0800 [thread overview]
Message-ID: <59788097.6010402@intel.com> (raw)
In-Reply-To: <20170726102458.GH2981@dhcp22.suse.cz>
On 07/26/2017 06:24 PM, Michal Hocko wrote:
> On Wed 26-07-17 10:22:23, Wei Wang wrote:
>> On 07/25/2017 10:53 PM, Michal Hocko wrote:
>>> On Tue 25-07-17 14:47:16, Wang, Wei W wrote:
>>>> On Tuesday, July 25, 2017 8:42 PM, hal Hocko wrote:
>>>>> On Tue 25-07-17 19:56:24, Wei Wang wrote:
>>>>>> On 07/25/2017 07:25 PM, Michal Hocko wrote:
>>>>>>> On Tue 25-07-17 17:32:00, Wei Wang wrote:
>>>>>>>> On 07/24/2017 05:00 PM, Michal Hocko wrote:
>>>>>>>>> On Wed 19-07-17 20:01:18, Wei Wang wrote:
>>>>>>>>>> On 07/19/2017 04:13 PM, Michal Hocko wrote:
>>>>>>>>> [...
>>>>>> We don't need to do the pfn walk in the guest kernel. When the API
>>>>>> reports, for example, a 2MB free page block, the API caller offers to
>>>>>> the hypervisor the base address of the page block, and size=2MB, to
>>>>>> the hypervisor.
>>>>> So you want to skip pfn walks by regularly calling into the page allocator to
>>>>> update your bitmap. If that is the case then would an API that would allow you
>>>>> to update your bitmap via a callback be s sufficient? Something like
>>>>> void walk_free_mem(int node, int min_order,
>>>>> void (*visit)(unsigned long pfn, unsigned long nr_pages))
>>>>>
>>>>> The function will call the given callback for each free memory block on the given
>>>>> node starting from the given min_order. The callback will be strictly an atomic
>>>>> and very light context. You can update your bitmap from there.
>>>> I would need to introduce more about the background here:
>>>> The hypervisor and the guest live in their own address space. The hypervisor's bitmap
>>>> isn't seen by the guest. I think we also wouldn't be able to give a callback function
>>> >from the hypervisor to the guest in this case.
>>> How did you plan to use your original API which export struct page array
>>> then?
>>
>> That's where the virtio-balloon driver comes in. It uses a shared ring
>> mechanism to
>> send the guest memory info to the hypervisor.
>>
>> We didn't expose the struct page array from the guest to the hypervisor. For
>> example, when
>> a 2MB free page block is reported from the free page list, the info put on
>> the ring is just
>> (base address of the 2MB continuous memory, size=2M).
> So what exactly prevents virtio-balloon from using the above proposed
> callback mechanism and export what is needed to the hypervisor?
I thought about it more. Probably we can use the callback function with
a little change like this:
void walk_free_mem(void *opaque1, void (*visit)(void *opaque2, unsigned
long pfn,
unsigned long nr_pages))
{
...
for_each_populated_zone(zone) {
for_each_migratetype_order(order, type) {
report_unused_page_block(zone, order, type,
&page); // from patch 6
pfn = page_to_pfn(page);
visit(opaque1, pfn, 1 << order);
}
}
}
The above function scans all the free list and directly sends each free
page block to the
hypervisor via the virtio_balloon callback below. No need to implement a
bitmap.
In virtio-balloon, we have the callback:
void *virtio_balloon_report_unused_pages(void *opaque, unsigned long pfn,
unsigned long nr_pages)
{
struct virtio_balloon *vb = (struct virtio_balloon *)opaque;
...put the free page block to the the ring of vb;
}
What do you think?
Best,
Wei
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
WARNING: multiple messages have this Message-ID (diff)
From: Wei Wang <wei.w.wang@intel.com>
To: Michal Hocko <mhocko@kernel.org>
Cc: "Michael S. Tsirkin" <mst@redhat.com>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"qemu-devel@nongnu.org" <qemu-devel@nongnu.org>,
"virtualization@lists.linux-foundation.org"
<virtualization@lists.linux-foundation.org>,
"kvm@vger.kernel.org" <kvm@vger.kernel.org>,
"linux-mm@kvack.org" <linux-mm@kvack.org>,
"david@redhat.com" <david@redhat.com>,
"cornelia.huck@de.ibm.com" <cornelia.huck@de.ibm.com>,
"akpm@linux-foundation.org" <akpm@linux-foundation.org>,
"mgorman@techsingularity.net" <mgorman@techsingularity.net>,
"aarcange@redhat.com" <aarcange@redhat.com>,
"amit.shah@redhat.com" <amit.shah@redhat.com>,
"pbonzini@redhat.com" <pbonzini@redhat.com>,
"liliang.opensource@gmail.com" <liliang.opensource@gmail.com>,
"virtio-dev@lists.oasis-open.org"
<virtio-dev@lists.oasis-open.org>,
"yang.zhang.wz@gmail.com" <yang.zhang.wz@gmail.com>,
"quan.xu@aliyun.com" <quan.xu@aliyun.com>
Subject: Re: [PATCH v12 6/8] mm: support reporting free page blocks
Date: Wed, 26 Jul 2017 19:44:23 +0800 [thread overview]
Message-ID: <59788097.6010402@intel.com> (raw)
In-Reply-To: <20170726102458.GH2981@dhcp22.suse.cz>
On 07/26/2017 06:24 PM, Michal Hocko wrote:
> On Wed 26-07-17 10:22:23, Wei Wang wrote:
>> On 07/25/2017 10:53 PM, Michal Hocko wrote:
>>> On Tue 25-07-17 14:47:16, Wang, Wei W wrote:
>>>> On Tuesday, July 25, 2017 8:42 PM, hal Hocko wrote:
>>>>> On Tue 25-07-17 19:56:24, Wei Wang wrote:
>>>>>> On 07/25/2017 07:25 PM, Michal Hocko wrote:
>>>>>>> On Tue 25-07-17 17:32:00, Wei Wang wrote:
>>>>>>>> On 07/24/2017 05:00 PM, Michal Hocko wrote:
>>>>>>>>> On Wed 19-07-17 20:01:18, Wei Wang wrote:
>>>>>>>>>> On 07/19/2017 04:13 PM, Michal Hocko wrote:
>>>>>>>>> [...
>>>>>> We don't need to do the pfn walk in the guest kernel. When the API
>>>>>> reports, for example, a 2MB free page block, the API caller offers to
>>>>>> the hypervisor the base address of the page block, and size=2MB, to
>>>>>> the hypervisor.
>>>>> So you want to skip pfn walks by regularly calling into the page allocator to
>>>>> update your bitmap. If that is the case then would an API that would allow you
>>>>> to update your bitmap via a callback be s sufficient? Something like
>>>>> void walk_free_mem(int node, int min_order,
>>>>> void (*visit)(unsigned long pfn, unsigned long nr_pages))
>>>>>
>>>>> The function will call the given callback for each free memory block on the given
>>>>> node starting from the given min_order. The callback will be strictly an atomic
>>>>> and very light context. You can update your bitmap from there.
>>>> I would need to introduce more about the background here:
>>>> The hypervisor and the guest live in their own address space. The hypervisor's bitmap
>>>> isn't seen by the guest. I think we also wouldn't be able to give a callback function
>>> >from the hypervisor to the guest in this case.
>>> How did you plan to use your original API which export struct page array
>>> then?
>>
>> That's where the virtio-balloon driver comes in. It uses a shared ring
>> mechanism to
>> send the guest memory info to the hypervisor.
>>
>> We didn't expose the struct page array from the guest to the hypervisor. For
>> example, when
>> a 2MB free page block is reported from the free page list, the info put on
>> the ring is just
>> (base address of the 2MB continuous memory, size=2M).
> So what exactly prevents virtio-balloon from using the above proposed
> callback mechanism and export what is needed to the hypervisor?
I thought about it more. Probably we can use the callback function with
a little change like this:
void walk_free_mem(void *opaque1, void (*visit)(void *opaque2, unsigned
long pfn,
unsigned long nr_pages))
{
...
for_each_populated_zone(zone) {
for_each_migratetype_order(order, type) {
report_unused_page_block(zone, order, type,
&page); // from patch 6
pfn = page_to_pfn(page);
visit(opaque1, pfn, 1 << order);
}
}
}
The above function scans all the free list and directly sends each free
page block to the
hypervisor via the virtio_balloon callback below. No need to implement a
bitmap.
In virtio-balloon, we have the callback:
void *virtio_balloon_report_unused_pages(void *opaque, unsigned long pfn,
unsigned long nr_pages)
{
struct virtio_balloon *vb = (struct virtio_balloon *)opaque;
...put the free page block to the the ring of vb;
}
What do you think?
Best,
Wei
WARNING: multiple messages have this Message-ID (diff)
From: Wei Wang <wei.w.wang@intel.com>
To: Michal Hocko <mhocko@kernel.org>
Cc: "Michael S. Tsirkin" <mst@redhat.com>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"qemu-devel@nongnu.org" <qemu-devel@nongnu.org>,
"virtualization@lists.linux-foundation.org"
<virtualization@lists.linux-foundation.org>,
"kvm@vger.kernel.org" <kvm@vger.kernel.org>,
"linux-mm@kvack.org" <linux-mm@kvack.org>,
"david@redhat.com" <david@redhat.com>,
"cornelia.huck@de.ibm.com" <cornelia.huck@de.ibm.com>,
"akpm@linux-foundation.org" <akpm@linux-foundation.org>,
"mgorman@techsingularity.net" <mgorman@techsingularity.net>,
"aarcange@redhat.com" <aarcange@redhat.com>,
"amit.shah@redhat.com" <amit.shah@redhat.com>,
"pbonzini@redhat.com" <pbonzini@redhat.com>,
"liliang.opensource@gmail.com" <liliang.opensource@gmail.com>,
"virtio-dev@lists.oasis-open.org"
<virtio-dev@lists.oasis-open.org>,
"yang.zhang.wz@gmail.com" <yang.zhang.wz@gmail.com>,
"quan.xu@aliyun.com" <quan.xu@aliyun.com>
Subject: Re: [Qemu-devel] [PATCH v12 6/8] mm: support reporting free page blocks
Date: Wed, 26 Jul 2017 19:44:23 +0800 [thread overview]
Message-ID: <59788097.6010402@intel.com> (raw)
In-Reply-To: <20170726102458.GH2981@dhcp22.suse.cz>
On 07/26/2017 06:24 PM, Michal Hocko wrote:
> On Wed 26-07-17 10:22:23, Wei Wang wrote:
>> On 07/25/2017 10:53 PM, Michal Hocko wrote:
>>> On Tue 25-07-17 14:47:16, Wang, Wei W wrote:
>>>> On Tuesday, July 25, 2017 8:42 PM, hal Hocko wrote:
>>>>> On Tue 25-07-17 19:56:24, Wei Wang wrote:
>>>>>> On 07/25/2017 07:25 PM, Michal Hocko wrote:
>>>>>>> On Tue 25-07-17 17:32:00, Wei Wang wrote:
>>>>>>>> On 07/24/2017 05:00 PM, Michal Hocko wrote:
>>>>>>>>> On Wed 19-07-17 20:01:18, Wei Wang wrote:
>>>>>>>>>> On 07/19/2017 04:13 PM, Michal Hocko wrote:
>>>>>>>>> [...
>>>>>> We don't need to do the pfn walk in the guest kernel. When the API
>>>>>> reports, for example, a 2MB free page block, the API caller offers to
>>>>>> the hypervisor the base address of the page block, and size=2MB, to
>>>>>> the hypervisor.
>>>>> So you want to skip pfn walks by regularly calling into the page allocator to
>>>>> update your bitmap. If that is the case then would an API that would allow you
>>>>> to update your bitmap via a callback be s sufficient? Something like
>>>>> void walk_free_mem(int node, int min_order,
>>>>> void (*visit)(unsigned long pfn, unsigned long nr_pages))
>>>>>
>>>>> The function will call the given callback for each free memory block on the given
>>>>> node starting from the given min_order. The callback will be strictly an atomic
>>>>> and very light context. You can update your bitmap from there.
>>>> I would need to introduce more about the background here:
>>>> The hypervisor and the guest live in their own address space. The hypervisor's bitmap
>>>> isn't seen by the guest. I think we also wouldn't be able to give a callback function
>>> >from the hypervisor to the guest in this case.
>>> How did you plan to use your original API which export struct page array
>>> then?
>>
>> That's where the virtio-balloon driver comes in. It uses a shared ring
>> mechanism to
>> send the guest memory info to the hypervisor.
>>
>> We didn't expose the struct page array from the guest to the hypervisor. For
>> example, when
>> a 2MB free page block is reported from the free page list, the info put on
>> the ring is just
>> (base address of the 2MB continuous memory, size=2M).
> So what exactly prevents virtio-balloon from using the above proposed
> callback mechanism and export what is needed to the hypervisor?
I thought about it more. Probably we can use the callback function with
a little change like this:
void walk_free_mem(void *opaque1, void (*visit)(void *opaque2, unsigned
long pfn,
unsigned long nr_pages))
{
...
for_each_populated_zone(zone) {
for_each_migratetype_order(order, type) {
report_unused_page_block(zone, order, type,
&page); // from patch 6
pfn = page_to_pfn(page);
visit(opaque1, pfn, 1 << order);
}
}
}
The above function scans all the free list and directly sends each free
page block to the
hypervisor via the virtio_balloon callback below. No need to implement a
bitmap.
In virtio-balloon, we have the callback:
void *virtio_balloon_report_unused_pages(void *opaque, unsigned long pfn,
unsigned long nr_pages)
{
struct virtio_balloon *vb = (struct virtio_balloon *)opaque;
...put the free page block to the the ring of vb;
}
What do you think?
Best,
Wei
next prev parent reply other threads:[~2017-07-26 11:41 UTC|newest]
Thread overview: 290+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-07-12 12:40 [virtio-dev] [PATCH v12 0/8] Virtio-balloon Enhancement Wei Wang
2017-07-12 12:40 ` [Qemu-devel] " Wei Wang
2017-07-12 12:40 ` Wei Wang
2017-07-12 12:40 ` Wei Wang
2017-07-12 12:40 ` [virtio-dev] [PATCH v12 1/8] virtio-balloon: deflate via a page list Wei Wang
2017-07-12 12:40 ` [Qemu-devel] " Wei Wang
2017-07-12 12:40 ` Wei Wang
2017-07-12 12:40 ` Wei Wang
2017-07-12 12:40 ` Wei Wang
2017-07-12 12:40 ` [PATCH v12 2/8] virtio-balloon: coding format cleanup Wei Wang
2017-07-12 12:40 ` [virtio-dev] " Wei Wang
2017-07-12 12:40 ` [Qemu-devel] " Wei Wang
2017-07-12 12:40 ` Wei Wang
2017-07-12 12:40 ` Wei Wang
2017-07-12 12:40 ` [virtio-dev] [PATCH v12 3/8] Introduce xbitmap Wei Wang
2017-07-12 12:40 ` [Qemu-devel] " Wei Wang
2017-07-12 12:40 ` Wei Wang
2017-07-12 12:40 ` Wei Wang
2017-07-12 12:40 ` Wei Wang
2017-07-12 12:40 ` [PATCH v12 4/8] xbitmap: add xb_find_next_bit() and xb_zero() Wei Wang
2017-07-12 12:40 ` [virtio-dev] " Wei Wang
2017-07-12 12:40 ` [Qemu-devel] " Wei Wang
2017-07-12 12:40 ` Wei Wang
2017-07-12 12:40 ` Wei Wang
2017-07-12 12:40 ` [PATCH v12 5/8] virtio-balloon: VIRTIO_BALLOON_F_SG Wei Wang
2017-07-12 12:40 ` [virtio-dev] " Wei Wang
2017-07-12 12:40 ` [Qemu-devel] " Wei Wang
2017-07-12 12:40 ` Wei Wang
2017-07-12 12:40 ` Wei Wang
2017-07-12 13:06 ` [virtio-dev] " Michael S. Tsirkin
2017-07-12 13:06 ` [Qemu-devel] " Michael S. Tsirkin
2017-07-12 13:06 ` Michael S. Tsirkin
2017-07-12 13:06 ` Michael S. Tsirkin
2017-07-12 13:29 ` Wei Wang
2017-07-12 13:29 ` [virtio-dev] " Wei Wang
2017-07-12 13:29 ` [Qemu-devel] " Wei Wang
2017-07-12 13:29 ` Wei Wang
2017-07-12 13:29 ` Wei Wang
2017-07-12 13:56 ` Michael S. Tsirkin
2017-07-12 13:56 ` [virtio-dev] " Michael S. Tsirkin
2017-07-12 13:56 ` [Qemu-devel] " Michael S. Tsirkin
2017-07-12 13:56 ` Michael S. Tsirkin
2017-07-12 13:56 ` Michael S. Tsirkin
2017-07-13 7:42 ` Wei Wang
2017-07-13 7:42 ` [virtio-dev] " Wei Wang
2017-07-13 7:42 ` [Qemu-devel] " Wei Wang
2017-07-13 7:42 ` Wei Wang
2017-07-13 7:42 ` Wei Wang
2017-07-13 20:19 ` [virtio-dev] " Michael S. Tsirkin
2017-07-13 20:19 ` [Qemu-devel] " Michael S. Tsirkin
2017-07-13 20:19 ` Michael S. Tsirkin
2017-07-13 20:19 ` Michael S. Tsirkin
2017-07-14 7:12 ` [virtio-dev] " Wei Wang
2017-07-14 7:12 ` [Qemu-devel] " Wei Wang
2017-07-14 7:12 ` Wei Wang
2017-07-14 7:12 ` Wei Wang
2017-07-23 1:45 ` [virtio-dev] " Michael S. Tsirkin
2017-07-23 1:45 ` [Qemu-devel] " Michael S. Tsirkin
2017-07-23 1:45 ` Michael S. Tsirkin
2017-07-23 1:45 ` Michael S. Tsirkin
2017-07-26 3:48 ` Wei Wang
2017-07-26 3:48 ` [virtio-dev] " Wei Wang
2017-07-26 3:48 ` [Qemu-devel] " Wei Wang
2017-07-26 3:48 ` Wei Wang
2017-07-26 3:48 ` Wei Wang
2017-07-26 17:02 ` Michael S. Tsirkin
2017-07-26 17:02 ` [virtio-dev] " Michael S. Tsirkin
2017-07-26 17:02 ` [Qemu-devel] " Michael S. Tsirkin
2017-07-26 17:02 ` Michael S. Tsirkin
2017-07-26 17:02 ` Michael S. Tsirkin
2017-07-27 2:50 ` [virtio-dev] " Wei Wang
2017-07-27 2:50 ` [Qemu-devel] " Wei Wang
2017-07-27 2:50 ` Wei Wang
2017-07-27 2:50 ` Wei Wang
2017-07-28 23:08 ` Michael S. Tsirkin
2017-07-28 23:08 ` [virtio-dev] " Michael S. Tsirkin
2017-07-28 23:08 ` [Qemu-devel] " Michael S. Tsirkin
2017-07-28 23:08 ` Michael S. Tsirkin
2017-07-28 23:08 ` Michael S. Tsirkin
2017-07-29 12:47 ` [virtio-dev] " Wei Wang
2017-07-29 12:47 ` [Qemu-devel] " Wei Wang
2017-07-29 12:47 ` Wei Wang
2017-07-29 12:47 ` Wei Wang
2017-07-29 12:47 ` Wei Wang
2017-07-30 4:22 ` [virtio-dev] " Michael S. Tsirkin
2017-07-30 4:22 ` [Qemu-devel] " Michael S. Tsirkin
2017-07-30 4:22 ` Michael S. Tsirkin
2017-07-30 4:22 ` Michael S. Tsirkin
2017-07-30 5:59 ` Wang, Wei W
2017-07-30 5:59 ` Wang, Wei W
2017-07-30 5:59 ` [Qemu-devel] " Wang, Wei W
2017-07-30 5:59 ` Wang, Wei W
2017-07-30 16:18 ` Michael S. Tsirkin
2017-07-30 16:18 ` [Qemu-devel] " Michael S. Tsirkin
2017-07-30 16:18 ` Michael S. Tsirkin
2017-07-30 16:18 ` Michael S. Tsirkin
2017-07-30 16:20 ` Michael S. Tsirkin
2017-07-30 16:20 ` [Qemu-devel] " Michael S. Tsirkin
2017-07-30 16:20 ` Michael S. Tsirkin
2017-07-30 16:20 ` Michael S. Tsirkin
2017-07-31 12:36 ` [virtio-dev] " Wei Wang
2017-07-31 12:36 ` [Qemu-devel] " Wei Wang
2017-07-31 12:36 ` Wei Wang
2017-07-31 12:36 ` Wei Wang
2017-07-31 12:36 ` Wei Wang
2017-07-30 16:20 ` Michael S. Tsirkin
2017-07-30 16:18 ` Michael S. Tsirkin
2017-07-30 4:22 ` Michael S. Tsirkin
2017-07-27 2:50 ` Wei Wang
2017-07-23 1:45 ` Michael S. Tsirkin
2017-07-14 7:12 ` Wei Wang
2017-07-13 20:19 ` Michael S. Tsirkin
2017-07-12 13:06 ` Michael S. Tsirkin
2017-07-13 0:44 ` Michael S. Tsirkin
2017-07-13 0:44 ` [virtio-dev] " Michael S. Tsirkin
2017-07-13 0:44 ` [Qemu-devel] " Michael S. Tsirkin
2017-07-13 0:44 ` Michael S. Tsirkin
2017-07-13 0:44 ` Michael S. Tsirkin
2017-07-13 1:16 ` kbuild test robot
2017-07-13 1:16 ` kbuild test robot
2017-07-13 1:16 ` [Qemu-devel] " kbuild test robot
2017-07-13 1:16 ` kbuild test robot
2017-07-13 4:21 ` kbuild test robot
2017-07-13 4:21 ` kbuild test robot
2017-07-13 4:21 ` [Qemu-devel] " kbuild test robot
2017-07-13 4:21 ` kbuild test robot
2017-07-28 8:25 ` [virtio-dev] " Wei Wang
2017-07-28 8:25 ` [Qemu-devel] " Wei Wang
2017-07-28 8:25 ` Wei Wang
2017-07-28 8:25 ` Wei Wang
2017-07-28 23:01 ` [virtio-dev] " Michael S. Tsirkin
2017-07-28 23:01 ` [Qemu-devel] " Michael S. Tsirkin
2017-07-28 23:01 ` Michael S. Tsirkin
2017-07-28 23:01 ` Michael S. Tsirkin
2017-07-28 23:01 ` Michael S. Tsirkin
2017-07-28 8:25 ` Wei Wang
2017-07-12 12:40 ` [PATCH v12 6/8] mm: support reporting free page blocks Wei Wang
2017-07-12 12:40 ` [virtio-dev] " Wei Wang
2017-07-12 12:40 ` [Qemu-devel] " Wei Wang
2017-07-12 12:40 ` Wei Wang
2017-07-12 12:40 ` Wei Wang
2017-07-13 0:33 ` [virtio-dev] " Michael S. Tsirkin
2017-07-13 0:33 ` [Qemu-devel] " Michael S. Tsirkin
2017-07-13 0:33 ` Michael S. Tsirkin
2017-07-13 0:33 ` Michael S. Tsirkin
2017-07-13 8:25 ` Wei Wang
2017-07-13 8:25 ` [virtio-dev] " Wei Wang
2017-07-13 8:25 ` [Qemu-devel] " Wei Wang
2017-07-13 8:25 ` Wei Wang
2017-07-13 8:25 ` Wei Wang
2017-07-13 0:33 ` Michael S. Tsirkin
2017-07-14 12:30 ` Michal Hocko
2017-07-14 12:30 ` Michal Hocko
2017-07-14 12:30 ` [Qemu-devel] " Michal Hocko
2017-07-14 12:30 ` Michal Hocko
2017-07-14 12:54 ` Michal Hocko
2017-07-14 12:54 ` Michal Hocko
2017-07-14 12:54 ` [Qemu-devel] " Michal Hocko
2017-07-14 12:54 ` Michal Hocko
2017-07-14 15:46 ` [virtio-dev] " Michael S. Tsirkin
2017-07-14 15:46 ` [Qemu-devel] " Michael S. Tsirkin
2017-07-14 15:46 ` Michael S. Tsirkin
2017-07-14 15:46 ` Michael S. Tsirkin
2017-07-14 15:46 ` Michael S. Tsirkin
2017-07-14 19:17 ` Michael S. Tsirkin
2017-07-14 19:17 ` [virtio-dev] " Michael S. Tsirkin
2017-07-14 19:17 ` [Qemu-devel] " Michael S. Tsirkin
2017-07-14 19:17 ` Michael S. Tsirkin
2017-07-14 19:17 ` Michael S. Tsirkin
2017-07-17 15:24 ` Michal Hocko
2017-07-17 15:24 ` Michal Hocko
2017-07-17 15:24 ` [Qemu-devel] " Michal Hocko
2017-07-17 15:24 ` Michal Hocko
2017-07-18 2:12 ` [virtio-dev] " Wei Wang
2017-07-18 2:12 ` [Qemu-devel] " Wei Wang
2017-07-18 2:12 ` Wei Wang
2017-07-18 2:12 ` Wei Wang
2017-07-18 2:12 ` Wei Wang
2017-07-19 8:13 ` Michal Hocko
2017-07-19 8:13 ` [Qemu-devel] " Michal Hocko
2017-07-19 8:13 ` Michal Hocko
2017-07-19 12:01 ` Wei Wang
2017-07-19 12:01 ` [virtio-dev] " Wei Wang
2017-07-19 12:01 ` [Qemu-devel] " Wei Wang
2017-07-19 12:01 ` Wei Wang
2017-07-19 12:01 ` Wei Wang
2017-07-24 9:00 ` Michal Hocko
2017-07-24 9:00 ` [Qemu-devel] " Michal Hocko
2017-07-24 9:00 ` Michal Hocko
2017-07-25 9:32 ` [virtio-dev] " Wei Wang
2017-07-25 9:32 ` [Qemu-devel] " Wei Wang
2017-07-25 9:32 ` Wei Wang
2017-07-25 9:32 ` Wei Wang
2017-07-25 11:25 ` Michal Hocko
2017-07-25 11:25 ` [Qemu-devel] " Michal Hocko
2017-07-25 11:25 ` Michal Hocko
2017-07-25 11:56 ` Wei Wang
2017-07-25 11:56 ` [virtio-dev] " Wei Wang
2017-07-25 11:56 ` [Qemu-devel] " Wei Wang
2017-07-25 11:56 ` Wei Wang
2017-07-25 11:56 ` Wei Wang
2017-07-25 12:41 ` Michal Hocko
2017-07-25 12:41 ` [Qemu-devel] " Michal Hocko
2017-07-25 12:41 ` Michal Hocko
2017-07-25 12:41 ` Michal Hocko
2017-07-25 14:47 ` Wang, Wei W
2017-07-25 14:47 ` [virtio-dev] " Wang, Wei W
2017-07-25 14:47 ` [Qemu-devel] " Wang, Wei W
2017-07-25 14:47 ` Wang, Wei W
2017-07-25 14:47 ` Wang, Wei W
2017-07-25 14:47 ` Wang, Wei W
2017-07-25 14:53 ` Michal Hocko
2017-07-25 14:53 ` [Qemu-devel] " Michal Hocko
2017-07-25 14:53 ` Michal Hocko
2017-07-25 14:53 ` Michal Hocko
2017-07-26 2:22 ` Wei Wang
2017-07-26 2:22 ` [virtio-dev] " Wei Wang
2017-07-26 2:22 ` [Qemu-devel] " Wei Wang
2017-07-26 2:22 ` Wei Wang
2017-07-26 2:22 ` Wei Wang
2017-07-26 2:22 ` Wei Wang
2017-07-26 10:24 ` Michal Hocko
2017-07-26 10:24 ` Michal Hocko
2017-07-26 10:24 ` [Qemu-devel] " Michal Hocko
2017-07-26 10:24 ` Michal Hocko
2017-07-26 10:24 ` Michal Hocko
2017-07-26 11:44 ` Wei Wang [this message]
2017-07-26 11:44 ` [Qemu-devel] " Wei Wang
2017-07-26 11:44 ` Wei Wang
2017-07-26 11:44 ` Wei Wang
2017-07-26 11:44 ` Wei Wang
2017-07-26 11:55 ` Michal Hocko
2017-07-26 11:55 ` Michal Hocko
2017-07-26 11:55 ` [Qemu-devel] " Michal Hocko
2017-07-26 11:55 ` Michal Hocko
2017-07-26 11:55 ` Michal Hocko
2017-07-26 12:47 ` Wang, Wei W
2017-07-26 12:47 ` [virtio-dev] " Wang, Wei W
2017-07-26 12:47 ` [Qemu-devel] " Wang, Wei W
2017-07-26 12:47 ` Wang, Wei W
2017-07-26 12:47 ` Wang, Wei W
2017-07-26 12:47 ` Wang, Wei W
2017-07-25 11:25 ` Michal Hocko
2017-07-25 9:32 ` Wei Wang
2017-07-24 9:00 ` Michal Hocko
2017-07-19 8:13 ` Michal Hocko
2017-07-12 12:40 ` [virtio-dev] [PATCH v12 7/8] mm: export symbol of next_zone and first_online_pgdat Wei Wang
2017-07-12 12:40 ` [Qemu-devel] " Wei Wang
2017-07-12 12:40 ` Wei Wang
2017-07-12 12:40 ` Wei Wang
2017-07-13 0:16 ` [virtio-dev] " Michael S. Tsirkin
2017-07-13 0:16 ` [Qemu-devel] " Michael S. Tsirkin
2017-07-13 0:16 ` Michael S. Tsirkin
2017-07-13 0:16 ` Michael S. Tsirkin
2017-07-13 8:41 ` [virtio-dev] " Wei Wang
2017-07-13 8:41 ` [Qemu-devel] " Wei Wang
2017-07-13 8:41 ` Wei Wang
2017-07-13 8:41 ` Wei Wang
2017-07-13 8:41 ` Wei Wang
2017-07-13 0:16 ` Michael S. Tsirkin
2017-07-14 12:31 ` Michal Hocko
2017-07-14 12:31 ` [Qemu-devel] " Michal Hocko
2017-07-14 12:31 ` Michal Hocko
2017-07-14 12:31 ` Michal Hocko
2017-07-12 12:40 ` Wei Wang
2017-07-12 12:40 ` [PATCH v12 8/8] virtio-balloon: VIRTIO_BALLOON_F_CMD_VQ Wei Wang
2017-07-12 12:40 ` [virtio-dev] " Wei Wang
2017-07-12 12:40 ` [Qemu-devel] " Wei Wang
2017-07-12 12:40 ` Wei Wang
2017-07-12 12:40 ` Wei Wang
2017-07-13 0:22 ` Michael S. Tsirkin
2017-07-13 0:22 ` [virtio-dev] " Michael S. Tsirkin
2017-07-13 0:22 ` [Qemu-devel] " Michael S. Tsirkin
2017-07-13 0:22 ` Michael S. Tsirkin
2017-07-13 0:22 ` Michael S. Tsirkin
2017-07-13 8:46 ` Wei Wang
2017-07-13 8:46 ` [virtio-dev] " Wei Wang
2017-07-13 8:46 ` [Qemu-devel] " Wei Wang
2017-07-13 8:46 ` Wei Wang
2017-07-13 8:46 ` Wei Wang
2017-07-13 17:59 ` Michael S. Tsirkin
2017-07-13 17:59 ` [virtio-dev] " Michael S. Tsirkin
2017-07-13 17:59 ` [Qemu-devel] " Michael S. Tsirkin
2017-07-13 17:59 ` Michael S. Tsirkin
2017-07-13 17:59 ` Michael S. Tsirkin
2017-07-13 0:14 ` [virtio-dev] Re: [PATCH v12 0/8] Virtio-balloon Enhancement Michael S. Tsirkin
2017-07-13 0:14 ` [Qemu-devel] " Michael S. Tsirkin
2017-07-13 0:14 ` Michael S. Tsirkin
2017-07-13 0:14 ` Michael S. Tsirkin
2017-07-13 0:14 ` Michael S. Tsirkin
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=59788097.6010402@intel.com \
--to=wei.w.wang@intel.com \
--cc=aarcange@redhat.com \
--cc=akpm@linux-foundation.org \
--cc=amit.shah@redhat.com \
--cc=cornelia.huck@de.ibm.com \
--cc=david@redhat.com \
--cc=kvm@vger.kernel.org \
--cc=liliang.opensource@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=mgorman@techsingularity.net \
--cc=mhocko@kernel.org \
--cc=mst@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=quan.xu@aliyun.com \
--cc=virtio-dev@lists.oasis-open.org \
--cc=virtualization@lists.linux-foundation.org \
--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.