[pull request][for-next V2 0/7] Generic DIM lib for netdev and RDMA

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Dave, Doug & Jason

This series improves DIM - Dynamically-tuned Interrupt
Moderation- to be generic for netdev and RDMA use-cases.

>From Tal and Yamin:

First 7 patches provide the necessary refactoring to current net_dim
library which affect some net drivers who are using the API.

The last 3 patches provide the RDMA implementation for DIM.
These patches are included in this pull request and they are posted
for review visibility only, they will be handled by the rdma tree later
on in this kernel release.

For more information please see tag log below.

Once we are all happy with the series, please pull to net-next and
rdma-next trees.

v1 for reference: 
(https://marc.info/?l=linux-netdev&m=155977708016030&w=2)

Changes since v2:
- added per ib device configuration knob for rdma-dim (Sagi)
- add NL directives for user-space / rdma tool to configure rdma dim (Sagi/Leon)
- use one header file for DIM implementations (Leon)
- various point changes in the rdma dim related code in the IB core (Leon)
- removed the RDMA specific patches form this pull request\

Thanks,
Saeed.

---
The following changes since commit cd6c84d8f0cdc911df435bb075ba22ce3c605b07:

  Linux 5.2-rc2 (2019-05-26 16:49:19 -0700)

are available in the Git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/saeed/linux.git tags/blk-dim-v2

for you to fetch changes up to 398c2b05bbee21cc172dfff017c0351d4d14e04c:

  linux/dim: Add completions count to dim_sample (2019-06-25 13:46:40 -0700)

----------------------------------------------------------------
Generic DIM

From: Tal Gilboa and Yamin Fridman

Implement net DIM over a generic DIM library, add RDMA DIM

dim.h lib exposes an implementation of the DIM algorithm for
dynamically-tuned interrupt moderation for networking interfaces.

We want a similar functionality for other protocols, which might need to
optimize interrupts differently. Main motivation here is DIM for NVMf
storage protocol.

Current DIM implementation prioritizes reducing interrupt overhead over
latency. Also, in order to reduce DIM's own overhead, the algorithm might
take some time to identify it needs to change profiles. While this is
acceptable for networking, it might not work well on other scenarios.

Here we propose a new structure to DIM. The idea is to allow a slightly
modified functionality without the risk of breaking Net DIM behavior for
netdev. We verified there are no degradations in current DIM behavior with
the modified solution.

Suggested solution:
- Common logic is implemented in lib/dim/dim.c
- Net DIM (existing) logic is implemented in lib/dim/net_dim.c, which uses
  the common logic in dim.c
- Any new DIM logic will be implemented in "lib/dim/new_dim.c".
  This new implementation will expose modified versions of profiles,
  dim_step() and dim_decision().
- DIM API is declared in include/linux/dim.h for all implementations.

Pros for this solution are:
- Zero impact on existing net_dim implementation and usage
- Relatively more code reuse (compared to two separate solutions)
- Increased extensibility

----------------------------------------------------------------
Tal Gilboa (6):
      linux/dim: Move logic to dim.h
      linux/dim: Remove "net" prefix from internal DIM members
      linux/dim: Rename externally exposed macros
      linux/dim: Rename net_dim_sample() to net_dim_update_sample()
      linux/dim: Rename externally used net_dim members
      linux/dim: Move implementation to .c files

Yamin Friedman (1):
      linux/dim: Add completions count to dim_sample

 MAINTAINERS                                        |   3 +-
 drivers/net/ethernet/broadcom/Kconfig              |   1 +
 drivers/net/ethernet/broadcom/bcmsysport.c         |  20 +-
 drivers/net/ethernet/broadcom/bcmsysport.h         |   4 +-
 drivers/net/ethernet/broadcom/bnxt/bnxt.c          |  12 +-
 drivers/net/ethernet/broadcom/bnxt/bnxt.h          |   4 +-
 drivers/net/ethernet/broadcom/bnxt/bnxt_debugfs.c  |   6 +-
 drivers/net/ethernet/broadcom/bnxt/bnxt_dim.c      |   9 +-
 drivers/net/ethernet/broadcom/genet/bcmgenet.c     |  18 +-
 drivers/net/ethernet/broadcom/genet/bcmgenet.h     |   4 +-
 drivers/net/ethernet/mellanox/mlx5/core/Kconfig    |   1 +
 drivers/net/ethernet/mellanox/mlx5/core/en.h       |  10 +-
 drivers/net/ethernet/mellanox/mlx5/core/en_dim.c   |  14 +-
 .../net/ethernet/mellanox/mlx5/core/en_ethtool.c   |   4 +-
 drivers/net/ethernet/mellanox/mlx5/core/en_main.c  |  22 +-
 drivers/net/ethernet/mellanox/mlx5/core/en_txrx.c  |  10 +-
 include/linux/dim.h                                | 366 ++++++++++++++++++
 include/linux/net_dim.h                            | 418 ---------------------
 lib/Kconfig                                        |   8 +
 lib/Makefile                                       |   1 +
 lib/dim/Makefile                                   |   9 +
 lib/dim/dim.c                                      |  83 ++++
 lib/dim/net_dim.c                                  | 190 ++++++++++
 23 files changed, 728 insertions(+), 489 deletions(-)
 create mode 100644 include/linux/dim.h
 delete mode 100644 include/linux/net_dim.h
 create mode 100644 lib/dim/Makefile
 create mode 100644 lib/dim/dim.c
 create mode 100644 lib/dim/net_dim.c




[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Photo]     [Yosemite News]     [Yosemite Photos]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux