Subject: Re: cm_notify() semantics [was Re: comments on draft-balakrishnan-cm-02.txt]

From: Vern Paxson <[email-masked]>
Date: Wed, 05 Jul 2000 23:16:44 PDT

> I would reckon something like "if a stream hasn't used a grant in one RTT, 
> pretend it's been used up.

That sounds like a good approach to me.

		Vern

---

From: Joe Touch <[email-masked]>
Date: Wed, 12 Jul 2000 13:34:35 -0700

> That sounds like a good approach to me.

Define 'used up' - does that mean that the stream has used the grant,
that the grant returns to the pool for someone else, or that the
grant just disappears and does not return to the pool? 

(they might have different effects on the CM's implementation of
windowing)

Joe

---

From: Hari Balakrishnan <[email-masked]>
Date: Wed, 12 Jul 2000 20:05:41 -0400

> (they might have different effects on the CM's implementation of

Joe,

"used up" means that the stream has sent some data in response to the 
cmapp_send() grant.  If a stream does not send a packet out within a certain 
time of receiving the grant from the CM, it returns to the macroflow pool for 
some other stream to use.

The time constraint of one RTT is too low in general especially over low-RTT 
flows, as a couple of people have pointed out in private email.  I think the 
right approach is for this to be something like max(RTT, 100ms).

Hari

---

From: Joe Touch <[email-masked]>
Date: Wed, 12 Jul 2000 18:04:11 -0700

> some other stream to use.

If the stream hasn't 'sent some data', the pretend it has?
That doesn't make sense - it seems like 

	- grants should have expiration times
		the implication of expiry is that
		- the application MUST NOT send data based on that
		  grant after time has expired
		- the application SHOULD return the grant if it is 
		  not going to use it, before the time has expired

Once time has expired, the CM can issue a local "return" - reusing the
permission locally.
 
> right approach is for this to be something like max(RTT, 100ms).

So the cmapp_send() grant would include an indication of 100ms as the
upperbound
of the grant.

Joe

---

From: Hari Balakrishnan <[email-masked]>
Date: Wed, 12 Jul 2000 22:38:36 -0400

Joe,

You're right.  I was a little careless in one of my previous messages.

The following rules must hold:

	- At most one grant outstanding per stream at any time.
	- Each grant have expiration time = max(RTT, CM_MIN_GRANT) where 
	  CM_MIN_GRANT is an implementation-dependent value (e.g., 100ms)
	- If expired, application MUST NOT send data without another explicit 
	  cm_request()
	- The application SHOULD call cm_notify(stream, 0) if said grant is not 
	  going to be used within expiration time.

Let me know if you disagree.

Should the cmapp_send() API include an explicit time for which the grant is 
valid?  That's what Joe seems to be suggesting, and it seems like a good idea 
to me.

Thoughts?

Hari

---

From: Joe Touch <[email-masked]>
Date: Wed, 12 Jul 2000 20:25:23 -0700

>           going to be used within expiration time.

and
	- the CM MAY (SHOULD? / MUST?) act as if cm_notify(stream, 0) has been
	  called at the end of the expiration time

	(I would say "SHOULD")

> valid?  That's what Joe seems to be suggesting, and it seems like a good idea

(yes, that's what I am suggesting - also,
it could be application-configurable, or
bounded or set by the CM)

Joe