1. 26 Jun, 2024 18 commits
  2. 25 Jun, 2024 21 commits
  3. 24 Jun, 2024 1 commit
    • Jakub Kicinski's avatar
      Merge branch 'locking-introduce-nested-bh-locking' · bf2468f9
      Jakub Kicinski authored
      Sebastian Andrzej Siewior says:
      
      ====================
      locking: Introduce nested-BH locking.
      
      Disabling bottoms halves acts as per-CPU BKL. On PREEMPT_RT code within
      local_bh_disable() section remains preemtible. As a result high prior
      tasks (or threaded interrupts) will be blocked by lower-prio task (or
      threaded interrupts) which are long running which includes softirq
      sections.
      
      The proposed way out is to introduce explicit per-CPU locks for
      resources which are protected by local_bh_disable() and use those only
      on PREEMPT_RT so there is no additional overhead for !PREEMPT_RT builds.
      
      The series introduces the infrastructure and converts large parts of
      networking which is largest stake holder here. Once this done the
      per-CPU lock from local_bh_disable() on PREEMPT_RT can be lifted.
      
      Performance testing. Baseline is net-next as of commit 93bda330
      ("Merge branch'net-constify-ctl_table-arguments-of-utility-functions'")
      plus v6.10-rc1. A 10GiG link is used between two hosts. The command
         xdp-bench redirect-cpu --cpu 3 --remote-action drop eth1 -e
      
      was invoked on the receiving side with a ixgbe. The sending side uses
      pktgen_sample03_burst_single_flow.sh on i40e.
      
      Baseline:
      | eth1->?                 9,018,604 rx/s                  0 err,drop/s
      |   receive total         9,018,604 pkt/s                 0 drop/s                0 error/s
      |     cpu:7               9,018,604 pkt/s                 0 drop/s                0 error/s
      |   enqueue to cpu 3      9,018,602 pkt/s                 0 drop/s             7.00 bulk-avg
      |     cpu:7->3            9,018,602 pkt/s                 0 drop/s             7.00 bulk-avg
      |   kthread total         9,018,606 pkt/s                 0 drop/s          214,698 sched
      |     cpu:3               9,018,606 pkt/s                 0 drop/s          214,698 sched
      |     xdp_stats                   0 pass/s        9,018,606 drop/s                0 redir/s
      |       cpu:3                     0 pass/s        9,018,606 drop/s                0 redir/s
      |   redirect_err                  0 error/s
      |   xdp_exception                 0 hit/s
      
      perf top --sort cpu,symbol --no-children:
      |   18.14%  007  [k] bpf_prog_4f0ffbb35139c187_cpumap_l4_hash
      |   13.29%  007  [k] ixgbe_poll
      |   12.66%  003  [k] cpu_map_kthread_run
      |    7.23%  003  [k] page_frag_free
      |    6.76%  007  [k] xdp_do_redirect
      |    3.76%  007  [k] cpu_map_redirect
      |    3.13%  007  [k] bq_flush_to_queue
      |    2.51%  003  [k] xdp_return_frame
      |    1.93%  007  [k] try_to_wake_up
      |    1.78%  007  [k] _raw_spin_lock
      |    1.74%  007  [k] cpu_map_enqueue
      |    1.56%  003  [k] bpf_prog_57cd311f2e27366b_cpumap_drop
      
      With this series applied:
      | eth1->?                10,329,340 rx/s                  0 err,drop/s
      |   receive total        10,329,340 pkt/s                 0 drop/s                0 error/s
      |     cpu:6              10,329,340 pkt/s                 0 drop/s                0 error/s
      |   enqueue to cpu 3     10,329,338 pkt/s                 0 drop/s             8.00 bulk-avg
      |     cpu:6->3           10,329,338 pkt/s                 0 drop/s             8.00 bulk-avg
      |   kthread total        10,329,321 pkt/s                 0 drop/s           96,297 sched
      |     cpu:3              10,329,321 pkt/s                 0 drop/s           96,297 sched
      |     xdp_stats                   0 pass/s       10,329,321 drop/s                0 redir/s
      |       cpu:3                     0 pass/s       10,329,321 drop/s                0 redir/s
      |   redirect_err                  0 error/s
      |   xdp_exception                 0 hit/s
      
      perf top --sort cpu,symbol --no-children:
      |   20.90%  006  [k] bpf_prog_4f0ffbb35139c187_cpumap_l4_hash
      |   12.62%  006  [k] ixgbe_poll
      |    9.82%  003  [k] page_frag_free
      |    8.73%  003  [k] cpu_map_bpf_prog_run_xdp
      |    6.63%  006  [k] xdp_do_redirect
      |    4.94%  003  [k] cpu_map_kthread_run
      |    4.28%  006  [k] cpu_map_redirect
      |    4.03%  006  [k] bq_flush_to_queue
      |    3.01%  003  [k] xdp_return_frame
      |    1.95%  006  [k] _raw_spin_lock
      |    1.94%  003  [k] bpf_prog_57cd311f2e27366b_cpumap_drop
      
      This diff appears to be noise.
      
      v8: https://lore.kernel.org/all/20240619072253.504963-1-bigeasy@linutronix.de
      v7: https://lore.kernel.org/all/20240618072526.379909-1-bigeasy@linutronix.de
      v6: https://lore.kernel.org/all/20240612170303.3896084-1-bigeasy@linutronix.de
      v5: https://lore.kernel.org/all/20240607070427.1379327-1-bigeasy@linutronix.de
      v4: https://lore.kernel.org/all/20240604154425.878636-1-bigeasy@linutronix.de
      v3: https://lore.kernel.org/all/20240529162927.403425-1-bigeasy@linutronix.de
      v2: https://lore.kernel.org/all/20240503182957.1042122-1-bigeasy@linutronix.de
      v1: https://lore.kernel.org/all/20231215171020.687342-1-bigeasy@linutronix.de
      ====================
      
      Link: https://patch.msgid.link/20240620132727.660738-1-bigeasy@linutronix.deSigned-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      bf2468f9