[ofa-general] [Bug report / partial patch] OFED 1.3 send max_sge lower than reported by ib_query_device

Roland Dreier rdreier at cisco.com
Wed Sep 26 13:02:44 PDT 2007


 > 1) ib_create_qp() fails with max_sge 
 >   If you use ib_query_device() to return the device specific 
 > attribute max_sge, it seems reasonable to expect you can create
 > a QP with max_send_sge=max_sge.  The problem is that this often
 > fails.
 > 
 >   The reason is that depending on the QP type (RC, UD, etc.) and
 > how the QP will be used (send, RDMA, atomic, etc.), there can be
 > extra segments required in the WQE that eat up SGE entries.  So
 > while some send WQE might have max_sge available SGEs, many will
 > not.

 >   This issue may need API extensions to definitively resolve.  In
 > the short term, it would be very nice if max_sge reported by 
 > ib_query_device() could always return a value that ib_create_qp()
 > could use.  Think of it as the minimum max_send_sge value that
 > will work for all QP types.

The intention is that any attempt to create a QP with the maximum
number of S/G entries as reported by query device should succeed.
However, as you note there may be issues that make this fail, but I
would consider them as bugs to be fixed.

You mention API extensions to handle this -- do you have any concrete
ideas?  In the past we've talked a little about this, but I don't
think anyone has suggested any changes that would help matters while
still keeping the API no more complex than it already is.

 >   The recent patch to support shrinking WQEs introduces a 
 > behavior that creates a big difference between the mlx4 
 > supported send SGEs (checked against 61, should be 59 or 60,
 > and reported in ib_query_device as 32 to equal receive side
 > max_rq_sg value).  

I'm not sure I understand this.  What's the new behavior?

Are you trying to take advantage of the fact that using non-power-of-2
size send WQEs would let you have a send queue with more than 32 S/G
entries?  I think doing that actually would require a change in the
API to allow different values for max_sge_rq and max_sge_sq to be
reported from ib_query_device().  Which in turn would break the
userspace ABI, etc, etc. and leaves me wondering if it's really worth it.

(BTW I hate the "shrinking WQE" terminology for this, although
obviously you weren't the one to introduce it)

 - R.



More information about the general mailing list