Как обнаружить высокопроизводительный сетевой интерфейс в кластере linux HP C? - PullRequest
1 голос
/ 24 февраля 2020

У меня есть распределенная программа, которая взаимодействует с ZeroMQ и работает в кластерах HP C.

ZeroMQ использует сокеты TCP, поэтому по умолчанию в кластерах HP C коммуникации будут использовать сеть администратора, поэтому Я ввел переменную окружения, читаемую моим кодом, чтобы установить связь через определенный сетевой интерфейс. С Infiniband (IB) обычно это ib0. Но есть случаи, когда для параллельной файловой системы используется другой интерфейс IB, или в системах Cray интерфейс ipogif, в некоторых системах, отличных от HP C, это может быть eth1, eno1, p4p2, em2, enp96s0f0 или что-то еще. ..

Проблема в том, что мне нужно спросить у администратора кластера название используемого сетевого интерфейса, тогда как коды, использующие MPI, не нужны, потому что MPI "знает", какую сеть использовать.

Какой самый портативный способ определения имени высокопроизводительного сетевого интерфейса в кластере linux HP C? (Я не против написать небольшую MPI-программу для этого, если нет простого способа)

Ответы [ 2 ]

2 голосов
/ 27 февраля 2020

Простого пути не существует, и я сомневаюсь, что существует полное решение. Например, Open MPI поставляется с обширным набором ранжированных сетевых модулей связи и пытается создать для них все экземпляры, выбрав в итоге тот, который имеет самый высокий ранг. Идея состоит в том, что ранги каким-то образом отражают скорость базовой сети и что, если данный тип сети отсутствует, его модуль не будет создан, поэтому, столкнувшись с системой, которая имеет Ethe rnet и InfiniBand, он выберет InfiniBand так как его модуль имеет более высокий приоритет. Вот почему большие задания Open MPI запускаются относительно медленно и, безусловно, не защищают от ошибок - в некоторых случаях нужно вмешиваться и вручную выбирать нужные модули, особенно если у узла есть несколько сетевых интерфейсов InfiniBand HCA, и не все из них предоставляют узлу подключение к узлу. Обычно это настраивается системно-системным администратором или поставщиком, и поэтому MPI «просто работает» (совет: в очень небольшом числе случаев это не так).

Вы можете Скопируйте подход Open MPI и разработайте набор модулей обнаружения для вашей программы. Для TCP создайте две или более копии на разных узлах, перечислите их активные сетевые интерфейсы и соответствующие IP-адреса, сопоставьте сетевые адреса и свяжите все интерфейсы на одном узле, а затем попытайтесь подключиться к нему с другого узла (-ов). После успешного подключения запустите что-то вроде TCP-версии NetPIPE , чтобы измерить скорость и задержку сети и выбрать самую быструю сеть. После того, как вы получили эту информацию от первоначального небольшого набора узлов, весьма вероятно, что этот же интерфейс используется и на всех других узлах, поскольку большинство систем HP C настолько однородны, насколько это возможно, когда дело доходит до их узлов. конфигурация сети.

Если установлена ​​работающая реализация MPI, вы можете использовать ее для запуска тестовой программы. Вы также можете включить ведение журнала отладки в библиотеке MPI и проанализировать выходные данные, но для этого потребуется, чтобы целевая система имела реализацию MPI, поддерживаемую вашим анализатором журнала. Кроме того, большинство библиотек MPI используют собственный InfiniBand или любой другой высокоскоростной сетевой API и не сообщают вам, какой интерфейс IP-поверх-какой-либо, потому что они вообще не будут его использовать (если системный администратор не настроит иначе) .

0 голосов
/ 24 февраля 2020

Q : Какой самый портативный способ позволяет узнать имя высокопроизводительного сетевого интерфейса в кластере linux HP C ?

Кажется, это в серой зоне - попытка решить многогранную проблему среди специфики сайта c аппаратное обеспечение (техническое) присвоение имен интерфейсу и их не -технические , слабо административно поддерживаемые, предпочтительные способы использования.


Состояние "как есть":

ZeroMQ может ( согласно РФ C 37 / ZMTP v3.0 +) указать <hardware(interface)>:<port>/<service> детали:

zmq_bind (server_socket, "tcp://eth0:6000/system/name-service/test");

А:

zmq_connect (client_socket, "tcp://192.168.55.212:6000/system/name-service/test");

пока, насколько мне известно, нет средств для реинжиниринга основного использования такого интерфейса в контексте holisti c сайта HP C и его аппаратной конфигурации.


Мне кажется, ваша идея - сначала протестировать административные сопоставления с помощью MPI-tool и позволить развертыванию ZeroMQ использовать эти извне обнаруженные (если это действительно для обнаружения, как вы предполагали выше) сведения о конфигурации для правильного (предпочтительного) использования интерфейса.

Безопасный путь к Go:

Запрос в службу поддержки HP C -infrastructure (кто отвечает за знание всего вышеперечисленного и обучен, чтобы помочь командам Scientifi c использовать HP C наиболее продуктивно), я бы предпочел go.


Отказ от ответственности:

Извините, если это не помогло вашему желанию прочитать и автоматически определить все необходимые сведения о конфигурации (универсальная стратегия обнаружения и автоматической настройки BlackBox-HP C вряд ли будет тривиальная однострочка, не так ли? )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...