Алексей
ага, почитаю спс
Алексей
ZFS Log Spacemap - Алгоритм смыва | Основной дамп https://sdimitro.github.io/post/zfs-lsm-flushing/
Алексей
Только хардкор...
Алексей
Космические карты) весьма занятное чтиво
Евгений
Я так понимаю, это линукс zfs
nikolay
https://www.solaris-cookbook.eu/solaris/solaris-10-zfs-evil-tuning-guide/
Эта ссылка давно недоступна
Алексей
Эта ссылка давно недоступна
Странно, я вчера её всю прочитал
nikolay
Зы, может я с dot com перепутал
Fedor
У меня тоже не работала
Fedor
Я их даже открывать перестал
Fedor
Хотя сейчас открывается
Алексей
Ребята всем привет это опять я. Рубрика мысли в слух.
Алексей
В общем я тут начитался всякой инфы о том как работает зфс и у меня родился план как попробовать минимизировать явление фрагментации. Короче на сколько я понимаю избежать фрагментации невозможно впринципе, но можно попробовать её уменьшить, у меня мысль такая: откуда берется фрагментация? В основном по одной и той же причине, удаление старых файлов оставляет дырки в сплошном потоке данных и в эти дырки затем записываются более крупные файлы из-за чего получаются фрагменты. Как уменьшить количество фрагментов? Подобрать оптимальный размер блока, проанализировав не средний размер файлов, а нормальное распределение их размеров, и определить какого размера файлов больше всего и исходя из этого подобрать размер блока. Это первый нюанс. Второе, скорее всего увеличению фрагментации способствует сжатие, оно делает мелкие блоки, оставляя после удаления мелких файлов очень мелкие дырки. Думается мне, что сжатием можно пренебрегать, поскольку сами блобы не сжимаются в принципе, у них слишком большая энтропия, но, взамен мы получим относительно крупные дырки (например 512кб) что уже делает фрагментацию не такой страшной как если бы фрагменты были по 32 или 64кб или ещё мельче. И ещё один бонус: со стабильно крупным размером блока можно забить на рекомендацию оставлять в пуле 15-20% свободного места для избежания, деградации производительности, что само по себе поможет нивелировать эффект отключения сжатия. Вот такие мысли.
Алексей
Я иногда думаю что правильно было бы задавать не максимальный размер блока а минимальный, с точки зрения уменьшения фрагментации)
Алексей
Кто что скажет?
Алексей
Вот тут мне ещё подсказывают, что для уменьшения фрагментации можно использовать ещё один трюк: регулярно создавать снапшоты, например, раз в сутки, а удалять их разом, например раз в неделю. Таким образом, потенциально размер дырок так же можно увеличить.
Алексей
Да, обычные блины по 10тб
Алексей
Ну серверные разве что
Сергей
тогда понятно. Случайная запись для вас критична
Алексей
вот конкретно в этом проекте, ну не так чтобы сильно критично, просто изучаю возможности оптимизации. сейчас работает стабильно, но если можно улучшить (углубить и расширить так сказать) то почему нет.
Алексей
возможно, если это выгорит, то получится использовать существующее железо еще более оптимально, а значит получить еще больше профита
Алексей
грубо говоря, текущая скорость и интенсивность набора фрагментации на 10ТБ массиве приемлема, но если переходить на 20ТБ то это уже станет проблемой
George
В общем я тут начитался всякой инфы о том как работает зфс и у меня родился план как попробовать минимизировать явление фрагментации. Короче на сколько я понимаю избежать фрагментации невозможно впринципе, но можно попробовать её уменьшить, у меня мысль такая: откуда берется фрагментация? В основном по одной и той же причине, удаление старых файлов оставляет дырки в сплошном потоке данных и в эти дырки затем записываются более крупные файлы из-за чего получаются фрагменты. Как уменьшить количество фрагментов? Подобрать оптимальный размер блока, проанализировав не средний размер файлов, а нормальное распределение их размеров, и определить какого размера файлов больше всего и исходя из этого подобрать размер блока. Это первый нюанс. Второе, скорее всего увеличению фрагментации способствует сжатие, оно делает мелкие блоки, оставляя после удаления мелких файлов очень мелкие дырки. Думается мне, что сжатием можно пренебрегать, поскольку сами блобы не сжимаются в принципе, у них слишком большая энтропия, но, взамен мы получим относительно крупные дырки (например 512кб) что уже делает фрагментацию не такой страшной как если бы фрагменты были по 32 или 64кб или ещё мельче. И ещё один бонус: со стабильно крупным размером блока можно забить на рекомендацию оставлять в пуле 15-20% свободного места для избежания, деградации производительности, что само по себе поможет нивелировать эффект отключения сжатия. Вот такие мысли.
со сжатием, если тип данных не меняется, логика не верная, т.к. сжатие будет примерно одинаковым коэффициентом размер блока тоже погоды явной не делает именно для фрагментации, но позволяет на hdd при увеличении получить лучший результат, т.к. на hdd латенси на перемещение головки сильно дороже, чем латенси непосредственно чтения/записи с уже спозиционированной головки. и это не даёт вам заполнить пул прям сильнее, т.е. при 80%+ заполнении проблема то не в "дырках", а в поиске подходящего по размеру места. Этот процесс не бесплатный, и чем больше заполнены metaslabs, тем он дороже. По этой причине на 90%+ заполненности алгоритм аллокации переключается на "первый подходящий" и привет.
George
В общем я тут начитался всякой инфы о том как работает зфс и у меня родился план как попробовать минимизировать явление фрагментации. Короче на сколько я понимаю избежать фрагментации невозможно впринципе, но можно попробовать её уменьшить, у меня мысль такая: откуда берется фрагментация? В основном по одной и той же причине, удаление старых файлов оставляет дырки в сплошном потоке данных и в эти дырки затем записываются более крупные файлы из-за чего получаются фрагменты. Как уменьшить количество фрагментов? Подобрать оптимальный размер блока, проанализировав не средний размер файлов, а нормальное распределение их размеров, и определить какого размера файлов больше всего и исходя из этого подобрать размер блока. Это первый нюанс. Второе, скорее всего увеличению фрагментации способствует сжатие, оно делает мелкие блоки, оставляя после удаления мелких файлов очень мелкие дырки. Думается мне, что сжатием можно пренебрегать, поскольку сами блобы не сжимаются в принципе, у них слишком большая энтропия, но, взамен мы получим относительно крупные дырки (например 512кб) что уже делает фрагментацию не такой страшной как если бы фрагменты были по 32 или 64кб или ещё мельче. И ещё один бонус: со стабильно крупным размером блока можно забить на рекомендацию оставлять в пуле 15-20% свободного места для избежания, деградации производительности, что само по себе поможет нивелировать эффект отключения сжатия. Вот такие мысли.
вы ещё учтите, что в CoW ФС чтение по дефолту случайное, у вас сам принцип записи даёт фрагметацию.
Алексей
не совсем понял первый обзац про сжатие и тип данных. всё остальное подтверждает мои догадки. чем больше дырка тем лучше.
Алексей
спасибо!
Алексей
@gmelikov, а что вы всё-таки имели в виду под "со сжатием, если тип данных не меняется, логика не верная, т.к. сжатие будет примерно одинаковым коэффициентом"
George
@gmelikov, а что вы всё-таки имели в виду под "со сжатием, если тип данных не меняется, логика не верная, т.к. сжатие будет примерно одинаковым коэффициентом"
ну жмутся данные в среднем на 20%, например. рекордсайз один. В итоге размер блока у любых файлов будет примерно одинаков. и даже если немного выиграть здесь на чём-то в ваших попытках бороться с фрагментацией, то иопсы всё равно будут хуже
Алексей
в моем кейсе файлы не жмутся совсем. энтропия очень высокая. а разброс файлов очень велик, от нескольких кб до десятков мегабайтов. в общем случае файлы больше мегабайта нас не интересуют, интересует только их хвост от деления их размера на размер блока. поэтому нужно подобрать оптимальный размер блока, чтобы и дырки были более менее крупные, чтобы фрагменты если и были, то относительно большие, но в то же время и не слишком большой блок чтобы не было оверхеда по испольуемому размеру блока
Алексей
т.е. тип данных не меняется и не жмётся, это можно взять за основу
Алексей
так почему иопсы будут хуже при остсутвии сжатия? не уловил
Gustavo Imputsa
Меньше данных -> меньше запросов
Gustavo Imputsa
Гигабайт нулей можно считать не считывая гигабайт данных (Количественные характеристики зависят от размера блока zfs)
Алексей
Всё верно
Алексей
Поэтому я и писал что нужно нормальное распределение прикинуть
Fedor
Отпишись потом об успехах :) чего дали все эти приседания)
George
Поэтому я и писал что нужно нормальное распределение прикинуть
ну вы сможете рассчитать что-то только если у вас все файлы в 99% одного размера
George
если они сильно варьируются - смысла от этих подпрыгиваний практически не будет
Алексей
Я думаю они достаточно рандомные
George
Я думаю они достаточно рандомные
ну я смысла тогда не вижу вообще пытаться что-то рассчитать)
Алексей
Ну наверное, если там полный рандом, то да. Но есть подозрение что какой-то паттерн там найти всё таки можно будет
Fedor
В целом, если профиль данных, записи и прочего уже заранее известен, может какую-нибудь производительность и даст. Но не думаю, что выше, чем на линейном сторадже
George
а сжатие, если в цпу не упирается, я бы даже на несжимаемых данных включал. Сейчас zfs не запишет сжатым блок, если он не сжался хотя бы на 12.5%, зато можно поставить хоть recordsize=16M и экономить на последних блоках
Алексей
Линейный сторадж это что?
Fedor
Не ков
Алексей
Э, ну пока не готов отказаться
Fedor
Если можно использовать зфс - хотябы ради чексумм и снапшотов я его буду использовать
Fedor
Одни только бут энвайрмент в соляре чего стоят
Fedor
Один раз даже спасли 😁
Алексей
Интересно, а зачем вообще блоки по 16мб?
Fedor
Больше блок - меньше перескоков головок при его чтении, что можно увидеть на очень больших файлах
Fedor
Например - бекапы
Vladislav
При большом кол-ве снапшотов, заметно использование CPU при их отображении # zfs list -t all | wc -l 33740.325u 0.849s 0:27.00 4.2% 73+178k 25834+0io 0pf+0w # time zfs list -t all | wc -l 7530.033u 0.075s 0:00.11 90.9% 67+182k 5292+0io 0pf+0w
Nikolay
Подскажите, насколько актуален совет: У меня есть 6 дисков по 4 Тб. Совет говорит что лучше сделать RAIDZ x 2: zpool create -f myzpool raidz hd1 hd2 hd3 \ raidz hd5 hd6 hd7 чем один RAIDZ2: zpool create -f myzpool raidz2 hd1 hd2 hd3 hd4 hd5 hd6 Первый выигрывает в скорости и чуток в объеме. Что скажите ? насколько это действиетльно полезно ?
Vladislav
или сделать RAID10
Nikolay
Ему же вроде мало 6 дисков будет
Nikolay
нет, три RAID1
Тогда объем станет 12 Тб. Может оказаться мало в перспективе. В целом, RAIDZ x 2 чуть менее надёжный получится. Но каких-то других критических отличий нет ?
Vladislav
в скорости восстановления после вылета одного HDD
Nikolay
Спасибо!
Fedor
Обычные рейды без чексумм например в случае пятёрки и больших дисков никогда не соберутся после сбоя.
Fedor
практически
Nikolay
Обычные рейды без чексумм например в случае пятёрки и больших дисков никогда не соберутся после сбоя.
Потому и хочу попробовать raidz. И для саморазвития. Сейчас у нас на файловом 36 дисков по 2Тб в raidz2 - работает отлично. Решил на впс тоже организовать
Fedor
если требуемое количество записи уложится в иопс - почему нет
Vlad
Коллеги, является ли на сегодня нормальной практикой использовать mirrored 2 x SSD одновременно для SLOG + L2ARC (две разные partitions)?
Vlad
сколько памяти на хосте и размер пула?
Вариант 1: 4GB + 20TB Вариант 2: 16GB + 40TB Вариант 3: 64GB + 64TB
Сергей
4Gb - RAM и при этом пул на 20Тб? Даже с L2ARC это будет жестоко. Если есть возможность - добавляйте RAM и только когда уже нет возможности добавляйте L2ARC. Если памяти много, то лучше на ssd вынести SLOG и special vdev. Тем более что у вас зеркало из ссд Но по сути вопроса - можно держать и на одном ссд, они сейчас быстрые (я надеюсь что у вас такой) и поэтому одновременный доступ не будет являться узким местом
Ivan
советуют держать гиг рамы на терабайт данных