Найти максимально разрешенный ibv_reg_mr
Я пытаюсь диагностировать ошибку выделения памяти, вызванную ibv_reg_mr() в программном обеспечении, которое я использую, и я подозреваю, что это связано с известными проблемами с некоторыми картами Mellanox Infiniband, где максимальный объем памяти, который можно зарегистрировать, составляет около 2 ГБ (см. FAQ #18 здесь http://www.open-mpi.org/faq/?category=openfabrics).
Я хотел бы иметь возможность однозначно подтвердить, так ли это, или нет, поэтому я могу быстро согласовать решение с моими системными администраторами. Будучи незнакомым с RDMA и Infiniband, возможно, кто-то сможет предложить либо (а) простую программу, которая может регистрировать произвольные объемы памяти, чтобы я мог вызвать ошибку при максимально допустимом значении, либо (б) предложить способ, которым я может определить способ настройки Infiniband в настоящее время, учитывая, что у меня нет root-доступа?
Спасибо всем!
Джейсон
1 ответ
Вы можете прочитать параметры для драйверов Mellanox InfiniBand HCA из sysfs
и вам не нужен root-доступ для этого. Параметры для модуля <modname>
найдены в /sys/module/<modname>/parameters/
, Каждый параметр представлен там как текстовый псевдофайл, и его значение можно прочитать, просто прочитав содержимое файла. Вы даже можете сделать это, используя стандартные инструменты командной строки Unix.
Для mlx4_core
В модуле максимальный объем регистрируемой памяти определяется по следующей формуле:
max_reg = (1 << log_num_mtt) * (1 << log_mtts_per_seg) * PAGE_SIZE
Для ib_mthca
Модуль по формуле:
max_reg = (num_mtt - fmr_reserved_mtts) * (1 << log_mtts_per_seg) * PAGE_SIZE
где:
num_mtt
максимальное количество сегментов таблицы трансляции памяти (MTT) на один HCA;log_num_mtt
это двоичный логарифмnum_mtt
;fmr_reserved_mtts
количество сегментов MTT, зарезервированных для FMR;log_mtts_per_seg
двоичный логарифм количества записей MTT на сегмент.PAGE_SIZE
это размер страницы системы, обычно 4 КиБ на большинстве современных платформ.
Каждый из этих параметров (кроме PAGE_SIZE
) можно прочитать из соответствующей директории модуля в sysfs
,
Возможно, что оба модуля загружены. В этом случае просто делайте то, что делает Open MPI: ищите mlx4_core
первый и ib_mthca
второй.