[Pvfs2-developers] protocol encoding
Sam Lang
slang at mcs.anl.gov
Wed Jan 30 15:10:18 EST 2008
On Jan 30, 2008, at 2:07 PM, Sam Lang wrote:
>
> On Jan 30, 2008, at 11:39 AM, Murali Vilayannur wrote:
>
>> Hi Walt,
>>> In src/proto/pvfs2-req-proto.h when you define a new request you
>>> create
>>> a struct and then use a macro to create an encoding function for the
>>> struct (endecode_fields_X_struct). Sometimes, in the args to those
>>> macros you insert a skip4,, which I gather is used to align
>>> something.
>>> Can someone explain the rules for when and where you place this?
>>
>> ia64 and/or x86_64 likes pointers aligned on 8 byte boundaries.
>> Unaligned access to memory via a pointer can cause one or more of the
>> following I think
>> - slower performance
>> - segmentation faults
>> skip4 is needed only when pointers are involved as far as I
>> understand. You don't need those when accessing scalar types.
>>
>>>
>>> There is also some confusion as to the naming of those macros, in
>>> that
>>> some of them seem to count the skip4,, and some don't. In
>>> particular,
>>> if there are 3 scalar arguments, but we need one skip, we use the
>>> endecode_fields_4_struct macro - so we DO count the skip (3 args +
>>> skip
>>> = 4) but if there is an array, say 3 scalars plus an array, we use
>>> the
>>> endecode_fields_3a_struct macro - so we DO NOT count the skip. Some
>>> array macros have one, some have two skips. Any words of wisdom,
>>> or do
>>> we just have to look it up in the code?
>>
>> yeah.. I think that needs to be fixed. If I am not mistaken, the
>> number in the naming convention must include the skip4 also.
>> As regards to why some array macros have one and some have two skips
>> is because the former embeds only 1 pointer while the latter embeds
>> two sets of arrays along with the count.
>> Since the count is typically 4 bytes, we insert a skip4 and then drop
>> the array after that.
>
> Murali, I agree with your explanation, but its not clear what you
> think needs to be fixed. The macros match the naming convention you
> described.
>
> Maybe part of the confusion that Walt&Co have is that the an array
> macro (3a_struct) always includes an extra uint32_t for the length
> of the array, but that field is not counted in the number used in
> the name of the macro. For example:
>
> endecode_fields_3a_struct(
> PVFS_servresp_readdir,
> PVFS_ds_keyval, token,
> uint64_t, directory_version,
> skip4,,
> uint32_t, dirent_count,
> PVFS_dirent, dirent_array)
>
> There are 3 fields and a struct here.
That should read: 3 fields and an *array* here.
-sam
> The 3 fields are token, directory_version, and the skip4. The
> array is the count and the dirent_array. The skip is needed because
> of the 32 bit count field, but in some cases it wouldn't be:
>
> endecode_fields_2a_struct(
> my_op,
> uint64_t, var1,
> uint32_t, var2,
> uint32_t, array_count,
> uint32_t, array)
>
> You might argue that we should always just pad the array count, or
> use a 64 bit value for it, but I don't think Pete wanted to waste
> bytes in the request unless necessary. Its hard to quibble about 4
> bytes, but that design focus does help keep request messages under
> the eager message sizes of our protocols.
>
> -sam
>
>
>>
>>
>>> For those who are interested, the first thing we are working on is
>>> Phil's server-to-server enabled file create. In the first step we
>>> are
>>> migrating the client create syscall functionality to the server,
>>> then we
>>> will work on implementing collective communication. Right now we
>>> are
>>> trying to figure out to what extent we can use the new state machine
>>> features to simplify that by essentially starting a client state
>>> machine
>>> on the server. Any input on that activity is encouraged.
>> Awesome!
>> Thanks,
>> Murali
>>>
>>> Walt
>>> --
>>> 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
>>>
>> _______________________________________________
>> 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