Skip to content
  • nikolay@redhat.com's avatar
    bonding: initial RCU conversion · 278b2083
    nikolay@redhat.com authored
    
    
    This patch does the initial bonding conversion to RCU. After it the
    following modes are protected by RCU alone: roundrobin, active-backup,
    broadcast and xor. Modes ALB/TLB and 3ad still acquire bond->lock for
    reading, and will be dealt with later. curr_active_slave needs to be
    dereferenced via rcu in the converted modes because the only thing
    protecting the slave after this patch is rcu_read_lock, so we need the
    proper barrier for weakly ordered archs and to make sure we don't have
    stale pointer. It's not tagged with __rcu yet because there's still work
    to be done to remove the curr_slave_lock, so sparse will complain when
    rcu_assign_pointer and rcu_dereference are used, but the alternative to use
    rcu_dereference_protected would've created much bigger code churn which is
    more difficult to test and review. That will be converted in time.
    
    1. Active-backup mode
     1.1 Perf recording while doing iperf -P 4
      - old bonding: iperf spent 0.55% in bonding, system spent 0.29% CPU
                     in bonding
      - new bonding: iperf spent 0.29% in bonding, system spent 0.15% CPU
                     in bonding
     1.2. Bandwidth measurements
      - old bonding: 16.1 gbps consistently
      - new bonding: 17.5 gbps consistently
    
    2. Round-robin mode
     2.1 Perf recording while doing iperf -P 4
      - old bonding: iperf spent 0.51% in bonding, system spent 0.24% CPU
                     in bonding
      - new bonding: iperf spent 0.16% in bonding, system spent 0.11% CPU
                     in bonding
     2.2 Bandwidth measurements
      - old bonding: 8 gbps (variable due to packet reorderings)
      - new bonding: 10 gbps (variable due to packet reorderings)
    
    Of course the latency has improved in all converted modes, and moreover
    while
    doing enslave/release (since it doesn't affect tx anymore).
    
    Also I've stress tested all modes doing enslave/release in a loop while
    transmitting traffic.
    
    Signed-off-by: default avatarNikolay Aleksandrov <nikolay@redhat.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    278b2083