alistair23-linux/include/rdma
Mike Marciniszyn 14553ca110 staging/rdma/hfi1: Adaptive PIO for short messages
The change requires a new pio_busy field in the iowait structure to
track the number of outstanding pios.  The new counter together
with the sdma counter serve as the basis for a packet by packet decision
as to which egress mechanism to use.  Since packets given to different
egress mechanisms are not ordered, this scheme will preserve the order.

The iowait drain/wait mechanisms are extended for a pio case.  An
additional qp wait flag is added for the PIO drain wait case.

Currently the only pio wait is for buffers, so the no_bufs_available()
routine name is changed to pio_wait() and a third argument is passed
with one of the two pio wait flags to generalize the routine.  A module
parameter is added to hold a configurable threshold. For now, the
module parameter is zero.

A heuristic routine is added to return the func pointer of the proper
egress routine to use.

The heuristic is as follows:
- SMI always uses pio
- GSI,UD qps <= threshold use pio
- UD qps > threadhold use sdma
  o No coordination with sdma is required because order is not required
    and this qp pio count is not maintained for UD
- RC/UC ONLY packets <= threshold chose as follows:
  o If sdmas pending, use SDMA
  o Otherwise use pio and enable the pio tracking count at
    the time the pio buffer is allocated
- RC/UC ONLY packets > threshold use SDMA
  o If pio's are pending the pio_wait with the new wait flag is
    called to delay for pios to drain

The threshold is potentially reduced by the QP's mtu.

The sc_buffer_alloc() has two additional args (a callback, a void *)
which are exploited by the RC/UC cases to pass a new complete routine
and a qp *.

When the shadow ring completes the credit associated with a packet,
the new complete routine is called.  The verbs_pio_complete() will then
decrement the busy count and trigger any drain waiters in qp destroy
or reset.

Reviewed-by: Jubin John <jubin.john@intel.com>
Reviewed-by: Dennis Dalessandro <dennis.dalessandro@intel.com>
Signed-off-by: Mike Marciniszyn <mike.marciniszyn@intel.com>
Signed-off-by: Doug Ledford <dledford@redhat.com>
2016-03-10 20:38:14 -05:00
..
ib.h
ib_addr.h IB/core: Use hop-limit from IP stack for RoCE 2016-01-19 15:26:56 -05:00
ib_cache.h IB/core: Add gid_type to gid attribute 2015-12-23 10:35:10 -05:00
ib_cm.h IB/cm: Remove compare_data checks 2015-08-30 15:48:24 -04:00
ib_fmr_pool.h
ib_mad.h IB/mad: pass ib_mad_send_buf explicitly to the recv_handler 2016-01-19 15:25:36 -05:00
ib_marshall.h
ib_pack.h IB/mlx4: Enable send of RoCE QP1 packets with IP/UDP headers 2016-01-19 15:35:01 -05:00
ib_pma.h IB/core: Display extended counter set if available 2015-12-23 15:58:30 -05:00
ib_sa.h IB/cma: Join and leave multicast groups with IGMP 2015-12-23 10:39:53 -05:00
ib_smi.h IB/core: Move SM class defines from ib_mad.h to ib_smi.h 2015-09-03 15:50:32 -04:00
ib_umem.h
ib_umem_odp.h
ib_verbs.h IB/rdmavt: Break rdma_vt main include header file up 2016-03-10 20:37:14 -05:00
iw_cm.h RDMA/iw_cm: Export tos field to iwarp providers 2015-06-02 09:22:30 -04:00
iw_portmap.h RDMA/core: Enable the iWarp Port Mapper to provide the actual address of the connecting peer to its clients 2015-05-05 09:18:01 -04:00
opa_port_info.h staging/rdma/hfi1, IB/core: Fix LinkDownReason define for consistency 2016-03-10 20:37:59 -05:00
opa_smi.h IB/core: Add core header changes needed for OPA 2015-08-28 22:54:50 -04:00
rdma_cm.h IB/core, cma: Make __attribute_const__ declarations sparse-friendly 2015-10-30 17:57:49 -04:00
rdma_cm_ib.h
rdma_netlink.h IB/core: Add rdma netlink helper functions 2015-08-30 18:12:25 -04:00
rdma_vt.h IB/rdmavt: Remove unnecessary exported functions 2016-03-10 20:38:10 -05:00
rdmavt_cq.h IB/rdmavt: Add completion queue functions 2016-03-10 20:37:24 -05:00
rdmavt_mr.h IB/rdmavt: Fix copyright date 2016-03-10 20:37:27 -05:00
rdmavt_qp.h staging/rdma/hfi1: Adaptive PIO for short messages 2016-03-10 20:38:14 -05:00