Я знаю, что петля будет проходить через сетевой стек ядра до тех пор, пока не достигнет уровня IP, включая накладные расходы на системные вызовы и некоторые накладные расходы на копирование памяти. DPDK и RDMA используют разные технологии, чтобы избежать этого.
Итак, скажем, у меня есть две машины, соединенные dpdk/rdma, затем я провожу тест на задержку сети, будет ли это быстрее, чем петля только на одной машине? Я провел быстрый тест ping localhost
на процессоре E5-2630 v4 @ 2,20 ГГц, что в среднем составляет 0,010 мс.
Я задался этим вопросом, когда тестировал свой кластер ceph с помощью vstart.sh. Я хочу минимизировать задержку в сети, чтобы тщательно проанализировать, как код, связанный с osd-, влияет на задержку.
судя по беседе в комментариях, настоящий вопрос Does DPDK/RDMA between 2 machines gives lower latency than localhost ping
.
[Ответ] да, вы можете добиться того же. Но есть некоторые оговорки
rte_eth_tx_burst
только ставит в очередь дескриптор пакета для DMA на PCIe для отправки трафика. Это фактически не отправляет пакет.rte_eth_tx_buffer_flush
явно сбрасывает все ранее буферизованные пакеты на оборудование.rte_pktmbuf_alloc
для захвата mbuf и установите для ref_cnt значение 250., следовательно, с правильным сетевым адаптером (, который поддерживает передачу с малой задержкой), буфер DPDK API rte_eth_tx__сбросить, а предварительно-выделенный mbuf с ref_cnt обновлен до более высокого значения, которого вы можете достичь в среднем 0.010ms
.
Примечание:Для получения лучшего базового уровня используйте генератор пакетов-или пакетный Balster, отправьте запрос ICMP на целевую машину с помощью ядра и решения DPDK, чтобы сравнить реальную производительность загрузки для скорости линии, такой как 1%, 5%, 10 %, 25%, 50%, 75%, 100%.