浏览代码

net: mvneta: prefetch next rx descriptor instead of current one

Currently, the mvneta driver tries to prefetch the current Rx
descriptor during read. Tests have shown that prefetching the
next one instead increases general performance by about 1% on
HTTP traffic.

Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Cc: Gregory CLEMENT <gregory.clement@free-electrons.com>
Tested-by: Arnaud Ebalard <arno@natisbad.org>
Signed-off-by: Willy Tarreau <w@1wt.eu>
Signed-off-by: David S. Miller <davem@davemloft.net>
willy tarreau 12 年之前
父节点
当前提交
34e4179df6
共有 1 个文件被更改,包括 1 次插入1 次删除
  1. 1 1
      drivers/net/ethernet/marvell/mvneta.c

+ 1 - 1
drivers/net/ethernet/marvell/mvneta.c

@@ -611,6 +611,7 @@ mvneta_rxq_next_desc_get(struct mvneta_rx_queue *rxq)
 	int rx_desc = rxq->next_desc_to_proc;
 	int rx_desc = rxq->next_desc_to_proc;
 
 
 	rxq->next_desc_to_proc = MVNETA_QUEUE_NEXT_DESC(rxq, rx_desc);
 	rxq->next_desc_to_proc = MVNETA_QUEUE_NEXT_DESC(rxq, rx_desc);
+	prefetch(rxq->descs + rxq->next_desc_to_proc);
 	return rxq->descs + rx_desc;
 	return rxq->descs + rx_desc;
 }
 }
 
 
@@ -1442,7 +1443,6 @@ static int mvneta_rx(struct mvneta_port *pp, int rx_todo,
 		u32 rx_status;
 		u32 rx_status;
 		int rx_bytes, err;
 		int rx_bytes, err;
 
 
-		prefetch(rx_desc);
 		rx_done++;
 		rx_done++;
 		rx_filled++;
 		rx_filled++;
 		rx_status = rx_desc->status;
 		rx_status = rx_desc->status;