• J
    net: sched: make cls_u32 lockless · 8f787cd1
    John Fastabend 提交于
    Make cls_u32 classifier safe to run without holding lock. This patch
    converts statistics that are kept in read section u32_classify into
    per cpu counters.
    
    This patch was tested with a tight u32 filter add/delete loop while
    generating traffic with pktgen. By running pktgen on vlan devices
    created on top of a physical device we can hit the qdisc layer
    correctly. For ingress qdisc's a loopback cable was used.
    
    for i in {1..100}; do
            q=`echo $i%8|bc`;
            echo -n "u32 tos: iteration $i on queue $q";
            tc filter add dev p3p2 parent $p prio $i u32 match ip tos 0x10 0xff \
                      action skbedit queue_mapping $q;
            sleep 1;
            tc filter del dev p3p2 prio $i;
    
            echo -n "u32 tos hash table: iteration $i on queue $q";
            tc filter add dev p3p2 parent $p protocol ip prio $i handle 628: u32 divisor 1
            tc filter add dev p3p2 parent $p protocol ip prio $i u32 \
                    match ip protocol 17 0xff link 628: offset at 0 mask 0xf00 shift 6 plus 0
            tc filter add dev p3p2 parent $p protocol ip prio $i u32 \
                    ht 628:0 match ip tos 0x10 0xff action skbedit queue_mapping $q
            sleep 2;
            tc filter del dev p3p2 prio $i
            sleep 1;
    done
    Signed-off-by: NJohn Fastabend <john.r.fastabend@intel.com>
    Acked-by: NEric Dumazet <edumazet@google.com>
    Signed-off-by: NDavid S. Miller <davem@davemloft.net>
    8f787cd1
cls_u32.c 19.8 KB