aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTal Gilboa <talgi@mellanox.com>2018-11-21 16:28:23 +0200
committerDavid S. Miller <davem@davemloft.net>2018-11-22 11:36:54 -0800
commit0211dda68a4f6531923a2f72d8e8959207f59fba (patch)
tree1c50a0a281fd47b17ed6fe90a99577c51f6b9636
parentnet: faraday: ftmac100: remove netif_running(netdev) check before disabling interrupts (diff)
downloadlinux-dev-0211dda68a4f6531923a2f72d8e8959207f59fba.tar.xz
linux-dev-0211dda68a4f6531923a2f72d8e8959207f59fba.zip
net/dim: Update DIM start sample after each DIM iteration
On every iteration of net_dim, the algorithm may choose to check for the system state by comparing current data sample with previous data sample. After each of these comparison, regardless of the action taken, the sample used as baseline is needed to be updated. This patch fixes a bug that causes DIM to take wrong decisions, due to never updating the baseline sample for comparison between iterations. This way, DIM always compares current sample with zeros. Although this is a functional fix, it also improves and stabilizes performance as the algorithm works properly now. Performance: Tested single UDP TX stream with pktgen: samples/pktgen/pktgen_sample03_burst_single_flow.sh -i p4p2 -d 1.1.1.1 -m 24:8a:07:88:26:8b -f 3 -b 128 ConnectX-5 100GbE packet rate improved from 15-19Mpps to 19-20Mpps. Also, toggling between profiles is less frequent with the fix. Fixes: 8115b750dbcb ("net/dim: use struct net_dim_sample as arg to net_dim") Signed-off-by: Tal Gilboa <talgi@mellanox.com> Reviewed-by: Tariq Toukan <tariqt@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--include/linux/net_dim.h2
1 files changed, 2 insertions, 0 deletions
diff --git a/include/linux/net_dim.h b/include/linux/net_dim.h
index c79e859408e6..fd458389f7d1 100644
--- a/include/linux/net_dim.h
+++ b/include/linux/net_dim.h
@@ -406,6 +406,8 @@ static inline void net_dim(struct net_dim *dim,
}
/* fall through */
case NET_DIM_START_MEASURE:
+ net_dim_sample(end_sample.event_ctr, end_sample.pkt_ctr, end_sample.byte_ctr,
+ &dim->start_sample);
dim->state = NET_DIM_MEASURE_IN_PROGRESS;
break;
case NET_DIM_APPLY_NEW_PROFILE: