On 8/6/21 7:48 AM, Al Viro wrote:
On Fri, Aug 06, 2021 at 12:42:43PM +0100, Pavel Begunkov wrote:
quoted
Unless direct I/O path of generic_file_read_iter() ended up with an
error or a short read, it doesn't use inode. So, load inode and size
later, only when they're needed. This cuts two memory reads and also
imrpoves code generation, e.g. loads from stack.
... and the same question here.
quoted
NOTE: as a side effect, it reads inode->i_size after ->direct_IO(), and
I'm not sure whether that's valid, so would be great to get feedback
from someone who knows better.
Ought to be safe, I think, but again, how much effect have you observed
from the patch?
Ran a quick test here, doing polled IO (~3.3M IOPS) and we reduce the
overhead of generic_file_read_iter() from 1.5% of the runtime to 1.2%.
Noticeable. Will improve once we stop digging into the inode on the
io_uring side.
Anyway, just one data point, perhaps Pavel has some too.
--
Jens Axboe