Whamcloud - gitweb
LU-8998 utils: enlarge default inode size
authorNiu Yawei <yawei.niu@intel.com>
Tue, 10 May 2016 03:30:24 +0000 (23:30 -0400)
committerJinshan Xiong <jinshan.xiong@intel.com>
Thu, 6 Apr 2017 04:52:59 +0000 (21:52 -0700)
Composite layout consumes more EA space, to hold a typical 3
components composite layout in inode, the default inode size
on MDT needs be bumped from 512 bytes to 1024 bytes. The default
OST inode size is changed from 256 bytes to 512 bytes as well,
because there will be more composite layout information stored
in OST object EA.

Performance tests shows that increased default inode size doesn't
impact performance, following are few numbers from the mdtest
result:

                  create  stat  removal  tree-create tree-remove
512/256 (origin): 16543  47292  32826    48          22
1024/512 (new)  : 16903  47404  32114    55          20

Signed-off-by: Niu Yawei <yawei.niu@intel.com>
Change-Id: Ic5c08fd514f1111343f11129b1503a5ba2265ec7
Reviewed-on: https://review.whamcloud.com/24873
Reviewed-by: Andreas Dilger <andreas.dilger@intel.com>
Tested-by: Jenkins
Tested-by: Maloo <hpdd-maloo@intel.com>
lustre/tests/conf-sanity.sh
lustre/utils/mount_utils_ldiskfs.c

