答复: [PATCH][nf-next] netfilter: replace modulo operation with bitwise AND

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

 




> -----邮件原件-----
> 发件人: Florian Westphal [mailto:fw@xxxxxxxxx]
> 发送时间: 2019年2月25日 19:27
> 收件人: Li,Rongqing <lirongqing@xxxxxxxxx>
> 抄送: netfilter-devel@xxxxxxxxxxxxxxx
> 主题: Re: [PATCH][nf-next] netfilter: replace modulo operation with bitwise
> AND
> 
> Li RongQing <lirongqing@xxxxxxxxx> wrote:
> > CONNTRACK_LOCKS is 1024 and power of 2, so modulo operations can be
> > replaced with AND (CONNTRACK_LOCKS - 1)
> >
> > and bitwise AND operation is quicker than module operation
> 
> Uh.  What kind of compiler doesn't figure that out?!
> 
> I would prefer to keep it as-is and let compiler do the optimization.


gcc version 7.3.0 (GCC)


main()
{
    int i=1000000000;

         i= i % 1024;

        return i;
}

00000000004004a7 <main>:
  4004a7:       55                      push   %rbp
  4004a8:       48 89 e5                mov    %rsp,%rbp
  4004ab:       c7 45 fc 00 ca 9a 3b    movl   $0x3b9aca00,-0x4(%rbp)
  4004b2:       8b 45 fc                mov    -0x4(%rbp),%eax
  4004b5:       99                      cltd
  4004b6:       c1 ea 16                shr    $0x16,%edx
  4004b9:       01 d0                   add    %edx,%eax
  4004bb:       25 ff 03 00 00          and    $0x3ff,%eax
  4004c0:       29 d0                   sub    %edx,%eax
  4004c2:       89 45 fc                mov    %eax,-0x4(%rbp)
  4004c5:       8b 45 fc                mov    -0x4(%rbp),%eax
  4004c8:       5d                      pop    %rbp
  4004c9:       c3                      retq
  4004ca:       66 0f 1f 44 00 00       nopw   0x0(%rax,%rax,1)

=================================
main()
{
    int i=1000000000;

         i= i & (1024-1);

        return i;
}

00000000004004a7 <main>:
  4004a7:       55                      push   %rbp
  4004a8:       48 89 e5                mov    %rsp,%rbp
  4004ab:       c7 45 fc 00 ca 9a 3b    movl   $0x3b9aca00,-0x4(%rbp)
  4004b2:       81 65 fc ff 03 00 00    andl   $0x3ff,-0x4(%rbp)
  4004b9:       8b 45 fc                mov    -0x4(%rbp),%eax
  4004bc:       5d                      pop    %rbp
  4004bd:       c3                      retq
  4004be:       66 90                   xchg   %ax,%ax


Similar patch:

commit 1a1d74d378b13ad3f93e8975a0ade0980a49d28b
Author: Jakub Kicinski <jakub.kicinski@xxxxxxxxxxxxx>
Date:   Mon Oct 31 20:43:17 2016 +0000

    nfp: use AND instead of modulo to get ring indexes


thanks

-RongQing




[Index of Archives]     [Netfitler Users]     [LARTC]     [Bugtraq]     [Yosemite Forum]

  Powered by Linux