10G и Infiniband

О сторадж-боксах

Звезды сошлись, руки дошли и я собрал таки стораджбокс, как и собирался уже полгода
Core i5-2300, 8GB RAM, Adaptec 5805, 8x1Tb HDD (6 штук старых Barracuda ES.2 SAS, два новых WD RE4), бутовый SSD, Mellanox Infiniband (2 порта 10G). И даже есть место для еще одного диска, хотя 5" ящики и не обдуваются.

Задача: вынести HDD из рабочей станции (где было 6x1Tb SAS + Adaptec) с целью уменьшения шума под столом (ну и вообще, большей лучшести, к этому ящику же можно больше одной машины подключить). При этом надо оставить избыточность в два диска т.е. RAID6 и/или RAIDZ2. Потому как ситуация, когда один диск вылетает - она случалась уже да.

Про Infiniband и FreeBSD (again)

Все-таки Infiniband на линке FreeBSD-FreeBSD получается какой-то очень мучительный:

  • Datagam Mode - устойчиво теряет несколько процентов пакетов на ping -f (icmplim, естественно, задран до небес, разрешающее правило в ipfw - первое). Ну и всякие iperf работают в лучшем случае на гигабит, а обычно и меньше.
  • Connected Mode на первый взгляд лучше: packet loss 0%, гигабитов эффективных примерно 5, но:
    • Установить эту самую Connected Mode между двумя машинами получается не с первого раза. Иногда надо ifconfig down сказать, иногда хватает с одной стороны, иногда надо с двух.
    • Могучий tcp-поток с одной из моих машин на вторую (ftp get /dev/zero /dev/null) может отправить ее в ребут или просто в транс. При этом в другую - все в порядке и я даже zfs send/zfs receive на 6Tb в середине недели успешно исполнил.
При этом на тех же картах, портах, кабелях связка FreeBSD - Windows работает отлично и tcp-потоки никого никуда не отправляют. Но только в Datagram Mode. С нулем потеряных пакетов. Я уже вторую неделю так живу на своей WS, ни одного Ethernet, только IB (только хардкор!).

Да, попытка поднять Connected Mode между FreeBSD и Windows один раз таки удалась. После каких-то перезагрузок, подниманий-опусканий интерфейса и т.п. При этом отвалились пинги с Windows, а вся конструкция прожила минут 20, а потом FreeBSD-шная сторона перезагрузилась.

Не исключено, конечно, что какое-то железо где-то как-то криво, но с Windows все, повторяю, работает.

Такие вот вести с полей.

Про Infiniband FreeBSD-FreeBSD

Тут спрашивали, как работает IB с FreeBSD на FreeBSD.

Вкратце: очень странно работает. Но байты ходят, достаточно быстро, пользоваться можно.

Сначала мне не удалось ЭТО завести (при том, что линк FreeBSD-Windows7 на тех же картах, портах и драйверах работает прекрасно). Но тут удачно подсказали в комментариях, что это место обновилось.

Ну значит csup && make buldworld && make buildkernel, перезагружаемся и оно работает. При этом

  • При неудачном стечении светил, оно может работать в одну сторону (в одну сторону пинги ходят, в другую - нет), лечится down/up интерфейса. Это у меня было в Datagram mode, пару раз.
  • Connected Mode между двумя FreeBSD - поднялась. Пинги ходят, байты тоже, о производительности ниже. MTU работает и 16k (как уже обсуждали) и 65520 - тоже.
  • Connected Mode между FreeBSD и Windows так и не починилась. Возможно, надо перегрузить (в каком-то порядке) обе машины и я еще буду пробовать, но пока симптомы те же, что и в прошлый раз (слишком большой пакет, не будем слать). Лечится установкой mtu 2044 на FreeBSD-шной стороне.
Производительность:

Про ZFS, Advanced Format и ashift

Пару лет назад я уже исследовал ZFS на дисках с 4k-сектором, но тогда такой диск в массиве был только один (а остальные три - с 512b секторами) и какой-то значимой разницы я не нарыл.

