From: Qing Huang <qing.huang@oracle.com>
To: Christoph Hellwig <hch@infradead.org>
Cc: linux-rdma@vger.kernel.org, linux-kernel@vger.kernel.org,
dledford@redhat.com, sean.hefty@intel.com, artemyko@mellanox.com,
linux-mm@kvack.org
Subject: Re: [PATCH] ib/core: not to set page dirty bit if it's already set.
Date: Mon, 22 May 2017 16:43:57 -0700 [thread overview]
Message-ID: <9f4a4f90-a7b1-b1dc-6e7a-042f26254681@oracle.com> (raw)
In-Reply-To: <20170519130541.GA8017@infradead.org>
On 5/19/2017 6:05 AM, Christoph Hellwig wrote:
> On Thu, May 18, 2017 at 04:33:53PM -0700, Qing Huang wrote:
>> This change will optimize kernel memory deregistration operations.
>> __ib_umem_release() used to call set_page_dirty_lock() against every
>> writable page in its memory region. Its purpose is to keep data
>> synced between CPU and DMA device when swapping happens after mem
>> deregistration ops. Now we choose not to set page dirty bit if it's
>> already set by kernel prior to calling __ib_umem_release(). This
>> reduces memory deregistration time by half or even more when we ran
>> application simulation test program.
> As far as I can tell this code doesn't even need set_page_dirty_lock
> and could just use set_page_dirty
It seems that set_page_dirty_lock has been used here for more than 10
years. Don't know the original purpose. Maybe it was used to prevent
races between setting dirty bits and swapping out pages?
Perhaps we can call set_page_dirty before calling ib_dma_unmap_sg?
>> Signed-off-by: Qing Huang<qing.huang@oracle.com>
>> ---
>> drivers/infiniband/core/umem.c | 2 +-
>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/drivers/infiniband/core/umem.c b/drivers/infiniband/core/umem.c
>> index 3dbf811..21e60b1 100644
>> --- a/drivers/infiniband/core/umem.c
>> +++ b/drivers/infiniband/core/umem.c
>> @@ -58,7 +58,7 @@ static void __ib_umem_release(struct ib_device *dev, struct ib_umem *umem, int d
>> for_each_sg(umem->sg_head.sgl, sg, umem->npages, i) {
>>
>> page = sg_page(sg);
>> - if (umem->writable && dirty)
>> + if (!PageDirty(page) && umem->writable && dirty)
>> set_page_dirty_lock(page);
>> put_page(page);
>> }
>> --
>> 2.9.3
>>
--
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>
next prev parent reply other threads:[~2017-05-22 23:44 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20170518233353.14370-1-qing.huang@oracle.com>
2017-05-19 13:05 ` Christoph Hellwig
2017-05-22 23:32 ` Qing Huang
2017-05-22 23:43 ` Qing Huang [this message]
2017-05-23 7:42 ` Christoph Hellwig
2017-05-23 21:39 ` Qing Huang
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=9f4a4f90-a7b1-b1dc-6e7a-042f26254681@oracle.com \
--to=qing.huang@oracle.com \
--cc=artemyko@mellanox.com \
--cc=dledford@redhat.com \
--cc=hch@infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=linux-rdma@vger.kernel.org \
--cc=sean.hefty@intel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox