UFS: unaligned read from GELI with 8k sectorsize

Anton Yuzhaninov citrin at citrin.ru
Mon Oct 3 20:38:47 UTC 2016


On 2016-10-03 13:49, Konstantin Belousov wrote:
> I did several bug fixing and read passes over the patch, below is the
> current version, hopefully more robust. BTW, do you have INVARIANTS and
> perhaps WITNESS in your kernel config ?

I didn't have in previous tests, but I've added INVARIANTS and WITNESS 
for last one.
With INVARIANTS I see a LOR on reboot/shutdown:
https://imgur.com/a/dWPrm
but may be it unrelated to vnode pager.

I can confirm, that with this patch (applied to fresh stable/11) geli 
with 8k sector can be used as root filesystem.

I don't know thought will it have some performance benefits compare to 
geli with 4k when vnode pager is used.

Even for raw device I can't provide benchmark data, that it is useless 
to read from this SSD in blocks less than 8k.

Samsung for some reason doesn't publish full spec for the SSD (with NAND 
page size and erase block size). Info about 8k pages comes from random 
posts on internet forums.

In may case attempt to use 8k sector in geli is attempt to get optimal 
performance, but may be there are cases when >4k sectors are used in 
hardware. See e. g. this old thread:
https://lists.freebsd.org/pipermail/freebsd-fs/2010-November/010023.html

> +SYSCTL_INT(_vfs_ffs, OID_AUTO, use_buf_pager, CTLFLAG_RW, &use_buf_pager, 0,
> +    "always use buffer pager instead of bmap");

Small nit: most sysctl descriptions begin with a capital letter.

I prefer CTLFLAG_RWTUN because this settings affects boot process (I 
haven't tested use_buf_pager=1 yet).

> +	if (!use_buf_pager && um->um_devvp->v_bufobj.bo_bsize <= PAGE_SIZE)
> +		return (vnode_pager_generic_getpages(vp, mm, count,
> +		    ap->a_rbehind, ap->a_rahead, NULL, NULL));

Also I don't like one more if statement in performance critical path 
(one more place for branch misprediction in CPU), but probably it effect 
is negligible.


More information about the freebsd-fs mailing list