[Pvfs2-developers] BMI_testunexpected and free
Scott Atchley
atchley at myri.com
Mon Aug 21 19:51:33 EDT 2006
On Aug 21, 2006, at 5:58 PM, Pete Wyckoff wrote:
> vilayann at mcs.anl.gov wrote on Mon, 21 Aug 2006 14:32 -0500:
>> Sam and I raised this question for the following reason (motivated
>> during the discussion of
>> BMI-MX's design with Scott)
>> Suppose a BMI method wants to keep around a pre-allocated pool of
>> unexpected buffers, it seems wasteful to copy them into a user
>> buffer and
>> then free it again.
>> So we were kind of wondering if a test_unexpected() returns one of
>> those
>> preallocated buffers (and mark them internally as being used) and
>> then
>> the caller can then call BMI_memfree() which will return it to the
>> pool of
>> unexpected buffers (by marking them as free again).
>>
>> But if this does not appeal to you guys, I suspect the
>> unexpected_free()
>> callback function would also be better than free()..
>
> I think doing what Phil suggested with BMI_unexpected_free() is the
> best way to go. This is the same thing you're describing except it
> makes explicit the separate functions of: 1) freeing
> network-registered memory (BMI_memfree), and 2) acknowledging an
> unexpected message has been serviced (BMI_unexpected_free).
>
> You'll just have to go through the code and audit all users of
> testunexpected() to make sure they call your new function instead of
> normal free(); it'll have to be mandatory from now on. And add
> stubs in bmi_* that implement this by calling free().
>
> Don't expect to see huge performance gains by doing this, though, as
> unexpected messages tend to be pretty small and everything will sit
> in L2 anyawy. But saving the malloc/memcpy/free is probably worth
> the expansion of the API, I'll agree. It'll also clear up any
> confusion about the lifetime of returned buffers, and bring
> responsibility for flow control of unexpected messages up to the
> application where it belongs. Once you toss in these changes, I'll
> switch bmi_ib over to be clever with unexpected buffers too, as you
> describe.
>
> -- Pete
Sam and Murali brought this up based on my questions about
BMI_memalloc() and BMI_memfree(). Unlike GM, MX does not have a
memory registration API. It handles registration within the library
automatically. The user always passes in plain malloc'd buffers for
both send and receive. Since the unexpected buffer for a MX BMI would
simply be a malloc'd buffer, I did not think it made much sense to
malloc another buffer, copy the data and pass that back to BMI.
Given that, I could live with BMI_memalloc() and BMI_memfree() that
are simply malloc() and free().
Scott
More information about the Pvfs2-developers
mailing list