Когда в руке молоток - все кажется гвоздями

Наконец я могу, не ограничиваясь скоростью источника, померять скорость своих Samba-ящиков:

Сначала оно жрет его в ARC - и оттуда горб (1+Gb/sec) на первые гигабайт 8, потом легкий провал (сброс кэша), потом sustained на ~600.

Конфиг:

  • 8x1Tb WD Re (дискам 4 года, они ~100+ со шпинделя выдают, надо будет поменять постепенно на те, которые 150+ могут, а больше и не надо уже)
  • Adaptec 5805 (и он на ~7% быстрее LSI 9211-8i, померял сегодня)
  • FreeBSD 12-CURRENT
  • ZFS RAIDZ2
    • ARC 14Gb, L2ARC выключен
  • Samba 4.3 (в предыдущих экспериментах показалось что 4.4  - медленнее)
  • Intel X540-T2, mtu 9000
    • Сеть на FreeBSD маленько тюнил (см ниже)
  • Рабочая станция на Windows 8.1
    • На винде - заменил Interrupt Moderation c adaptive на low (и это заметно помогло на чтении), send/recv buffers - на максимальные значения, драйвера последней версии (но разницы с драйверами что сама винда приносит - не вижу).

Что делал с сетью на FreeBSD-стороне (оптом, каждую отдельную настройку не подбирал, скопировал чьи-то чужие настройки для 10G router):

/boot/loader.conf:
hw.ix.tx_process_limit=512
hw.ix.rx_process_limit=512
hw.ix.txd=8192
hw.ix.rxd=8192
hw.ix.enable_aim=0

# Copy-pasted, реально близко столько не надо, используются 1500 и 9000 соответственно
kern.ipc.nmbclusters="5242880"
kern.ipc.nmbjumbop="2621440"

 

/etc/syscttl.conf
net.inet.tcp.sendbuf_max=33554432 
net.inet.tcp.recvbuf_max=33554432 

 

smb4.conf:
read raw = yes
write raw = yes
max xmit = 65536
socket options = TCP_NODELAY SO_RCVBUF=655360 SO_SNDBUF=655360
#aio  - пробовал, выключено
#use sendfile  - пробовал, выключено
#large readwrite - пробовал, тоже закомментарено
log level = 0

Могу еще попробовать чего, если интересно.

Comments

Алексей, меня ваша картинка просто убила на повал. На моём ноутбуке (основной комп) Lenovo Y460 копирование с диска Seagate ST9750420AS (7200, NTFS, второй раздел из двух) на Seagate ST9320325AS (5400, вставлен вместо DVD, FAT32, раздел в конце диска) даёт около 55 Мбайт/сек, со всплеском до 60 Мбайт/сек. При копировании с первого на Seagate BlackArmorDAS35 (1 Тб, 7200, eSATA, NTFS, один раздел) скорость плавает 60-70 Мбайт/сек. У вас - в десять раз быстре. Ух. Некисло наверное ваш конфиг стоит, плюс, сколько потрачено времени на его настройку и выбор.

Ну давайте посчитаем, сколько оно стоит:

  • Ящик в котором это все можно разместить + материнка + процессор + память.
    Свой старый i7-2600 (без дисков и видеокарты) я продал в мае за $100. Это было очень дешево (зато забрали сразу).
    Собрать новое по порядку величины стоит $300 (это 20 тыс, по 5 тыс.р. за материнку, процессор, память и корпус - более-менее вписываемся же).
  • Две 10G сетевые карты:
    • В районе $120 за комплект, если брать "старое странное кривое" (вот можно мои мирикомы купить)
    • либо $250 за пару китайских однопортовых интелов
    • либо $320-350  за комплект двухпортовых интелов (если планируется, к примеру, еще один NAS в доме - у меня их два).
  • SAS или SATA HBA контроллер. Китайский LSI 9211-8i - $87. Это будет чуть медленнее того адаптека, который у меня используется, но в 7 раз дешевле.
  • Диски. У меня 8 терабайтников 7200rpm, старых.
    Возьмем более-менее аналог, WD10EFRX. 8 штук при покупке тут обойдутся по сегодняшнему курсу в $573

Получается, соответственно, $500 за минимальный ящик с 10G + 10G карта в рабочую станцию (без дисков), $700 - за ящик с двухпортовыми 10G картами.  Плюс диски. С терабайтниками - ящик стоит "как диски" (плюс-минус), с трех-терабайтниками (по $150 за диск) - ящик будет 1/3 от всего решения.

