RE: Looking for some insight

"Caitlin Bestler" <[email protected]> Mon, 21 Mar 2005 15:18:33 -0800
Newsgroups gmane.ietf.rddp
Message-ID <[email protected]>
 


________________________________

	From: [email protected] [mailto:[email protected]] On
Behalf Of Barry Reinhold(home)
	Sent: Monday, March 21, 2005 12:47 PM
	To: RDDP
	Subject: [rddp] Looking for some insight
	
	

	While looking at the design of some conformance tests a couple
of issues have come up:

	 

	 

	Item 5 in clause 10.2.1 states:

	 

	     " 5.  An RNIC MUST provide a mechanism for the ULP to
establish and 

	          revoke read, write, or read and write access to the
ULP Buffer 

	          referenced by an STag. "

	 

	 

	I am unclear as to the intent of this statement. Is it stating
that the RNIC must provide the ULP with the ability to revoke read and
write access independent of the revoking of the association between an
Stag and a buffer?  

	 

	In particular, if I have Stag 1 which was allocated with write
access, must the RNIC provide an interface that allows the ULP to change
the access granted through Stag 1 to just "read" ? (i.e. a mechanism in
addition to revoking Stag access and allocating a new Stag with read
access)

I believe the intended syntax if "for the ULP to establish and revoke"
<read,write or read and write access>
 
As was briefly touched upon during the security discussions as to
whether IPSEC was required, one
characteristic of virtually all current local interfaces is that STags
never change from meaning A to
meaning B. You go from meaning A to invalid and *then* to meaning B.
 

	 

	Is memory associated to a Stag TO pair, or just a Stag? A buffer
appears to be defined by both the Stag and the TO, so is it possible for
the RNIC interface to return (STAG=100, TO =0), associating a buffer to
a (STAG, TO) and then return (STAG=100, TO= 500) for another buffer?
(Assuming this did not violate any length constraints) 

	 

Yes, an application can create a memory region or window enabled for
remote access and then advertise
multiple buffers within it. Each time it advertises a buffer it is
guaranteeing to its peer that it has enabled
access to all bytes within advertised buffers. It is not guaranteeing
that it enabled no other access, but
if its peer is totally ULP compliant this fact would never be relevant.
[Hint: that's a good reason why you
generally want to use one window/one buffer. But that's advice to
implementers, not something that a
wire validator can rely upon.]
 
As far as the wire protocol goes, the STag is deliberately confusing, I
mean flexible.
 
The STag defines a context in which the TO is interpreted. If the STag
state has not changed, a given TO
translates to the same byte in target memory consistently.
 
The ULP is allowed to advertise a range of Target Offsets as a "buffer",
and each of <n> bytes within a range
reference a distinct byte in target memory. Presumably they are also
somehow ordered in target memory.
 
The ULP is guarnateed the ability to create a valid range within an
STag. It would be legal, although highly
unlikely, for a local interface to enable multiple valid ranges on a
single STag. The only rationale I have seen
for such a scenario would be to do a ring buffer within an STag -- in
which case the enabled section (which 
is conceptually one range) might look like two ranges to hardware that
did not understand that it was a 
ring buffer.

 

	 

	Item 6 in clause 10.2.1 states:

	 

	      6.  An RNIC MUST ensure that the network interface can no
longer 

	          modify an advertised buffer after the ULP revokes
remote 

	          access rights for an STag.

	 

	The actual wording makes no assertion about what happens to READ
access via the network interface to a buffer once the ULP revokes remote
access rights. I am assuming the intent of this is really type of
access. (I think this is a editorial issue and "modify" should be
replaced by a more general terms)\ 

	 

I would agree, it falls under the general principle that the RDMA
implemenation
makes *no* memory access that has not been authorized. 

	 

	 

	Item 7 in clause 10.2.1 states:

	 

	     7.  An RNIC MUST ensure that a Remote Peer is not able to 

	          invalidate an STag enabled for remote access, if the
STag is 

	          shared on multiple streams.

	 

	What is the expected behavior of the RNIC when its remote peer
attempts to invalidate a Stag that is valid within the context of two
streams? The draft does not indicate what the actual behavior is - I am
assuming that the RNIC will terminate the stream. Is this correct? 

	 

My reading was that this qualifies as a remote access violation. 

	 

	 

	Item 8 in clause 10.2.1 states:

	 

	      8.  An RNIC MUST choose the value of STags in a way
difficult to 

	          predict. It is RECOMMENDED to sparsely populate them
over the 

	          full range available.  

	 

	Is the "full range" a reference to the bits available in the
fields used to describe the Stag (i.e. the Stags should range over 32
bits from 0 to 2^32 -1) or is it some vendor specific range?

	 

	 

	Item 11 in clause 10.2.1 states:

	 

	      11. An RNIC implementation SHOULD provide a mechanism to
cap the 

	          number of outstanding RDMA Read Requests.

	 

	Does "cap" imply that the ULP API must provide the ability to
define and hence "cap" the number of outstanding READ requests that the
RNIC will accept from the ULP, or does CAP imply that, whatever the
limit is (lets say 16) then the RNIC will ensure that there are never
more than 16 READ REQUEST as compared to READ REPLIES (as seen on the
wire)?

_______________________________________________
rddp mailing list
[email protected]
https://www1.ietf.org/mailman/listinfo/rddp