C момента публикации обзора технология Infiniband достигла больших успехов; существенный вклад в этот процесс внесло распространение универсального программного обеспечения OFED (Open Fabrics Enterprise Distribution). Оно разрабатывается силами Open Fabrics Alliance (www.openib.org), цель его — создание унифицированного транспортно-независимого стека программного обеспечения с открытым кодом для коммутирующих структур и сетей, обеспечивающих RDMA*. OFED работает на разных архитектурах (х86, х86-64, IA-64, PowerPC 64) и в разных операционных системах, и ведущей из них, несомненно, остается ОС Linux.

Аппаратные средства

На физическом уровне Infiniband (IB) предлагает масштабируемое по пропускной способности решение; масштабирование основано на применении разного числа пар проводов: IB 1x — две пары проводов (по одной паре для посылки и получения данных); IB 4x — четыре пары, IB 12x — 12. При этом одной паре отвечает полная (сигнальная) пиковая пропускная способность 2,5 Гбит/с, IB 4х — 10 Гбит/с, 12х — 30 Гбит/с. Пользователям более интересна пиковая пропускная способность передачи данных, которая на 20% ниже полной — 2/8/24 Гбит/с для IB 1х/4х/12Х соответственно. При полнодуплексной (двунаправленной) передаче эту характеристику надо увеличить еще вдвое.

Кроме того, дополнительно определены три режима работы Infiniband — SDR (Single Data Rate), DDR (Double Data Rate) и QDR (Quadruple Data Rate); что это такое, нетрудно понять, вспомнив об оперативной памяти DDR-типа. Указанные значения пропускной способности относятся к SDR; для DDR они удваиваются, а для QDR — возрастают вчетверо.

Для подсоединения аппаратуры Infiniband используются медные кабели (с предельной длиной 20 метров/10 метров для IB 4x/12x SDR соответственно; 10 метров/7 метров — для IB 4x/12Х DDR; 5-7 метров — для IB 4X QDR), а также оптоволокно (до 300 метров для IB 4x SDR/DDR/QDR, до 200 метров для IB 12x SDR).

Характеристики производительности современных высокопроизводительных межсоединений (см. Табл. 1) указывают на однозначное техническое превосходство Infiniband, даже если не учитывать новые адаптеры IB 12x SDR/DDR от IBM, — последние могут работать только на серверах pSeries, имеющих специализированную шину GX+ с пропускной способностью 7,6 Гбайт/с, и не могут применяться в качестве массовой платформы в построении кластеров для высокопроизводительных вычислений (High Performance Computing, HPC).

Как видно из таблицы, сегодня аппаратные средства Infiniband предлагает целый ряд производителей. Мы детальнее остановимся на оборудовании, поддерживаемом в последней версии OFED-1.3.0.

Канальные адаптеры Infiniband для хостов (Host Channel Adapter, HCA) предлагают сегодня IBM, QLogic и Mellanox. Коммутаторы Infiniband предлагают Cisco, Voltaire, QLogic и Flextronics; о продукции Mellanox речь пойдет ниже.

В работе, о которой речь идет в данной статье, применялись HCA-адаптеры для IB 4x от Mellanox (двухпортовые адаптеры Infinihost fw-23108 для PCI-X, дешевые модели Infinihost III Lx для PCIe x8 без специальной памяти на плате, а также DDR-вариант Infinihost III Lx, MHGS18-XTC) и 24-портовый коммутатор Flextronics F-X43044, порты которого могут поддерживать IB 4x в режимах SDR и DDR.

Mellanox — ведущий игрок на рынке оборудования Infiniband. Она стала первой компанией, поддерживающей в своих HCA-адаптерах пропускную способность 10, 20 и 40 Гбит/с, а в коммутаторах — 30, 60 и 120 Гбит/с. Кроме указанных выше адаптеров для PCI-X, Mellanox для PCIe x8 предлагает ряд однопортовых и двухпортовых адаптеров.