Кроме того, том был загрузочный, а грузиться с тома где ashift не равен 9 тогдашние бутблоки не умели.

Поэтому овладев пятеркой 3Tb сигейтов я просто обязан был это опробовать.

Рассказываю.

Hardware

  • 5x Seagate ST3000DM001 (3Tb)
  • Материнка на Intel X58, Core i7 920, 12GB RAM
  • FreeBSD 9.0-STABLE, обновлялась недели три назад.
  • Попало с машины, откуда я склонировал FreeBSD. Может оно и неправильно, но уже поздно перемеривать:  vfs.zfs.arc_max="4G" vfs.zfs.vdev.max_pending=30

10G дома: Infiniband + FreeBSD

Я тут интересовался про Infiniband и FreeBSD, теперь могу и сам рассказать :)

Datagram mode

Для начала нужна FreeBSD 9. У меня - какая-то, cvsup делал где-то в январе или около того.

Далее все тривиально:

/etc/make.conf:

WITH_OFED=yes
Конфиг ядра (в GENERIC это место не включено) /sys/amd64/conf/OFED:
include GENERIC
options OFED # Infiniband protocol stack and support
options SDP # Sockets Direct Protocol for infiniband
device ipoib # IP over IB devices
device mlx4ib # ConnectX Infiniband support
device mlxen # ConnectX Ethernet support
device mthca # Infinihost cards
У меня карты mthca, остальные два драйвера в моем случае вероятно не нужны.

Далее все просто:

cd /usr/src
make buildworld && make installworld # поставит IB-шный утиль, всякие ibstat и opensm
make buildkernel KERNCONF=OFED && make installkernel KERNCONF=OFED

Что-то из этого добра (то ли userland IB-шный, то ли ядро) не собирается clang-ом, поэтому про CC=clang стоит забыть.

Если нужен Subnet manager (на другом конце линка/свитче его нет), то opensm_enable=YES в rc.conf (а если нету /etc/rc.d/opensm, то накатить его mergemaster-ом).

Бутимся....

10G дома: новые бенчмарки на Myricom

Опробованная вчера новая бенчмарка (с подсчетом md5 по куче файлов) сделана и для Myricom. Вкратце (сервер, время 1-й попытки, время 2-й попытки)

  • Win7: 2:10,2:09
  • Linux, Samba: 5:10,5:01
  • Linux, iSCSI: 1:37, 1:00

Бенчмарка "копирование Qt" оказалась очень чувствительной к количеству свободной памяти на машине. Что-то оно там префетчит, если памяти много. Как следствие, сравнение копирований между моими записями - неверное занятие. Внутри каждого отдельного поста - консистентно.

Мораль:

  • На крупных потоках один хрен, что IB, что Myricom (ну для IB я намеривал скорости побольше, но это неважно).
  • С Win7-"сервером" Myricom несколько быстрее IB. Не знаю почему.
  • С Linux-сервером - практически один хрен, что по Samba (медленно), что по iSCSI (быстро)
При этом IB-карты дешевле и двухпортовые т.е. на сервер и две WS нужны три карты, а не 4. Ну и SRP, MPI и прочие Infiniband-развлечения. Минусы тоже есть: не поддерживаются маками (Myricom - поддерживается), требуются пляски с IB-стеком, OpenSM опять же.

Завтра расскажу, как Infiniband c FreeBSD сочетается.

10G дома: Infiniband, Linux, Samba, iSCSI, SRP

Для начала картинка. Это SRP (SCSI RDMA Protocol), поднятый на Linux, клиент - Windows 7.

Если сравнивать с картинкой для iSCSI поверх Myricom (вторая картинка в этом посте), то выросла скорость на мелких блоках и нет падения на блоках больше 256к.

Но по порядку.

10G дома: Infiniband, Windows-SMB

Продолжаю потихоньку упражняться с 10G, вынул Myricom, вставил IB. Все под виндой, до Linux+IB руки только на выходных дойдут.

Для начала - завлекательная картинка:

На самом деле, я и слегка за 1Gb/sec видел, чего не должно бы быть (реальных гигабит данных 8 ровно), спишем на точность подсчета виндой.

Под катом: как оно было получено и что было получено еще.

10G дома: Myricom, Windows-SMB, iSCSI

Продолжаю развлечения с 10G между двумя рабочими станциями.

Windows - Windows

Запускаю на обеих машинах Win7, на одной делаю Ramdrive на 8G, расшариваю его прямо windows-средствами, запускаю Atto disk benchmark, получаю вот такую картинку:

Каких-то настроек на серверной стороне я не делал, я их и не знаю.

Картинки с Самбы на той же машине (для сравнения) запрятаны в этом посте.

Как видим, на мелких блоках стало побыстрее в 1.5-2 раза (2 раза - для блока 8к), на больших блоках - незначительно медленнее.

Копирование крупных файлов идет с примерно той же скоростью, в районе 500-600MB/sec, то есть быстрее, чем можно надеяться имея в массиве разумное для дома количество HDD под этой сетью. Про копирование мелких файлов будет ниже и отдельно.

10G дома: Myricom + Samba

Продолжаем развлекаться с 10G. Сначала картинка, чтобы было веселее. Это копирование с локального диска на "NAS"

Под катом - как она получена (и почему NAS в кавычках)

10G дома: Myricom 10G

Помимо Infiniband-карточек, я, как и собирался, запасся картами Myrinet 10G. Портов меньше, дороже (получилось $80 за карту), но тоже интересно.

После пары дней мучений (о которых ниже) удалось получить такое вот (tcp, 1 поток):

------------------------------------------------------------
Client connecting to 10.3.1.2, TCP port 5001
TCP window size:  256 KByte
------------------------------------------------------------
[  3] local 10.3.1.1 port 1383 connected with 10.3.1.2 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec  7.77 GBytes  6.68 Gbits/sec
Это Iperf, между Win7 и Linux. Медленнее чем IB в connected mode, быстрее чем в обычном режиме. Что неудивительно, ибо в connected mode размер пакета 64k, в обычной - 2k, а тут чем больше - тем лучше.

Плюсы (в сравнении с Mellanox):

  • Есть драйвера для мака (не пробовал). Ну и вообще, все кроме Windows поддерживают сходу, для виндов - просто ставятся драйвера.
  • Аппаратные контрольные суммы для IP, в случае IPoIB все считается, как я подозреваю, софтом. В результате 26Gbit (два двунаправленных потока по IB) грузят i7-920 ровно наполовину. Мне, впрочем, нужно меньше, оттого я не сильно парюсь.

Минусы:

  • Никаких наворотов, вроде Winsock Direct, SRP, SDP, RDMA. Просто Ethernet 10G. Это может быть и плюс, если хочется просто работать (Subnet Manager не нужен, ARP как у людей и т.п.), но IB-шные навороты в локальном масштабе вполне могут быть и полезны.
  • Один порт. Т.е. цена за порт выше раза в 4 (хотя и остается низкой).
  • Карты сильно греются, пришлось искать слот с обдувом.
В бой поставлю, пожалуй, IB, а пару этих оставлю в заначке, может и пригодятся.

10G дома: IB performance

На всплывавший ранее вопрос "а потянет ли PCIe 1.0 8x два порта Infiniband" ответить не могу, ибо кабель на руках пока один. Один порт тянет:

                    RDMA_Read Bidirectional BW Test
Connection type : RC
  local address:  LID 0x200, QPN 0x8042600, PSN 0xd0710000, RKey 0x3100f6 VAddr 0x00000000f60040
  remote address: LID 0x100, QPN 0x8041c00, PSN 0x982e0000, RKey 0x3100b6 VAddr 0x00000001060040
Mtu : 2048
------------------------------------------------------------------
 #bytes #iterations    BW peak[MB/sec]    BW average[MB/sec]  
      2        1000               0.79                  0.75
      4        1000               1.81                  1.51
      8        1000               3.38                  3.00
     16        1000               8.44                  6.02
     32        1000              12.67                 12.02
     64        1000              25.33                 23.41
    128        1000              67.55                 44.28
    256        1000             108.09                 81.34
    512        1000             170.66                164.09
   1024        1000             432.35                323.87
   2048        1000             720.58                660.57
   4096        1000            1127.86               1107.30
   8192        1000            1572.17               1485.81
  16384        1000            1729.38               1712.38
  32768        1000            1804.58               1797.25
  65536        1000            1844.68               1836.56
 131072        1000            1857.06               1856.84
 262144        1000            1867.50               1866.47
 524288        1000            1872.77               1871.86
1048576        1000            1874.88               1874.69
2097152        1000            1876.21               1876.13
4194304        1000            1876.87               1876.80
8388608        1000            1877.20               1877.18
------------------------------------------------------------------

Это двунаправленный BW, один поток туда, другой - обратно, одновременно. Я щетаю, 7.5Gbit/s payload в одну сторону (из теоретических 8.0) - это вполне нормально.

Заодно понятна польза Jumbo Frames на Ether, особливо на 10G.

Под катом Latency:

10G дома: первые успехи

Как я и предполагал в предыдущем посте на тему, дело было в бобине кривом кабеле (а чего я хотел за $16 без доставки...).

Не сдержался, купил 3-метровый D-Link в московской рознице, руки то чешутся.

Все практически мгновенно завелось, с одной тонкостью, результат вполне бодрый:

ttcp PID=0x1e20 TID=0xd60
ttcp -t: buflen=65000, nbuf=10000, align=16384/0, port=5001  tcp  -> 10.1.1.2
ttcp -t: 650000000 bytes in 718.00 real MilliSeconds = 863.35 MByte/sec +++
ttcp -t: 10000 I/O calls, msec/call = 0.07, calls/sec = 13927.58

Это Connected Mode, MTU 65520, размер пакета - 65000 для ровного счета. Windows - Windows.

А помянутая выше тонкость простая: если нет свитча, то Subnet Manager надо запускать до того, как воткнута карта. Без этого оно о скорости договаривается не всякий раз правильно, бывают и те 1x, которые меня мучали в прошлый раз.

И, сюрприз, IPoIB прекрасно работает при 4x, но не работает на 1x. Хотя Infiniband-пакеты успешно ходят на обеих скоростях.

Плотно займусь рассмотрением скоростей (самба, iscsi, SRP) - не раньше выходных, пока RawDigger не дает отвлечься. C FreeBSD, вероятно, тоже будут приключения.

10G дома: 6 букв, вторая "и"

Приехали первые (короткие) CX4-кабели и я начал поднимать Infiniband прямо на столе (до сервера эти кабели не дотянутся).

Собственно, исходно я клюнул на IB из соображений поразвлечься. Имею сказать, что развлекся я уже по полной программе, эти $69 себя уже окупили полностью.

Две машины, Win 7 x64 и Ubuntu 11.10.

Ставим драйвера (OFED 3.0 под Windows, драйвера из поставки в Убунте, кажется это Linux OFED 1.4.x), всовываем кабель, запускаем opensm, имеем в первом приближении счастье: PORT_ACTIVE

Во втором приближении - тоже счастье, ibping работает.

В третьем приближении - несчастье. IPoIB - не работает. И Win-Win и Win-Linux ситуация одинаковая, под Win-Win пробовал кроме OFED 3.0, еще и 2.3 и родной Mellanox-овский стек 2.1.2. Во всех случаях ping не пингает, причем из порта (по данным tcpdump) ничего не вылезает.

Присматриваюсь повнимательнее, вижу что вместо LinkWidth 4X имею 1X.

Q: Infiniband timeout

