Найти максимально разрешенный 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 второй.

Другие вопросы по тегам