Последнее, четвертое поколение HCA-адаптеров от Mellanox — ConnectX — предназначено для нового стандарта PCIe x8 версии 2.0. Эти адаптеры являются двухпортовыми, не имеют памяти на платах и поддерживают режимы SDR, DDR и QDR. Кроме высокой пропускной способности, адаптеры ConnectX имеют сверхнизкие задержки [7] — ниже, чем у специально сконструированных для низких задержек Infinipath от Pathscale (ныне компания QLogic). Hизкие задержки чрезвычайно важны, например, для HPC-приложений, в которых часто именно задержки, а не пропускная способность, являются лимитирующим фактором. Как подчеркивают в Mellanox, адаптеры СonnectX разгружают центральный процессор от нагрузки по обслуживанию трафика Infiniband (HCA-адаптеры от QLogic этого не делают).

Главный компонент ConnectX — разработанная Mellanox микросхема, в которой интегрирована аппаратная поддержка очень большого числа функций. Она может работать с PCIe x8 версий 1.1 и 2.0, а каждый из двух портов может быть сконфигурирован под IB 4x или 10G Ethernet с поддержкой на физическом уровне XAUI/CX4 или XFI, и QSFP. Обеспечивается работа с 16 млн виртуальных интерфейсов. Это позволяет обеспечить эффективную работу со средствами виртуализации и высокий уровень гранулярности уровней качества обслуживания QoS.

HCA-адаптеры ConnectX поддерживают новую технологию Virtual Protocol Interconnect, путем «автопереговоров» определяя, к коммутатору Infiniband или Ethernet они подключены. Способность ConnectX работать напрямую как собственно с Infiniband, так и с Ethernet-инфраструктурой обеспечивает беспрецедентные возможности «коннективности» как с этими средами, так и с Fibre Channel, в частности, с системами хранения для всех трех этих сред (см. рис. 1). Cама же инфраструктура Fibre Channel (максимальная пропускная способность нового поколения Fibre Channel равна 8 Гбит/с) значительно уступает Infiniband по производительности.

Рис. 1. «Коннективность» серверов с HCA-адаптерами ConnectX

Свои коммутаторы Mellanox непосредственно на рынок не поставляет, предлагая комплекты Production Developmnet Kit на 8, 24 или 144 порта Infiniband. Эти PDK основаны на InfiniScale IV, четвертом поколении средств коммутации Infiniband от Mellanox. Разработанная Mellanox микросхема поддерживает порты IB 4x, IB 8x и IB 12x (36, 12 и 12 портов, работающих на скоростях до 40, 80 и 120 Гбит/с соответственно). Такие неблокирующиеся коммутаторы обладают агрегатной пропускной способностью около 3 Тбит/с при дополнительной задержке всего в 60 нс.

Благодаря применению дешевых коммутаторов Flextronics и однопортовых HCA-адаптеров IB 4x SDR от Mellanox можно строить HPC-кластеры с достаточно дешевой инфраструктурой Infiniband стоимостью примерно 250 долл. в расчете на один узел.

Еще один интересный комплект, MTD2000, ориентирован на системы хранения. Он предназначен для OEM-производителей, и содержит все необходимые аппаратные и программные средства для построения конфигураций SAN (storage area network — «сеть хранения») и NAS (network attached storage — «подключаемая к сети система хранения»). В корпусе высотой 3U размещается сервер на базе Intel Xeon, содержащий НСА-адаптер, работающий на скорости 20 Гбит/с, и жесткий диск с интерфейсом SAS.

Архитектура Infiniband и OFED

Краткую информацию о базовых особенностях архитектуры Infiniband можно найти в http://www.osp.ru/os/2005/11/380520. Там описаны менеджер подсети (Subnet Manager, SM), присваивающий устройствам подсети 16-разрядные адреса LID (Local Identificator), агент, применяемый канальными адаптерами и коммутаторами для работы с менеджером подсети (SM Agent, SMA), общая 64-разрядная идентификация устройств Infiniband, протокол SDP (Socket Direct Protocol) и многое другое.

