Будет ли NIC с поддержкой RDMA выполнять преобразование в обратный порядок?
Можно ли получить адаптер RDMA (например, Mellanox NIC) для преобразования в порядок байтов во время передачи данных? В частности, мы выполняем перевод RDMA из системы с прямым порядком байтов в систему с прямым порядком байтов и наоборот. Как только данные попадают в цель, нам нужно выполнить bswap32() или bswap64(), чтобы выполнить преобразование в порядке байтов, которое будет жевать процессорные циклы. Мне интересно, можем ли мы вместо этого получить бесплатные bswaps от NIC.
1 ответ
Обмен порядком байтов не является операцией / атрибутом, который определен в спецификации InfiniBand. Однако устройства Mellanox (ConnectX-4 и более поздние версии) предоставляют примитивы для вычисления векторов в стороне, а в качестве одной из поддерживаемых операций используется обмен порядком байтов По сути, это означает, что можно выполнить эту замену HW для данных перед отправкой или после их получения.
Эта возможность вычисления векторов все еще находится на ранних стадиях с точки зрения использования API более высокого уровня. Вы сможете найти некоторые ссылки в этих коммитах ядра Linux:
- https://patchwork.kernel.org/patch/8365791/ ([rdma-next, 3/8] net / mlx5_core: введение аппаратных возможностей арифметики разгрузки)
- https://patchwork.kernel.org/patch/8388951/ ([rdma-next, V1,7 / 8] IB / core: объявлять о поддерживаемых возможностях векторных CALC)
Частичная поддержка также доступна через "экспериментальные глаголы" на Mellanox OFED - следите за обновлениями.