linux/drivers/net
Hariprasad Shenai 7730b4c7e3 cxgb4/iw_cxgb4: work request logging feature
This commit enhances the iwarp driver to optionally keep a log of rdma
work request timining data for kernel mode QPs.  If iw_cxgb4 module option
c4iw_wr_log is set to non-zero, each work request is tracked and timing
data maintained in a rolling log that is 4096 entries deep by default.
Module option c4iw_wr_log_size_order allows specifing a log2 size to use
instead of the default order of 12 (4096 entries). Both module options
are read-only and must be passed in at module load time to set them. IE:

modprobe iw_cxgb4 c4iw_wr_log=1 c4iw_wr_log_size_order=10

The timing data is viewable via the iw_cxgb4 debugfs file "wr_log".
Writing anything to this file will clear all the timing data.
Data tracked includes:

- The host time when the work request was posted, just before ringing
the doorbell.  The host time when the completion was polled by the
application.  This is also the time the log entry is created.  The delta
of these two times is the amount of time took processing the work request.

- The qid of the EQ used to post the work request.

- The work request opcode.

- The cqe wr_id field.  For sq completions requests this is the swsqe
index.  For recv completions this is the MSN of the ingress SEND.
This value can be used to match log entries from this log with firmware
flowc event entries.

- The sge timestamp value just before ringing the doorbell when
posting,  the sge timestamp value just after polling the completion,
and CQE.timestamp field from the completion itself.  With these three
timestamps we can track the latency from post to poll, and the amount
of time the completion resided in the CQ before being reaped by the
application.  With debug firmware, the sge timestamp is also logged by
firmware in its flowc history so that we can compute the latency from
posting the work request until the firmware sees it.

Signed-off-by: Steve Wise <swise@opengridcomputing.com>
Signed-off-by: Hariprasad Shenai <hariprasad@chelsio.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2014-07-15 16:25:16 -07:00
..
appletalk
arcnet net: set name_assign_type in alloc_netdev() 2014-07-15 16:12:48 -07:00
bonding net: set name_assign_type in alloc_netdev() 2014-07-15 16:12:48 -07:00
caif net: set name_assign_type in alloc_netdev() 2014-07-15 16:12:48 -07:00
can net: set name_assign_type in alloc_netdev() 2014-07-15 16:12:48 -07:00
cris
dsa net: dsa: update DSA drivers to use ds_to_priv 2014-04-30 13:31:25 -04:00
ethernet cxgb4/iw_cxgb4: work request logging feature 2014-07-15 16:25:16 -07:00
fddi defxx: Fix issues with debug printk calls 2014-07-08 15:31:52 -07:00
hamradio net: set name_assign_type in alloc_netdev() 2014-07-15 16:12:48 -07:00
hippi
hyperv hyperv: Add netpoll support 2014-07-09 16:52:49 -07:00
ieee802154 net: set name_assign_type in alloc_netdev() 2014-07-15 16:12:48 -07:00
irda drivers/net/irda/kingsun-sir.c: remove null test before kfree 2014-06-19 21:26:06 -07:00
phy dp83640: Adjust ptp event timestamps 2014-07-11 14:05:15 -07:00
plip
ppp net: set name_assign_type in alloc_netdev() 2014-07-15 16:12:48 -07:00
slip net: set name_assign_type in alloc_netdev() 2014-07-15 16:12:48 -07:00
team Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2014-06-03 23:32:12 -07:00
usb net: set name_assign_type in alloc_netdev() 2014-07-15 16:12:48 -07:00
vmxnet3 vmxnet3: adjust ring sizes when interface is down 2014-06-16 21:26:40 -07:00
wan net: set name_assign_type in alloc_netdev() 2014-07-15 16:12:48 -07:00
wimax net: set name_assign_type in alloc_netdev() 2014-07-15 16:12:48 -07:00
wireless net: set name_assign_type in alloc_netdev() 2014-07-15 16:12:48 -07:00
xen-netback net: set name_assign_type in alloc_netdev() 2014-07-15 16:12:48 -07:00
dummy.c net: set name_assign_type in alloc_netdev() 2014-07-15 16:12:48 -07:00
eql.c net: set name_assign_type in alloc_netdev() 2014-07-15 16:12:48 -07:00
ifb.c net: set name_assign_type in alloc_netdev() 2014-07-15 16:12:48 -07:00
Kconfig vxlan: Call udp_sock_create 2014-07-14 16:12:15 -07:00
LICENSE.SRC
loopback.c net: set name_assign_type in alloc_netdev() 2014-07-15 16:12:48 -07:00
macvlan.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2014-06-11 16:02:55 -07:00
macvtap.c mactap: Fix checksum errors for non-gso packets in bridge mode 2014-04-30 16:12:22 -04:00
Makefile
mdio.c
mii.c
netconsole.c
nlmon.c
ntb_netdev.c net: use ethtool_cmd_speed_set helper to set ethtool speed value 2014-06-06 16:24:07 -07:00
rionet.c net: get rid of SET_ETHTOOL_OPS 2014-05-13 17:43:20 -04:00
sb1000.c
Space.c
sungem_phy.c
tun.c net: set name_assign_type in alloc_netdev() 2014-07-15 16:12:48 -07:00
veth.c net: rtnetlink - make create_link take name_assign_type 2014-07-15 16:13:07 -07:00
virtio_net.c net: get rid of SET_ETHTOOL_OPS 2014-05-13 17:43:20 -04:00
vxlan.c vxlan: Call udp_sock_create 2014-07-14 16:12:15 -07:00
xen-netfront.c xen-netfront: recreate queues correctly when reconnecting 2014-06-21 16:14:26 -07:00