Eric Dumazet
93f154b594
net: release dst entry in dev_hard_start_xmit()
...
One point of contention in high network loads is the dst_release() performed
when a transmited skb is freed. This is because NIC tx completion calls
dev_kree_skb() long after original call to dev_queue_xmit(skb).
CPU cache is cold and the atomic op in dst_release() stalls. On SMP, this is
quite visible if one CPU is 100% handling softirqs for a network device,
since dst_clone() is done by other cpus, involving cache line ping pongs.
It seems right place to release dst is in dev_hard_start_xmit(), for most
devices but ones that are virtual, and some exceptions.
David Miller suggested to define a new device flag, set in alloc_netdev_mq()
(so that most devices set it at init time), and carefuly unset in devices
which dont want a NULL skb->dst in their ndo_start_xmit().
List of devices that must clear this flag is :
- loopback device, because it calls netif_rx() and quoting Patrick :
"ip_route_input() doesn't accept loopback addresses, so loopback packets
already need to have a dst_entry attached."
- appletalk/ipddp.c : needs skb->dst in its xmit function
- And all devices that call again dev_queue_xmit() from their xmit function
(as some classifiers need skb->dst) : bonding, vlan, macvlan, eql, ifb, hdlc_fr
Signed-off-by: Eric Dumazet <dada1@cosmosbay.com >
Signed-off-by: David S. Miller <davem@davemloft.net >
2009-05-18 22:19:19 -07:00
..
2009-05-18 15:41:42 -07:00
2009-04-07 10:23:34 +01:00
2009-04-08 17:45:02 -07:00
2009-04-22 16:54:41 -04:00
2009-04-06 07:01:56 -07:00
2009-05-05 12:00:53 -07:00
2009-04-06 09:48:20 -07:00
2009-03-31 15:09:39 +11:00
2009-04-28 18:58:06 +01:00
2009-05-18 21:08:20 -07:00
2009-05-02 16:35:08 -07:00
2009-05-18 21:08:20 -07:00
2009-04-21 00:35:47 -04:00
2009-05-15 14:14:56 -04:00
2009-04-01 08:59:23 -07:00
2009-04-01 08:59:23 -07:00
2009-04-06 08:04:53 -07:00
2009-05-02 15:36:10 -07:00
2009-04-22 08:35:10 +02:00
2009-04-23 10:06:35 +01:00
2009-05-02 16:48:32 -07:00
2009-04-01 08:59:14 -07:00
2009-04-16 07:47:49 -07:00
2009-04-13 08:32:28 -07:00
2009-04-03 15:24:35 -07:00
2009-04-21 13:41:47 -07:00
2009-04-04 14:20:34 -07:00
2009-04-07 09:05:35 -07:00
2009-04-03 14:53:32 -07:00
2009-04-02 19:05:00 -07:00
2009-04-02 19:04:57 -07:00
2009-04-14 11:11:52 +02:00
2009-04-09 00:27:13 +01:00
2009-05-08 19:22:21 -07:00
2009-04-02 19:55:30 +01:00
2009-04-07 08:31:11 -07:00
2009-05-12 14:41:47 -07:00
2009-04-04 10:43:31 +01:00
2009-04-03 14:53:32 -07:00
2009-04-01 15:42:34 -07:00
2009-04-16 16:17:11 -07:00
2009-04-07 08:12:38 +02:00
2009-05-05 12:26:24 -07:00
2009-04-29 17:32:40 -07:00
2009-04-01 08:59:20 -07:00
2009-04-03 11:10:33 -07:00
2009-04-13 15:04:29 -07:00
2009-04-03 12:13:03 +02:00
2009-04-13 15:04:30 -07:00
2009-04-27 02:53:51 -07:00
2009-03-31 23:00:26 -04:00
2009-05-09 10:51:34 -04:00
2009-04-03 16:42:37 +01:00
2009-04-03 16:42:39 +01:00
2009-04-22 13:02:09 +10:00
2009-04-09 05:43:32 +02:00
2009-04-22 08:35:10 +02:00
2009-04-06 01:41:22 +02:00
2009-04-01 21:42:26 +02:00
2009-04-03 09:48:29 -07:00
2009-03-31 14:52:52 +02:00
2009-04-06 18:11:41 -07:00
2009-04-13 17:02:14 +02:00
2009-04-08 14:13:03 +02:00
2009-04-02 19:04:53 -07:00
2009-05-11 15:24:07 -04:00
2009-05-18 22:11:22 -07:00
2009-04-27 03:23:54 -07:00
2009-04-16 02:02:07 -07:00
2009-05-18 22:19:19 -07:00
2009-04-13 15:04:29 -07:00
2009-04-27 19:51:58 -07:00
2009-04-28 09:36:24 -07:00
2009-04-03 21:46:01 +01:00
2009-04-07 14:07:52 -07:00
2009-04-07 08:31:09 -07:00
2009-04-21 13:41:48 -07:00
2009-04-21 13:41:48 -07:00
2009-04-09 10:35:30 -07:00
2009-04-14 07:50:56 -04:00
2009-04-14 10:10:47 -04:00
2009-05-09 10:49:41 -04:00
2009-04-16 16:17:10 -07:00
2009-04-03 12:21:12 +02:00
2009-04-09 07:49:44 -07:00
2009-04-07 08:31:08 -07:00
2009-04-22 13:52:09 +03:00
2009-04-06 16:06:26 +01:00
2009-04-06 16:06:26 +01:00
2009-04-06 16:06:26 +01:00
2009-04-16 15:28:23 -04:00
2009-04-02 19:05:10 -07:00
2009-04-01 08:59:17 -07:00
2009-05-17 21:03:42 -07:00
2009-05-02 15:36:09 -07:00
2009-04-05 11:04:19 -07:00
2009-04-07 08:12:38 +02:00
2009-04-29 17:32:35 -07:00
2009-04-02 19:04:48 -07:00
2009-04-02 19:04:48 -07:00
2009-05-02 15:36:10 -07:00
2009-04-05 10:33:07 -07:00
2009-03-31 23:00:27 -04:00
2009-04-05 11:04:19 -07:00
2009-04-01 07:38:54 -04:00
2009-05-09 10:49:42 -04:00
2009-05-18 15:15:06 -07:00
2009-04-03 17:41:23 -07:00
2009-04-03 16:42:42 +01:00
2009-04-03 16:42:44 +01:00
2009-04-03 16:42:43 +01:00
2009-04-01 13:28:15 -04:00
2009-04-03 17:41:12 -07:00
2009-04-07 08:31:20 -07:00
2009-05-13 15:44:39 -04:00
2009-04-30 15:32:11 +00:00
2009-03-31 23:00:27 -04:00
2009-04-27 02:53:47 -07:00
2009-05-02 15:36:10 -07:00
2009-04-27 02:53:45 -07:00
2009-04-02 19:04:56 -07:00
2009-04-01 08:59:13 -07:00
2009-04-03 16:42:36 +01:00
2009-04-03 16:42:39 +01:00
2009-04-01 08:59:13 -07:00
2009-04-07 08:44:06 -07:00
2009-05-18 21:08:20 -07:00
2009-04-22 15:59:41 -07:00
2009-04-06 11:25:06 -07:00
2009-04-21 19:40:00 -07:00
2009-04-21 19:40:00 -07:00
2009-04-27 02:53:46 -07:00
2009-04-15 12:10:12 +02:00
2009-04-24 08:54:21 +02:00
2009-05-08 19:22:21 -07:00
2009-04-01 08:59:13 -07:00
2009-04-02 19:05:00 -07:00
2009-04-03 12:23:05 +02:00
2009-04-03 12:23:05 +02:00
2009-04-03 12:23:05 +02:00
2009-04-14 11:31:50 +02:00
2009-05-09 10:49:39 -04:00
2009-05-09 10:49:39 -04:00
2009-04-22 16:54:27 -04:00
2009-05-09 10:49:41 -04:00
2009-04-02 19:04:51 -07:00
2009-04-01 08:59:24 -07:00
2009-05-18 22:15:56 -07:00
2009-04-19 10:47:45 -07:00
2009-04-26 09:20:38 -07:00
2009-04-03 12:08:57 +02:00
2009-04-07 08:44:05 -07:00
2009-04-08 14:33:38 -07:00
2009-04-13 15:04:29 -07:00
2009-05-18 22:11:22 -07:00
2009-04-03 12:23:06 +02:00
2009-04-21 19:40:00 -07:00
2009-04-03 12:23:06 +02:00
2009-04-28 01:53:11 -07:00
2009-04-27 02:45:02 -07:00
2009-04-23 04:04:32 -07:00
2009-04-02 19:05:11 -07:00
2009-04-15 12:10:12 +02:00
2009-04-05 10:30:21 -07:00
2009-04-10 15:48:52 +02:00
2009-04-19 20:08:42 +02:00
2009-04-01 08:59:15 -07:00
2009-04-02 19:05:01 -07:00
2009-05-12 14:11:35 -07:00
2009-04-20 02:25:26 -07:00
2009-04-02 19:05:00 -07:00
2009-04-07 08:44:04 -07:00
2009-04-17 10:50:27 -07:00
2009-04-06 21:44:29 -03:00
2009-05-01 15:34:02 -07:00
2009-04-28 02:24:21 -07:00
2009-04-02 19:04:50 -07:00
2009-05-15 11:32:24 +02:00