summaryrefslogtreecommitdiffstats
path: root/lib/dim
diff options
context:
space:
mode:
authorYamin Friedman <yaminf@mellanox.com>2018-11-22 09:51:17 +0200
committerSaeed Mahameed <saeedm@mellanox.com>2019-06-25 13:46:40 -0700
commit398c2b05bbee21cc172dfff017c0351d4d14e04c (patch)
tree46dc79312713a53112b23868f22d1cda3c932e9a /lib/dim
parent4f75da3666c0c572967729a2401ac650be5581b6 (diff)
downloadlinux-stable-398c2b05bbee21cc172dfff017c0351d4d14e04c.tar.gz
linux-stable-398c2b05bbee21cc172dfff017c0351d4d14e04c.tar.bz2
linux-stable-398c2b05bbee21cc172dfff017c0351d4d14e04c.zip
linux/dim: Add completions count to dim_sample
Added a measurement of completions per/msec to allow for completion based dim algorithms. In order to use dynamic interrupt moderation with RDMA we need to have a different measurment than packets per second. This change is meant to prepare for adding a new DIM method. All drivers that use net_dim and thus do not need a completion count will have the completions set to 0. Signed-off-by: Yamin Friedman <yaminf@mellanox.com> Reviewed-by: Max Gurtovoy <maxg@mellanox.com> Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
Diffstat (limited to 'lib/dim')
-rw-r--r--lib/dim/dim.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/lib/dim/dim.c b/lib/dim/dim.c
index 17d5236759bd..439d641ec796 100644
--- a/lib/dim/dim.c
+++ b/lib/dim/dim.c
@@ -62,6 +62,8 @@ void dim_calc_stats(struct dim_sample *start, struct dim_sample *end,
u32 npkts = BIT_GAP(BITS_PER_TYPE(u32), end->pkt_ctr, start->pkt_ctr);
u32 nbytes = BIT_GAP(BITS_PER_TYPE(u32), end->byte_ctr,
start->byte_ctr);
+ u32 ncomps = BIT_GAP(BITS_PER_TYPE(u32), end->comp_ctr,
+ start->comp_ctr);
if (!delta_us)
return;
@@ -70,5 +72,12 @@ void dim_calc_stats(struct dim_sample *start, struct dim_sample *end,
curr_stats->bpms = DIV_ROUND_UP(nbytes * USEC_PER_MSEC, delta_us);
curr_stats->epms = DIV_ROUND_UP(DIM_NEVENTS * USEC_PER_MSEC,
delta_us);
+ curr_stats->cpms = DIV_ROUND_UP(ncomps * USEC_PER_MSEC, delta_us);
+ if (curr_stats->epms != 0)
+ curr_stats->cpe_ratio =
+ (curr_stats->cpms * 100) / curr_stats->epms;
+ else
+ curr_stats->cpe_ratio = 0;
+
}
EXPORT_SYMBOL(dim_calc_stats);