Message ID | 1542810503-51548-1-git-send-email-talgi@mellanox.com |
---|---|
State | Accepted, archived |
Delegated to: | David Miller |
Headers | show |
Series | [net] net/dim: Update DIM start sample after each DIM iteration | expand |
From: Tal Gilboa <talgi@mellanox.com> Date: Wed, 21 Nov 2018 16:28:23 +0200 > 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> Applied and queued up for -stable.
diff --git a/include/linux/net_dim.h b/include/linux/net_dim.h index c79e859..fd45838 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: