[Pvfs2-developers] terminating state machines

Sam Lang slang at mcs.anl.gov
Wed Jul 26 18:16:12 EDT 2006


On Jul 26, 2006, at 5:17 PM, Phil Carns wrote:

> Sam Lang wrote:
>> On Jul 26, 2006, at 3:41 PM, Walter B. Ligon III wrote:
>>> Yeah, the idea is that the SM code would call the job function.   
>>> Depending on the state actions to do it seems like asking for   
>>> trouble, all the details that have to be kept up with.
>>>
>>> Actually, there are already job structs used by the SM code, now   
>>> I've had to add a context id to the smcb and there will be job   
>>> calls.  I think you are right though, the amount of dependency  
>>> is  pretty small.
>>>
>>> As for the job funcs I think I'd need one new one to post the   
>>> parent job, establishing a counter.  The child job would look up   
>>> the counter, decrement, and if zero, call job_null to relaunch  
>>> the  parent, or just
>>> replicate what job_null does, whatever seem the easiest.
>> I would rather see the parent get relaunched by the normal job  
>> test  code by putting itself in the job completion queue once its   
>> finished.  This could happen in a job_sm_test call like I  
>> suggested  in my previous email.  Also, instead of a counter that  
>> a test  function would check, and the child state machines would  
>> have to  decrement, I'd prefer the parent job keep an array of  
>> child state  machines (it does this anyway, no?) and check each  
>> element in the  array for completion of the state machine.  That  
>> way the children  aren't competing to lock the same state to  
>> notify of completion, the  parent just checks each one.
>
> There doesn't need to be any locking- the main server thread only  
> executes one state function or one transition at a time.  The  
> counter also doesn't need to be visible- it could be hidden inside  
> the job call, which could lock or not lock as it sees fit.
>
> The parent also couldn't be the one checking the elements in an  
> array like that - it would have to be done from within the job code  
> somewhere (which I think you described in your previous email).   
> That means that somewhere in the job code (or request scheduler,  
> etc.) something will have to do the following on every  
> job_testcontext() call:
>
> for each active sm

Only jobs that got posted as parent states would need to be checked.

> 	for each child within that sm
> 		check state
>
> Which could get expensive depending on how extensively we use the  
> child/parallel sm model.

It seems unlikely to me that this would cost much overall.  If we're  
going to use this child/parallel system to send out 1000s of messages  
at once, well, then perhaps we'd be better suited using something  
like mpi? :-)

-sam

