Свежие комментарии

Title Comment
1% - бессмысленно

Не настаиваю :-), но упомяну про скрытые плюсы. Очень хорошо жмутся метаданные (пусть их объём и невелик по отношению к данным). Насколько помню, ты используешь 1MB recordsize. Если файл больше 1MB и нет сжатия, то последний блок аллоцирует на диске 1MB. Если предположить, что размеры файлов имеют случайное распределение, то в среднем на хвосте файла можно ожидать выигрыша в 0,5MB на диске и это не отражается в коэффициенте сжатия. Как оказалось, embedded-data block pointers после включения lz4 имеют ощутимую долю запросов (если где-то ещё остался счётчик могу посмотреть % от общего числа запросов в реальной эксплуатации). Ну и по умолчанию арк теперь жмёт блоки данных (lz4) и хранит их в таком виде в памяти. Экономить на процессорном времени не сильно получится :-).

lz4 в смысле latency вовсе не бесплатный

Если мне не изменяет память, если блок не жмётся то пишется не жатый и читается соответственно. Если удалось хоть немного сжать, то с диска будет читаться меньше секторов, что может компенсировать время затраченное на декомпрессию, поэтому с latency не всё так однозначно.

Ну вот samba 4.6/4.7 -

Ну вот samba 4.6/4.7 - упирается в ядро CPU, насколько я вижу. 4.3 (которая у меня была побыстрее) - в pkg нет, собирать немножко лень.
4.8 - упирается хз во что, не вижу упора, но тем не менее.

С другой стороны Win10, совокуплено через асусовский свитч (но mbuffer-у свитч не мешал)

Если затюнить

(11.1 + samba 4.4) <-> win 10 без тюнинга на 10 гигабитах упирается в 1,18GB/s. Проверено не на одной машине. Правда процессоры помощнее.

Спасибо за совет с lz4/нулями

Спасибо за совет с lz4/нулями, докладываю:
samba 4.6, 4.7 (из настроек SO_RCVBUF=2097152 SO_SNDBUF=2097152 остальное все что пробовал - не влияет на производительность):
~660MB/sec read speed (копировал Windows Explorer, он побыстрее), smbd ложится на 100% CPU и все.

samba 4.8 (тот же конфиг): 800-810, может быть даже больше, smbd 130% CPU ну и видно что там worker threads запускаются.

Самбы 4.9 в портах отчего-то нет, хотя уже два месяца как вышла.

При этом Changelog у самбы не очень внятный, они пишут про новые features, а вот то что aio реализовали иначе в 4.8 - с большим трудом нашел.

В принципе, 800+ меня устраивает. То есть конечно у меня есть программы, которые умеют читать больше (FastRawViewer, если его кормить нежатыми сонями - гигабайта полтора/сек может выжрать), но в реальности это все уже не надо.

Достать линейку и померяться

Достать линейку и померяться - несложно.
Взял я самые сжимаемые файлы, которые у меня есть - нежатые raw (там в каждом 16-битном слове два верхних бита - нули, т.е. на 12% жмется гарантировано, ну а дальше - как кто умеет, zip где-то 80% от полного объема).

Ну и результаты (других файлов на томе нет):
zfs get all | grep compr
ztest compressratio 1.01x -
ztest compression off default
ztest refcompressratio 1.00x -
ztest/test compressratio 1.01x -
ztest/test compression lz4 local
ztest/test refcompressratio 1.01x -

1% - бессмысленно.
Для других данных (из тех что у меня много) будет еще хуже.

Скорость записи, соответственно, ну тоже не растет. При записи 600Mb/sec - 6 процессорных threads каждая жрет половинку CPU по top.

Хрен эту самбу разберет.

Хрен эту самбу разберет.
Ну то есть с пару лет назад я столкнулся с тем, что samba 4.3 работала быстрее, чем 4.4 (а более новых тогда вроде бы не было, или что-то было в бете), ну так с тех пор и работает у меня.

Но блин, 4.3 уже в портах нету, и не сравнить.

Ну считая что ядро у этого

Ну считая что ядро у этого нового атома - в 4 раза медленнее, чем у i3/3.3Ghz, там, прикидывая хрен к носу, ~200MB/s на ядро должно получаться. Или больше гига на всех восьми.

Попробую вот на тестовом томе, который 3x6Tb stripe

Если затюнить - заставить

Если затюнить - заставить использовать мегабайтное окно TCP и пр.

А не возникает ли там проблем на пустом месте

А с чего им возникнуть? Блоки по дизайну могут быть любого размера. Помнится у тебя в конфигурации raidz2 (4+2) два диска при чтении часто простаивали. А если бы блоки были разные - читалось бы со всех. Плюсов достаточно и они понятны, а из минусов на ум приходит только использование на очень медленных процессорах.

Не хочу возиться с рамдиском

Со стороны zfs достаточно одного hdd. Для чтения создать в датасете с lz4 большой файл забитый нулями или ещё быстрее будет читать большой sparse файл. Для записи подойдёт файл забитый нулями в датасет с lz4. На стороне win если нет быстрых nvme (или жалко) для чтения можно использовать diskspd.

