Die DPDK -Anwendung zeigt immer wieder weggeworfene PaketeLinux

Linux verstehen
Anonymous
 Die DPDK -Anwendung zeigt immer wieder weggeworfene Pakete

Post by Anonymous »

Ich verwende DPDK, um Pakete von einem Mellanox-Kartenanschluss (ConnectX-6) zu erhalten und zu verarbeiten. Der Verkehr soll 100 Gbit / s sein. Ich verwende den folgenden Thread, um Statistiken aus dem NIC < /p>
zu drucken

Code: Select all

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>
Aber manchmal kann ich sehen, dass weggeworfene Pakete jede Sekunde erhöhen. Ich habe viele mögliche Szenarien ausprobiert, aber ich bekomme immer wieder weggeworfene Pakete. Es ist erwähnenswert, dass die weggeworfenen Pakete auftreten, wenn der Durchsatz beispielsweise zwischen 70 und 85 Gbit / s liegt. Und wenn es 90 Gbit / s erreicht, wird Stopps. Gleichzeitig halten verpasste Pakete den Anfangswert ohne Erhöhung.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
Ich habe versucht, MTU auf 9600 zu ändern, aber das Problem erscheint immer noch.>

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post