В ядре Linux на нижнем уровне находятся драйверы HCA-адаптеров, на втором уровне — модули ядра Infiniband, а еще выше — протоколы верхнего уровня (Таблица 2). Ядро Infiniband включает: MAD (сервис управляющих датаграмм); SMA; Communication Manager (сервис, необходимый клиентам для установления соединений); Subnet Administrator (содержит, в частности, информацию о путях, необходимую для установления соединений); средства поддержки низкоуровневого verbs-интерфейса, содержащие семантическое описание соответствующих функций API ядра [1, 11, 12]. К протоколам верхнего уровня относятся IPoIB (IP over Infiniband), SDP, RDS, SRP и iSER.

Таблица 2. Важные модули ядра OFED

Еще выше, уже над ядром, в пространстве пользователя, работают API-интерфейсы umad, uverbs и средства распараллеливания MPI. Однако главное для OFED — поддержка RDMA и протоколов uDAPL (user Direct Access Programming Language), а также аналогичных протоколов ядра, kDAPL. Протоколы DAPL являются аппаратно (транспортно) независимыми и позволяют создавать приложения, обходящие применение неэффективных протоколов TCP/IP. Использование RDMA и DAPL способствует эффективной работе с большими базами данных.

К протоколам верхнего уровня можно отнести и реализацию NFS поверх RDMA. При работе с NFSv2 или NFSv3 в Linux на уровне механизма RPC (Remote Procedure Call) определяется, будет ли для передачи данных применяться обычный стек TCP/IP и инфраструктура Etherne, или жеклиент NFS-RDMA, который может использовать в качестве транспорта Infiniband или 10G Ethernet. Известно несколько проектов создания такого клиента с открытым кодом (например, sourceforge.net/projects/nfs_rdma). Идут работы над подобными средствами и для NFSv4, где используется Compound RPC. Такое программное обеспечение актуально для высокопроизводительных NAS-устройств хранения на базе Infiniband. Так, в [13] описывается, как в среде NFS/Linux достигнута пропускная способность 900 Мбайт/с.

OFED

Программное обеспечение Infiniband, кроме OFED, включает и другие разработки. Mellanox, например, предлагает средства управления IBADM, особенно эффективные для работы с кластерами, а также MFT (Mellanox Firmware Tools). Впрочем, работать с OFED можно и без IBADM и MFT.

OFED можно загрузить с сайта альянса Open Fabrics Alliance; на сайте Mellanox можно найти модернизированную версию. При установке OFED создается целых 54 RPM-пакета; из всего этого «богатства» ограничимся некоторыми основными. Модули ядра Linux из состава OFED хранятся в каталоге, указанном в Таблице 2; исключение — модули iSCSI (они устанавливаются вместе с OFED, как и пакет open-iscsi) и модуль RDS. Эти модули ядра являются частью RPM-пакета kernel-ib (ядро Linux может исходно содержать модули Infiniband).

Пакет kernel-ib включает также два файла в каталоге /etc/infiniband — info (включенные в инсталляцию подсистемы OFED) и openib.conf с базовыми параметрами настройки OFED/Infiniband. Пакет содержит к тому же конфигурационные файлы для Ethernet-подобных интерфейсов IPoIB (в SuSE Linux — /etc/sysconfig/network/ib0 и т.д.) и основной сценарий запуска «решетки Infiniband» /etc/init.d/openibd (через него загружается большинство Infiniband-модулей ядра).

Для устройств, динамически создаваемых в Linux с применением средств udev, в этом пакете имеются еще и правила создания устройств в каталоге sys (/etc/udev/rules.d/90-ib.rules).

Устройства Infiniband находятся в каталоге /sys/class в подкаталогах infiniband_mad, infiniband_verbs, infiniband_vnic и infiniband/mthca0 (для Mellanox). В файлах, находящихся в подкаталогах mthca0, содержатся такие характеристики, как адреса устройств, установленная скорость соединения, счетчики числа различных аппаратных ошибок и т.д.

