Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1603437

Re: [PATCH 07/17] net: convert sock.sk_refcnt from atomic_t to refcount_t

From Eric Dumazet <eric.dumazet@gmail.com>
Newsgroups linux.kernel
Subject Re: [PATCH 07/17] net: convert sock.sk_refcnt from atomic_t to refcount_t
Date 2017-03-17 17:20 +0100
Message-ID <tm2LE-KO-21@gated-at.bofh.it> (permalink)
References <tlFFo-lI-31@gated-at.bofh.it> <tlGUN-197-7@gated-at.bofh.it> <tlHxv-1ET-15@gated-at.bofh.it> <tlJ6h-2QJ-1@gated-at.bofh.it> <tlUO5-2W2-11@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


On Fri, 2017-03-17 at 07:42 +0000, Reshetova, Elena wrote:

> Should we then first measure the actual numbers to understand what we
> are talking here about? 
> I would be glad to do it if you suggest what is the correct way to do
> measurements here to actually reflect the real life use cases. 

How have these patches been tested in real life exactly ?

Can you quantify number of added cycles per TCP packet, where I expect
we have maybe 20 atomic operations in all layers ...


(sk refcnt, skb->users, page refcounts, sk->sk_wmem_alloc,
sk->sk_rmem_alloc, qdisc ...)

Once we 'protect' all of them, cost will be quite high.

This translates to more fossil fuel being burnt.

one atomic_inc() used to be a single x86 instruction.

Rough estimate of refcount_inc() :

0000000000000140 <refcount_inc>:
 140:	55                   	push   %rbp
 141:	48 89 e5             	mov    %rsp,%rbp
 144:	e8 00 00 00 00       	callq  refcount_inc_not_zero
 149:	84 c0                	test   %al,%al
 14b:	74 02                	je     14f <refcount_inc+0xf>
 14d:	5d                   	pop    %rbp
 14e:	c3                   	retq   

00000000000000e0 <refcount_inc_not_zero>:
  e0:	8b 17                	mov    (%rdi),%edx
  e2:	eb 10                	jmp    f4 <refcount_inc_not_zero+0x14>
  e4:	85 c9                	test   %ecx,%ecx
  e6:	74 1b                	je     103 <refcount_inc_not_zero+0x23>
  e8:	89 d0                	mov    %edx,%eax
  ea:	f0 0f b1 0f          	lock cmpxchg %ecx,(%rdi)
  ee:	39 d0                	cmp    %edx,%eax
  f0:	74 0c                	je     fe <refcount_inc_not_zero+0x1e>
  f2:	89 c2                	mov    %eax,%edx
  f4:	85 d2                	test   %edx,%edx
  f6:	8d 4a 01             	lea    0x1(%rdx),%ecx
  f9:	75 e9                	jne    e4 <refcount_inc_not_zero+0x4>
  fb:	31 c0                	xor    %eax,%eax
  fd:	c3                   	retq   
  fe:	83 f9 ff             	cmp    $0xffffffff,%ecx
 101:	74 06                	je     109 <refcount_inc_not_zero+0x29>
 103:	b8 01 00 00 00       	mov    $0x1,%eax
 108:	c3                   	retq   

This is simply bloat for most cases.

Again, I believe this infrastructure makes sense for debugging kernels.

If some vendors are willing to run fully enabled debug kernels,
that is their choice. Probably many devices wont show any difference.

Have we forced KASAN being enabled in linux kernel, just because
it found ~400 bugs so far ?

I believe refcount_t infra is not mature enough to be widely used
right now.

Maybe in few months when we have more flexibility, like existing
debugging facilities (CONFIG_DEBUG_PAGEALLOC, CONFIG_DEBUG_PAGE_REF,
LOCKDEP, KMEMLEAK, KASAN, ...)

Back to linux.kernel | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

