RDMA Scatter/ Собери в глаголах API
RDMA Scatter / Gather - хороший способ консолидировать передачу данных. Например, API глаголов позволяет записывать данные в нескольких местах в удаленный буфер с помощью операции записи SINGLE RDMA; или данные в удаленном буфере могут быть считаны в несколько мест с помощью операции чтения ОДНОЙ RDMA.
Однако я не могу инициировать запись операции RDMA в несколько мест на удаленной стороне (или чтение из нескольких мест на удаленной стороне). Эта функция привлекательна для нас, потому что она эффективно использует широкие полосы RDMA для нескольких небольших записей. Я также проверил API-интерфейсы Intel qsm и API-интерфейсы Cray gni. Кажется, никто не поддерживает такую функцию - давайте назовем ее "дистанционное рассеяние, управляемое автором". Есть ли глубокая причина, по которой это не поддерживается?
1 ответ
У меня нет хорошего объяснения, почему интерфейс глаголов не поддерживает его, так как он может быть определенно реализован в оборудовании.
Однако есть по крайней мере два способа сделать это более эффективно: 1. Более простой способ - вы можете опубликовать список запросов RDMA сразу для нескольких удаленных местоположений и запросить запись завершения только для последнего - это обеспечит лучшую производительность, чем размещать их по одному. 2. Более продвинутый: вы можете создать "UMR" на удаленном хосте, который сгруппирует все эти местоположения в один непрерывный виртуальный MR, затем вы можете использовать этот удаленный виртуальный MR с помощью одной операции после операции.
Причина, по которой запись в RDMA имеет ограниченный список разброса, заключается в том, что этот список должен передаваться по проводной сети и выполняться HCA на удаленной стороне, а HCA может иметь ограниченные ресурсы для хранения этой информации. Это в отличие от локальных операций, таких как размещение дескриптора получения, где дескриптор является локальным на машине.