Соответственно, почему люди мучаются с домашними NAS с гигабитными сетями - ну не знаю.

Да, время на настройку всего этого нужно. Но мне - прикольно.

UPD: с ноутбуком, конечно, ничего сделать не получится, 10G туда не воткнуть, значит предел - 120Mb/sec по гигабиту. Ну если только вот какой-то Thunderbolt, да.

UPD2: ближайший аналог, как я прикинул, DS2015xs, всего-то на $1000 дороже и без такой гибкости (там просто 8x3.5, а у меня еще 6x2.5 в том же корпусе). Зато хот-свап и очень компактный корпус.

Время на настройку нужно только первопроходимцам :) Остальным достаточно просто почитать этот блог или хобот. Я вот так 10G карты купил, узнав отсюда, что в Китае всё есть, и даже работает.

Ну, нет.

Бывают же странности "гигабитный порт работает на половине скорости" (более того, я примерно с этого и начинал лет уже 12 назад). С одной стороны - информации много, с другой - она же наслаивается и устаревает. Все приходится самому.

Да, не так дорого. Люди думаю в массе используют готовые NASы, т.к. всё равно подключаются по WiFi. А если учесть всякие затраты на решение проблем при апгрейдах софта, то без необходимости или желания все берут Synology, но те модельки, что попроше.

Сколько у вас итоговый объём с учётом зеркалирования, 1 Тб? На какое расстояние такое соединение позволяет вынести коробку?

С ноутом да, мне и такой необходимости нет. Но удивился, что аж в 10 раз медленее! До чего технология дошла в обычный дом :)

Ради интереса глянул, сколько будет стоит такое чудо техники для Маков: $700 оптика http://www.bhphotovideo.com/c/product/1132027-REG/promise_technology_sle... и $500 витая пара. Но зато по целых две пары портов в адаптерах.

8 дисков в raidz2 (два любых можно сломать одновременно), то есть ~6Tb места. Чуть меньше, потому что у ZFS побольше потери, ну и последние ~10% лучше не занимать, проще считать что 5Tb.

Расстояние для Cat 6a - вроде 100 метров.

Вдогонку.
для маков, в теории, можно гонять бешеные гигабиты прямо по thunderbolt. Метров, поди, на пять.

В практике не разбирался, у меня только в ноутбуке такой порт есть, а одного мало.

по идее хоть на километр - если найти мифический оптический кабель тандерболта.

вроде на 100 метров.

Но я вот прочитал это вот: http://appleinsider.com/articles/14/02/16/review-cornings-thunderbolt-op...
и не понял.

В разъеме макбука - медь. Получается, этот кабель - это там внутри, в разъеме, медиаконвертор?

Получается, да: https://www.corning.com/microsites/coc/ocbc/Documents/CNT-076-AEN.pdf

С ума сойти!

извращенцы, угу.

> Ух.

а вам зачем больше-то ? автор поди тестирует очень часто всякое на туевой хуче raw ... поставьте себе SSD внутрь lenovo уже хорошо будет, 1TB < ~$300

Z / V

Мне действительно не к чему. Я просто удивляюсь прогрессу и сравнительно небольшой цене таких скоростей (в 10 раз). 512 SSD стоит как мой ноут, через годик его просто полностью сменю.

Ну счастье - в 10Gbit.

Кои стали доступными минимум 4 года назад, первые дешевые ($23 за штуку) карточки у меня завелись дома в октябре 12-го года: http://blog.lexa.ru/2012/02/10/10g_doma_pervye_uspekhi.html

Первые 8G в ARC - это интересно, у меня скорость падает намного раньше, где-то на втором гигабайте. Виртуальному NAS отдано 16G, но там ещё живет torrent, docker...

Это был свежезагруженный NAS, ARC - пустой. Может быть дело в этом.

> Наконец я могу, не ограничиваясь скоростью источника,

это все потому что памяти на ram disk не хватило ... надо иметь типа 128+Gb RAM !

Z / V

Не встаеть. 32 - максимум на этой архитектуре

(а на более других горшках - другие приколы)

> Не встаеть. 32 - максимум на этой архитектуре

ждем 47 годовщину !

Z / V

128Gb через год не будет, уже известно.

Даже в новом EP? У меня в простой i7-6700K вроде как 64 встаёт (я поставил 32 потому что там цена вовсе не в два раза в этом месте возрастает), но это же не топовая плафторма.

Ну так новый EP - Broadwell, только вот вышел.
Не хочу!

Я Skylake уже не хочу, i7-7xxx жду.

