diff options
author | David Vrabel <david.vrabel@citrix.com> | 2016-10-04 05:29:16 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2016-10-06 20:37:36 -0400 |
commit | 98f6d57ced73b723551568262019f1d6c8771f20 (patch) | |
tree | cc8cc59b8b34aed750dd8c020fbd31dca62165af | |
parent | 7c0b1a23e6f983fe392c8ffa71d05189ae52ebb5 (diff) |
xen-netback: process guest rx packets in batches
Instead of only placing one skb on the guest rx ring at a time, process
a batch of up-to 64. This improves performance by ~10% in some tests.
Signed-off-by: David Vrabel <david.vrabel@citrix.com>
[re-based]
Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | drivers/net/xen-netback/rx.c | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/drivers/net/xen-netback/rx.c b/drivers/net/xen-netback/rx.c index 95487091763c..ae822b8fa76d 100644 --- a/drivers/net/xen-netback/rx.c +++ b/drivers/net/xen-netback/rx.c | |||
@@ -399,7 +399,7 @@ static void xenvif_rx_extra_slot(struct xenvif_queue *queue, | |||
399 | BUG(); | 399 | BUG(); |
400 | } | 400 | } |
401 | 401 | ||
402 | void xenvif_rx_action(struct xenvif_queue *queue) | 402 | void xenvif_rx_skb(struct xenvif_queue *queue) |
403 | { | 403 | { |
404 | struct xenvif_pkt_state pkt; | 404 | struct xenvif_pkt_state pkt; |
405 | 405 | ||
@@ -425,6 +425,19 @@ void xenvif_rx_action(struct xenvif_queue *queue) | |||
425 | xenvif_rx_complete(queue, &pkt); | 425 | xenvif_rx_complete(queue, &pkt); |
426 | } | 426 | } |
427 | 427 | ||
428 | #define RX_BATCH_SIZE 64 | ||
429 | |||
430 | void xenvif_rx_action(struct xenvif_queue *queue) | ||
431 | { | ||
432 | unsigned int work_done = 0; | ||
433 | |||
434 | while (xenvif_rx_ring_slots_available(queue) && | ||
435 | work_done < RX_BATCH_SIZE) { | ||
436 | xenvif_rx_skb(queue); | ||
437 | work_done++; | ||
438 | } | ||
439 | } | ||
440 | |||
428 | static bool xenvif_rx_queue_stalled(struct xenvif_queue *queue) | 441 | static bool xenvif_rx_queue_stalled(struct xenvif_queue *queue) |
429 | { | 442 | { |
430 | RING_IDX prod, cons; | 443 | RING_IDX prod, cons; |