On Tue, 22 Nov 2016, Jo-Philipp Wich wrote:

1)
detect via makefile if PARTITION is small and autoadjust BLOCKSIZE
(if not given)

iirc the blocksize setting is a choice menu, so it is always defined.

2)
set BLOCKSIZE default to 1K via x86/UML-Makefile

It was explicitly raised to 4k for x86 to reduce wear on MMC storage
which is common on non-virtual x86 targets (Alix/APU boards etc.)

3)
the first approach by changing 'make_ext4fs.c'

That would be preferred. Our make_ext4fs variant is forked anyway
already so there is no upstream we need to adhere to.

changing the blocksize doesn't really address the problem of too few inodes, except indirectly in that the default number of inodes is calculated from the number of blocks on the filesystem.

In the case of LEDE, we tend to have fewer large files on the ext4 partition than most distros, for a couple of reasons. First we are always concerned with space, so we tend to have smaller files to start with, and then we tend to have most of the larger files in a system on jffs2/squashfs with ext4 being used only to track the config files (which tend to be tiny)

Setting these involve trade-offs that don't matter much at the typical desktop drive size, but matter a lot when space is really tight.

on a 16M filesystem, 1024 inodes means that you are assuming that your average file size is going to be ~16K, that's larger than what we are going to use on an overlay filesystem. with a 4K block size, your minimum filesize is effectivly 4K

However, on a very large filesystem, you are probably going to be filling that space with large files (audio files at multiple MB each, video files at multiple GB each, iso images at multiple GB, etc), so having a small blocksize and an inode for every 4K of disk space ends up wasting a fair amount of space (a 4T filesystem with one inode per 4K block uses 128GB just in inodes)


Having gone through all of this, I think we need to step back a bit and change the kconfig settings.

Instead of specifying blocksize by default, we should have a 'useage pattern' for the filesystem (lots of small files, default, large files, gigantic files, custom) and set the filesystem blocksize based on the combination of the usage pattern and the filesystem size.

mkfs.ext* has the -T flag to specify usage type (lots of small files, default, lots of large file, gigantic files) to set the blocksize and number of inodes on the filesystem. The definitions are in /etc/mke2fs.conf

We should leverage this (and possibly add our own definitions)

On a 16M filesystem, we probably want to use a 1K block size and have an inode for every couple of blocks.

On a 10TB filesystem, we probably want 4K block size and an inode for every few K blocks

A menu to customize these rather than calculating them will allow people to tweak them to fit the uncommon cases that LEDE is likely to be used for.

David Lang

_______________________________________________
Lede-dev mailing list
Lede-dev@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/lede-dev

Reply via email to