>
>>> The implicit call is the child's call when it terminates.  The   
>>> parent's call could be implicit too, or done by the state action.
>> Doesn't this require child state machines to only function in the   
>> child state machine context?  I'd prefer to just have generic  
>> state  machines that can be used as a child state machine or as a  
>> top-level  state machine.
>
> I would prefer that too :)  Is this going to work Walt?  It would  
> be nice if the state machine processing code handled transparently  
> triggering different termination functions depending on whether it  
> was a top level sm or not without the state functions themselves  
> knowing any better.
>
>>> As of this moment we really haven't taken any pains to keep the  
>>> SM  independent from the job system, in fact you have to have the  
>>> job  system to drive things, so in some sense its not really an  
>>> issue.
>> I vote for making the interfaces as separate as possible.  If  
>> someone  else wants to use the state machine code somewhere else,  
>> it would be  nice to allow them to take it as-is (mpich2 guys were  
>> talking about  using it, but I think they ended up doing something  
>> else).  Also,  independent layers make testing and debugging  
>> easier in my view.
>> In the current code, the sm_p is passed through to the job  
>> descriptor  as a void*, and we just cast back to a sm_p in the  
>> while loop that  does the job_testcontext and then drives the  
>> state machines again.   The use of job_status does bring in the  
>> job code into the state  machine code,  but it seems like mostly  
>> only the error_code field is  used within the state actions, and  
>> the rest of that structure could  be independent of the state  
>> machine code.
>> -sam
>>>
>>> Any more commends?  (Sam I hope this address some of yours)
>>>
>>> Walt
>>>
>>> Phil Carns wrote:
>>>
>>>> Walter B. Ligon III wrote:
>>>>
>>>>>
>>>>> OK, guys, I have another issue I want input on.  When child  
>>>>> SMs  terminate they have to notify their parent.  The parent  
>>>>> has to  wait for all the children to terminate.  So I've been  
>>>>> thinking to  use the job subsystem for this: the parent would  
>>>>> post a job to  wait for N children,
>>>>> and each child would post a job, the last one releasing the  
>>>>> parent.
>>>>>
>>>>> Now I see two ways to implement this - one is to implement  
>>>>> this  directly in the state machine code.  The parent simply  
>>>>> stops  running (because it does not schedule a job yet returns   
>>>>> DEFERRED).  Each child decrements a counter, and when it hits  
>>>>> 0  the parent is restarted.  This is a little ugly because the   
>>>>> waiting parent is not being held on any list or queue (up to  
>>>>> now  all waiting SMs are in the job subsystem), also the last   
>>>>> terminating child becomes the parent as it starts executing  
>>>>> the  parent code.  Things can get weird when one SM starts  
>>>>> children  that start children, and so on.
>>>>>
>>>>> Now the other way to implement this is with the job subsystem  
>>>>> as  I suggested above.  Much cleaner except for one thing:  up  
>>>>> to now  the state machine subsystem has had no dependency at  
>>>>> all on the  job subsystem.  If we do it this way, this function  
>>>>> only works  with the job system intact.  I'd prefer not to do  
>>>>> this, but it  does seem the cleanest, most logical means.
>>>>
>>>> I like the job approach.  I guess this is an extra dependency   
>>>> because the sms would be calling these particular job functions   
>>>> implicitly, rather than relying on the state functions to  
>>>> handle  those posts and releases?  We definitely haven't done  
>>>> that before,  but at least in this case the job function that  
>>>> the sm  infrastructure would be depending on is the simplest one  
>>>> in the  arsenal :)  It shouldn't be hard for someone to  
>>>> reimplement that  particular functionality if they wanted to use  
>>>> the state machine  mechanism in another project.
>>>> If you weren't planning on these job calls to be implicit, then   
>>>> I'm not sure where the extra dependency is- we already use jobs  
>>>> to  trigger all of the other "normal" transitions.
>>>> This reminded me of a question, though- is there going to be a   
>>>> standard mechanism for the children to report each of their   
>>>> independent error codes to the parent sm?  Or do the children  
>>>> need  to just keep a reference to the parent sm structure and  
>>>> manually  fill in an array or something?
>>>> I guess I have a broader question of how data that the children   
>>>> generate (like a handle value or an attr structure) gets   
>>>> transferred to the parent.  Does the parent copy this stuff  
>>>> from  the child after the child finishes, or does the child copy  
>>>> it to  the parent before it exits?    I think we talked about  
>>>> this before  at some point but I forgot what the plan is.  It  
>>>> would be nice if  we made the developer define macros or  
>>>> something to dictate what  the input parameters need to be  
>>>> filled in when invoking a child  and what output parameters can  
>>>> be retrieved when it finishes.   Otherwise it starts getting  
>>>> tricky to remember what fields need to  be set in the sm  
>>>> structure before kicking something off.
>>>> -Phil
>>>> -Phil
>>>
>>>
>>> -- 
>>> Dr. Walter B. Ligon III
>>> Associate Professor
>>> ECE Department
>>> Clemson University
>>> _______________________________________________
>>> Pvfs2-developers mailing list
>>> Pvfs2-developers at beowulf-underground.org
>>> http://www.beowulf-underground.org/mailman/listinfo/pvfs2-developers
>>>
>



More information about the Pvfs2-developers mailing list