On 2/28/19 6:58 AM, Christoph Hellwig wrote:
On Thu, Feb 28, 2019 at 11:24:21AM +0800, Ming Lei wrote:
quoted
bio_for_each_bvec is used in fast path of bio splitting and sg mapping,
and what we want to do is to iterate over multi-page bvecs, instead of pages.
However, bvec_iter_advance() is invisble for this requirement, and
always advance by page size.
This way isn't efficient for multipage bvec iterator, also bvec_iter_len()
isn't as fast as mp_bvec_iter_len().
So advance by multi-page bvec's length instead of page size for bio_for_each_bvec().
More than 1% IOPS improvement can be observed in io_uring test on null_blk.
We've been there before, and I still insist that there is not good
reason ever to clamp the iteration to page size in bvec_iter_advance.
Callers that iterate over it already do that in the callers.
So here is a resurretion and rebase of my patch from back then to
just do the right thing:
Care to resend as a proper patch?
--
Jens Axboe