Приложение DPDK продолжает отображать отброшенные пакетыLinux

Ответить
Anonymous
 Приложение DPDK продолжает отображать отброшенные пакеты

Сообщение Anonymous »

Я использую DPDK для получения пакетов из порта Mellanox Card (ConnectX-6) и обрабатываю их. Движение должно быть 100 Гбит / с. Я использую следующий поток для печати статистики из NIC < /p>

Код: Выделить всё

static void lcore_main_display_stats(void)
{
struct rte_eth_xstat_name xstat_names[MAX_XSTATS];
int retval;
int num_xstats = 0;
struct rte_eth_stats stats;
struct rte_eth_xstat xstats[MAX_XSTATS];
uint64_t prev_reading = 0;
uint64_t current_diff = 0;

while (MAIN_KEEP_RUNNING == main_keep_running)
{
fflush(stdout);
if (PORT_ACTIVE == downlink1_port.port_status)
{
// Get standard statistics
retval = rte_eth_stats_get(downlink1_port.port_id, &stats);

// Get extended statistics names
num_xstats = rte_eth_xstats_get_names(downlink1_port.port_id, xstat_names, MAX_XSTATS);

// Get extended statistics
retval = rte_eth_xstats_get(downlink1_port.port_id, xstats, num_xstats);

current_diff = stats.ibytes - prev_reading;
Gbps = (current_diff / 1024.0 / 1024.0 / 1024.0) * 8;
prev_reading = stats.ibytes;

// Get standard statistics
retval = rte_eth_stats_get(downlink1_port.port_id, &stats);
if (retval != 0)
{
fprintf(stderr, "Failed to get standard stats for port %u: %s\n", downlink1_port.port_id, rte_strerror(-retval));
return;
}

printf("\n--- Standard Statistics ---\n");
printf("Packets received: %" PRIu64 "\n", stats.ipackets);
printf("Packets transmitted: %" PRIu64 "\n", stats.opackets);
printf("Bytes received: %" PRIu64 "\n", stats.ibytes);
printf("Giga bytes received: %f\n", ((double)stats.ibytes / 1024.0 / 1024.0 / 1024.0));
printf("Bytes transmitted: %" PRIu64 "\n", stats.obytes);
printf("RX errors: %" PRIu64 "\n", stats.ierrors);
printf("TX errors: %" PRIu64 "\n", stats.oerrors);
printf("Missed packets: %" PRIu64 "\n", stats.imissed);
printf("Missed packets\%: %f\n", ((double)stats.imissed/stats.ipackets)*100);
for (int i = 0; i < num_xstats; i++)
{
if (!strcmp("rx_phy_discard_packets", xstat_names[i].name))
{
printf("%s: %" PRIu64 "\n", xstat_names[i].name, xstats[i].value);
printf("Discarded packet percentage: %f\%\n", ((double)xstats[i].value / stats.ipackets) * 100);
}
}
printf("RX no mbuf errors: %" PRIu64 "\n", stats.rx_nombuf);
printf("Gbps: %f \n", Gbps);
}

sleep(ONE_SECOND_SLEEP_TIME);
fflush(stdout);
}
< /code>
Но иногда я вижу, что выброшенные пакеты увеличиваются каждую секунду. Я пробовал много возможных сценариев, но я продолжаю отбрасывать пакеты. Стоит отметить, что выброшенные пакеты появляются, когда пропускная способность составляет от 70 до 85 Гбит / с, например. И когда он достигнет 90 Гбит / с, остановки. В то же время пропущенные пакеты сохраняют начальное значение без какого-либо увеличения.
Выход пример: < /p>
Packets received: 6113919634
Packets transmitted: 0
Bytes received: 6369429122446
Giga bytes received: 5931.993129
Bytes transmitted: 0
RX errors: 0
TX errors: 0
Missed packets: 148596
Missed packets%: 0.002430
rx_phy_discard_packets: 12258048
Discarded packet percentage: 0.200494%
RX no mbuf errors: 0
Gbps: 78.914868
Я пытался изменить MTU до 9600, но все же возникает проблема.
Любые объяснения, предложения или решения для этого?

Подробнее здесь: https://stackoverflow.com/questions/794 ... ed-packets
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»