Samba 10G Performance

Картинка для привлечения внимания. Сервер FreeBSD+Samba, клиент: Windows 8.1 ,

Есть у меня FreeBSD-шный бокс с ZFS к которому я хожу по Samba по 10G-линку. И до вчерашнего дня производительность не радовала, 200Mb/sec получались только изредка, а вообще типичная скорость была лишь немногим выше гигабита. При этом

  • MTU 9000 на этом линке - глючило (временами отваливалась сеть)
  • А практически такой же бокс (сторадж - просто RAID6 на адаптеке) на iSCSI по такому же линку - свои 400-500-600 (и 700 в тестах) мегабайт в секунду на больших файлах спокойно отдает.

Я грешил на тормоза ZFS (в частности, на фрагментацию), но с подачи комментаторов померял скорость со стандартным размером записи и с мегабайтным увидел скорости в 450 и 500-510Mb/sec (при создании файла из /dev/zero с выключенной компрессией) и стал решать проблему системно: все порубать топором и начать с чистого листа.

Настройки

1. MTU 9000

списал строчку со второго ящика, где никаких проблем не было, списал виндовые настройки со второго интерфейса (но там тоже только MTU):

ifconfig mxge0 ipaddr mtu 9000 lro

Второй день работает нормально.

2. Другие настройки сети FreeBSD

У меня там было наворочено еще от 8.3 (и от какой-то презентации Сысоева "как настраивать FreeBSD для 10 гигабит). Я на это посмотрел - и /etc/sysctl.conf обнулил в сетевой части, решил что потом буду по одному добавлять.

Таким образом, настройки стандартные.

3. Samba: 3.6->4.3

Давно пытался обновить, всякий раз начинал читать про доменные контроллеры и AD и ломался. В этот раз дочитал до "простой парольной авторизации" и осилил.

Написал в smb.conf:
server role = standalone server

Правда не знаю, влияет ли это на что-то, но мои несколько shares с парольной авторизацией - работают.

4. Настройка Samba

Вот такая, скопирована из 3.6, добавил read raw/write raw:

read raw = yes
write raw = yes
read size = 65536
max xmit = 65536
socket options = TCP_NODELAY SO_RCVBUF=655360 SO_SNDBUF=655360

Результат

Вот, например, такой:

При более детальном рассмотрении, выяснилось, что ~450Mb/s - это и скорость источника (SSD) и примерно та скорость, с которой Samba+ZFS жрут данные (точнее, сервер может жрать чуть быстрее, см. ниже), случайно так совпало.

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

Оно вполне уверенно выжирает ~8 гигабит до тех пор, пока их с той стороны готовы жрать (то есть пока кэш ZFS не наполнится). А потом - sustained примерно на скорости ZFS, ~500Mb/sec, 450 - это ограничение источника.

И это не какая-то хитрожопость винды, чуть больше гигабайта в секунду честно прилетает в интерфейс (понятно что over 1Gbyte/s надо ловить, чтобы начало передачи не попало в серединку секунды):
lexa@home-gw:/home/lexa# netstat -I mxge0 1
            input          mxge0           output
   packets  errs idrops      bytes    packets  errs      bytes colls
         0     0     0          0          0     0          0     0
         2     0     0        132          2     0        108     0
    119196     0     0 1074512860      60482     0    3351540     0
     59322     0     0  505632650      30233     0    1675086     0
     64256     0     0  552026374      32962     0    1826064     0
     62976     0     0  597133764      32300     0    1789476     0
     58867     0     0  532466126      30205     0    1673322     0

 

Итого

  1. Я не знаю, что дало наибольший эффект: смена MTU или апгрейд самбы. Скорее второе (SMB3, то-се).
  2. Это не настройки FreeBSD: я для пробы вернул старый sysctl.conf, ничего не изменилось.
  3. Скорости, ограниченные только реальными ограничениями дисков - возможны. Были бы диски быстрее - ну может не уперся бы в теоретические сетевые ограничения, но 8Gbit/s которые я вижу на бурсте - это уже хорошо.
  4. Надо ZIL/L2ARC на SSD прикручивать на эту самбу.

Comments

Я вот тут прикрутил 80Gb L2ARC на 5x3Tb raidz1 пул. Ну, купил 120G SSD'шку, поставил систему в начало, а хвост отдал под L2ARC. Hit rate 10%. Т.е. мог и не париться.

А вообще, надо уже перейти на самбу 4.3, да.

Ну вот у меня каждый день - пара десятков (а бывает и пара сотен) гигабайт бэкапа.
Понятно что это - любой L2ARC убьет насмерть.

То есть отдельные пулы и все вот такое вот....

> Понятно что это - любой L2ARC убьет насмерть.

ниразу не эксперт - а не продают ли устройств которые просто представляют из себя много-много слотов для DRAM модулей подешевле, а снаружи они видны как диск ?

Z / V

Были такие. С интерфейсом SATA (причем как бы не 1.5gbit). SSD-шки их съели.

Но в случае ZFS - можно системную память использовать под ARC

у меня до сих пор такой на 4Гб стоит в компе на DDR-1 от Gigabyte

Осталось только понять - зачем?

ну хбз - работает
викинуть жалко
у меня там примари скрач фотошоповский живёт ;)

