DPDK(10):報文處理中的指令預取(prefetcht0)
阿新 • • 發佈:2019-01-03
在DPDK的例子中報文處理時讀取報文內容時添加了指令預取命令(prefetcht0):
/*
* Read packet from RX queues
*/
for (i = 0; i < qconf->n_rx_port; i++) {
portid = qconf->rx_port_list[i];
nb_rx = rte_eth_rx_burst((uint8_t) portid, 0,
pkts_burst, MAX_PKT_BURST);
port_statistics[portid].rx += nb_rx;
for (j = 0; j < nb_rx; j++) {
m = pkts_burst[j];
rte_prefetch0 (rte_pktmbuf_mtod(m, void *));
l2fwd_simple_forward(m, portid);
}
}
static inline void rte_prefetch0(volatile void *p)
{
asm volatile ("prefetcht0 %[p]" : [p] "+m" (*(volatile char *)p));
}
這條指令主要的作用是人為判斷下面將要處理的記憶體,指示CPU載入到快取中,不過一般需要我們進行實測,向上面這種情況,效能肯定會有提升,一般可以提升10%。
下面是這一系列指令的介紹:轉自http://blog.csdn.net/igame/article/details/1752430