2024-01-19 16:42:17

by Jens Axboe

[permalink] [raw]
Subject: Re: [PATCH] block: Remove unnecessary unlikely()

On 1/19/24 9:34 AM, Matthew Wilcox (Oracle) wrote:
> Jens added unlikely() thinking that this was an error path. It's
> actually just the end of the iteration, so does not warrant an
> unlikely().

This is because the previous fix (or my attempt at least) didn't do the
i >= vcnt, it checked for an empty bio instead. Which then definitely
did make it an error/unlikely path, but obviously this one is not.

The bio iterator stuff has gotten terribly unwieldy and complicated, and
not very efficient either. But I guess that's a story for another
investigation...

--
Jens Axboe



2024-01-19 20:20:36

by Jens Axboe

[permalink] [raw]
Subject: Re: [PATCH] block: Remove unnecessary unlikely()

On 1/19/24 9:41 AM, Jens Axboe wrote:
> On 1/19/24 9:34 AM, Matthew Wilcox (Oracle) wrote:
>> Jens added unlikely() thinking that this was an error path. It's
>> actually just the end of the iteration, so does not warrant an
>> unlikely().
>
> This is because the previous fix (or my attempt at least) didn't do the
> i >= vcnt, it checked for an empty bio instead. Which then definitely
> did make it an error/unlikely path, but obviously this one is not.

Just out of curiosity, I did some branch profiling on just normal
operations of on my box. Of the ~900K times we hit this path,
10% of them ended up in that branch, and 90% of them did not.
While it's not an error path, that does seem rather unlikely. Sure, for
single entries, it'll be hit 50% of the time, but for most normal IO
it'd definitely be less than 50%, and as per above non-scientif
profiling, it's around 10%.

--
Jens Axboe