Ну там 150Mb/sec (реально скорее 120), а на SSD поди 400+. Скратч будет быстрее на SSD, ему нужна линейная запись/чтение, не random

130/110
хоть у меня на материнке и нет SATA-3 (P6T WS PRO)
убедил - выкину! ;)

Я вот сегодня приценивался к LSI-9211 HBA.
8-портовый - 99 баксов у китацев (интересно насколько подделка, конечно). Можно и сделать себе SATA3 за такие деньги.

На авите такое регулярно бывает, по крайней мере в Питере. Ну да, не новое. Но с проверкой.

Ну вот приедет сейчас 10G intel - посмотрим какие они китайские контроллеры.

Ну, я читал всякое, что это отбраковка. И поэтому как повезёт. Может автоконтроль чипа и ошибся и всё будет работать. А может не ошибся и там будет каждый 1000-ый пакет битый. или не тысячный. И гарантии нет, потому что по серийному номеру такое никогда не было продано.

Ну посмотрим, интересно.

Мирикомовские толстые и короткие кабеля мне уже поперек горла, хочу тонких и длинных

Я тут опять смотрел на 10G мне рассказали лайфхак: карты без модулей, и медные провода с SFP+ разъёмами. До 10 метров оказывается бывают, стоят дёшево. Ну, по сравнению с SFP+ модулями.

Ну есть такое, да.

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

А RJ-45/10G уже onboard стали появляться и цена за порт вменяемая.

А покажи? Я искал — не нашёл.

Не, мирикомы и, особенно, мелланоксы я находил. Я про те, что не они :)

Китайский intel X540?

Так и ищи Intel X540, выбирай по from China

$150/штука, не так и дёшево :)
Смешно, что дуалпорты не принципиально дороже.

Ну вот я таки хочу RJ45, если заработают и несколько месяцев нормально проживут - мирикомы пропью.

Расскажешь! (отдельная ненависть к стоимость портов на свиче, тащить отдельный провод P2P это какое-то ивзращение!)

У меня три ящика, считая WS, свитч не нужен.

Каждый с каждым? :)
Ну, интернет же ещё приходит в дом, такое. Т.е. две подсети на ящике, брр. Неудобно, как по мне.

У меня на ящике, в который приходит интернет в дом
- отдельная подсеть для Wifi
- отдельная подсеть для родных и близких
- отдельная для меня (1Gbit)
- отдельная 10G
- два аплинка.
И еще есть отдельная 10G для того стораджа, который раньше был infiniband.

Хм. И в Москве есть.

а как ZIL должен помочь? samba любит sync(2) ?

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

должен. какое-то неправильно приложение! :) если fsync() в каком-то виде есть, то нужен ZIL, конечно. в zfs коммит ну ооооочень дорогой, да еще и в значительной части однопоточный.

Ну я вот тут втихаря ваяю приложение для копирования фоточек с флеш-карточки/камеры.
И таки да, призадумался - и если стоит галка "удалить с источника", то буду делать fsync(), потому что потеря таких данных - это бывает очень больно и дорого.

ну тогда имеет смысл ограничиться одним fsync(2) между копированием и удалением? мне кажется конкретно в этом случае ZIL погоды не сделает - в худшем случае + несколько секунд. ZIL хорош когда fsync(2) сравнительно часто используется. иначе получится, что есть постоянный overhead, а выхлоп неочевиден.

Ну я ж должен каждый файл скопированный fsync-ать.

А источник, если это XQD, способен 300-400Mb/sec выдать.

