From: Yamin Friedman <yaminf@xxxxxxxxxxxx> RDMA DIM implements a different algorithm from net DIM and is based on completions which is how we can implement interrupt moderation in RDMA. The algorithm optimizes for number of completions and ratio between completions and events. In order to avoid long latencies, the implementation performs fast reduction of moderation level when the traffic changes. Signed-off-by: Yamin Friedman <yaminf@xxxxxxxxxxxx> Reviewed-by: Max Gurtovoy <maxg@xxxxxxxxxxxx> Signed-off-by: Saeed Mahameed <saeedm@xxxxxxxxxxxx> Signed-off-by: Leon Romanovsky <leonro@xxxxxxxxxxxx> --- include/linux/dim.h | 36 +++++++++++++++ lib/dim/Makefile | 6 +-- lib/dim/rdma_dim.c | 108 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 146 insertions(+), 4 deletions(-) create mode 100644 lib/dim/rdma_dim.c diff --git a/include/linux/dim.h b/include/linux/dim.h index aa9bdd47a648..1ae32835723a 100644 --- a/include/linux/dim.h +++ b/include/linux/dim.h @@ -82,6 +82,7 @@ struct dim_stats { * @prev_stats: Measured rates from previous iteration (for comparison) * @start_sample: Sampled data at start of current iteration * @work: Work to perform on action required + * @dim_owner: A pointer to the struct that points to dim * @profile_ix: Current moderation profile * @mode: CQ period count mode * @tune_state: Algorithm tuning state (see below) @@ -95,6 +96,7 @@ struct dim { struct dim_sample start_sample; struct dim_sample measuring_sample; struct work_struct work; + void *dim_owner;
This is different than the net consumers that init an embedded dim struct. I imagine that the reason is to not have this dim space in every ib_cq struct? Would suggest to name it to 'priv' or 'dim_priv' Otherwise, Reviewed-by: Sagi Grimberg <sagi@xxxxxxxxxxx>