Однако базовым для устройства в Linux является адрес в PCI-инфраструктуре в форме bb:dd:fn, где bb — номер шины, dd — номер устройства, fn — применяемая функция. Чтобы его найти, можно выполнить lspci|grep Infiniband. Кроме того, в
/proc/devices имеется две строчки

231 infiniband_mad
231 infiniband_verbs

Наконец, имеются устройства в каталоге /dev/infiniband — issm0, rdma_cm, umad и verbs0. Полезно указать список относящихся к OFED процессов, которые можно видно в команде ps: mthcacatas, ib_mad1, ib_mcast, ib_cm0, ib_cm1, ipoib, local_sa, ib_addr_wq, rdma_cm_wq и sdp (все — дочерние процесса ядра kthread), а также два процесса vnic_viport и vnic_link_evt (VNIC — один из протоколов верхнего уровня, обеспечивающий «виртуальные» Ethernet-интерфейсы в среде Infiniband).

В OFED имеются RPM-пакеты ibutils и openib-diags, где содержатся, в частности, утилиты для диагностики и получения информации об оборудовании Infiniband.

Первое, что рекомендуется сделать после инсталляции OFED — вызвать ibv_devinfo (здесь и далее приводятся результаты работы команд на узлах кластера в ИОХ РАН):

hca_id: mthca0

   fw_ver:   1.0.800

node_guid: 0002:c902:0022:e50c

sys_image_guid: 0002:c902:0022:e50f

   vendor_id:   0x02c9

   vendor_part_id:   25204

   hw_ver:   0xA0

   board_id:   MT_03B0120002

   phys_port_cnt:   1

      port:   1

         state:   PORT_ACTIVE (4)

         max_mtu:   2048 (4)

         active_mtu:   2048 (4)

         sm_lid:   185

         port_lid:   3

         port_lmc:   0x00

Близкую информацию, в том числе модель HCA и скорость передачи, можно получить, выдав команду ibstat, а ibstatus дает менее подробные, наиболее важные данные об HCA. Также можно опросить состояние менеджера подсети SM, выдав команду sminfo. Пример ее результата:

sm lid 185 sm guid 0x2c90200002f4d, activity count 114290 priority 0 state 3 SMINFO_MASTER

Для получения данных о всех хостах и коммутаторах подсети можно применять утилиты ibhosts и ibswitches соответственно), а данные сразу обо всех узлах — используя утилиту ibnodes:

Ca : 0x0002c9020022e508 ports 1 «n8 HCA-1»

Ca : 0x0002c9020022dd38 ports 2 «n6 HCA-1 (Mellanox HCA)»

Ca : 0x0002c9020022db18 ports 2 «n5 HCA-1 (Mellanox HCA)»

Ca : 0x0002c90200002ddc ports 2 «n2 HCA-1 (Mellanox HCA)»

Ca : 0x0002c90200002f4c ports 2 «n1 HCA-1 (Mellanox HCA)»

Ca : 0x0002c9020022e50c ports 1 «n7 HCA-1»

Switch : 0x000b8cffff004037 ports 24 «MT47396 Infiniscale-III Mellanox Technologies» base port 0 lid 1 lmc 0

где n1, n2... — имена узлов кластера. Более подробные данные о подсети, включая все значения адресов LID, сообщает утилита ibnetdiscover (если нужны только LID, удобнее воспользоваться командой vstat). Для контроля состояния всей подсети можно выполнить ibchecknet:

#warn: counter LinkDowned = 20 (threshold 10)

Error check on lid 1 (MT47396 Infiniscale-III Mellanox Technologies) FAILED

#warn: counter LinkDowned = 13 (threshold 10)

Error check on lid 1 (MT47396 Infiniscale-III Mellanox Technjlogies) FAILED

# Checked Switch: nodeguid 0x000b8cffff004037 with failure

# Checking Ca: nodeguid 0x0002c9020022e508

# Checking Ca: nodeguid 0x0002c9020022dd38

...

# Checking Ca: nodeguid 0x0002c90200002f4c