Можно начать sync-ать после того как все файлы скопировались, вроде должно быть лучше.

fsync(2) будет синкать только один файл. дальше вопрос можно-ли через самбу протащить fs-wide sync

Стандартное значение strict sync = no у самбы. То есть даже fsync (ну, виндовый аналог) не проскочит

тогда нужна какая-то педаль с ssh sync :) дергать zil на каждый write(2) из самбы - это как-то неправильно, кмк. особенно на общем dataset - оно же все несвязанные метаданные сливает в том числе.

ZIL на работает для zraidX, обрати внимание.

как не работает? почему у меня работает? (на линуксе)

Да, это, кажется, я какую-то фигню сказал. Вот 100% уверен был, что где-то читал, но теперь никаких следов не могу найти.

Я с SSD-шными хренями - буду в любом случае пересобирать на mirror-ы.
C RAID-ами этими - ебатория одна, а 2.5" можно много набить в micro-ATX ящик.

Но все это - не раньше августа. Монголия зовет. И Карелия.

Ну, ты богатый :) А я бедный :)

Ну вот ящик который чешется поапгрейдить - там диски 5-летний гарантийный срок выработали уже.

Обычно это звоночек.

У меня так только что заменены 2TB Green на 3TB Thoshiba P300. Потому что грины посыпались разом (несмертельно, прочлись без проблем, но пошли релокейшены и решил, что пора). По 41 тысяче часов наработали. Но позволить себе потерять половину оплаченного места при ныншней цене на винты я не могу.

Вот я затрудняюсь пока с.
То есть raidz2 переживает крах двух любых дисков.
Набранный из зеркал ZFS - очевидно что крах любых двух - не переживает.
resilver - будет идти, по идее, сходное время (нужно заполнить один новый диск).
Перформанс на чтение: пофиг, добъем для активного сабсета l2arc-ом.
Перформанс на запись: по идее, если CPU достаточно, то raidz2 быстрее в однопоточном режиме т.к. один (большой) файл будет размазан по всем дискам?

https://github.com/zfsonlinux/zfs/issues/3497 - ускорит восстановление в разы (пропорционально шпинделям)

Надеюсь, оно будет в OpenZFS а не только в ZOL.

Но всё равно ZFS не умеет решейпить vdev, так что когда оно будет переехать на это можно будет только бэкапои-и-рестором.

будет.. общался с delphix - им это интересно, они патчи инспектируют..

Если ты можешь себе позволить (по портам и прочему месту) иметь сразу старые диски и новые какое-то время, то я бы померял :)

У меня просто железка больше дисков не вмещает, поэтому мой единственный путь — это заменять диски в raidz1 по одному.

С UFS на ZFS я переезжал взяв два четырёхтерабайтника в аренду и вставив ещё двухпортовый контроллер за 600 рублей :)

У меня в смысле "прочего места" - свободны два 5" отсека. Туда влезут 8 штук 2.5" (почему я и фапаю на этот размер). И портов 5 саташных свободны.
То есть в каких-то вменяемых размерах - можно экспериментировать.

Но. Это рабочий бокс, просто диски из (бывшего раньше) Full Tower убраны в шкаф, ибо я задолбался иметь их под столом.
То есть надо и данные не потерять (ну спишу, да, на дискетки) и времени на это больше пары дней не могу тратить.

Если SSD (или диски тонкие), то в два 5.25 и 12-16 дисков влезут :) Искать Icy Dock MB996SP-6SB и Icy Dock ToughArmor M998SP-B

А ты 8-дисковый этот вживую использовал? Что там с шумом (два вентилятора ж) и перегревом (8 дисков ж)

нужно всю систему выносить в вентиляционный стояк.. при правильном положении в пространстве и кулеры не нужны ;)

До тех пор, пока у какого-то соседа выше вентиляционный стояк не совместится с канализационным.

надо как кондиционер в сплит системе... вентиляторы наружи, фреон по трубкам внутрь дома и дуть холодным на них.

Z / V

кхм, зачем фрион? обычную воду или антифриз.. а на балконе радиатор от жигулей.

Не, у меня только 4-х и 6-ти дисковые есть. В 4-х медленные терабайтники, поэтому не греются, в 6-ти только 3 SSD, тоже полет нормальный.
А вентиляторы я оторвал - жужжит (не то, чтобы сильно, но меня не устраивает).