[Lustre-devel] Role of the Metadata Server during File I/O

office at hailoo.com office at hailoo.com
Thu Aug 13 11:43:24 PDT 2009


Oleg Drokin writes: 

> Hello! 
> 
> On Aug 11, 2009, at 1:24 PM, office at hailoo.com wrote: 
> 
>> Thanks for the information.  Doesn't this entail that for every call  to 
>> write() involving a striped file, Lustre must necessarily consult  all 
>> OSSs, in order to determine 1) the file size and 2) if the  current write 
>> operation will extend the file?
> 
> Why does write need to know the entire file size? We only care if we  are 
> extending currently accessed stripe. We know this the moment we  obtained 
> the lock on
> the stripe region we are interested in.

Consider the following situation: 

You have 4 OSTs and you create a file striped across all 4 OSTs, and you set 
the stripe size to 4 bytes.  (Obviously that is too small, but I just want 
to keep this simple.) 

The file is created and it starts out as a 0 byte file.  Now, suppose you 
write one byte to offset 5.  So now Lustre has to write one byte to the 
second OST.  But, in POSIX compliant file I/O, if you write to an offset 
that is greater than the file size, the file system must write zeros to the 
disk to fill the gap between the old end of the file and the offset.  So, in 
the case of Lustre, the system must not only write a single byte to the 
second OST, it also must write 4 zero-bytes to the first OST.  But in order 
to even know that is has to do this, wouldn't Lustre need to know the entire 
file size?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.lustre.org/pipermail/lustre-devel-lustre.org/attachments/20090813/d2a7cfd9/attachment.htm>


More information about the lustre-devel mailing list