А вот, я извиняюсь, вопрос (на мое предложение никто толком не откликнулся, приходится зарабатывать эти деньги самому). Дано:

  • Infiniband-switch (на шасси Blade-сервера), Mellanox-какой-то там, OEM (SuperMicro, если это существенно).
  • 12 blade-серверов, воткнутых в этот свитч каким-то внутренним коннектом. На серверах карты Mellanox ConnectX-какой-то, по одной штуке на сервер.
  • И еще один внешний сервер, с двухпортовой IB-картой, тоже Mellanox.
  • На всем этом стоит CentOS 5.4 с OFED-1.5.3
IB используется только для (Open)MPI, никакого IPoverIB нету, для IP - отдельная 10G/1G-сеть.

Все включилось и заработало как-то само, ну вот только OpenSM запустили, так и завелось. И, в-общем, работает, НО:

Периодически, собственно при запуске HPL на всех узлах кластера, узлы отваливаются. Не каждый раз, не один и тот же узел, но все-равно раздражает ужасно. Сообщение всегда одно и то же: The InfiniBand retry count between two MPI processes has been exceeded (и далее - длинный рассказ где чинить). Значения таймаута - стандартные.

Вопрос, собственно, простой: это обычное поведение при default-таймаутах и маленьком кластере или мне надо, вместо увеличения таймаута, искать проблемы (обновлять драйвера, тыкать блейды в другие слоты и т.п.)? Update: после перетыкания проблемных блейдов местами - проблема ушла. Наука о контактах!

Q: Infiniband и FreeBSD

Читаю тут Гугл про Infiniband (по случаю вчерашнего поста) и внезапно выяснил, что 2-портовые карты на eBay продаются вообще по $22 (+ доставка, две карты получаются чуть меньше $100)

Так как я давно вынашиваю мысль поднять дома линк быстрее 1Gbit/s на небольшом пятачке вокруг рабочего стола, я сильно возбудился. Но есть вопросы:

  1. Верно ли я понимаю, что CX4-кабель для Ethernet и Infiniband MicroGigaCN (как его называет Mellanox) и просто банальный 4xSAS (SFF-8470) - это все одно и то же?
  2. Есть ли драйвера для Mellanox Infiniband под FreeBSD9? Или таки светит мне Linux на NAS?
  3. Верно ли я понимаю, что взяв три 2-портовые карты (1-портовых нету) я могу 3 машины соединить в P2P-сеть и внутри каждой пары будут искомые 10G (после вычета оверхеда - 8G data)? В каждой паре заведу свою IP-подсеть, роутинга не надо. Что в такой конструкции будет с subnet manager, можно ли OpenSM-у сказать "этот интерфейс не твой"?

А вот кто хочет кластер понастраивать?

Граждане читатели!

У дружественной мне компании-интегратора есть задача: они поставили заказчику железо в виде blade-сервера, в каждом блейде есть infiniband, на шасси - infiniband-свитч. Все вместе - маленький вычислительный кластер, я так понял что 12 блейдов, наверное 24 процессора, всего ядер получается пара-тройка сотен. Никаких GPU нету, чистый CPU-кластер.

Нужно: провести какую-то настройку этого дела, взгромоздить туда MPI (не знаю какой), запустить HPL и продемонстрировать, что все работает и с какой-то разумной скоростью считает. Получать безумную эффективность не надо, работает, масштабируется как-то - и прекрасно.

Естественно, не бесплатно.

Если вы на практике имели дело с (начальной) настройкой чего-то подобного и имеете желание подработать день-другой (ну я не знаю сколько там надо на самом деле), пишите мне на lexa@lexa.ru и я вас дальше сконнекчу.

По датам это, ориентировочно, нужно в середине следующей недели, вторник-четверг.

P.S. Дефолт-сити.

P.P.S. Обратились, собственно, ко мне, но я не настоящий сварщик и вот прямо в данное время не хочу/не могу учиться за счет заказчика, не до того.

P.P.P.S. Спасибо за советы "какой готовый дистрибутив взять", но я пытаюсь решить другую задачу: не найти удочку, а нанять умелого рыбака.

Pages

Subscribe to 10G и Infiniband