[LU-16581] osd_xattr_get() is much more expensive with zfs Created: 20/Feb/23  Updated: 20/Feb/23

Status: Open
Project: Lustre
Component/s: None
Affects Version/s: None
Fix Version/s: None

Type: Improvement Priority: Minor
Reporter: Alex Zhuravlev Assignee: WC Triage
Resolution: Unresolved Votes: 0
Labels: None

Rank (Obsolete): 9223372036854775807

 Description   

just noticed that sanity/103e takes significantly longer with ZFS. there are number of contributors, but I found one especially interesting:
ldiskfs:

attr_get                  36535 samples [usecs] 0 80 1085 9093

zfs:

attr_get                  36537 samples [usecs] 0 20790 750797 1636365521

i.e. osd_attr_get() (called on a directory) is 692 times slower than ldiskfs version.

it's used only in mdt_attr_get_internal():

		if (ma->ma_attr.la_dirent_count != LU_DIRENT_COUNT_UNSET &&
		    ma->ma_attr.la_dirent_count >
			mdt->mdt_restriper.mdr_dir_split_count &&
		    !fid_is_root(mdt_object_fid(o)) &&
		    mdt->mdt_enable_dir_auto_split &&
		    !o->mot_restriping &&
		    stripe_count < atomic_read(&mdt->mdt_mds_mds_conns) + 1 &&
		    !fixed_layout)
			mdt_auto_split_add(info, o);

and only to check whether (re)striping is needed.
I find it suboptimal that:

  • OSD needs to calculate la_dirent_count for every directory
  • we do this every getattr

Generated at Sat Feb 10 03:28:15 UTC 2024 using Jira 9.4.14#940014-sha1:734e6822bbf0d45eff9af51f82432957f73aa32c.