[Pvfs2-developers] server crash on startup with millions of files
Phil Carns
pcarns at wastedcycles.org
Thu Mar 1 10:52:49 EST 2007
Sam Lang wrote:
>
> On Feb 28, 2007, at 6:54 AM, Phil Carns wrote:
>
>> I know that you guys still have some ongoing discussion about the long
>> range design for tracking handles, but I have another item about the
>> current implementation that might be of interest.
>>
>> Most of the remaining startup performance problem (after Sam's
>> optimization patches) appears to be a result of how the db is ordered.
>> If I modify the attr db's comparison function so that it has a "<"
>> rather than ">", then all of the preads during startup go in order
>> through the db rather than backwards. This takes the startup time on a
>> cold db down to just 34 seconds. Previously it was 2 minutes 22
>> seconds.
>>
>> It still could be faster, but that seems to be the biggest part of the
>> time. I imagine the rest of it is just the access size (4 KB at a
>> time) that might be tunable through some berkeley db settings.
>>
>> The downside of making that particular change to the comparison
>> method is that it breaks storage space compatibility.
>>
>> I wonder if it might be possible to accomplish the same thing in the
>> current db format by modifying iterate_handles() to just run the cursor
>> backwards (using DB_PREV instead of DB_NEXT)? That wouldn't hurt
>> storage space compability (if it works), but I don't know if it makes
>> any difference to callers of that function what order the handles
>> come out in.
>
>
> It doesn't matter to the caller. You'll also need to set the cursor to
> the last position in the db with DB_LAST. Does DB_PREV work with
> DB_MULTIPLE though? Its not clear from the above, does the improvement
> to 34 seconds occur with MULTIPLE or without?
>
> I mentioned previously that the dspace db gets opened with the RECNUM
> flag. I don't think that's necessary, and removing it will invariably
> improve performance, but we need a way to return the position for
> iterate_handles. The easiest thing to do is turn PVFS_ds_position into
> a uint64_t (currently its only uint32_t). That breaks interfaces and
> protocols though.
I don't know if the PREV approach would work with MULTIPLE or not. The
34 second times (with inverted comparison function) were run with your
MULTIPLE patches applied. I didn't try it without the patches.
-Phil
More information about the Pvfs2-developers
mailing list