Message ID | 1430543983-10446-1-git-send-email-ast@plumgrid.com |
---|---|
State | Accepted, archived |
Delegated to: | David Miller |
Headers | show |
On Fri, 1 May 2015 22:19:43 -0700 Alexei Starovoitov <ast@plumgrid.com> wrote: > From: Jamal Hadi Salim <jhs@mojatatu.com> > > improves ingress+u32 performance from 22.4 Mpps to 22.9 Mpps I like this change and I'm ACKing it. But I would like to comment on these performance numbers. I assume this is a single CPU test with your pktgen RX/STACK_INJECT mode that drops the packet "early (in ip_rcv() I think). It sound impressive to get +0.5 Mpps improvement from such a small change, while in reality this is approx a 1ns improvement. (1/(22.4*10^6)*10^9) = 44.64ns (1/(22.9*10^6)*10^9) = 43.67ns improvement diff = 0.97ns I'm a fan of zooming in on parts of the stack, as it allow us to performance optimize and measure parts of the stack that is normally hard to measure. And your ingress use-case is valid. People should just be aware, that we can easily "over-sell" when "zooming" in... > Signed-off-by: Jamal Hadi Salim <jhs@mojatatu.com> > Signed-off-by: Alexei Starovoitov <ast@plumgrid.com> > Acked-by: Florian Westphal <fw@strlen.de> > Acked-by: Daniel Borkmann <daniel@iogearbox.net> Acked-by: Jesper Dangaard Brouer <brouer@redhat.com>
From: Alexei Starovoitov <ast@plumgrid.com> Date: Fri, 1 May 2015 22:19:43 -0700 > From: Jamal Hadi Salim <jhs@mojatatu.com> > > improves ingress+u32 performance from 22.4 Mpps to 22.9 Mpps > > Signed-off-by: Jamal Hadi Salim <jhs@mojatatu.com> > Signed-off-by: Alexei Starovoitov <ast@plumgrid.com> > Acked-by: Florian Westphal <fw@strlen.de> > Acked-by: Daniel Borkmann <daniel@iogearbox.net> Applied, thanks. -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/include/uapi/linux/pkt_cls.h b/include/uapi/linux/pkt_cls.h index bf08e76bf505..f6344a522cd6 100644 --- a/include/uapi/linux/pkt_cls.h +++ b/include/uapi/linux/pkt_cls.h @@ -62,11 +62,13 @@ bits 9,10,11: redirect counter - redirect TTL. Loop avoidance #define SET_TC_NCLS(v) ( TC_NCLS | (v & ~TC_NCLS)) #define CLR_TC_NCLS(v) ( v & ~TC_NCLS) +#ifndef __KERNEL__ #define S_TC_RTTL _TC_MAKE32(9) #define M_TC_RTTL _TC_MAKEMASK(3,S_TC_RTTL) #define G_TC_RTTL(x) _TC_GETVALUE(x,S_TC_RTTL,M_TC_RTTL) #define V_TC_RTTL(x) _TC_MAKEVALUE(x,S_TC_RTTL) #define SET_TC_RTTL(v,n) ((V_TC_RTTL(n)) | (v & ~M_TC_RTTL)) +#endif #define S_TC_AT _TC_MAKE32(12) #define M_TC_AT _TC_MAKEMASK(2,S_TC_AT) diff --git a/net/core/dev.c b/net/core/dev.c index c7ba0388f1be..97a15ae8d07a 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -3531,18 +3531,9 @@ EXPORT_SYMBOL_GPL(br_fdb_test_addr_hook); */ static int ing_filter(struct sk_buff *skb, struct netdev_queue *rxq) { - struct net_device *dev = skb->dev; - u32 ttl = G_TC_RTTL(skb->tc_verd); int result = TC_ACT_OK; struct Qdisc *q; - if (unlikely(MAX_RED_LOOP < ttl++)) { - net_warn_ratelimited("Redir loop detected Dropping packet (%d->%d)\n", - skb->skb_iif, dev->ifindex); - return TC_ACT_SHOT; - } - - skb->tc_verd = SET_TC_RTTL(skb->tc_verd, ttl); skb->tc_verd = SET_TC_AT(skb->tc_verd, AT_INGRESS); q = rcu_dereference(rxq->qdisc);