Как улучшается пропускная способность SEND, когда зарегистрированная память выравнивается по размеру системной страницы? (в Mellanox IBD)

Операционная система: RHEL Centos 7.9 последняя версия

Операция: отправка фрагментов по 500 МБ 21 раз из одной системы в другую, подключенную через кабели Mellanox.(Контроллер Ethernet: семейство Mellanox Technologies MT28908 [ConnectX-6])

(Зарегистрированная область памяти (500 МБ) повторно используется для всех 21 итераций.)

Выигрыш в пропускной способности отправки сообщений при использованииalign_alloc () (с размером системной страницы 4096 байт) вместо malloc() для зарегистрированной памяти составляет около 35 Гбит/с.

с malloc(): ~86 Гбит/с

сalign_alloc(): ~121 Гбит/с

Поскольку ЦП не задействован для этих операций, как эта операция выполняется быстрее с выровненной памятью? Пожалуйста, предоставьте полезные справочные ссылки, если таковые имеются, которые объясняют это. Какие изменения привносит выровненная память в операции чтения/записи? Улучшается ли трансляция адресов внутри устройства?

[В Интернете имеется очень ограниченная информация об этом, поэтому спрашиваю здесь.]

1 ответ

Операции RDMA используют либо MMIO, либо DMA для передачи данных из основной памяти в сетевую карту через шину PCI — DMA используется для более крупных передач.

Поведение, которое вы наблюдаете, может быть полностью объяснено DMA-компонентом передачи. DMA работает на физическом уровне, и непрерывная область в виртуальном адресном пространстве вряд ли будет отображаться на непрерывную область в физическом пространстве. Эта фрагментация влечет за собой затраты - требуется больше трансляции на единицу передачи, а передачи DMA прерываются на границах физических страниц.

[1] https://www.kernel.org/doc/html/latest/core-api/dma-api-howto.html

[2] Выравнивание памяти

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