Как сравнить PCIe и DMA?

Я использую двухпортовую сетевую карту Intel x520 и x540, подключенную к серверу Dell PowerEdge. Все порты NIC могут работать на скорости 10 Гбит/с, следовательно, всего 40 Гбит/с. Система имеет 2 сокета, содержащих процессор Xeon E5-2640 v3 (микроархитектура Haswell).

Есть много проблем, с которыми я сталкиваюсь, и их можно решить с помощью бенчмаркинга PCIe и DMA. Однако я не мог найти подходящего способа сделать то же самое. Я не могу достичь пропускной способности 40 Гбит / с даже с драйвером и библиотеками на основе DPDK (с 64-байтными пакетами). Мне нужно провести эксперименты с размером 64 байта и я не могу изменить размер пакета.

Я генерирую пакеты с помощью DPDK-pktgen и подсчитываю события с помощью Intel-PCM, ./pcm-pci.x. Однако подсчет является одним из способов, в том смысле, что я подсчитываю количество событий и не могу сказать, какое максимальное количество каждого события может поддерживать система. Результаты от pcm-pci.x :

Skt   PCIeRdCur    RFO     CRd     DRd      ItoM    PRd    WiL
0      73 M      3222 K   784 K    63 M     52 M     0    2791 K

Мои сетевые карты подключены к сокету 0, поэтому я не привожу результаты для сокета 1.

Есть ли способ сравнить шину PCIe и механизм DMA? и Есть ли способ получить точную задержку в подсистеме ввода-вывода (на каждом уровне) для обработки пакетов (нельзя использовать rdtsc() для измерения задержек на аппаратном уровне)?


person A-B    schedule 08.09.2017    source источник


Ответы (1)


Вы не упомянули, что ядра вашего процессора работают на 100%? Если они работают с максимальной пропускной способностью, а скорость линии не достигает 40 Гбит/с, то проблема, возможно, связана с программным обеспечением.

Взгляните на SystemTap; вы можете использовать его для отладки и записи времени выполнения, задержки и дрожания (создания гистограммы) событий и функций ядра. В этом сообщении блога есть отличный пример: https://blog.cloudflare.com/revenge-listening-sockets/

На самом деле это не совсем то, что вы просили, но вы можете использовать это, чтобы помочь сузить узкое место в вашем тестировании. Вы можете использовать SystemTap для мониторинга количества вызовов функций ядра, времени выполнения (задержки) и дрожания, а производительность в Linux также очень полезна для мониторинга производительности системы (переключения контекста, пропущенные ветки и т. д., см. здесь и здесь), так что вместе они помогут вам сузить узкое место в вашем программном обеспечении.

Это может привести вас к функции, которая напрямую взаимодействует с оборудованием, например: http://elixir.free-electrons.com/linux/latest/source/drivers/net/ethernet/intel/ixgbe/ixgbe_main..c#L8000

^ Объяснение:

writel записывает «long» в отображаемый в памяти адрес ввода-вывода. В этом случае используется адрес tx_ring->tail (это аппаратный адрес), а записываемое значение равно i. Эта запись на устройство запускает устройство, чтобы сообщить ему, что дополнительные данные готовы к DMA из ОЗУ и записи в сеть.

Или эти инструменты могут привести вас к функции программного обеспечения, которая вызывает задержку, например, может иметь высокий процент промахов.

Изменить:

Вы также не упомянули свою версию ОС, версию ядра, драйвера сетевой карты, версию прошивки и т. д. По моему опыту, для хорошей производительности с DPDK очень важно, чтобы вы использовали последнюю прошивку сетевой карты, драйверы и последнюю сборку ядра.

person jwbensley    schedule 11.11.2017