On 08/11/13 22:01, Chris Mason wrote: > Hi everyone, > > This patch is now the tip of the master branch for btrfs-progs, which > has been updated to include most of the backlogged progs patches. > Please take a look and give it a shake. This was based on Dave's > integration tree (many thanks Dave!) minus the patches for online dedup. > I've pulled in the coverity fixes and a few others from the list as > well. > > The patch below switches our default mkfs leafsize up to 16K. This > should be a better choice in almost every workload, but now is your > chance to complain if it causes trouble.
Thanks for that and nicely timely! Compiling on Gentoo (3.11.5-gentoo, sys-fs/btrfs-progs-9999) gives: * QA Notice: Package triggers severe warnings which indicate that it * may exhibit random runtime failures. * disk-io.c:91:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing] * volumes.c:1930:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing] * volumes.c:1931:6: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing] * Please do not file a Gentoo bug and instead report the above QA * issues directly to the upstream developers of this software. * Homepage: https://btrfs.wiki.kernel.org > -------------------------------- > 16KB is faster and leads to less metadata fragmentation in almost all > workloads. It does slightly increase lock contention on the root nodes > in some workloads, but that is best dealt with by adding more subvolumes > (for now). Interesting and I was wondering about that. Good update. Also, hopefully that is a little more friendly for SSDs where often you see improved performance for 8kByte or 16kByte (aligned) writes... Testing in progress, Regards, Martin > This uses 16KB or the page size, whichever is bigger. If you're doing a > mixed block group mkfs, it uses the sectorsize instead. > > Since the kernel refuses to mount a mixed block group FS where the > metadata leaf size doesn't match the data sectorsize, this also adds a > similar check during mkfs. > > Signed-off-by: Chris Mason <chris.ma...@fusionio.com> > --- > mkfs.c | 19 ++++++++++++++++++- > 1 file changed, 18 insertions(+), 1 deletion(-) > > diff --git a/mkfs.c b/mkfs.c > index bf8a831..cd0af9e 100644 > --- a/mkfs.c > +++ b/mkfs.c > @@ -46,6 +46,8 @@ > > static u64 index_cnt = 2; > > +#define DEFAULT_MKFS_LEAF_SIZE 16384 > + > struct directory_name_entry { > char *dir_name; > char *path; > @@ -1222,7 +1224,7 @@ int main(int ac, char **av) > u64 alloc_start = 0; > u64 metadata_profile = 0; > u64 data_profile = 0; > - u32 leafsize = sysconf(_SC_PAGESIZE); > + u32 leafsize = max_t(u32, sysconf(_SC_PAGESIZE), > DEFAULT_MKFS_LEAF_SIZE); > u32 sectorsize = 4096; > u32 nodesize = leafsize; > u32 stripesize = 4096; > @@ -1232,6 +1234,7 @@ int main(int ac, char **av) > int ret; > int i; > int mixed = 0; > + int leaf_forced = 0; > int data_profile_opt = 0; > int metadata_profile_opt = 0; > int discard = 1; > @@ -1269,6 +1272,7 @@ int main(int ac, char **av) > case 'n': > nodesize = parse_size(optarg); > leafsize = parse_size(optarg); > + leaf_forced = 1; > break; > case 'L': > label = parse_label(optarg); > @@ -1386,8 +1390,21 @@ int main(int ac, char **av) > BTRFS_BLOCK_GROUP_RAID0 : 0; /* raid0 or single > */ > } > } else { > + u32 best_leafsize = max_t(u32, sysconf(_SC_PAGESIZE), > sectorsize); > metadata_profile = 0; > data_profile = 0; > + > + if (!leaf_forced) { > + leafsize = best_leafsize; > + nodesize = best_leafsize; > + if (check_leaf_or_node_size(leafsize, sectorsize)) > + exit(1); > + } > + if (leafsize != sectorsize) { > + fprintf(stderr, "Error: mixed metadata/data block > groups " > + "require metadata blocksizes equal to the > sectorsize\n"); > + exit(1); > + } > } > > ret = test_num_disk_vs_raid(metadata_profile, data_profile, -- To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html