mirror of
https://github.com/adulau/aha.git
synced 2024-12-28 11:46:19 +00:00
sky2: no recycling
Recycling turns out to be a bad idea! For most use cases, the packet can not be reused: TCP packets are cloned. Even for the ideal case of forwarding, it hurts performance because of CPU ping/pong. On a multi-core system forwarding of 64 byte packets is worse much worse: recycling = 24% forwarded vs no recycling = 42% forwarded Signed-off-by: Stephen Hemminger <shemminger@vyatta.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
6b84dacadb
commit
724b694225
2 changed files with 3 additions and 14 deletions
|
@ -1177,7 +1177,6 @@ static void sky2_rx_clean(struct sky2_port *sky2)
|
|||
re->skb = NULL;
|
||||
}
|
||||
}
|
||||
skb_queue_purge(&sky2->rx_recycle);
|
||||
}
|
||||
|
||||
/* Basic MII support */
|
||||
|
@ -1269,10 +1268,8 @@ static struct sk_buff *sky2_rx_alloc(struct sky2_port *sky2)
|
|||
struct sk_buff *skb;
|
||||
int i;
|
||||
|
||||
skb = __skb_dequeue(&sky2->rx_recycle);
|
||||
if (!skb)
|
||||
skb = netdev_alloc_skb(sky2->netdev, sky2->rx_data_size
|
||||
+ sky2_rx_pad(sky2->hw));
|
||||
skb = netdev_alloc_skb(sky2->netdev,
|
||||
sky2->rx_data_size + sky2_rx_pad(sky2->hw));
|
||||
if (!skb)
|
||||
goto nomem;
|
||||
|
||||
|
@ -1364,8 +1361,6 @@ static int sky2_rx_start(struct sky2_port *sky2)
|
|||
|
||||
sky2->rx_data_size = size;
|
||||
|
||||
skb_queue_head_init(&sky2->rx_recycle);
|
||||
|
||||
/* Fill Rx ring */
|
||||
for (i = 0; i < sky2->rx_pending; i++) {
|
||||
re = sky2->rx_ring + i;
|
||||
|
@ -1776,12 +1771,7 @@ static void sky2_tx_complete(struct sky2_port *sky2, u16 done)
|
|||
dev->stats.tx_packets++;
|
||||
dev->stats.tx_bytes += skb->len;
|
||||
|
||||
if (skb_queue_len(&sky2->rx_recycle) < sky2->rx_pending
|
||||
&& skb_recycle_check(skb, sky2->rx_data_size
|
||||
+ sky2_rx_pad(sky2->hw)))
|
||||
__skb_queue_head(&sky2->rx_recycle, skb);
|
||||
else
|
||||
dev_kfree_skb_any(skb);
|
||||
dev_kfree_skb_any(skb);
|
||||
|
||||
sky2->tx_next = RING_NEXT(idx, sky2->tx_ring_size);
|
||||
}
|
||||
|
|
|
@ -2032,7 +2032,6 @@ struct sky2_port {
|
|||
u16 rx_pending;
|
||||
u16 rx_data_size;
|
||||
u16 rx_nfrags;
|
||||
struct sk_buff_head rx_recycle;
|
||||
|
||||
#ifdef SKY2_VLAN_TAG_USED
|
||||
u16 rx_tag;
|
||||
|
|
Loading…
Reference in a new issue