RE: [sv-ec] Strict FIFO ordering of mailboxes try_put/try_get

From: Stuart Sutherland <stuart_at_.....>
Date: Wed Feb 14 2007 - 10:21:29 PST
Dave,

I mixed up Semaphores with Mailboxes when I posted my message, but I need to
do a little research, because semaphores and mailboxes might have the same
behavior, anyway.

With semaphores, lets assume as an example that the bucket has 2 keys
available.  A get(3) request will go into the get FIFO waiting for enough
keys.  Another get(3) request will also go into the FIFO.  But then, a
get(2) request can come in, and immediately get its keys, even though other
requests are queued up in the FIFO.  This is not a true FIFO behavior for
requesting keys.  This is the unexpected behavior I was thinking of when I
posted my agreement that users expect all get() requests to have FIFO
behavior, and are caught by surprise with SV's odd definition of a semaphore
FIFO.

Stu
~~~~~~~~~~~~~~~~~~~~~~~~~
Stuart Sutherland
Sutherland HDL, Inc.
stuart@sutherland-hdl.com
503-692-0898
 

> -----Original Message-----
> From: owner-sv-ec@server.eda.org 
> [mailto:owner-sv-ec@server.eda.org] On Behalf Of Rich, Dave
> Sent: Wednesday, February 14, 2007 12:35 AM
> Cc: sv-ec@server.eda-stds.org
> Subject: RE: [sv-ec] Strict FIFO ordering of mailboxes try_put/try_get
> 
> OK, I see there are lots of misunderstandings.
> 
> First of all, to define a bounded mailbox, you need three queues.
> 
> There is the queue that holds the data, or the contents of 
> the mailbox.
> The FIFO ordering of that queue guarantees that the first 
> piece of data
> to be placed into the mailbox by a completed put/try_put will be the
> first to be received from the mailbox by a successful get/try_get.
> Completion means the blocking put/get returns (unblocks) or the
> try_put/try_get returns true.
> 
> When the mailbox if full, there is a queue of processes suspended on a
> blocking put. That queue guarantees that a put completes in the same
> order that they are suspended. That queue and the data queue 
> give us the
> strict FIFO ordering for puts. Similarly, there is a third queue of
> processes suspended on a blocking get when the mailbox is empty.
> 
> The problem is not with multiple blocking puts/gets or multiple
> non-blocking try_puts/try_gets. The problem comes in when you start
> mixing blocking puts with non-blocking try_puts or mixing 
> blocking gets
> with non-blocking try_gets. Look at this example which is a
> simplification of a more complex example:
> 
> mailbox #(int) mb = new(.bound(1));
> int t;
> initial 
> 	begin
> 		fork
> 			mb.get(t);
> 		join_none
> 		#1 // some delay
> 		mb.put(123);
> 		void'(mb.try_get(t));
> 		assert(mb.num()==0); //this should never fail
> 	end
> 
> 
> If you accept that try_get() succeeds if and only if the size of the
> mailbox is greater than 0, then you must also accept that try_get()
> intercepts a suspended blocking get.
> 
> 
> Dave
> 
>      
> 
> > -----Original Message-----
> > From: Arturo Salz [mailto:Arturo.Salz@synopsys.com]
> > Sent: Tuesday, February 13, 2007 8:18 PM
> > To: stuart@sutherland-hdl.com; Neil.Korpusik@Sun.com; Rich, Dave
> > Cc: sv-ec@eda-stds.org
> > Subject: RE: [sv-ec] Strict FIFO ordering of mailboxes 
> try_put/try_get
> > 
> > Stu,
> > 
> > Based on your feedback and Neil's, I think I misunderstood Dave's
> point.
> > The queue maintained by the mailbox *should* be FIFO, which 
> means that
> > any previous call to get() - already in the mailboxe's 
> queue - should
> > get priority over a new call to get() - not yet in the queue. What I
> > meant to say is that we should not standardize the order in which
> > multiple try_put() calls deposit messages in the queue, that is,
> waiting
> > for the writing end of the channel need not be FIFO.
> > 
> > 	Arturo
> > 
> > -----Original Message-----
> > From: owner-sv-ec@eda.org [mailto:owner-sv-ec@eda.org] On Behalf Of
> > Stuart Sutherland
> > Sent: Tuesday, February 13, 2007 8:10 PM
> > To: Neil.Korpusik@Sun.com; 'Rich, Dave'
> > Cc: sv-ec@eda-stds.org
> > Subject: RE: [sv-ec] Strict FIFO ordering of mailboxes 
> try_put/try_get
> > 
> > 
> > I agree whole heartedly with Neil.  The odd behavior of a get
> bypassing
> > the
> > queue when other gets are in the queue is not at all intuitive.
> > 
> > Stu
> > ~~~~~~~~~~~~~~~~~~~~~~~~~
> > Stuart Sutherland
> > Sutherland HDL, Inc.
> > stuart@sutherland-hdl.com
> > 503-692-0898
> > 
> > 
> > > -----Original Message-----
> > > From: owner-sv-ec@server.eda.org
> > > [mailto:owner-sv-ec@server.eda.org] On Behalf Of Neil Korpusik
> > > Sent: Tuesday, February 13, 2007 3:43 PM
> > > To: Rich, Dave
> > > Cc: sv-ec@server.eda-stds.org
> > > Subject: Re: [sv-ec] Strict FIFO ordering of mailboxes
> try_put/try_get
> > >
> > > I believe that most users would expect requests to be queued up in
> the
> > > order in which they were received. It is more work for the vendors
> to
> > > support this approach, but it is what I think most users 
> would want.
> > >
> > > Neil
> > >
> > >
> > >
> > > Rich, Dave wrote On 02/13/07 08:58,:
> > > > I didn't get a response to this. I'm going to go with the
> assumption
> > > > that try_put/try_get can preempt a waiting put/get.
> > > >
> > > >
> > > >
> > > > We might want to clarify that strict FIFO order apples 
> only after
> a
> > > > successful try.
> > > >
> > > >
> > > >
> > > > Dave
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >
> > > --------------------------------------------------------------
> > > ----------
> > > >
> > > > *From:* owner-sv-ec@server.eda.org
> > > [mailto:owner-sv-ec@server.eda.org]
> > > > *On Behalf Of *Rich, Dave
> > > > *Sent:* Friday, February 02, 2007 10:48 AM
> > > > *To:* sv-ec@server.eda-stds.org
> > > > *Subject:* [sv-ec] Strict FIFO ordering of mailboxes
> try_put/try_get
> > > >
> > > >
> > > >
> > > > This is related to a discussion with semaphores a few years back
> > > > http://www.eda-stds.org/sv-ec/hm/2651.html
> > > >
> > > >
> > > >
> > > > 14.3.4 says
> > > >
> > > >
> > > >
> > > > The try_put() method stores a message in the mailbox in strict
> FIFO
> > > > order. This method is meaningful
> > > >
> > > > only for bounded mailboxes. If the mailbox is not full, then the
> > > > specified message is placed in the mailbox,
> > > >
> > > > and the function returns a positive integer. If the mailbox
> > > is full, the
> > > > method returns 0.
> > > >
> > > >
> > > >
> > > >
> > > >
> > > > Is the strict ordering only with other try_put()'s or if
> > > another put()
> > > > is blocked waiting for space, must the put() be unblocked
> > > before try_put
> > > > could succeed? Same question for try_get. Must a waiting get be
> > > > unblocked before try_get could succeed?
> > > >
> > > >
> > > >
> > > > Dave
> > > >
> > > >
> > > >
> > > >
> > > >
> > > > David Rich
> > > > Verification Technologist
> > > > Design Verification & Test Division
> > > > Mentor Graphics Corporation
> > > > dave_rich@mentor.com
> > > > Office:   408 487-7206
> > > > Cell:     510 589-2625
> > > >
> > > >
> > > >
> > > >
> > > > --
> > > > This message has been scanned for viruses and
> > > > dangerous content by *MailScanner*
> > > <http://www.mailscanner.info/>*, and is
> > > > believed to be clean.
> > > > --
> > > > This message has been scanned for viruses and
> > > > dangerous content by *MailScanner*
> > > <http://www.mailscanner.info/>, and is
> > > > believed to be clean. *
> > >
> > > --
> > >
> ---------------------------------------------------------------------
> > > Neil Korpusik                                     Tel: 
> 408-720-4852
> > > Senior Staff Engineer                             Fax: 
> 408-720-4850
> > > Frontend Technologies - ASICs & Processors (FTAP)
> > > Sun Microsystems
> > > email: neil.korpusik@sun.com
> > >
> ---------------------------------------------------------------------
> > >
> > >
> > >
> > > --
> > > This message has been scanned for viruses and
> > > dangerous content by MailScanner, and is
> > > believed to be clean.
> > >
> > >
> > >
> > >
> > 
> > 
> > 
> > --
> > This message has been scanned for viruses and
> > dangerous content by MailScanner, and is
> > believed to be clean.
> 
> 
> -- 
> This message has been scanned for viruses and
> dangerous content by MailScanner, and is
> believed to be clean.
> 
> 
> 
> 



-- 
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.
Received on Wed Feb 14 10:22:02 2007

This archive was generated by hypermail 2.1.8 : Wed Feb 14 2007 - 10:22:19 PST