• Andrew Morton's avatar
    [PATCH] speed up writes · 7e7382fd
    Andrew Morton authored
    Speeds up generic_file_write() by not calling mark_inode_dirty() when
    the mtime and ctime didn't change.
    
    There may be concerns over the fact that this restricts mtime and ctime
    updates to one-second resolution.  But the interface doesn't support
    that anyway - all the filesystem knows is that its dirty_inode()
    superop was called.  It doesn't know why.
    
    So filesystems which support high-resolution timestamps already need to
    make their own arrangements.  We need an update_mtime i_op to support
    those properly.
    
    time to write a one megabyte file one-byte-at-a-time:
    
    Before:
    	ext3:		24.8 seconds
    	ext2:		 4.9 seconds
    	reiserfs:	17.0 seconds
    After:
    	ext3:		22.5 seconds
    	ext2:		4.8  seconds
    	reiserfs:	11.6 seconds
    
    Not much improvement because we're also calling expensive
    mark_inode_dirty() functions when i_size is expanded.  So compare the
    overwrite case:
    
    time dd if=/dev/zero of=foo bs=1 count=1M conv=notrunc
    
    ext3 before:	20.0 seconds
    ext3 after:	9.7  seconds
    7e7382fd
filemap.c 56.2 KB