Skip to content

Commit 98f6d57

Browse files
David Vrabeldavem330
authored andcommitted
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 <[email protected]> [re-based] Signed-off-by: Paul Durrant <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 7c0b1a2 commit 98f6d57

File tree

1 file changed

+14
-1
lines changed
  • drivers/net/xen-netback

1 file changed

+14
-1
lines changed

drivers/net/xen-netback/rx.c

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -399,7 +399,7 @@ static void xenvif_rx_extra_slot(struct xenvif_queue *queue,
399399
BUG();
400400
}
401401

402-
void xenvif_rx_action(struct xenvif_queue *queue)
402+
void xenvif_rx_skb(struct xenvif_queue *queue)
403403
{
404404
struct xenvif_pkt_state pkt;
405405

@@ -425,6 +425,19 @@ void xenvif_rx_action(struct xenvif_queue *queue)
425425
xenvif_rx_complete(queue, &pkt);
426426
}
427427

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+
428441
static bool xenvif_rx_queue_stalled(struct xenvif_queue *queue)
429442
{
430443
RING_IDX prod, cons;

0 commit comments

Comments
 (0)