From: Wei Wang <wei.w.wang@intel.com>
To: "Michael S. Tsirkin" <mst@redhat.com>
Cc: virtio-dev@lists.oasis-open.org, linux-kernel@vger.kernel.org,
virtualization@lists.linux-foundation.org, kvm@vger.kernel.org,
linux-mm@kvack.org, mhocko@kernel.org, akpm@linux-foundation.org,
torvalds@linux-foundation.org, pbonzini@redhat.com,
liliang.opensource@gmail.com, yang.zhang.wz@gmail.com,
quan.xu0@gmail.com, nilal@redhat.com, riel@redhat.com,
peterx@redhat.com
Subject: [virtio-dev] Re: [PATCH v36 2/5] virtio_balloon: replace oom notifier with shrinker
Date: Mon, 23 Jul 2018 18:30:46 +0800 [thread overview]
Message-ID: <5B55AE56.5030404@intel.com> (raw)
In-Reply-To: <20180722174125-mutt-send-email-mst@kernel.org>
On 07/22/2018 10:48 PM, Michael S. Tsirkin wrote:
> On Fri, Jul 20, 2018 at 04:33:02PM +0800, Wei Wang wrote:
>>
>> +static unsigned long virtio_balloon_shrinker_scan(struct shrinker *shrinker,
>> + struct shrink_control *sc)
>> +{
>> + unsigned long pages_to_free = balloon_pages_to_shrink,
>> + pages_freed = 0;
>> + struct virtio_balloon *vb = container_of(shrinker,
>> + struct virtio_balloon, shrinker);
>> +
>> + /*
>> + * One invocation of leak_balloon can deflate at most
>> + * VIRTIO_BALLOON_ARRAY_PFNS_MAX balloon pages, so we call it
>> + * multiple times to deflate pages till reaching
>> + * balloon_pages_to_shrink pages.
>> + */
>> + while (vb->num_pages && pages_to_free) {
>> + pages_to_free = balloon_pages_to_shrink - pages_freed;
>> + pages_freed += leak_balloon(vb, pages_to_free);
>> + }
>> + update_balloon_size(vb);
> Are you sure that this is never called if count returned 0?
Yes. Please see do_shrink_slab, it just returns if count is 0.
>
>> +
>> + return pages_freed / VIRTIO_BALLOON_PAGES_PER_PAGE;
>> +}
>> +
>> +static unsigned long virtio_balloon_shrinker_count(struct shrinker *shrinker,
>> + struct shrink_control *sc)
>> +{
>> + struct virtio_balloon *vb = container_of(shrinker,
>> + struct virtio_balloon, shrinker);
>> +
>> + /*
>> + * We continue to use VIRTIO_BALLOON_F_DEFLATE_ON_OOM to handle the
>> + * case when shrinker needs to be invoked to relieve memory pressure.
>> + */
>> + if (!virtio_has_feature(vb->vdev, VIRTIO_BALLOON_F_DEFLATE_ON_OOM))
>> + return 0;
> So why not skip notifier registration when deflate on oom
> is clear?
Sounds good, thanks.
> vb->vb_dev_info.inode->i_mapping->a_ops = &balloon_aops;
> #endif
> + err = virtio_balloon_register_shrinker(vb);
> + if (err)
> + goto out_del_vqs;
>
> So we can get scans before device is ready. Leak will fail
> then. Why not register later after device is ready?
Probably no.
- it would be better not to set device ready when register_shrinker failed.
- When the device isn't ready, ballooning won't happen, that is,
vb->num_pages will be 0, which results in shrinker_count=0 and
shrinker_scan won't be called.
So I think it would be better to have shrinker registered before
device_ready.
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: "Michael S. Tsirkin" <mst@redhat.com>
Cc: virtio-dev@lists.oasis-open.org, linux-kernel@vger.kernel.org,
virtualization@lists.linux-foundation.org, kvm@vger.kernel.org,
linux-mm@kvack.org, mhocko@kernel.org, akpm@linux-foundation.org,
torvalds@linux-foundation.org, pbonzini@redhat.com,
liliang.opensource@gmail.com, yang.zhang.wz@gmail.com,
quan.xu0@gmail.com, nilal@redhat.com, riel@redhat.com,
peterx@redhat.com
Subject: Re: [PATCH v36 2/5] virtio_balloon: replace oom notifier with shrinker
Date: Mon, 23 Jul 2018 18:30:46 +0800 [thread overview]
Message-ID: <5B55AE56.5030404@intel.com> (raw)
In-Reply-To: <20180722174125-mutt-send-email-mst@kernel.org>
On 07/22/2018 10:48 PM, Michael S. Tsirkin wrote:
> On Fri, Jul 20, 2018 at 04:33:02PM +0800, Wei Wang wrote:
>>
>> +static unsigned long virtio_balloon_shrinker_scan(struct shrinker *shrinker,
>> + struct shrink_control *sc)
>> +{
>> + unsigned long pages_to_free = balloon_pages_to_shrink,
>> + pages_freed = 0;
>> + struct virtio_balloon *vb = container_of(shrinker,
>> + struct virtio_balloon, shrinker);
>> +
>> + /*
>> + * One invocation of leak_balloon can deflate at most
>> + * VIRTIO_BALLOON_ARRAY_PFNS_MAX balloon pages, so we call it
>> + * multiple times to deflate pages till reaching
>> + * balloon_pages_to_shrink pages.
>> + */
>> + while (vb->num_pages && pages_to_free) {
>> + pages_to_free = balloon_pages_to_shrink - pages_freed;
>> + pages_freed += leak_balloon(vb, pages_to_free);
>> + }
>> + update_balloon_size(vb);
> Are you sure that this is never called if count returned 0?
Yes. Please see do_shrink_slab, it just returns if count is 0.
>
>> +
>> + return pages_freed / VIRTIO_BALLOON_PAGES_PER_PAGE;
>> +}
>> +
>> +static unsigned long virtio_balloon_shrinker_count(struct shrinker *shrinker,
>> + struct shrink_control *sc)
>> +{
>> + struct virtio_balloon *vb = container_of(shrinker,
>> + struct virtio_balloon, shrinker);
>> +
>> + /*
>> + * We continue to use VIRTIO_BALLOON_F_DEFLATE_ON_OOM to handle the
>> + * case when shrinker needs to be invoked to relieve memory pressure.
>> + */
>> + if (!virtio_has_feature(vb->vdev, VIRTIO_BALLOON_F_DEFLATE_ON_OOM))
>> + return 0;
> So why not skip notifier registration when deflate on oom
> is clear?
Sounds good, thanks.
> vb->vb_dev_info.inode->i_mapping->a_ops = &balloon_aops;
> #endif
> + err = virtio_balloon_register_shrinker(vb);
> + if (err)
> + goto out_del_vqs;
>
> So we can get scans before device is ready. Leak will fail
> then. Why not register later after device is ready?
Probably no.
- it would be better not to set device ready when register_shrinker failed.
- When the device isn't ready, ballooning won't happen, that is,
vb->num_pages will be 0, which results in shrinker_count=0 and
shrinker_scan won't be called.
So I think it would be better to have shrinker registered before
device_ready.
Best,
Wei
next prev parent reply other threads:[~2018-07-23 10:26 UTC|newest]
Thread overview: 52+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-07-20 8:33 [virtio-dev] [PATCH v36 0/5] Virtio-balloon: support free page reporting Wei Wang
2018-07-20 8:33 ` Wei Wang
2018-07-20 8:33 ` Wei Wang
2018-07-20 8:33 ` [PATCH v36 1/5] virtio-balloon: remove BUG() in init_vqs Wei Wang
2018-07-20 8:33 ` [virtio-dev] " Wei Wang
2018-07-20 8:33 ` Wei Wang
2018-07-20 8:33 ` [PATCH v36 2/5] virtio_balloon: replace oom notifier with shrinker Wei Wang
2018-07-20 8:33 ` [virtio-dev] " Wei Wang
2018-07-20 8:33 ` Wei Wang
2018-07-22 14:48 ` Michael S. Tsirkin
2018-07-22 14:48 ` [virtio-dev] " Michael S. Tsirkin
2018-07-22 14:48 ` Michael S. Tsirkin
2018-07-23 10:30 ` Wei Wang
2018-07-23 10:30 ` Wei Wang [this message]
2018-07-23 10:30 ` Wei Wang
2018-07-23 14:13 ` Michael S. Tsirkin
2018-07-23 14:13 ` [virtio-dev] " Michael S. Tsirkin
2018-07-23 14:13 ` Michael S. Tsirkin
2018-07-24 1:49 ` Wei Wang
2018-07-24 1:49 ` [virtio-dev] " Wei Wang
2018-07-24 1:49 ` Wei Wang
2018-07-20 8:33 ` [virtio-dev] [PATCH v36 3/5] virtio-balloon: VIRTIO_BALLOON_F_FREE_PAGE_HINT Wei Wang
2018-07-20 8:33 ` Wei Wang
2018-07-20 8:33 ` Wei Wang
2018-07-20 8:33 ` [virtio-dev] [PATCH v36 4/5] mm/page_poison: expose page_poisoning_enabled to kernel modules Wei Wang
2018-07-20 8:33 ` Wei Wang
2018-07-20 8:33 ` Wei Wang
2018-07-20 8:33 ` [PATCH v36 5/5] virtio-balloon: VIRTIO_BALLOON_F_PAGE_POISON Wei Wang
2018-07-20 8:33 ` [virtio-dev] " Wei Wang
2018-07-20 8:33 ` Wei Wang
2018-07-20 12:51 ` [PATCH v36 0/5] Virtio-balloon: support free page reporting Michael S. Tsirkin
2018-07-20 12:51 ` [virtio-dev] " Michael S. Tsirkin
2018-07-20 12:51 ` Michael S. Tsirkin
2018-07-22 11:11 ` [virtio-dev] " Wang, Wei W
2018-07-22 11:11 ` Wang, Wei W
2018-07-22 11:11 ` Wang, Wei W
2018-07-23 14:07 ` [virtio-dev] " Michael S. Tsirkin
2018-07-23 14:07 ` Michael S. Tsirkin
2018-07-23 14:36 ` Dr. David Alan Gilbert
2018-07-23 14:36 ` Dr. David Alan Gilbert
2018-07-24 8:12 ` Wei Wang
2018-07-24 8:12 ` [virtio-dev] " Wei Wang
2018-07-24 8:12 ` Wei Wang
2018-09-06 12:18 ` Wei Wang
2018-09-06 12:18 ` [virtio-dev] " Wei Wang
2018-09-06 12:18 ` Wei Wang
2018-09-07 12:29 ` Dr. David Alan Gilbert
2018-09-07 12:29 ` Dr. David Alan Gilbert
2018-09-08 1:46 ` [virtio-dev] " Wang, Wei W
2018-09-08 1:46 ` Wang, Wei W
2018-09-08 1:46 ` Wang, Wei W
2018-07-23 14:07 ` 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=5B55AE56.5030404@intel.com \
--to=wei.w.wang@intel.com \
--cc=akpm@linux-foundation.org \
--cc=kvm@vger.kernel.org \
--cc=liliang.opensource@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=mhocko@kernel.org \
--cc=mst@redhat.com \
--cc=nilal@redhat.com \
--cc=pbonzini@redhat.com \
--cc=peterx@redhat.com \
--cc=quan.xu0@gmail.com \
--cc=riel@redhat.com \
--cc=torvalds@linux-foundation.org \
--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.