2013-05-16 7 views
1

Я пытаюсь диагностировать ошибку распределения памяти, которую я использовал ibv_reg_mr() в программном обеспечении, которое я использую, и мое подозрение в том, что оно связано с известными проблемами с некоторыми картами Mellanox Infiniband, где максимальная память по умолчанию, которая может зарегистрировано около 2 ГБ (см. часто задаваемые вопросы № 18 здесь http://www.open-mpi.org/faq/?category=openfabrics).найти максимально допустимый ibv_reg_mr

Я хотел бы иметь возможность подтвердить, что это так или нет, поэтому я могу быстро обсудить решение с моими системными администраторами. Будучи незнакомым с RDMA и Infiniband, кто-то может предложить либо (a) простую программу, которая могла бы регистрировать произвольные объемы памяти, чтобы я мог вызвать ошибку с максимально допустимым значением, либо (b) предложить способ, которым я может определить способ настройки Infiniband, учитывая, что у меня нет доступа root?

Спасибо всем!

Jason

ответ

3

Вы можете прочитать параметры для HCA водителей Mellanox InfiniBand от sysfs и вам не нужно корневого доступа, чтобы сделать это. Параметры для модуля <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 KiB на большинстве современных платформ.

Каждый из этих параметров (кроме PAGE_SIZE) может быть считан из соответствующей директории модуля в sysfs.

Возможно, что оба модуля загружены. В этом случае просто сделайте то, что делает Open MPI: сначала найдите mlx4_core и ib_mthca секунд.

+0

Христос, отличный ответ. Благодаря! –

+0

Простое наблюдение за этим: Если для параметра log_num_mtt установлено значение 0 (что в моем случае), это означает, что параметр _actually_ zero? Может ли это означать, что это настройка по умолчанию? В руководстве для OFED 1.5.3 указано, что по умолчанию это значение равно 20. –

+0

Это означает, что существует только один MTT (log2 из 1 равно 0). Вы проверяли настройки для обоих модулей? Также параметры модуля можно настроить в '/ etc/modprobe.d /' или что-то в этом роде. –

Смежные вопросы