hv_netvsc: Set tx_table to equal weight after subchannels open
authorHaiyang Zhang <haiyangz@microsoft.com>
Mon, 14 May 2018 22:32:04 +0000 (15:32 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 25 May 2018 14:17:26 +0000 (16:17 +0200)
[ Commit a6fb6aa3cfa9047b62653dbcfc9bcde6e2272b41 upstream. ]

In some cases, like internal vSwitch, the host doesn't provide
send indirection table updates. This patch sets the table to be
equal weight after subchannels are all open. Otherwise, all workload
will be on one TX channel.

As tested, this patch has largely increased the throughput over
internal vSwitch.

Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/net/hyperv/rndis_filter.c

index addf9f69c58c4712d6c0962daca6c598e0bc6f23..0648eebda829cf14408b103b03913af48dab876d 100644 (file)
@@ -1114,6 +1114,9 @@ void rndis_set_subchannel(struct work_struct *w)
        netif_set_real_num_tx_queues(ndev, nvdev->num_chn);
        netif_set_real_num_rx_queues(ndev, nvdev->num_chn);
 
+       for (i = 0; i < VRSS_SEND_TAB_SIZE; i++)
+               ndev_ctx->tx_table[i] = i % nvdev->num_chn;
+
        rtnl_unlock();
        return;