Georg🎞️🎥
Vladislav
Станислав
Vladislav
Сейчас -
zpool create -o ashift=12 -O compression=lz4 -O atime=off -O recordsize=8k nvme /dev/nvme0n1 /dev/nvme1n1 /dev/nvme3n1
Fedor
Georg🎞️🎥
Станислав
Первый абзац
Georg🎞️🎥
Первый абзац
Укажите пожалуйста словосочетание или синоним его - кэш на запись 👋
Fedor
Это не кеш, а быстрая фиксация транзакции
Станислав
Сначала запись происходит в журнал транзакций, а потом уже в пул. Если ZiL вынести на отдельное устройство, то по смыслу он кэш
Vladislav
Это не кэш запись на запись в плане тиринга, где сперва все данные пишутся туда, а потом в свободное время идут на холодное хранилище.
Это кэш на запись в плане inode, куда сливаются очень мелкие блоки, чтобы потом отправить их на пул
Georg🎞️🎥
Fedor
Georg🎞️🎥
Fedor
Так и так в диски будет упираться
Georg🎞️🎥
Fedor
Georg🎞️🎥
Fedor
Можно нагрузку раскидывать по разным датасетам или зволам, смотря что у вас там
Vladislav
Просто 3 диска nvme в stipe
Vladislav
Всё
Fedor
8к практически бессмысленно
Fedor
Почти все ОС делают объединение операций ввода вывода
Fedor
Начать с 64 или 128, а там посмотреть
Fedor
Основное что надо тестить это чтение под рабочей нагрузкой
Fedor
Зависит от количества потоков
Fedor
И тормознутости среды - например через эзернет будет медленнее
Fedor
Намджобс сделай например 32-64
Fedor
Зфс это не про производительность в однопотоке
Fedor
Vladislav
Зфс это не про производительность в однопотоке
Хорошо, в чём тогда такая принципиальная разница при тестах на запись на устройство? Каким образом raid0 из трёх дисков mdadm просто умножает на x3, а у ZFS остаётся производительность одно диска?
Fedor
Настолько глубоко не закапывался, но стоит учитывать это.
Райд не транзактная штука. А зфс- да.
Транзакции нужны для консистентности.
Что в БД, что в ФС без транзакций оно работает быстрее.
Ещё по ряду нюансов вроде как для одного потока зфс работает на скорости самого медленного диска.
Fedor
Fedor
Переключи блок в 64
Vladislav
zpool create -o ashift=12 -O compression=lz4 -O atime=off -O recordsize=64k nvme /dev/nvme0n1 /dev/nvme1n1 /dev/nvme3n1 -f
fio -name=rndw4k16 -ioengine=libaio -direct=1 -buffered=0 -invalidate=1 -filesize=30G -numjobs=32 -bs=8k -iodepth=32 -rw=randwrite -filename=/nvme/temp.tmp
WRITE: bw=448MiB/s (470MB/s), 13.1MiB/s-15.4MiB/s (13.7MB/s-16.2MB/s), io=18.2GiB (19.5GB), run=41455-41539msec
Fedor
Так как смысла в целом в этом тесте нет
Fedor
Ты на каждый блок 8кб читаешь 64кб
Vladislav
Поэтому я и делал изначально recordsize=8k.
учитывая, что я планирую выдавать это в vmware - Винда, линукс, Cisco и кучка БД конечно не особо будут рады, когда им скажут, что в 4к писать низя
Fedor
Бд скорее всего в 32кб будет писать
Fedor
Разнести нагрузку по разным датасетам
Fedor
Нфс кстати пишет не кусками по 4-8
Fedor
Ок
Fedor
Vladislav
Fedor
Fedor
Если сервисы ЗФС стоят этих 50 процентов, то ставь ее
Vladislav
А, да. Не надо
В том и дело! Ладно бы это результаты были для 3 SATA ssd или 30-40-50 HDD. Это NVMe!
Vladislav
Иначе это 2800 МиБ для mdadm vs 325 МиБ у ZFS
Что мягко говоря вызывает у меня wtf
Fedor
Транзакции и CoW
Fedor
Цена надёжности и консистентности
Fedor
Если это не нужно, то и смысла особо нет
Fedor
Она просто работает иначе :)
Если рейд0, то в зфс смысла вообще нет
Vladislav
Vladislav
Fedor
Необязательно, это всего лишь потребители
Fedor
На скорость отзывчивости фс не влияют
Fedor
Они в 99 процентах случаев используют агрегацию
Fedor
Данные пишутся по CoW линейно