On Tue, Jul 19, 2016 at 12:16:57PM -0700, Brenden Blanco wrote: > Add a sample that rewrites and forwards packets out on the same > interface. Observed single core forwarding performance of ~10Mpps. > > Since the mlx4 driver under test recycles every single packet page, the > perf output shows almost exclusively just the ring management and bpf > program work. Slowdowns are likely occurring due to cache misses.
long term we need to resurrect your prefetch patch. sux to leave so much performance on the table. > +static int parse_ipv4(void *data, u64 nh_off, void *data_end) > +{ > + struct iphdr *iph = data + nh_off; > + > + if (iph + 1 > data_end) > + return 0; > + return iph->protocol; > +} > + > +static int parse_ipv6(void *data, u64 nh_off, void *data_end) > +{ > + struct ipv6hdr *ip6h = data + nh_off; > + > + if (ip6h + 1 > data_end) > + return 0; > + return ip6h->nexthdr; > +} ... > + if (h_proto == htons(ETH_P_IP)) > + index = parse_ipv4(data, nh_off, data_end); > + else if (h_proto == htons(ETH_P_IPV6)) > + index = parse_ipv6(data, nh_off, data_end); > + else > + index = 0; > + > + value = bpf_map_lookup_elem(&dropcnt, &index); > + if (value) > + *value += 1; > + > + if (index == 17) { not an obvious xdp example. if you'd have to respin for other reasons please consider 'proto' name and IPPROTO_UDP here. Acked-by: Alexei Starovoitov <a...@kernel.org>