Zpool create for SSD's

Do I need to specify anything specific when creating a pool on SSD’s?

Right now, my pool has been created as

zpool create -f \
    -o ashift=12 \
    -O relatime=on \
    -O canmount=off \
    -O compression=lz4 \
    -O xattr=sa \
    -O dnodesize=auto \
    -O acltype=posixacl \
    -O normalization=formD \
    -O mountpoint=none \
    tank \

All I can think of is

    -o ashift=13
    -o autotrim=on

I’m not even sure about the ashift=13, perhaps thats just certain Samsung devices?


SSDs tend to lie about their physical “sector” size, because they’re drive-managed SMR devices that explicitly expect to be managing read modify write cycles when operating systems make write requests smaller than their “sector” (actually zone) size. Samsung’s non-OEM lines just kinda tend to be the worst about it, by pretending to be 512B instead of admitting they’re 512e, despite the fact that their firmware can’t manage 512B writes well.

Most SSDs, while still lying about their actual physical “sector” size, will at least pick something that the firmware is optimized for (eg “4K” may still not be correct, but does drastically outperform 512B on the same device). You may or may not get a performance benefit out of going ashift=13 on those devices. In some cases, you can see performance decrease.

TL;DR unfortunately if you want the optimal ashift for a given SSD model, you have to actually test multiple ashift values yourself. Sucks, I know.

Thanks. I once read an article or a blog … or something about a script that ran a series of tests to determine the real sector size on a drive. It made sense and I understood the logic but I lost the bookmark. It was probably in relation to zfs and ashift, but I can’t find it anymore.

Running series of benchmarks with fio is really not something Im looking forward too. Besides a lack of knowledge will make the outcome questionable.

Unless you know of a bulletproof way?