X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=app%2Ftest-pmd%2Ftestpmd.c;h=17ae446c9b2c8fa43c4fe4ec5960befcaad34047;hb=ff63ebbb67a74da2ade76933349d76308698f3ce;hp=0c6a50ea384fcdb4c9a40fc31cbdcc026cc7631b;hpb=3ab64341daf8bae485a7e27c68f1dd80c7fd5130;p=dpdk.git diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c index 0c6a50ea38..17ae446c9b 100644 --- a/app/test-pmd/testpmd.c +++ b/app/test-pmd/testpmd.c @@ -73,6 +73,9 @@ #include #include #include +#ifdef RTE_LIBRTE_IXGBE_PMD +#include +#endif #ifdef RTE_LIBRTE_PMD_XENVIRT #include #endif @@ -95,6 +98,7 @@ uint16_t verbose_level = 0; /**< Silent by default. */ /* use master core for command line ? */ uint8_t interactive = 0; uint8_t auto_start = 0; +char cmdline_filename[PATH_MAX] = {0}; /* * NUMA support configuration. @@ -280,16 +284,27 @@ uint8_t lsc_interrupt = 1; /* enabled by default */ */ uint8_t rmv_interrupt = 1; /* enabled by default */ +/* + * Display or mask ether events + * Default to all events except VF_MBOX + */ +uint32_t event_print_mask = (UINT32_C(1) << RTE_ETH_EVENT_UNKNOWN) | + (UINT32_C(1) << RTE_ETH_EVENT_INTR_LSC) | + (UINT32_C(1) << RTE_ETH_EVENT_QUEUE_STATE) | + (UINT32_C(1) << RTE_ETH_EVENT_INTR_RESET) | + (UINT32_C(1) << RTE_ETH_EVENT_MACSEC) | + (UINT32_C(1) << RTE_ETH_EVENT_INTR_RMV); + /* * NIC bypass mode configuration options. */ -#ifdef RTE_NIC_BYPASS +#ifdef RTE_LIBRTE_IXGBE_BYPASS /* The NIC bypass watchdog timeout. */ -uint32_t bypass_timeout = RTE_BYPASS_TMT_OFF; - +uint32_t bypass_timeout = RTE_PMD_IXGBE_BYPASS_TMT_OFF; #endif + #ifdef RTE_LIBRTE_LATENCY_STATS /* @@ -353,10 +368,15 @@ struct queue_stats_mappings *rx_queue_stats_mappings = rx_queue_stats_mappings_a uint16_t nb_tx_queue_stats_mappings = 0; uint16_t nb_rx_queue_stats_mappings = 0; -unsigned max_socket = 0; +unsigned int num_sockets = 0; +unsigned int socket_ids[RTE_MAX_NUMA_NODES]; +#ifdef RTE_LIBRTE_BITRATE /* Bitrate statistics */ struct rte_stats_bitrates *bitrate_data; +lcoreid_t bitrate_lcore_id; +uint8_t bitrate_enabled; +#endif /* Forward function declarations */ static void map_port_queue_stats_mapping_registers(uint8_t pi, struct rte_port *port); @@ -371,6 +391,22 @@ static void eth_event_callback(uint8_t port_id, */ static int all_ports_started(void); +/* + * Helper function to check if socket is allready discovered. + * If yes, return positive value. If not, return zero. + */ +int +new_socket_id(unsigned int socket_id) +{ + unsigned int i; + + for (i = 0; i < num_sockets; i++) { + if (socket_ids[i] == socket_id) + return 0; + } + return 1; +} + /* * Setup default configuration. */ @@ -383,11 +419,14 @@ set_default_fwd_lcores_config(void) nb_lc = 0; for (i = 0; i < RTE_MAX_LCORE; i++) { - sock_num = rte_lcore_to_socket_id(i) + 1; - if (sock_num > max_socket) { - if (sock_num > RTE_MAX_NUMA_NODES) - rte_exit(EXIT_FAILURE, "Total sockets greater than %u\n", RTE_MAX_NUMA_NODES); - max_socket = sock_num; + sock_num = rte_lcore_to_socket_id(i); + if (new_socket_id(sock_num)) { + if (num_sockets >= RTE_MAX_NUMA_NODES) { + rte_exit(EXIT_FAILURE, + "Total sockets greater than %u\n", + RTE_MAX_NUMA_NODES); + } + socket_ids[num_sockets++] = sock_num; } if (!rte_lcore_is_enabled(i)) continue; @@ -501,7 +540,7 @@ check_socket_id(const unsigned int socket_id) { static int warning_once = 0; - if (socket_id >= max_socket) { + if (new_socket_id(socket_id)) { if (!warning_once && numa_support) printf("Warning: NUMA should be configured manually by" " using --port-numa-config and" @@ -524,6 +563,13 @@ init_config(void) uint8_t port_per_socket[RTE_MAX_NUMA_NODES]; memset(port_per_socket,0,RTE_MAX_NUMA_NODES); + + if (numa_support) { + memset(port_numa, NUMA_NO_CONFIG, RTE_MAX_ETHPORTS); + memset(rxring_numa, NUMA_NO_CONFIG, RTE_MAX_ETHPORTS); + memset(txring_numa, NUMA_NO_CONFIG, RTE_MAX_ETHPORTS); + } + /* Configuration of logical cores. */ fwd_lcores = rte_zmalloc("testpmd: fwd_lcores", sizeof(struct fwd_lcore *) * nb_lcores, @@ -586,8 +632,9 @@ init_config(void) if (numa_support) { uint8_t i; - for (i = 0; i < max_socket; i++) - mbuf_pool_create(mbuf_data_size, nb_mbuf_per_pool, i); + for (i = 0; i < num_sockets; i++) + mbuf_pool_create(mbuf_data_size, nb_mbuf_per_pool, + socket_ids[i]); } else { if (socket_num == UMA_NO_CONFIG) mbuf_pool_create(mbuf_data_size, nb_mbuf_per_pool, 0); @@ -951,16 +998,23 @@ run_pkt_fwd_on_lcore(struct fwd_lcore *fc, packet_fwd_t pkt_fwd) for (sm_id = 0; sm_id < nb_fs; sm_id++) (*pkt_fwd)(fsm[sm_id]); #ifdef RTE_LIBRTE_BITRATE - tics_current = rte_rdtsc(); - if (tics_current - tics_datum >= tics_per_1sec) { - /* Periodic bitrate calculation */ - for (idx_port = 0; idx_port < cnt_ports; idx_port++) - rte_stats_bitrate_calc(bitrate_data, idx_port); - tics_datum = tics_current; + if (bitrate_enabled != 0 && + bitrate_lcore_id == rte_lcore_id()) { + tics_current = rte_rdtsc(); + if (tics_current - tics_datum >= tics_per_1sec) { + /* Periodic bitrate calculation */ + for (idx_port = 0; + idx_port < cnt_ports; + idx_port++) + rte_stats_bitrate_calc(bitrate_data, + idx_port); + tics_datum = tics_current; + } } #endif #ifdef RTE_LIBRTE_LATENCY_STATS - if (latencystats_lcore_id == rte_lcore_id()) + if (latencystats_enabled != 0 && + latencystats_lcore_id == rte_lcore_id()) rte_latencystats_update(); #endif @@ -1768,7 +1822,7 @@ rmv_event_callback(void *arg) if (da->type == RTE_DEVTYPE_VIRTUAL) snprintf(name, sizeof(name), "%s", da->virt.drv_name); else if (da->type == RTE_DEVTYPE_WHITELISTED_PCI) - rte_eal_pci_device_name(&da->pci.addr, name, sizeof(name)); + rte_pci_device_name(&da->pci.addr, name, sizeof(name)); printf("removing device %s\n", name); rte_eal_dev_detach(name); dev->state = RTE_ETH_DEV_UNUSED; @@ -1795,7 +1849,7 @@ eth_event_callback(uint8_t port_id, enum rte_eth_event_type type, void *param) fprintf(stderr, "\nPort %" PRIu8 ": %s called upon invalid event %d\n", port_id, __func__, type); fflush(stderr); - } else { + } else if (event_print_mask & (UINT32_C(1) << type)) { printf("\nPort %" PRIu8 ": %s event\n", port_id, event_desc[type]); fflush(stdout); @@ -1961,8 +2015,8 @@ init_port_config(void) rte_eth_macaddr_get(pid, &port->eth_addr); map_port_queue_stats_mapping_registers(pid, port); -#ifdef RTE_NIC_BYPASS - rte_eth_dev_bypass_init(pid); +#ifdef RTE_LIBRTE_IXGBE_BYPASS + rte_pmd_ixgbe_bypass_init(pid); #endif if (lsc_interrupt && @@ -2227,6 +2281,14 @@ main(int argc, char** argv) rte_panic("Empty set of forwarding logical cores - check the " "core mask supplied in the command parameters\n"); + /* Bitrate/latency stats disabled by default */ +#ifdef RTE_LIBRTE_BITRATE + bitrate_enabled = 0; +#endif +#ifdef RTE_LIBRTE_LATENCY_STATS + latencystats_enabled = 0; +#endif + argc -= diag; argv += diag; if (argc > 1) @@ -2264,20 +2326,26 @@ main(int argc, char** argv) /* Setup bitrate stats */ #ifdef RTE_LIBRTE_BITRATE - bitrate_data = rte_stats_bitrate_create(); - if (bitrate_data == NULL) - rte_exit(EXIT_FAILURE, "Could not allocate bitrate data.\n"); - rte_stats_bitrate_reg(bitrate_data); + if (bitrate_enabled != 0) { + bitrate_data = rte_stats_bitrate_create(); + if (bitrate_data == NULL) + rte_exit(EXIT_FAILURE, + "Could not allocate bitrate data.\n"); + rte_stats_bitrate_reg(bitrate_data); + } #endif - #ifdef RTE_LIBRTE_CMDLINE + if (strlen(cmdline_filename) != 0) + cmdline_read_from_file(cmdline_filename); + if (interactive == 1) { if (auto_start) { printf("Start automatic packet forwarding\n"); start_packet_forwarding(0); } prompt(); + pmd_test_exit(); } else #endif {