Re: [RFC PATCH] fix a reshape checking logic inside make_stripe_request()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




> 2025年5月6日 11:34,Yu Kuai <yukuai1@xxxxxxxxxxxxxxx> 写道:
> 
> Hi,
> 
> 在 2025/05/06 10:34, Coly Li 写道:
>> For the above code, I don’t see how only unlikely(previous) help on branch prediction and prefetch,
>> IMHO the following form may help to achieve expected unlikely() result,
>>           if (unlikely(previous && !stripe_ahead_of_reshape(mddev, conf, sh))) {
>> Thanks.
> 
> What you mean you don't see *only unlikely*, for example:
> 
> int test0(int a, int b)
> {
>        if (a && b)
>                return 1;
>        return 0;
> }
> 
> int test1(int a, int b)
> {
>        if (unlikely(a) && b)
>                return 1;
> 
>        return 0;
> }
> 
> You can see unlikely will generate setne/movzbl/test assemble code:
> 
> test0:
>   0x0000000000401130 <+10>:    cmpl   $0x0,-0x4(%rbp)
>   0x0000000000401134 <+14>:    je     0x401143 <test0+29>
>   0x0000000000401136 <+16>:    cmpl   $0x0,-0x8(%rbp)
>   0x000000000040113a <+20>:    je     0x401143 <test0+29>
> 
> test1:
>   0x0000000000401154 <+10>:    cmpl   $0x0,-0x4(%rbp)
>   0x0000000000401158 <+14>:    setne  %al
>   0x000000000040115b <+17>:    movzbl %al,%eax
>   0x000000000040115e <+20>:    test   %rax,%rax
>   0x0000000000401161 <+23>:    je     0x401170 <test1+38>
>   0x0000000000401163 <+25>:    cmpl   $0x0,-0x8(%rbp)
> 
> BTW, what you suggested is the same as:
> 
> if (unlikely(previous) && unlikely(!stripe_ahead_of_reshape(mddev, conf, sh)))

I seldom use unlikely() this way, it is confused as well.

Anyway since the result seems to be similar as including whole checking statement by unlikely(), I don’t insist on this.
Thanks for the patient explanation.

Coly Li




[Index of Archives]     [Linux RAID Wiki]     [ATA RAID]     [Linux SCSI Target Infrastructure]     [Linux Block]     [Linux IDE]     [Linux SCSI]     [Linux Hams]     [Device Mapper]     [Device Mapper Cryptographics]     [Kernel]     [Linux Admin]     [Linux Net]     [GFS]     [RPM]     [git]     [Yosemite Forum]


  Powered by Linux