ipv4: Cache local output routes
authorYan, Zheng <zheng.z.yan@intel.com>
Sun, 12 Aug 2012 20:09:59 +0000 (20:09 +0000)
committerDavid S. Miller <davem@davemloft.net>
Tue, 14 Aug 2012 21:45:07 +0000 (14:45 -0700)
Commit caacf05e5ad1abf causes big drop of UDP loop back performance.
The cause of the regression is that we do not cache the local output
routes. Each time we send a datagram from unconnected UDP socket,
the kernel allocates a dst_entry and adds it to the rt_uncached_list.
It creates lock contention on the rt_uncached_lock.

Reported-by: Alex Shi <alex.shi@intel.com>
Signed-off-by: Yan, Zheng <zheng.z.yan@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv4/route.c

index e4ba974f143c5dab196bf8671b64be5b155d55cf..fd9ecb52c66bf8815c09e678c452017e9a7e2122 100644 (file)
@@ -2028,7 +2028,6 @@ struct rtable *__ip_route_output_key(struct net *net, struct flowi4 *fl4)
                }
                dev_out = net->loopback_dev;
                fl4->flowi4_oif = dev_out->ifindex;
-               res.fi = NULL;
                flags |= RTCF_LOCAL;
                goto make_route;
        }