diff mbox series

[net] net/dim: Update DIM start sample after each DIM iteration

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

Commit Message

Tal Gilboa Nov. 21, 2018, 2:28 p.m. UTC
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>
---
 include/linux/net_dim.h | 2 ++
 1 file changed, 2 insertions(+)

Comments

David Miller Nov. 22, 2018, 7:37 p.m. UTC | #1
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 mbox series

Patch

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: