]> git.proxmox.com Git - ovs.git/commitdiff
netdev-dpdk: Apply batch truncation API.
authorWilliam Tu <u9012063@gmail.com>
Mon, 25 Jul 2016 15:14:24 +0000 (08:14 -0700)
committerDaniele Di Proietto <diproiettod@vmware.com>
Mon, 25 Jul 2016 19:47:20 +0000 (12:47 -0700)
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>
lib/netdev-dpdk.c

index 9a9ac454e31bd3d0c5c26d9ac6b96e48840b6bbd..8ca7af491c8ee5b2135309cc48cd3ad259ceb692 100644 (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);
     }
 
+    dp_packet_batch_apply_cutlen(batch);
+
     for (i = 0; i < batch->count; 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;
         }
 
-        /* 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 */
         memcpy(rte_pktmbuf_mtod(mbufs[newcnt], void *),
                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;
         int cnt = batch->count;
 
+        dp_packet_batch_apply_cutlen(batch);
+
         for (int i = 0; i < cnt; 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 (next_tx_idx != i) {
                     temp_cnt = i - next_tx_idx;