Что выбрать: систему с общей памятью, библиотеку MPI, оригинальный RDMA или ULP вместо RDMA?

Я новичок в области высокопроизводительных вычислений (HPC), но у меня будет проект HPC, поэтому мне нужна помощь для решения некоторых фундаментальных проблем.

Сценарий применения прост: несколько серверов, соединенных сетью InfiniBand (IB), один сервер для Master, другие для слейвов. только мастер читает/записывает данные в памяти (размер данных варьируется от 1 КБ до нескольких сотен МБ) в ведомые устройства, в то время как ведомые устройства просто пассивно хранят данные в своей памяти (и выгружают данные в памяти на диски в нужное время ). Все вычисления выполняются в ведущем устройстве перед записью или после чтения данных в/из ведомых устройств. Требованием к системе является малая задержка (небольшие области данных, например, от 1 КБ до 16 КБ) и высокая пропускная способность (большие области данных, несколько сотен МБ).

Итак, мои вопросы

<сильный>1. Какой конкретный путь нам больше подходит? MPI, примитивная библиотека IB/RDMA или ULP поверх RDMA.

Насколько я знаю, существующая библиотека интерфейса передачи сообщений (MPI), примитивная библиотека IB/RDMA, такая как libverbs и librdmacm, и протокол уровня пользователя (ULP) поверх RDMA могут быть возможными вариантами, но я не очень уверен в применимых областях их применения.

<сильный>2. Должен ли я сделать некоторые настройки для ОС или сети IB для повышения производительности?

Существует документ [1] от Microsoft. объявляет, что

Мы улучшили производительность в восемь раз благодаря тщательной настройке и изменениям в операционной системе и сетевом диске.

Со своей стороны, я постараюсь избежать такой настройки производительности, насколько это возможно. Однако, если настройка неизбежна, я постараюсь изо всех сил. Сеть IB нашей среды — это Mellanox InfiniBand QDR 40Gb/s, и я могу свободно выбирать ОС Linux для серверов.

Если есть идеи, комментарии и ответы приветствуются! Заранее спасибо!

[1] FaRM: быстрая удаленная память


person foool    schedule 22.05.2015    source источник
comment
Я голосую за то, чтобы закрыть этот вопрос как в первую очередь основанный на мнении. Каждая из перечисленных технологий может быть использована для достижения той или иной из указанных целей, хотя и по разной цене с точки зрения простоты использования и удобства сопровождения кода. И без замысловатых знаний сетевого профиля вашего приложения я сомневаюсь, что кто-нибудь сможет ответить на второй вопрос.   -  person Hristo Iliev    schedule 28.05.2015
comment
@HristoIliev Спасибо за ваш комментарий. Я хотел бы уточнить свои вопросы: во-первых, какой простой способ выполнить требования моего приложения? Во-вторых, как я могу избежать работы по настройке, выбрав зрелую библиотеку, которая точно соответствует моим требованиям (точно так же, как быстрый удаленный memcpy).   -  person foool    schedule 28.05.2015


Ответы (1)


Если вы используете MPI, вы получите преимущество независимого от межсоединений решения. Не похоже, чтобы это было чем-то, что вы собираетесь использовать в течение 20 лет, но программное обеспечение живет дольше, чем вы думаете.

Использование MPI также дает вам возможность выполнять отладку на вашем (возможно, перегруженном) ноутбуке или рабочей станции, прежде чем развертывать ее на машинах infiniband.

Что касается вашего второго вопроса о настройке сети, я уверен, что вы можете сделать бесконечную настройку, но пока у вас нет реальных рабочих нагрузок и точных цифр, вы тратите свое время впустую. Сначала наладьте работу, а потом уже беспокойтесь об оптимизации сети. Возможно, вам нужно настроиться на множество крошечных пакетов. Возможно, вам нужно побеспокоиться о нескольких крупных переводах. Настройка будет сильно различаться в зависимости от случая.

person Rob Latham    schedule 22.05.2015