Так то да, в 2011-м сокете памяти можно

А чо обещают? :)

Ну таки да.
Но с 2016Q3 обманут, похоже (только ноуты), я думаю что реально 2017Q2 (или Q1)

Я имею ввиду — что там хорошего будет?
Ну вот Support for Intel Optane Technology вижу, но непонятно что вообще под этим скрывается.

3-й thunderbolt
поддержка optane - да, непонятно что это
+4 линии PCIe в чипсете

Ну и я надеюсь на еще более лучшее энергоуправление, потому что вот в скайлейке хорошо но недоделано (и проблемы реально даже у интела и MS), тут наверное сделают работу над ошибками.

Да на десктопе можно выключить почти всю энергосберегайку :)

Я вот гоняю много бенчмарков, так и турбобуст вырубил, а то мешает.

меня вот 20Wt в idle (по core temp) раздражают невероятно.

20 должна вся система в простое потреблять.

Интересно посмотреть на картинку чтения. Особенно в сравнении с записью. А ведь наверняка картинка есть :-).

Чтение без L2Arc - примерно на 100Mb/s медленнее в среднем и близко не такое ровное.

Но тестировать чтение неприятно "SSD запиливается"

А ведь скорость чтения и записи у hhd дисков условно равны :-).

Между тем диском и этим диском - еще samba (довольно загадочная) ну и клиент, который этой самбе что-то транслирует.
И во что оно упирается (latency? неверный readahead?) - хер пойми.

Вот при записи видно, что сетевая часть - не (сильно) ограничивает. По тому самому горбу в 1+gb/s в начале.

При чтении - чтобы диск не запиливать надо свой софт какой-то понятный-вменяемый делать (или осваивать всякие готовые), а лень.

Я думаю самба в данном случае не является ограничением.

Чтоб не пилить ssd в Windows в Cygwin64Terminal (ставиться на раз) набираем dd if=/cygdrive/t/test of/dev/zero ... ну в общем всё как во FreeBSD.

И попадаем еще на дополнительный emulation layer.

У меня где-то в закромах был варез, который писал большие (и маленькие и всякие) файлы, я его в прошлый заход, когда iSCSI vs SRP мерял написал, вот помню что написал.
Поищу.

Но на самом деле интерес довольно условный уже, в интересном мне паттерне (просмотр/редактирование большого набора raw-файлов) я вижу скорости на интерфейсе "под 400" (раньше было скорее "под 250" и то не каждый раз) и еще я вижу, как оно постепенно (довольно медленно, что обидно, надо пожалуй поменьше recordsize попробовать) ложится на ssd-кэш и мне хорошо - вся эта йэбля была не зря.

(а еще я бэкапный раздел унес на отдельный пул - и у меня основной не встает колом когда оно бэкапится)

>> И попадаем еще на дополнительный emulation layer.

Ну так легко же проверить :-). Загнать небольшой файл (6-8GB) в ARC и проверить самбу и слой эмуляции.

>> еще я вижу, как оно постепенно (довольно медленно, что обидно, надо пожалуй поменьше recordsize попробовать) ложится на ssd-кэш

Нижнюю планку скорости записи проверял? Ещё бы до конца понять что делают .l2arc_norw и .l2arc_noprefetch :-). Какое у тебя сложилось мнение/понимание?

Ну вот я и проверил (файл был на 80, но читал я оттуда 10), см ниже.

Планка записи у меня поднята до небес, буду еще играться с recordsize (похоже что 1M именно для L2ARC не сильно оптимально), но наверное уже ближе к сентябрю, дела все забросил с этим NAS.

>> Планка записи у меня поднята до небес

Я имел ввиду скорость записи на заполненные ssd, входящие в кэш.

>> буду еще играться с recordsize

Recordsize - это наверено вообще для любой поставленной задачи "главная" тема. И наверно довольно сложная :-).

Ну я понимаю какой паттерн мне интересен и что мерять, дальше можно уже тестовый стенд делать

На страйп пишется - ну вот 400Mb/s видел по zpool iostat. Разрешено 900.

>> Ну я понимаю какой паттерн мне интересен и что мерять, дальше можно уже тестовый стенд делать

Я немного не об этом. Файловая система читает допустим блоками в 1MB. Самба запрашивает блоки по 64K. Допустим в ARC кэшируется всё ... и понеслась :-). Для примера: разреши в ARC кэшировать только метаданные. Затем прочитай по самбе большой файл с recordsize 1MB. Затем такой же по размеру файл с recordsize 64kB. Сравни :-).

