Thread (2 messages) 2 messages, 2 authors, 2019-01-31

Re: [PATCH 2/3] mm/filemap: initiate readahead even if IOCB_NOWAIT is set for the I/O

From: Jiri Kosina <jikos@kernel.org>
Date: 2019-01-31 11:34:51
Also in: linux-mm, lkml

On Thu, 31 Jan 2019, Florian Weimer wrote:
quoted
quoted
I think this needs to use a different flag because the semantics are so
much different.  If I understand this change correctly, previously,
RWF_NOWAIT essentially avoided any I/O, and now it does not.
It still avoid synchronous I/O, due to this code still being in place:

                if (!PageUptodate(page)) {
                        if (iocb->ki_flags & IOCB_NOWAIT) {
                                put_page(page);
                                goto would_block;
                        }

but goes the would_block path only after initiating asynchronous 
readahead.
But it wouldn't schedule asynchronous readahead before?
It would, that's kind of the whole point.
I'm worried that something, say PostgreSQL doing a sequential scan, 
would implement a two-pass approach, first using RWF_NOWAIT to process 
what's in the kernel page cache, and then read the rest without it.  If 
RWF_NOWAIT is treated as a prefetch hint, there could be much more read 
activity, and a lot of it would be pointless because the data might have 
to be evicted before userspace can use it.
So are you aware of anything already existing, that'd implement this 
semantics? I've quickly grepped https://github.com/postgres/postgres for 
RWF_NOWAIT, and they don't seem to use it at all. RWF_NOWAIT is rather 
new.

The usecase I am aware of is to make sure that the thread doing 
io_submit() doesn't get blocked for too long, because it has other things 
to do quickly in order to avoid starving other sub-threads (and delegate 
the I/O submission to asynchronous context).

-- 
Jiri Kosina
SUSE Labs
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help