Details
-
Bug
-
Resolution: Fixed
-
Minor
-
None
-
None
-
3
-
9223372036854775807
Description
The ZFS OSD limits the ea size to DXATTR_MAX_ENTRY_SIZE, which defaults to 32K.
This is done when ddp_max_ea_size is set:
param->ddp_max_ea_size = DXATTR_MAX_ENTRY_SIZE;
Per Alex Z., this is probably incorrect, since ZFS can use dedicated objects for EAs.
This was discovered and confirmed in testing overstriping (LU-9846):
https://testing.whamcloud.com/test_sets/ea834356-1552-11e9-9ed8-52540065bddc
Specifically, test 27ci:
This is a test for overstriping, which is > 1 stripe per OST. This tries to create 2000 stripes.
It works on ldiskfs (with ea_inode) enabled, but on ZFS, we only get 1363 total stripes
32768/24 bytes per stripe = 1365
So, minus a little for the rest of the layout EA, this matches.
So 32K is too small, especially if we increase the stripe limit to 10K, as the overstriping patch series does in a later patch. The question is what should the limit be.
I would suggest as a possible value:
/* Maximum EA size is limited by LNET_MTU for remote objects */
#define OSD_MAX_EA_SIZE 1048364
Which is currently in the ldiskfs OSD, but is clearly not ldiskfs specific.
I'm curious to get feedback here.