iostat это немного не то :-). Но если оттолкнуться от 400MB/s записи в кэш и 500-600MB/s чтения из пула hdd, то фраза "как оно постепенно (довольно медленно, что обидно," становится как бы понятной, даже без учёта всех остальных настроек :-).

К этому прилагается еще ж паттерн доступа. В интересном мне случае
- файлы 30-80Mb (с запасом)
- читаются или "мегабайт-два" (JPEG-превьюшки; у Sony кажется поменьше они) - но сразу у десятков файлов
- или файлы целиком (один или несколько).
- или только EXIF метадата (десятки килобайт) - у всех файлов каталога

Веса непонятны, оверхед L2ARC понятен (то ли 200, то ли 400 байт на record), тестовых наборов с разным recordsize сделать нетрудно, остается "достать линейку", потратить три дня (вряд-ли меньше) и померять.

Всё-таки попробуй, что я написал выше и ты удивишься результату. Я не про паттерны, а про согласование размеров блоков (recordsize) при передачи из одной "среды" в другую. А когда станут понятны механизмы взаимодействия "сред" и что на что влияет, тогда подобрать параметры под нужные паттерны станет делом техники.

PS. Заинтригую. Решил ещё раз проверить, что написал. У меня правда на тестовой машинке FreeBSD 10.1, поэтому сравнивал recordsize 64k и 128к(максимальный размер). primarycache=metadata. Дальше dd ... Выиграл 64k. Если сравнить 64k с 1M, то разрыв будет ещё больше (боюсь даже предположить :-)). Конечно primarycache=all всё нивелирует, но заставляет задуматься :-).

dd по сети или локально?

Локально на другой машине (10.3, 6 дисков, raidz1) - чем больше блок (при БОЛЬШОМ блоке у dd) тем толще партизаны.

dd для создания файла локально. По сети только чтение с windows клиента.

Ну вот да, я буду тестировать именно что "чтение с windows клиента", но там же еще
- настройки самбы
- настройки сетевой карты

Это не на полчаса развлечение, а значит ближе к сентябрю.

На гигабите то у меня проблем не было (последние пару лет что я был на гигабите т.е. 2010-12), насытить его даже с тройки "архивных" медленных дисков получалось.

Но тем не менее - попробовал, один и тот же файл, пришлось его уложить в L2ARC чтобы не отключать, ну значит 10G ресурса кэша запилили.

Локально, на сервере (из ARC, понятно):

[lexa@iscsi ~]$ cd /zdata/test/
[lexa@iscsi /zdata/test]$ dd if=file of=/dev/null bs=10M count=1000
1000+0 records in
1000+0 records out
10485760000 bytes transferred in 1.448997 secs (7236566569 bytes/sec)

Через cygwin/mingw (который пришел мне вместе с git-msys, может не очень кошерный):

lexa@ganzer970 MINGW64 /t
$ dd if=file of=/dev/null  bs=10M count=1000
1000+0 records in
1000+0 records out
10485760000 bytes (10 GB, 9.8 GiB) copied, 36.1993 s, 290 MB/s

 

Вдогонку: это, естественно, не первая попытка. А сначала 3 по сети, потом локальная (зачетная), потом по сети зачетная.

dd не торт, но вообще вот варез который просто читает файлы большими блоками через Win32 - надо освежить.

Ну тогда можно разочек и на ssd, что бы снять сомнения с самбы :-).

Нет сомнений в самбе. md5deep (первое что попалось под руку что много читает) в один процесс читает с ssd-шки 500+ (и упирается в CPU), а с сети - 200-280.

В два процесса - 990 и те же 200-280.

>> Чтение без L2Arc - примерно на 100Mb/s медленнее в среднем и близко не такое ровное.
>> Нет сомнений в самбе. ... , а с сети - 200-280. ... В два процесса - 990 и те же 200-280.

В одном случае 500MB в другом 200-280MB. Что-то здесь не пляшет :-).

Решил проверить сам. Правда у меня нет 10 гигабитной сети :-). Нашел подходящий файл на шаре (в моём случае 9,2GB, можно взять поменьше, нужно только чтобы он полностью влез в ARC). Начал читать его локально dd. У меня первое чтение 162MB/s. Четвертое чтение 8409MB/s. Проверил чтение идёт только из памяти. На стороне windows клиента прочитал этот файл. Проверил чтение было только из RAM, то есть претензий к источнику нет. Скорость 112MB/s :-). Если есть 10 гигабит и быстрый ssd на стороне windows, то можно попробовать оценить и 10 гигабит.