Re: [PATCH 0/2] nilfs2: improve inode allocation algorithm

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,
On Sun, 12 Oct 2014 12:38:21 +0200, Andreas Rohner wrote:
> Hi,
> 
> The algorithm simply makes sure, that after a directory inode there are
> a certain number of free slots available and the search for file inodes
> is started at their parent directory.
> 
> I havn't had the time yet to do a full scale performance test of it, but 
> my simple preliminary tests have shown, that the allocation of inodes 
> takes a little bit longer and the lookup is a little bit faster. My 
> simple test just creates 1500 directories and after that creates 10 
> files in each directory.
> 
> So more testing is definetly necessary, but I wanted to get some 
> feedback about the design first. Is my code a step in the right 
> direction?
> 
> Best regards,
> Andreas Rohner
> 
> Andreas Rohner (2):
>   nilfs2: support the allocation of whole blocks of meta data entries
>   nilfs2: improve inode allocation algorithm
> 
>  fs/nilfs2/alloc.c   | 161 ++++++++++++++++++++++++++++++++++++++++++++++++----
>  fs/nilfs2/alloc.h   |  18 +++++-
>  fs/nilfs2/ifile.c   |  63 ++++++++++++++++++--
>  fs/nilfs2/ifile.h   |   6 +-
>  fs/nilfs2/inode.c   |   6 +-
>  fs/nilfs2/segment.c |   5 +-
>  6 files changed, 235 insertions(+), 24 deletions(-)

I don't know whether this patchset is going in the right direction.
.. we should first measure how the original naive allocator is bad in
comparison with an elaborately designed allocator like this.  But, I
will add some comments anyway:

 1) You must not use sizeof(struct nilfs_inode) to get inode size.
    The size of on-disk inodes is variable and you have to use
    NILFS_MDT(ifile)->mi_entry_size to ensure compatibility.
    To get ipb (= number of inodes per block), you should use
    NILFS_MDT(ifile)->mi_entries_per_block.
    Please remove nilfs_ifile_inodes_per_block().  It's redundant.

 2) __nilfs_palloc_prepare_alloc_entry()
    The argument block_size is so confusing. Usually we use it
    for the size of disk block.
    Please use a proper word "alignment_size" or so.

 3) nilfs_palloc_find_available_slot_align32()
    This function seems to be violating endian compatibility.
    The order of two 32-bit words in a 64-bit word in little endian
    architectures differs from that of big endian architectures.

    Having three different implementations looks too overkill to me at
    this time.  It should be removed unless it will make a significant
    difference.

 4) nilfs_cpu_to_leul()
    Adding this macro is not preferable.  It depends on endian.
    Did you look for a generic macro which does the same thing ?

Regards,
Ryusuke Konishi
--
To unsubscribe from this list: send the line "unsubscribe linux-nilfs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Filesystem Development]     [Linux BTRFS]     [Linux CIFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux SCSI]

  Powered by Linux