From: Jerome Glisse <jglisse@redhat.com>
To: Jens Axboe <axboe@kernel.dk>
Cc: Al Viro <viro@ZenIV.linux.org.uk>,
linux-fsdevel@vger.kernel.org, linux-mm@kvack.org,
lsf-pc@lists.linux-foundation.org, linux-block@vger.kernel.org
Subject: Re: [Lsf-pc] [LSF/MM TOPIC] Killing reliance on struct page->mapping
Date: Thu, 1 Feb 2018 10:57:49 -0500 [thread overview]
Message-ID: <20180201155748.GA3085@redhat.com> (raw)
In-Reply-To: <35c2908e-b6ba-fc29-0a3c-15cb8cf00256@kernel.dk>
On Thu, Feb 01, 2018 at 08:34:58AM -0700, Jens Axboe wrote:
> On 1/31/18 11:13 AM, Jerome Glisse wrote:
> > That's one solution, another one is to have struct bio_vec store
> > buffer_head pointer and not page pointer, from buffer_head you can
> > find struct page and using buffer_head and struct page pointer you
> > can walk the KSM rmap_item chain to find back the mapping. This
> > would be needed on I/O error for pending writeback of a newly write
> > protected page, so one can argue that the overhead of the chain lookup
> > to find back the mapping against which to report IO error, is an
> > acceptable cost.
>
> Ehm nope. bio_vec is a generic container for pages, requiring
> buffer_heads to be able to do IO would be insanity.
The extra pointer dereference would be killing performance ? Note that
i am not saying have one vec entry per buffer_head but keep thing as
they are and run the following semantic patch:
@@
struct bio_vec *bvec;
expression E;
@@
-bvec->bv_page = E;
+bvec_set_page(bvec, E);
@@
struct bio_vec *bvec;
@@
-bvec->bv_page
+bvec_get_page(bvec);
Then inside struct bio_vec:
s/struct page *bv_head;/struct buffer_head *bv_bh;/
Finally add:
struct page *bvec_get_page(const struct bio_vec *bvec)
{
return bvec->bv_bh->page;
}
void bvec_set_page(struct bio_vec *bvec, struct page *page)
{
bvec->bv_bh = first_buffer_head(page);
}
Well you get the idea. Point is that it just add one more pointer
dereference so one more memory lookup. But if it is an issue they
are other way to achieve what i want. For instance i can have a
flags in the address store (1 bit) and make the extra dereference
only needed for write protected page. Or the other solution in
previous email, or something i haven't thought of yet :)
Like i said i don't think i will change the block subsystem, for
block i would only need to change if i ever want to allow write
protection to happen before pending writeback completion. Which
as of now feels to me like a micro-optimization that i might never
need.
In any case i am happy to discuss my ideas and try to find one
that people likes :)
Cheers,
Jerome
--
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:[~2018-02-01 15:57 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-01-30 0:43 [LSF/MM TOPIC] Killing reliance on struct page->mapping Jerome Glisse
2018-01-31 16:56 ` Al Viro
2018-01-31 17:42 ` Jerome Glisse
2018-01-31 17:55 ` Al Viro
2018-01-31 18:13 ` Jerome Glisse
2018-02-01 15:34 ` [Lsf-pc] " Jens Axboe
2018-02-01 15:57 ` Jerome Glisse [this message]
2018-02-01 16:00 ` Jens Axboe
2018-02-01 16:33 ` Jerome Glisse
2018-02-01 12:27 ` Kirill A. Shutemov
2018-02-01 13:22 ` Jerome Glisse
2018-01-31 17:09 ` Igor Stoppa
2018-01-31 17:48 ` Jerome Glisse
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=20180201155748.GA3085@redhat.com \
--to=jglisse@redhat.com \
--cc=axboe@kernel.dk \
--cc=linux-block@vger.kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=lsf-pc@lists.linux-foundation.org \
--cc=viro@ZenIV.linux.org.uk \
/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;
as well as URLs for NNTP newsgroup(s).