bgpd: remove calls to peer_sort() from fast-path
peer_sort() it's called so much as to be annoying. In the assumption
that the 'sort' of the peer doesn't change during an established session,
I have changed all calls to peer_sort() in the 'fast-path' to only check
the 'sort'. All the calls from the vty and such still recalculate the sort
and store it in the peer.
There's a lot of other calls to peer_sort() that could be changed but some
maube tricky, someone more knowledgeable may try to reduce them.
This hits peer_sort() from 5th out of the stadium^H^H list on a full
internet table loading profiling session.
Signed-off-by: Jorge Boncompte [DTI2] <jorge@dti2.net>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
diff --git a/bgpd/bgp_vty.c b/bgpd/bgp_vty.c
index 03746bd..cb7ff1f 100644
--- a/bgpd/bgp_vty.c
+++ b/bgpd/bgp_vty.c
@@ -4340,7 +4340,7 @@
{
for (ALL_LIST_ELEMENTS (bgp->peer, node, nnode, peer))
{
- if (peer_sort (peer) == BGP_PEER_IBGP)
+ if (peer->sort == BGP_PEER_IBGP)
continue;
if (stype == BGP_CLEAR_SOFT_NONE)
@@ -7781,7 +7781,7 @@
}
/* EBGP Multihop and GTSM */
- if (peer_sort (p) != BGP_PEER_IBGP)
+ if (p->sort != BGP_PEER_IBGP)
{
if (p->gtsm_hops > 0)
vty_out (vty, " External BGP neighbor may be up to %d hops away.%s",