index 2c72876..9d28eaf 100755 (executable)
@@ -6075,11 +6075,11 @@ test_86() {
 run_test 86 "Replacing mkfs.lustre -G option"
 
 test_87() { #LU-6544
-       [[ $(lustre_version_code $SINGLEMDS1) -ge $(version_code 2.7.56) ]] ||
-               { skip "Need MDS version at least 2.7.56" && return; }
+       [[ $(lustre_version_code $SINGLEMDS1) -ge $(version_code 2.9.51) ]] ||
+               { skip "Need MDS version at least 2.9.51" && return; }
        [[ $(facet_fstype $SINGLEMDS) != ldiskfs ]] &&
                { skip "Only applicable to ldiskfs-based MDTs" && return; }
-       [[ $OSTCOUNT -gt 69 ]] &&
+       [[ $OSTCOUNT -gt 59 ]] &&
                { skip "Ignore wide striping situation" && return; }
 
        local mdsdev=$(mdsdevname 1)
@@ -6087,23 +6087,22 @@ test_87() { #LU-6544
        local file=$DIR/$tfile
        local mntpt=$(facet_mntpt $SINGLEMDS)
        local used_xattr_blk=0
-       local inode_size=${1:-512}
+       local inode_size=${1:-1024}
        local left_size=0
        local xtest="trusted.test"
        local value
        local orig
        local i
+       local stripe_cnt=$(($OSTCOUNT + 2))
 
-       #Please see LU-6544 for MDT inode size calculation
-       if [ $OSTCOUNT -gt 26 ]; then
+       #Please see ldiskfs_make_lustre() for MDT inode size calculation
+       if [ $stripe_cnt -gt 16 ]; then
                inode_size=2048
-       elif [ $OSTCOUNT -gt 5 ]; then
-               inode_size=1024
        fi
        left_size=$(expr $inode_size - \
                        156 - \
                        32 - \
-                       32 - $OSTCOUNT \* 24 - 16 - 3 -  \
+                       32 - 40 \* 3 - 32 \* 3 - $stripe_cnt \* 24 - 16 - 3 -  \
                        24 - 16 - 3 - \
                        24 - 18 - $(expr length $tfile) - 16 - 4)
        if [ $left_size -le 0 ]; then
@@ -6117,7 +6116,7 @@ test_87() { #LU-6544
        unload_modules
        reformat
 
-       add mds1 $(mkfs_opts mds1 ${mdsdev}) --stripe-count-hint=$OSTCOUNT \
+       add mds1 $(mkfs_opts mds1 ${mdsdev}) --stripe-count-hint=$stripe_cnt \
                --reformat $mdsdev $mdsvdev || error "add mds1 failed"
        start_mdt 1 > /dev/null || error "start mdt1 failed"
        for i in $(seq $OSTCOUNT); do
@@ -6128,9 +6127,9 @@ test_87() { #LU-6544
        check_mount || error "check client $MOUNT failed"
 
        #set xattr
-       $SETSTRIPE -c -1 $file || error "$SETSTRIPE -c -1 $file failed"
-       $GETSTRIPE $file || error "$GETSTRIPE $file failed"
-       i=$($GETSTRIPE -c $file)
+       $SETSTRIPE -E 1M -c 1 -E 64M -c 1 -E -1 -c -1 $file ||
+               error "Create file with 3 components failed"
+       i=$($GETSTRIPE -I 3 -c $file)
        if [ $i -ne $OSTCOUNT ]; then
                left_size=$(expr $left_size + $(expr $OSTCOUNT - $i) \* 24)
                echo -n "Since only $i out $OSTCOUNT OSTs are used, "
index 6a047be..4092eca 100644 (file)
@@ -756,11 +756,17 @@ int ldiskfs_make_lustre(struct mkfs_opts *mop)
                        }
                }
 
-               /* Inode size includes:
+               /*
+                * The inode size is constituted by following elements
+                * (assuming all files are in composite layout and has
+                * 3 components):
+                *
                 *   ldiskfs inode size: 156
                 *   extended attributes size, including:
                 *      ext4_xattr_header: 32
-                *      LOV EA size: 32(lov_mds_md) +
+                *      LOV EA size: 32(lov_comp_md_v1) +
+                *                   3 * 40(lov_comp_md_entry_v1) +
+                *                   3 * 32(lov_mds_md) +
                 *                   stripes * 24(lov_ost_data) +
                 *                   16(xattr_entry) + 3(lov)
                 *      LMA EA size: 24(lustre_mdt_attrs) +
@@ -771,24 +777,22 @@ int ldiskfs_make_lustre(struct mkfs_opts *mop)
                 *
                 * If we say the average filename length is about 32 bytes,
                 * the calculation looks like:
-                * 156 + 32 + (32+24*N+19) + (24+19) + (24+18+~32+20) + other <=
-                * 512*2^m, {m=0,1,2,3}
+                * 156 + 32 + (32+3*(40 + 32)+24*N+19) + (24+19) +
+                * (24+18+~32+20) + other <= 512*2^m, {m=0,1,2,3}
                 */
                if (strstr(mop->mo_mkfsopts, "-I") == NULL) {
                        if (IS_MDT(&mop->mo_ldd)) {
-                               if (mop->mo_stripe_count > 69)
+                               if (mop->mo_stripe_count > 59)
                                        inode_size = 512; /* bz 7241 */
                                /* see also "-i" below for EA blocks */
-                               else if (mop->mo_stripe_count > 26)
+                               else if (mop->mo_stripe_count > 16)
                                        inode_size = 2048;
-                               else if (mop->mo_stripe_count > 5)
-                                       inode_size = 1024;
                                else
-                                       inode_size = 512;
+                                       inode_size = 1024;
                        } else if (IS_OST(&mop->mo_ldd)) {
-                               /* We store MDS FID and OST objid in EA on OST
-                                * we need to make inode bigger as well. */
-                               inode_size = 256;
+                               /* We store MDS FID and necessary composite
+                                * layout information in the OST object EA. */
+                               inode_size = 512;
                        }
 
                        if (inode_size > 0) {
@@ -811,7 +815,7 @@ int ldiskfs_make_lustre(struct mkfs_opts *mop)
                        if (IS_MDT(&mop->mo_ldd)) {
                                bytes_per_inode = inode_size + 1536;
 
-                               if (mop->mo_stripe_count > 69) {
+                               if (mop->mo_stripe_count > 59) {
                                        int extra = mop->mo_stripe_count * 24;
                                        extra = ((extra - 1) | 4095) + 1;
                                        bytes_per_inode += extra;