[ofa-general] RNR NAK issues

Pradeep Satyanarayana pradeep at us.ibm.com
Mon Apr 9 18:23:48 PDT 2007


I am wrestling with some RNR NAK issues with the IPOIB CM (NOSRQ) work. I 
find that in ipoib_cm_handle_tx_wc() wc->status is 13 
(IB_WC_RNR_RETRY_EXC_ERR). The sequence of events appears to be the 
following:

1. When the receiver has received ipoib_recvq_size messages, the sender 
receives an RNR NAK execeeded (B_WC_RNR_RETRY_EXC_ERR).
This results in the sender destroying its qp and sending a DREQ message to 
the other end. I find it a little stange that this error occurs even after 
the receive buffers are 
successfully posted to the qp.
2. The application (netperf) continues to send messages and setup happens 
all over again i.e. the qp are recreated.
3. This does not stop the application (infact netperf completes 
successfully) but this behaviour hammers the performance and, the 
throughput drops like a stone.

One of the things that I discovered was that in cm.c 
qp_attr->min_rnr_timer was set to 0. What is the purpose of settng this to 
0? How are drivers expected to use this? I see that mthca does some 
computation.
Probably because of this ( min_rnr_timer = 0) ehca appears to use this 
value and sets it to 0 too.

I hacked to change this value (in cm.c) to a non zero value. This improved 
performance, however I still see the previously mentioned RNR NAK issue. I 
have tried setting .cap.max_recv_wr to values between
ipoib_recvq_size - 2 to ipoib_recvq_size + 1. This seems to make no 
difference.

I tried this with 2.6.21-rc5 as the base. Any suggestions as to what I 
maybe missing? I reworked my earlier patch and eliminted the the #ifdefs 
and incorporated other comments. Other than that it is no difference.

Pradeep
pradeep at us.ibm.com



More information about the general mailing list