# Checking Ca: nodeguid 0x0002c9020022e50c

## Summary: 9 nodes checked, 0 bad nodes found

## 16 ports checked, 0 bad ports found

## 1 ports have errors beyond threshold

В этом примере видно, что превышен заданный порог числа обрывов канала (10) на коммутаторе с LID=1. Для уточнения ситуации следует выдать ibcheckerrors; в данном случае она показала, что превышен порог для общего числа таких событий на коммутаторе (20) и порог на его порту номер 8 (13 событий). Утилита ibcheckerrors может ссылаться на файл, в котором можно задать собственные пороги для сбоев разного типа;а ibclearcounters позволяет обнулить счетчики числа сбоев.

Mellanox предлагает вместо всех шагов — от выдачи sminfo до ibchecknet — применять интегральную утилиту ibdiagnet. Для более детальной проверки путей от одного устройства Infiniband до другого в простейшем случае нужно выполнить

ibdiagpath -l LID_иточника, LID_цели

Протоколы ULP

Многие из протоколов верхнего уровня ULP сильно усовершенствованы за время, прошедшее с момента публикации, или вообще являются новыми. Так, IPoIB умеет теперь работать в двух режимах — сonnection mode и datagram mode, где режим можно динамически изменить. Кроме того, для интерфейсов ib0, ib1, ... теперь доступно связывание каналов (channel bonding).

Появились средства RDS (Reliable Datagram Sockets), — API-интерфейс сокетов для надежной доставки данных поверх Infiniband-сервиса надежных соединений или TCP/IP.

Особого внимания заслуживают протоколы верхнего уровня для поддержки систем хранения. Так, iSER используется для работы iSCSI поверх RDMA, при этом в качестве транспорта данных может выступить и Infiniband, и iWARP. В составе OFED имеется iSER-инициатор, который работает с пакетом open-iscsi (он также предлагается в составе OFED). Напомним, что «второй стороной» («цель», target) в таких случаях является cистема хранения. Она имеет собственный канальный адаптер, называемый TCA (target СA), более простой по сравнению с HCA.

Для систем хранения имеется другой вариант — применение протокола SRP (SCSI RDMA Protocol, использующего RDMA-возможности Infiniband. Соответствующий пакет в OFED называется srptools. SRP-инициатор управляет cоединением с «SRP-целью», доступным через Infiniband устройством хранения). Он поддерживает протокол SRP-2 и базовые первичные и блочные SCSI-команды SPC-3 и SBC-2 соответственно [14]. Для работы SRP необходимо указать SRP_LOAD=yes в openib.conf или загрузить модуль ядра ib_srp.

Далее SRP-соединение можно установить вручную. После этого в каталоге /dev появятся соответствующие дисковые устройства. Всю необходимую информацию можно получить, выполнив утилиту ibsrpdm, которая способна обнаруживать достижимые через Infiniband-решетку SRP-цели.

Процесс обнаружения систем хранения Infiniband и установления с ними SRP-соединений можно полностью автоматизировать, используя демон srp_daemon. Он может работать в режиме только сканирования, выполняя функции ibsrpdm в фоновом режиме, а может и автоматически устанавливать соединение с целью (тогда отпадает необходимость выполнять «ручные» операции). Он может подсоединить все достижимые SRP-цели и закончить свою работу, а может висеть в фоновом режиме, динамически подсоединяя новые цели. Он может обнаруживать все SRP-цели, доступные через данный порт HCA-адаптеры, но имеется сценарий, позволяющий осуществить такую процедуру на всех портах и т. д.

Тесты производительности и MPI

Пропускная способность, достигаемая при использовании IB 4x, зависит в первую очередь от режима работы (SDR/DDR/QDR) и используемой HCA-адаптером шины. В SDR можно ожидать около 900 Мбайт/с, в DDR/PCIe v1 — 1400 Мбайт/с, с вдвое более быстрой PCIe v2 — 1800 Мбайт/с для DDR и 3200? Мбайт/с для QDR.

