Код: Выделить всё
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
Любые объяснения, предложения или решения для этого?
Подробнее здесь: https://stackoverflow.com/questions/794 ... ed-packets