А не возникает ли там проблем

А не возникает ли там проблем на пустом месте от небольших сжатий? Ну там блоки стали не известного размера, а переменного?

Не хочу возиться с рамдиском,

Не хочу возиться с рамдиском, поэтому увидим когда полноценный массив (с L2) туда приедет.

Но вообще - ну скорее таки меньше.

lz4 в смысле latency вовсе не

lz4 в смысле latency вовсе не бесплатный - если данные не жмутся, лучше не надо

Соответственно, zfs-компрессия не используется

Я бы и для плохо сжимаемых данных включал lz4. Впрочем для данного процессора лучше проверить.

виден небольшой запас, процентов 10 еще можно добавить

mbuffer показал пропускную способность сети 1+GB/s. Думаю от самбы следует ожидать подобного результата.

У меня данные, за редчайшими

У меня данные, за редчайшими исключениями, плохо сжимаемые. Соответственно, zfs-компрессия не используется.

То что в ежедневном режиме

То что в ежедневном режиме гоняется через zfs send - оно по большей части сжатое (в смысле - сами файлы внутри сжатые/несжимаемые).

Ну и на 10G, то есть гигабайт в секунду, сжимать могут не только лишь все.

И ещё момент касательно zfs

И ещё момент касательно zfs send и компресии: когда я развлекался с этой темой пару лет назад, zfs send --compressed ещё не существовало даже в OpenZFS, хотя уже был фичереквест. Тогда для сжатых файловых систем zfs send безусловно распаковывал данные перед отправкой, так что в обратной компрессии перед выпуском в сеть был смысл для сжимаемых данных и незанятых ядер CPU.

Нынче уже есть zfs send -c и оно сжатые блоки данных посылает в сжатом виде, но вот блоки с метаданными оно AFAIK таки разжимает перед отправкой и если метаданных много... Можно потестировать.

Теперь понятно.

Теперь понятно.

Я, кстати, сейчас припомнил, что для определенных комбинаций скорости CPU источника и приёмника и скорости сети при передаче бекапов мне неплохо помогала компрессия потока при помощи zstd (порт archivers/zstd):

dump ... | nice zstd | ...

На Xeon E5620 2.40GHz оно мне сжимало со скоростью 48 мегабайт в секунду и экономило 37%, сжимая 417G до 263G и время передачи с 5 до 3 часов (там был медленный приёмник).

Я имел в виду вот что:

Я имел в виду вот что:
Если я пускаю zfs send | ssh remote zfs recv
То где бы оно не сломалось, тут, там, посередине - достаточно проверить один код ошибки, если он не 0, то клеим ласты.

А если же мы к примеру запускаем как-то так (синтаксис условный, могу напутать с кавычками)
ssh remote "nс -l port | zfs recv" & # я кстати сходу даже не знаю можно ли так, но почему собственно и нет....
sleep 1;
zfs send | nc remote port

То вся логика обработки ошибок, количества мест их возникновения и проч - сильно усложняется в сравнении с one-liner.

А если я для сохранения 1-liner на своей стороне - на удаленную сторону привешу zfs recv в inetd.conf - то скрипты опять 1-liner, но вот обработка ошибок еще более усложняется.

Это я понимаю.

Это я понимаю.

Я не понял, отчего вот это было сказано? "Проблема в том, что мне нужен именно remote shell, чтобы ошибки с удаленного конца ловить." Под remote shell тут понимается именно ssh? Он не имеет проблем с передачей признака ошибки, как впрочем и rsh.

Ну подождите: zfs send | {

Ну подождите: zfs send | { ssh remotehost zfs recv && touch $s; }
Это именно кормление zfs recv данными через медленный (в данном случае) ssh.

Оно у меня так сейчас примерно и работает, но проблема в том, что ssh на новом ящике - медленный.

Нет, я имел в виду именно то,

Нет, я имел в виду именно то, что написал. Если удалённый zfs recv вернёт ошибку, то ssh её вернёт тоже и локальный touch не исполнится. И какая разница - проверять код возврата сложной команды или простого test -e localfile ? Суть одна и решение полностью корректное.

Ну то есть наверное вы имели

Ну то есть наверное вы имели в виду "на удаленном хвосте запустить mbuffer -I | zfs recv && touch

Ну да, так можно, онанизм но можно.

zfs recv примет данные откуда

zfs recv примет данные откуда? C stdin? Ну вот со скоростью подачи через ssh и есть проблема.

> Проблема в том, что мне

> Проблема в том, что мне нужен именно remote shell, чтобы ошибки с удаленного конца ловить.

Ммм, а в чём проблема с ошибками?

s=/var/run/send.success
rm $f && zfs send | { ssh remotehost zfs recv && touch $s; }
if [ -e $s ]; then
success
else
failure
fi

На FreeBSD не так

На FreeBSD не так

У нас на линуксах в какой-то

У нас на линуксах в какой-то момент выяснилось, что rsh теперь тот же ssh...

Я сдался, 350Mb/sec меня, на

Я сдался, 350Mb/sec меня, на самом деле, устраивают почти.

Pages

Subscribe to comments_recent_new