В составе OFED имеются низкоуровневые средства измерения пропускной способности и задержек. Набор микротестов производительности, использующих интерфейс uverbs, включает rdma_S, send_S, write_S и read_S (S = lat или bw для измерения задержки и пропускной способности), при использовании соответствующих RDMA-транзакций. На этих тестах с двухпроцессорными серверами на базе AMD Opteron и HCA-адаптера DDR от Mellanox на шинах PCIe x8 мы добились задержки в 3 мкс и пропускной способности 1407 Мбайт/с.

Особый интерес представляют тесты производительности протоколов высокого уровня и приложений. Известно, что в IPoIB удается достигнуть пропускной способности 939/1340/1860 Мбайт/с для комбинаций SDR-PCIe v1/DDR-PCIe v1/DDR-PCIe v2 (данные Mellanox).

Для HPC-приложений естественно применять тесты MPI, которые используются для оценки производительности аппаратуры Infiniband. В состав OFED входят три разных пакета MPI — mvapich, mvapich2 (оба разработки университета Огайо; последний поддерживает MPI-2), а также OpenMPI. Однако с OFED могут работать и коммерческие реализации MPI, в том числе от Intel и HP.

Среди тестов производительности MPI в составе OFED имеются тесты университета Огайо, Intel MPI Benchmark и Presta. Нами в указанной выше аппаратной среде DDR/PCIe x8 v1 произведены измерения производительности для всех этих тестов с mvapich-0.9.9 и OpenMPI-1.2.2. На mvapich в тестах университета Огайо удалось достигнуть задержек на уровне 3,2 мкс при пропускной способности 1454 Мбайт/с (для двунаправленной передачи — 2617 Мбайт/с). С OpenMPI удалось получить пропускную способность 1470 Мбайт/с (2622 Мбайт/с для двунаправленной передачи) при примерно той же минимальной задержке. А в тестах OpenMPI/Ptesta максимальная пропускная способность составила 1513 Мбайт/с.

В mvapich2 с HCA-адаптером последнего поколения ConnectX/DDR на PCIe v1 разработчики из университета Огайо получили недавно пропускную способность 1405 Мбайт/с, а с другим HCA-адаптером/DDR — 1481 Мбайт/с (mvapich.cse.ohio-state.edu/performance/mvapich2/em64t).

Переход от SDR к DDR сопровождается не только ростом пропускной способности, но и уменьшением задержек, что важно для целого ряда приложений. Например, в задачах молекулярной динамики на программе LAMMPS при переходе от InfiniHost III/DDR к ConnectX/DDR был найден рост производительности на 10%, связанный с уменьшением задержек. Переход от DDR к QDR дает аналогичный рост показателей производительности (Таблица 1), в том числе по данным Intel, пропускная способность — до 3389 Мбайт/с (6490 Мбайт/с для двунаправленной передачи).

Выводы

На сегодняшний день по своим техническим характеристикам Infiniband превосходит доступные альтернативные межсоединения. Технология Infiniband к настоящему времени приобрела стабильность, которая позволяет использовать ее в промышленном режиме не только в высокопроизводительных вычислительных системах, но и, в частности, в системах хранения.

На массовых серверных платформах с использованием IB 4x DDR/PCIe x8 v1 достигается пропускная способность 1400-1500 Мбайт/с при задержках на уровне 3 мкс. Переход к QDR позволяет улучшить эти показатели более чем вдвое.

Михаил Кузьминский— старший научный сотрудник ИОХ РАН (Москва). C ним можно связаться по тел. (499) 135-6388.


* Наличие средств RDMA (Remote Direct Memory Access) предполагает возможность прямой передачи данных из оперативной памяти одного компьютера в память другого компьютера (с буферизацией в памяти сетевых адаптеров) без вмешательства процессоров и без промежуточных копирований в память ядра операционной системы — М.К.


Таблица 1. Производительность современных межсоединений


Практика Infiniband http://www.osp.ru/os/2005/11/380520