2
0
mirror of https://github.com/openvswitch/ovs synced 2025-08-31 14:25:26 +00:00

netdev-dpdk: Apply batch truncation API.

Instead of looping into each packet and check whether to truncate, the
patch moves it out of the loop and uses batch API.  If truncation is
not set, checking 'trunc' in 'struct dp_packet_batch' at per-batch basis
can skip the per-packet checking overhead.

Signed-off-by: William Tu <u9012063@gmail.com>
Acked-by: Daniele Di Proietto <diproiettod@vmware.com>
This commit is contained in:
William Tu
2016-07-25 08:14:24 -07:00
committed by Daniele Di Proietto
parent 38c4437843
commit 7d6d1a40dc

View File

@@ -1411,6 +1411,8 @@ dpdk_do_tx_copy(struct netdev *netdev, int qid, struct dp_packet_batch *batch)
ovs_mutex_lock(&nonpmd_mempool_mutex); ovs_mutex_lock(&nonpmd_mempool_mutex);
} }
dp_packet_batch_apply_cutlen(batch);
for (i = 0; i < batch->count; i++) { for (i = 0; i < batch->count; i++) {
int size = dp_packet_size(batch->packets[i]); int size = dp_packet_size(batch->packets[i]);
@@ -1429,10 +1431,6 @@ dpdk_do_tx_copy(struct netdev *netdev, int qid, struct dp_packet_batch *batch)
break; break;
} }
/* Cut the size so only the truncated size is copied. */
size -= dp_packet_get_cutlen(batch->packets[i]);
dp_packet_reset_cutlen(batch->packets[i]);
/* We have to do a copy for now */ /* We have to do a copy for now */
memcpy(rte_pktmbuf_mtod(mbufs[newcnt], void *), memcpy(rte_pktmbuf_mtod(mbufs[newcnt], void *),
dp_packet_data(batch->packets[i]), size); dp_packet_data(batch->packets[i]), size);
@@ -1506,12 +1504,11 @@ netdev_dpdk_send__(struct netdev_dpdk *dev, int qid,
unsigned int temp_cnt = 0; unsigned int temp_cnt = 0;
int cnt = batch->count; int cnt = batch->count;
dp_packet_batch_apply_cutlen(batch);
for (int i = 0; i < cnt; i++) { for (int i = 0; i < cnt; i++) {
int size = dp_packet_size(batch->packets[i]); int size = dp_packet_size(batch->packets[i]);
size -= dp_packet_get_cutlen(batch->packets[i]);
dp_packet_set_size(batch->packets[i], size);
if (OVS_UNLIKELY(size > dev->max_packet_len)) { if (OVS_UNLIKELY(size > dev->max_packet_len)) {
if (next_tx_idx != i) { if (next_tx_idx != i) {
temp_cnt = i - next_tx_idx; temp_cnt = i - next_tx_idx;