[Pvfs2-developers] BMI initial contact between new peers
Sam Lang
slang at mcs.anl.gov
Thu Sep 14 10:40:14 EDT 2006
Scott Atchley wrote:
> Hi Sam,
>
>> Hi Scott,
>>
>>> Since clients initiate all first contact with the servers, what is the
>>> standard procedure? Send an unexpected message only or post a receive
>>> and then send an unexpected message and wait for an expected send from
>>> the server?
>>
>> The latter.
>>
>>> I am trying to determine whether a send or receive is posted first for a
>>> new peer.
>>
>> The msgpairarray state machine in src/common/misc/msgpairarray.sm is the
>> engine for most of the request/response style unexpected messages from
>> client to server. The msgpairarray_post function first calls
>> job_bmi_recv which posts the receive (calls BMI_post_recv), and then
>> calls job_bmi_send_list, which basically translates to calling
>> BMI_post_sendunexpected_list.
>
> Then I need to have code in the recv function to create a new peer's
> state if it is the first contact. In Lustre, this only happens in the
> send function.
Could that be done in addr_lookup? The PVFS_BMI_addr_t that we pass to
each of the BMI functions is returned by that call, and we always call
it before posting any receives or sends.
>
>>> Also, can more than one BMI method be called at anyone time (e.g.
>>> concurrent send and/or recvs)?
>>
>> Yes. All the BMI calls are non-blocking, and we often post many
>> receives and sends and let the test call drive completion of them.
>>
>> -sam
>
> I should have have asked it a different way. Can multiple calls to the
> send function happen at the same time (i.e. is BMI threaded and make
> simultaneous calls to the send function or recv function or any
> combination of functions)? I am wondering about the potential for race
> conditions and when I need to protect against them.
>
The BMI calls are meant to be thread-safe, although right now in the
code I think all BMI calls are made from within the same thread. That's
certainly true on the client at least. On the server, the flow code
might end up calling a bmi function from the trove thread and another
from the server thread. I think the short answer is yes. :-)
-sam
> Thanks,
>
> Scott
>
More information about the Pvfs2-developers
mailing list