Двухпортовая проблема пропускной способности RDMA
У меня есть два узла, соединенные с двухпортовыми HCA Mellanox Connext-X3 VPI через коммутатор IB. Узлы представляют собой две машины с сокетами с процессорами Hasswell и 2 модулями DIMM по 16 ГБ на каждый сокет (всего 64 ГБ). Кажется, все работает отлично, за исключением показателей производительности, которые кажутся неправильными.
Когда я бегу ib_read_bw
тест:
server# ib_read_bw --report_gbits
client# ib_read_bw server --report_gbits
---------------------------------------------------------------------------------------
#bytes #iterations BW peak[Gb/sec] BW average[Gb/sec] MsgRate[Mpps]
65536 1000 37.76 37.76 0.072016
---------------------------------------------------------------------------------------
Но когда я запускаю двухпортовый:
server# ib_read_bw --report_gbits -O
client# ib_read_bw server --report_gbits -O
---------------------------------------------------------------------------------------
#bytes #iterations BW peak[Gb/sec] BW average[Gb/sec] MsgRate[Mpps]
65536 2000 52.47 52.47 0.100073
---------------------------------------------------------------------------------------
Я получаю улучшение менее чем на 40% (я ошибаюсь, ожидая ~2-кратной пропускной способности одного порта)?
Я не знаю, что может быть здесь узким местом и как его найти.
Другие конфигурации, которые могут быть полезны:
- Каждый сокет имеет 8 ядер, в целом каждая машина имеет 32 HT
- Каждый модуль DIMM обеспечивает ~14 ГБ / с массы (для каждого сокета mem-bw: ~28 ГБ / с, всего ~56 ГБ / с)
- Я использовал Mellanox Auto Tuning Utility для настройки прерываний.
- Каналы IB - 4X 10,0 Гбит / с (FDR10) - каждая 40 Гбит / с
- Я использую Mellanox OFED 4.3.
2 ответа
Я думаю, что узким местом здесь является канал PCIe между ConnectX и хостом. ConnectX-3 имеет соединение PCIe 3 x8 поколения, которое связано с теоретическим максимумом 63,04 Гбит / с (согласно этому ответу) и не включает служебные данные (см. Здесь).
У меня есть (2) системы, каждая с Mellanox FDR MCX354A-FCBT CX354A (ConnectX-3 VPI.) Только имея (2) с использованием InfiniBand, у меня нет переключателя, и я просто подключаю их напрямую. Я использую двойной Xeons (Sandy Bridge.)
У меня был кабель 40 Гбит / с, который препятствовал соединению FDR, и получал:
#bytes #iterations BW peak[Gb/sec] BW average[Gb/sec] MsgRate[Mpps]
65536 1000 31.11 31.11 0.059329
Я получил кабель FDR (56 Гбит / с) и начал получать:
#bytes #iterations BW peak[Gb/sec] BW average[Gb/sec] MsgRate[Mpps]
65536 1000 49.58 49.58 0.094569
Я всегда задавался вопросом, как было бы, если бы я использовал оба порта, поэтому попробовал это, и получил:
#bytes #iterations BW peak[Gb/sec] BW average[Gb/sec] MsgRate[Mpps]
65536 2000 52.28 52.28 0.099717
Ну что ж. Я, вероятно, не буду беспокоиться об этом.
Я определенно считаю haggai_e правильным, потому что мои карты также PCI Express 3.0 x8. Я думаю, чтобы увидеть быстрее, нам понадобятся карты 3,0х16 или 4,0.
Еще одним преимуществом двойных портов является то, что они могут подключаться напрямую к различным сетям или машинам, и каждый из них получает полную скорость, если они не передают постоянно.