More on slow file output

Katie Antypas kantypas at flash.uchicago.edu
Mon Dec 11 14:18:49 CST 2006


I have some more results to report with parallel-netcdf on the IBM Power 
5 at NERSC.  I have removed all calls to reentering define mode and this 
allowed me improve performance up to a point.  I'm now seeing errors 
leaving just the regular define mode.  The crashes don't seem to happen 
at the same concurrency each time.  Last week, I was able to run a 128 
proc case through and the 256 proc case crashed.  Today, a 64 proc case 
is crashing.  Specifically, this is the routine and error I'm catching 
before aborting.


 status = ncmpi_enddef(ncid);
 if (status < 0){
    Driver_abortFlashC("Error io_ncmpi_write_header: enddef\n");
 }

Any ideas or do you have any more tests for me to do?

Katie


Katie Antypas wrote:
> I think it is a pretty easy fix to just write out the max and min 
> attributes initially in define mode, although it will require a number 
> of changes to the FLASH IO internal interfaces.  I didn't realize 
> redef would cause such a performance hit.  Right now I'm running the 
> tests without writing the max and min attributes which I don't think 
> are all that important in any case.
>
> The 128 proc case ran with no problems.  I'm waiting for some larger 
> jobs to go through.  I'll let you guys know the results.
>
> Katie
>
>
> Robert Latham wrote:
>> On Tue, Dec 05, 2006 at 10:42:32AM -0800, Katie Antypas wrote:
>>  
>>> I'm am doing some io benchmarking with the FLASH code on the NERSC 
>>> machine Bassi, (IBM Power 5) and I was also seeing some horrible 
>>> performance results.  I wanted to investigate this more before 
>>> writing the list, but it looks to me that that the slow down is 
>>> caused when the FLASH IO tries to 'reenter' define mode with the 
>>> ncmpi_redef call.
>>>     
>>
>> Hi
>> Bill and Katie, you certainly seem to be on the right track.  Katie,
>> thanks for the new information -- I wasn't really sure what the
>> problem might be, but the fact that FLASH reenters define mode gives
>> us a lot of suspects.
>> Bill, regarding ncmpiio_move, The serial netcdf guys have a comment
>> that their equivalent move routine is only used by nc_enddef after
>> redefinition, and is also likely to be an expensive operation.
>>
>>  
>>> (Anshu, FLASH defines all the pnetcdf dimensions and variables ahead 
>>> of time, then leaves define mode and writes the data.  However, we 
>>> added a some functionality early in the summer to write out the 
>>> maximum and minimum values of each unk variable and these are 
>>> written out as attributes of the given variable.  We reenter define 
>>> mode in the routine io_ncmpi_write_unknowns and 
>>> io_ncmpi_write_unknowns_sp for plotfiles in order to write out the 
>>> attributes.)
>>>
>>> Should the FLASH io should be doing something differently?  Should 
>>> we expect a performance hit from ncmpi_redef?  When I remove the 
>>> calls to reentering define mode and do not write out the attributes 
>>> the performance looks pretty good and in fact (on initial tests) 
>>> appears to be faster than the equivalent hdf5 tests.  I still have a 
>>> few jobs waiting in the queue here but as I get the results I will 
>>> let you know.
>>>     
>>
>> We can make this more efficent in pnetcdf by increasing that buffer
>> size as Bill observered.  In general, though, yes, redefinition is
>> going to be a very expensive process, as most if not all of the header
>> (and then all the variable data too I suspect) are shifted in the
>> file. 
>> adding anything to the netcdf header is bad for performance in
>> general: serial netcdf would take a performance hit as well.
>> The solution might be pretty simple:  I think if you were to create
>> those min and max attributes the first time you were in define mode
>> and give them some sort of known garbage value, you could then go back
>> and fill in those attributes with the real values. you could get all
>> the functionallity you want while still achieving good performance:
>> because no new space will be needed for these attributes, you'll avoid
>> the data shifting problem you are observing right now.
>>
>> Would that be an easy change to test out?
>>
>> ==rob
>>
>>   




More information about the parallel-netcdf mailing list