All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mel Gorman <mgorman@techsingularity.net>
To: Alexander Duyck <alexander.h.duyck@linux.intel.com>
Cc: Alexander Duyck <alexander.duyck@gmail.com>,
	kvm@vger.kernel.org, david@redhat.com, mst@redhat.com,
	linux-kernel@vger.kernel.org, linux-mm@kvack.org,
	akpm@linux-foundation.org, yang.zhang.wz@gmail.com,
	pagupta@redhat.com, konrad.wilk@oracle.com, nitesh@redhat.com,
	riel@surriel.com, willy@infradead.org, lcapitulino@redhat.com,
	dave.hansen@intel.com, wei.w.wang@intel.com, aarcange@redhat.com,
	pbonzini@redhat.com, dan.j.williams@intel.com, mhocko@kernel.org,
	vbabka@suse.cz, osalvador@suse.de
Subject: Re: [PATCH v17 4/9] mm: Introduce Reported pages
Date: Fri, 21 Feb 2020 20:19:51 +0000	[thread overview]
Message-ID: <20200221201951.GZ3466@techsingularity.net> (raw)
In-Reply-To: <2e4ff237de090dd4760995d948b9a1788c2f351d.camel@linux.intel.com>

On Fri, Feb 21, 2020 at 11:25:49AM -0800, Alexander Duyck wrote:
> On Thu, 2020-02-20 at 22:35 +0000, Mel Gorman wrote:
> > On Thu, Feb 20, 2020 at 10:44:21AM -0800, Alexander Duyck wrote:
> > > > > +static int
> > > > > +page_reporting_cycle(struct page_reporting_dev_info *prdev, struct zone *zone,
> > > > > +		     unsigned int order, unsigned int mt,
> > > > > +		     struct scatterlist *sgl, unsigned int *offset)
> > > > > +{
> > > > > +	struct free_area *area = &zone->free_area[order];
> > > > > +	struct list_head *list = &area->free_list[mt];
> > > > > +	unsigned int page_len = PAGE_SIZE << order;
> > > > > +	struct page *page, *next;
> > > > > +	int err = 0;
> > > > > +
> > > > > +	/*
> > > > > +	 * Perform early check, if free area is empty there is
> > > > > +	 * nothing to process so we can skip this free_list.
> > > > > +	 */
> > > > > +	if (list_empty(list))
> > > > > +		return err;
> > > > > +
> > > > > +	spin_lock_irq(&zone->lock);
> > > > > +
> > > > > +	/* loop through free list adding unreported pages to sg list */
> > > > > +	list_for_each_entry_safe(page, next, list, lru) {
> > > > > +		/* We are going to skip over the reported pages. */
> > > > > +		if (PageReported(page))
> > > > > +			continue;
> > > > > +
> > > > > +		/* Attempt to pull page from list */
> > > > > +		if (!__isolate_free_page(page, order))
> > > > > +			break;
> > > > > +
> > > > 
> > > > Might want to note that you are breaking because the only reason to fail
> > > > the isolation is that watermarks are not met and we are likely under
> > > > memory pressure. It's not a big issue.
> > > > 
> > > > However, while I think this is correct, it's hard to follow. This loop can
> > > > be broken out of with pages still on the scatter gather list. The current
> > > > flow guarantees that err will not be set at this point so the caller
> > > > cleans it up so we always drain the list either here or in the caller.
> > > 
> > > I can probably submit a follow-up patch to update the comments. The reason
> > > for not returning an error is because I didn't consider it an error that
> > > we encountered the watermark and were not able to pull any more pages.
> > > Instead I considered that the "stop" point for this pass and have it just
> > > exit out of the loop and flush the data.
> > > 
> > 
> > I don't consider it an error and I don't think you should return an
> > error. The comment just needs to explain that the draining happens in
> > the caller in this case. That should be enough of a warning to a future
> > developer to double check the flow after any changes to make sure the
> > drain is reached.
> 
> The comment I can do, that shouldn't be an issue. The point I was getting
> at is that a separate drain call is expected for this any time the
> function is not returning an error, and the only way it can return an
> error is if there was a reporting issue.
> 

I'm not suggesting you return an error. I'm suggesting you put a warn in
before you break due to watermarks *if* there is an error. It should
*never* trigger unless someone modifies the flow and breaks it in which
case the warning will not kill the system but give a strong hint to the
developer that they need to think a bit more.

It's ok to leave it out because at this point, it's a distraction and I
do not see a problem with the current code.

-- 
Mel Gorman
SUSE Labs

  reply	other threads:[~2020-02-21 20:20 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-02-11 22:45 [PATCH v17 0/9] mm / virtio: Provide support for free page reporting Alexander Duyck
2020-02-11 22:46 ` [PATCH v17 1/9] mm: Adjust shuffle code to allow for future coalescing Alexander Duyck
2020-02-11 22:46 ` [PATCH v17 2/9] mm: Use zone and order instead of free area in free_list manipulators Alexander Duyck
2020-02-11 22:46 ` [PATCH v17 3/9] mm: Add function __putback_isolated_page Alexander Duyck
2020-02-19 14:33   ` Mel Gorman
2020-02-11 22:46 ` [PATCH v17 4/9] mm: Introduce Reported pages Alexander Duyck
2020-02-19 14:55   ` Mel Gorman
2020-02-20 18:44     ` Alexander Duyck
2020-02-20 22:35       ` Mel Gorman
2020-02-21 19:25         ` Alexander Duyck
2020-02-21 20:19           ` Mel Gorman [this message]
2020-02-11 22:46 ` [PATCH v17 5/9] virtio-balloon: Pull page poisoning config out of free page hinting Alexander Duyck
2020-02-11 22:46 ` [PATCH v17 6/9] virtio-balloon: Add support for providing free page reports to host Alexander Duyck
2020-02-11 22:47 ` [PATCH v17 7/9] mm/page_reporting: Rotate reported pages to the tail of the list Alexander Duyck
2020-02-19 14:59   ` Mel Gorman
2020-02-11 22:47 ` [PATCH v17 8/9] mm/page_reporting: Add budget limit on how many pages can be reported per pass Alexander Duyck
2020-02-19 15:02   ` Mel Gorman
2020-02-11 22:47 ` [PATCH v17 9/9] mm/page_reporting: Add free page reporting documentation Alexander Duyck
2020-02-11 22:51 ` [virtio-dev] [PATCH v17 QEMU 1/3] virtio-ballon: Implement support for page poison tracking feature Alexander Duyck
2020-02-11 22:51   ` Alexander Duyck
2020-02-11 22:51 ` [virtio-dev] [PATCH v17 QEMU 2/3] virtio-balloon: Add support for providing free page reports to host Alexander Duyck
2020-02-11 22:51   ` Alexander Duyck
2020-02-11 22:51 ` [virtio-dev] [PATCH v17 QEMU 3/3] virtio-balloon: Provide a interface for free page reporting Alexander Duyck
2020-02-11 22:51   ` Alexander Duyck
2020-02-11 22:53 ` [virtio-dev] [PATCH v17 QEMU 4/3 RFC] memory: Add support for MADV_FREE as mechanism to lazy discard pages Alexander Duyck
2020-02-11 22:53   ` Alexander Duyck
2020-02-11 23:05 ` [PATCH v17 0/9] mm / virtio: Provide support for free page reporting Andrew Morton
2020-02-11 23:55   ` Alexander Duyck
2020-02-12  0:19     ` Andrew Morton
2020-02-12  1:19       ` Alexander Duyck
2020-02-18 16:37       ` Alexander Duyck
2020-02-19  8:49         ` Mel Gorman
2020-02-19 15:06         ` Mel Gorman

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=20200221201951.GZ3466@techsingularity.net \
    --to=mgorman@techsingularity.net \
    --cc=aarcange@redhat.com \
    --cc=akpm@linux-foundation.org \
    --cc=alexander.duyck@gmail.com \
    --cc=alexander.h.duyck@linux.intel.com \
    --cc=dan.j.williams@intel.com \
    --cc=dave.hansen@intel.com \
    --cc=david@redhat.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=mhocko@kernel.org \
    --cc=mst@redhat.com \
    --cc=nitesh@redhat.com \
    --cc=osalvador@suse.de \
    --cc=pagupta@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=riel@surriel.com \
    --cc=vbabka@suse.cz \
    --cc=wei.w.wang@intel.com \
    --cc=willy@infradead.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.