Skip to content

Commit

Permalink
ipv6: let trace_fib6_table_lookup() dereference the fib table
Browse files Browse the repository at this point in the history
The perf traces for ipv6 routing code show a relevant cost around
trace_fib6_table_lookup(), even if no trace is enabled. This is
due to the fib6_table de-referencing currently performed by the
caller.

Let's the tracing code pay this overhead, passing to the trace
helper the table pointer. This gives small but measurable
performance improvement under UDP flood.

Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Acked-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
Acked-by: David Ahern <dsa@cumulusnetworks.com>
Acked-by: Martin KaFai Lau <kafai@fb.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Paolo Abeni authored and David S. Miller committed Oct 21, 2017
1 parent f730cc9 commit b65f164
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 9 deletions.
6 changes: 3 additions & 3 deletions include/trace/events/fib6.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,9 @@
TRACE_EVENT(fib6_table_lookup,

TP_PROTO(const struct net *net, const struct rt6_info *rt,
u32 tb_id, const struct flowi6 *flp),
struct fib6_table *table, const struct flowi6 *flp),

TP_ARGS(net, rt, tb_id, flp),
TP_ARGS(net, rt, table, flp),

TP_STRUCT__entry(
__field( u32, tb_id )
Expand All @@ -34,7 +34,7 @@ TRACE_EVENT(fib6_table_lookup,
TP_fast_assign(
struct in6_addr *in6;

__entry->tb_id = tb_id;
__entry->tb_id = table->tb6_id;
__entry->oif = flp->flowi6_oif;
__entry->iif = flp->flowi6_iif;
__entry->tos = ip6_tclass(flp->flowlabel);
Expand Down
12 changes: 6 additions & 6 deletions net/ipv6/route.c
Original file line number Diff line number Diff line change
Expand Up @@ -945,7 +945,7 @@ static struct rt6_info *ip6_pol_route_lookup(struct net *net,

rcu_read_unlock();

trace_fib6_table_lookup(net, rt, table->tb6_id, fl6);
trace_fib6_table_lookup(net, rt, table, fl6);

return rt;

Expand Down Expand Up @@ -1682,15 +1682,15 @@ struct rt6_info *ip6_pol_route(struct net *net, struct fib6_table *table,
if (rt == net->ipv6.ip6_null_entry) {
rcu_read_unlock();
dst_hold(&rt->dst);
trace_fib6_table_lookup(net, rt, table->tb6_id, fl6);
trace_fib6_table_lookup(net, rt, table, fl6);
return rt;
} else if (rt->rt6i_flags & RTF_CACHE) {
if (ip6_hold_safe(net, &rt, true)) {
dst_use_noref(&rt->dst, jiffies);
rt6_dst_from_metrics_check(rt);
}
rcu_read_unlock();
trace_fib6_table_lookup(net, rt, table->tb6_id, fl6);
trace_fib6_table_lookup(net, rt, table, fl6);
return rt;
} else if (unlikely((fl6->flowi6_flags & FLOWI_FLAG_KNOWN_NH) &&
!(rt->rt6i_flags & RTF_GATEWAY))) {
Expand Down Expand Up @@ -1726,7 +1726,7 @@ struct rt6_info *ip6_pol_route(struct net *net, struct fib6_table *table,
}

uncached_rt_out:
trace_fib6_table_lookup(net, uncached_rt, table->tb6_id, fl6);
trace_fib6_table_lookup(net, uncached_rt, table, fl6);
return uncached_rt;

} else {
Expand Down Expand Up @@ -1754,7 +1754,7 @@ struct rt6_info *ip6_pol_route(struct net *net, struct fib6_table *table,
}
local_bh_enable();
rcu_read_unlock();
trace_fib6_table_lookup(net, pcpu_rt, table->tb6_id, fl6);
trace_fib6_table_lookup(net, pcpu_rt, table, fl6);
return pcpu_rt;
}
}
Expand Down Expand Up @@ -2195,7 +2195,7 @@ static struct rt6_info *__ip6_route_redirect(struct net *net,

rcu_read_unlock();

trace_fib6_table_lookup(net, rt, table->tb6_id, fl6);
trace_fib6_table_lookup(net, rt, table, fl6);
return rt;
};

Expand Down

0 comments on commit b65f164

Please sign in to comment.