26 Jul, 2019

2 commits

  • DIM causes to the following warnings during kernel compilation
    which indicates that tx_profile and rx_profile are supposed to
    be declared in *.c and not in *.h files.

    In file included from ./include/rdma/ib_verbs.h:64,
    from ./include/linux/mlx5/device.h:37,
    from ./include/linux/mlx5/driver.h:51,
    from ./include/linux/mlx5/vport.h:36,
    from drivers/infiniband/hw/mlx5/ib_virt.c:34:
    ./include/linux/dim.h:326:1: warning: _tx_profile_ defined but not used [-Wunused-const-variable=]
    326 | tx_profile[DIM_CQ_PERIOD_NUM_MODES][NET_DIM_PARAMS_NUM_PROFILES] = {
    | ^~~~~~~~~~
    ./include/linux/dim.h:320:1: warning: _rx_profile_ defined but not used [-Wunused-const-variable=]
    320 | rx_profile[DIM_CQ_PERIOD_NUM_MODES][NET_DIM_PARAMS_NUM_PROFILES] = {
    | ^~~~~~~~~~

    Fixes: 4f75da3666c0 ("linux/dim: Move implementation to .c files")
    Signed-off-by: Leon Romanovsky
    Reviewed-by: Bart Van Assche
    Acked-by: Saeed Mahameed
    Signed-off-by: David S. Miller

    Leon Romanovsky
     
  • While using net_dim, a dim_sample was used without ever initializing the
    comps value. Added use of DIV_ROUND_DOWN_ULL() to prevent potential
    overflow, it should not be a problem to save the final result in an int
    because after the division by epms the value should not be larger than a
    few thousand.

    [ 1040.127124] UBSAN: Undefined behaviour in lib/dim/dim.c:78:23
    [ 1040.130118] signed integer overflow:
    [ 1040.131643] 134718714 * 100 cannot be represented in type 'int'

    Fixes: 398c2b05bbee ("linux/dim: Add completions count to dim_sample")
    Signed-off-by: Yamin Friedman
    Signed-off-by: Leon Romanovsky
    Acked-by: Saeed Mahameed
    Signed-off-by: David S. Miller

    Yamin Friedman
     

09 Jul, 2019

1 commit

  • 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
    Reviewed-by: Max Gurtovoy
    Reviewed-by: Sagi Grimberg
    Signed-off-by: Saeed Mahameed
    Signed-off-by: Leon Romanovsky
    Signed-off-by: Jason Gunthorpe

    Yamin Friedman
     

26 Jun, 2019

2 commits

  • 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
    Reviewed-by: Max Gurtovoy
    Signed-off-by: Saeed Mahameed

    Yamin Friedman
     
  • Moved all logic from dim.h and net_dim.h to dim.c and net_dim.c.
    This is both more structurally appealing and would allow to only
    expose externally used functions.

    Signed-off-by: Tal Gilboa
    Signed-off-by: Saeed Mahameed

    Tal Gilboa