[PATCH 00/17] net subsystem refcount conversions Elena Reshetova <elena.reshetova@intel.com> - 2017-03-16 16:30 +0100
  [PATCH 02/17] net: convert neigh_params.refcnt from atomic_t to refcount_t Elena Reshetova <elena.reshetova@intel.com> - 2017-03-16 16:30 +0100
  [PATCH 10/17] net: convert in_device.refcnt from atomic_t to refcount_t Elena Reshetova <elena.reshetova@intel.com> - 2017-03-16 16:40 +0100
  [PATCH 12/17] net: convert unix_address.refcnt from atomic_t to refcount_t Elena Reshetova <elena.reshetova@intel.com> - 2017-03-16 16:40 +0100
  [PATCH 14/17] net: convert inet_frag_queue.refcnt from atomic_t to refcount_t Elena Reshetova <elena.reshetova@intel.com> - 2017-03-16 16:40 +0100
  [PATCH 01/17] net: convert neighbour.refcnt from atomic_t to refcount_t Elena Reshetova <elena.reshetova@intel.com> - 2017-03-16 16:40 +0100
  [PATCH 11/17] net: convert netpoll_info.refcnt from atomic_t to refcount_t Elena Reshetova <elena.reshetova@intel.com> - 2017-03-16 16:40 +0100
  [PATCH 07/17] net: convert sock.sk_refcnt from atomic_t to refcount_t Elena Reshetova <elena.reshetova@intel.com> - 2017-03-16 16:40 +0100
    Re: [PATCH 07/17] net: convert sock.sk_refcnt from atomic_t to  refcount_t Eric Dumazet <eric.dumazet@gmail.com> - 2017-03-16 18:00 +0100
      Re: [PATCH 07/17] net: convert sock.sk_refcnt from atomic_t to refcount_t Kees Cook <keescook@chromium.org> - 2017-03-16 18:40 +0100
        Re: [PATCH 07/17] net: convert sock.sk_refcnt from atomic_t to  refcount_t David Miller <davem@davemloft.net> - 2017-03-16 20:20 +0100
          RE: [PATCH 07/17] net: convert sock.sk_refcnt from atomic_t to  refcount_t "Reshetova, Elena" <elena.reshetova@intel.com> - 2017-03-17 08:50 +0100
            Re: [PATCH 07/17] net: convert sock.sk_refcnt from atomic_t to  refcount_t Eric Dumazet <eric.dumazet@gmail.com> - 2017-03-17 17:20 +0100
              Re: [PATCH 07/17] net: convert sock.sk_refcnt from atomic_t to  refcount_t Herbert Xu <herbert@gondor.apana.org.au> - 2017-03-18 18:00 +0100
                Re: [PATCH 07/17] net: convert sock.sk_refcnt from atomic_t to  refcount_t David Miller <davem@davemloft.net> - 2017-03-19 02:40 +0100
                Re: [PATCH 07/17] net: convert sock.sk_refcnt from atomic_t to  refcount_t Peter Zijlstra <peterz@infradead.org> - 2017-03-20 11:50 +0100
                Re: [PATCH 07/17] net: convert sock.sk_refcnt from atomic_t to  refcount_t Peter Zijlstra <peterz@infradead.org> - 2017-03-20 14:30 +0100
                Re: [PATCH 07/17] net: convert sock.sk_refcnt from atomic_t to  refcount_t Peter Zijlstra <peterz@infradead.org> - 2017-03-20 14:50 +0100
                Re: [PATCH 07/17] net: convert sock.sk_refcnt from atomic_t to  refcount_t Eric Dumazet <eric.dumazet@gmail.com> - 2017-03-20 16:00 +0100
                Re: [PATCH 07/17] net: convert sock.sk_refcnt from atomic_t to  refcount_t Eric Dumazet <eric.dumazet@gmail.com> - 2017-03-20 17:20 +0100
                Re: [PATCH 07/17] net: convert sock.sk_refcnt from atomic_t to  refcount_t Eric Dumazet <eric.dumazet@gmail.com> - 2017-03-20 17:40 +0100
                Re: [PATCH 07/17] net: convert sock.sk_refcnt from atomic_t to  refcount_t Eric Dumazet <eric.dumazet@gmail.com> - 2017-03-20 16:30 +0100
                Re: [PATCH 07/17] net: convert sock.sk_refcnt from atomic_t to  refcount_t Peter Zijlstra <peterz@infradead.org> - 2017-03-20 16:50 +0100
                Re: [PATCH 07/17] net: convert sock.sk_refcnt from atomic_t to refcount_t Kees Cook <keescook@chromium.org> - 2017-03-21 21:50 +0100
                Re: [PATCH 07/17] net: convert sock.sk_refcnt from atomic_t to  refcount_t Eric Dumazet <eric.dumazet@gmail.com> - 2017-03-21 22:30 +0100
                Re: [PATCH 07/17] net: convert sock.sk_refcnt from atomic_t to  refcount_t David Miller <davem@davemloft.net> - 2017-03-21 23:40 +0100
                Re: [PATCH 07/17] net: convert sock.sk_refcnt from atomic_t to refcount_t Kees Cook <keescook@chromium.org> - 2017-03-22 01:00 +0100
                Re: [PATCH 07/17] net: convert sock.sk_refcnt from atomic_t to  refcount_t Eric Dumazet <eric.dumazet@gmail.com> - 2017-03-22 03:10 +0100
                Re: [PATCH 07/17] net: convert sock.sk_refcnt from atomic_t to  refcount_t Peter Zijlstra <peterz@infradead.org> - 2017-03-22 13:30 +0100
                Re: [PATCH 07/17] net: convert sock.sk_refcnt from atomic_t to  refcount_t Eric Dumazet <eric.dumazet@gmail.com> - 2017-03-22 14:30 +0100
                Re: [PATCH 07/17] net: convert sock.sk_refcnt from atomic_t to  refcount_t Peter Zijlstra <peterz@infradead.org> - 2017-03-22 15:40 +0100
                Re: [PATCH 07/17] net: convert sock.sk_refcnt from atomic_t to  refcount_t Eric Dumazet <eric.dumazet@gmail.com> - 2017-03-22 16:00 +0100
                Re: [PATCH 07/17] net: convert sock.sk_refcnt from atomic_t to  refcount_t Peter Zijlstra <peterz@infradead.org> - 2017-03-22 16:10 +0100
                Re: [PATCH 07/17] net: convert sock.sk_refcnt from atomic_t to  refcount_t Eric Dumazet <eric.dumazet@gmail.com> - 2017-03-22 16:30 +0100
                Re: [PATCH 07/17] net: convert sock.sk_refcnt from atomic_t to  refcount_t Peter Zijlstra <peterz@infradead.org> - 2017-03-22 18:00 +0100
                Re: [PATCH 07/17] net: convert sock.sk_refcnt from atomic_t to refcount_t Kees Cook <keescook@chromium.org> - 2017-03-22 20:10 +0100
                Re: [PATCH 07/17] net: convert sock.sk_refcnt from atomic_t to  refcount_t Peter Zijlstra <peterz@infradead.org> - 2017-03-22 14:50 +0100
                Re: [PATCH 07/17] net: convert sock.sk_refcnt from atomic_t to  refcount_t Herbert Xu <herbert@gondor.apana.org.au> - 2017-03-20 15:50 +0100
                Re: [PATCH 07/17] net: convert sock.sk_refcnt from atomic_t to  refcount_t Herbert Xu <herbert@gondor.apana.org.au> - 2017-03-20 14:50 +0100
                RE: [PATCH 07/17] net: convert sock.sk_refcnt from atomic_t to  refcount_t David Laight <David.Laight@ACULAB.COM> - 2017-03-20 15:20 +0100
                Re: [PATCH 07/17] net: convert sock.sk_refcnt from atomic_t to  refcount_t Peter Zijlstra <peterz@infradead.org> - 2017-03-20 15:30 +0100
                RE: [PATCH 07/17] net: convert sock.sk_refcnt from atomic_t to  refcount_t David Laight <David.Laight@ACULAB.COM> - 2017-03-20 16:10 +0100
  [PATCH 05/17] net: convert sk_buff_fclones.fclone_ref from atomic_t to refcount_t Elena Reshetova <elena.reshetova@intel.com> - 2017-03-16 16:40 +0100
  [PATCH 15/17] net: convert net.passive from atomic_t to refcount_t Elena Reshetova <elena.reshetova@intel.com> - 2017-03-16 16:40 +0100
  [PATCH 16/17] net: convert netlbl_lsm_cache.refcount from atomic_t to refcount_t Elena Reshetova <elena.reshetova@intel.com> - 2017-03-16 16:40 +0100
  [PATCH 09/17] net: convert ip_mc_list.refcnt from atomic_t to refcount_t Elena Reshetova <elena.reshetova@intel.com> - 2017-03-16 16:40 +0100
  [PATCH 04/17] net: convert sk_buff.users from atomic_t to refcount_t Elena Reshetova <elena.reshetova@intel.com> - 2017-03-16 16:40 +0100
  [PATCH 08/17] net: convert sk_filter.refcnt from atomic_t to refcount_t Elena Reshetova <elena.reshetova@intel.com> - 2017-03-16 16:40 +0100
    Re: [PATCH 08/17] net: convert sk_filter.refcnt from atomic_t to  refcount_t Daniel Borkmann <daniel@iogearbox.net> - 2017-03-16 17:10 +0100
      RE: [PATCH 08/17] net: convert sk_filter.refcnt from atomic_t to  refcount_t "Reshetova, Elena" <elena.reshetova@intel.com> - 2017-03-17 09:20 +0100
  [PATCH 17/17] net: convert packet_fanout.sk_ref from atomic_t to refcount_t Elena Reshetova <elena.reshetova@intel.com> - 2017-03-16 16:40 +0100
  [PATCH 06/17] net: convert sock.sk_wmem_alloc from atomic_t to refcount_t Elena Reshetova <elena.reshetova@intel.com> - 2017-03-16 16:40 +0100
  [PATCH 13/17] net: convert fib_rule.refcnt from atomic_t to refcount_t Elena Reshetova <elena.reshetova@intel.com> - 2017-03-16 16:40 +0100

csiph-web