summaryrefslogtreecommitdiffstats
path: root/src/sim
diff options
context:
space:
mode:
authorimarom <imarom@cisco.com>2016-04-06 17:29:28 +0300
committerimarom <imarom@cisco.com>2016-04-10 12:37:20 +0300
commitff443a39bc967fa58c5fb16d626bb96a2abb59f0 (patch)
tree4cc848c8ef1f9fbe2a99bc55670c04088756a2a9 /src/sim
parent1d62dfca8a6c7a3a54c8c08ef1a1332582ba38cb (diff)
NULL stream and multi core better support for streams
Diffstat (limited to 'src/sim')
-rw-r--r--src/sim/trex_sim.h6
-rw-r--r--src/sim/trex_sim_stateless.cpp59
2 files changed, 52 insertions, 13 deletions
diff --git a/src/sim/trex_sim.h b/src/sim/trex_sim.h
index 5aeeb226..0c343261 100644
--- a/src/sim/trex_sim.h
+++ b/src/sim/trex_sim.h
@@ -26,12 +26,14 @@ limitations under the License.
#include <bp_sim.h>
#include <json/json.h>
#include <trex_stateless.h>
+#include <vector>
int gtest_main(int argc, char **argv);
class TrexStateless;
class TrexPublisher;
class DpToCpHandler;
+class DPCoreStats;
void set_stateless_obj(TrexStateless *obj);
@@ -146,8 +148,8 @@ private:
void run_dp_core(int core_index,
const std::string &out_filename,
- uint64_t &simulated_pkts,
- uint64_t &written_pkts);
+ std::vector<DPCoreStats> &stats,
+ DPCoreStats &total);
void cleanup();
void flush_dp_to_cp_messages_core(int core_index);
diff --git a/src/sim/trex_sim_stateless.cpp b/src/sim/trex_sim_stateless.cpp
index fa13401d..acbeef69 100644
--- a/src/sim/trex_sim_stateless.cpp
+++ b/src/sim/trex_sim_stateless.cpp
@@ -30,6 +30,23 @@ limitations under the License.
using namespace std;
+class DPCoreStats {
+public:
+ DPCoreStats() {
+ m_simulated_pkts = 0;
+ m_non_active_pkts = 0;
+ m_written_pkts = 0;
+ }
+
+ uint64_t get_on_wire_count() {
+ return (m_simulated_pkts - m_non_active_pkts);
+ }
+
+ uint64_t m_simulated_pkts;
+ uint64_t m_non_active_pkts;
+ uint64_t m_written_pkts;
+};
+
/****** utils ******/
static string format_num(double num, const string &suffix = "") {
const char x[] = {' ','K','M','G','T','P'};
@@ -330,21 +347,21 @@ SimStateless::show_intro(const std::string &out_filename) {
void
SimStateless::run_dp(const std::string &out_filename) {
- uint64_t simulated_pkts_cnt = 0;
- uint64_t written_pkts_cnt = 0;
+ std::vector<DPCoreStats> core_stats(m_dp_core_count);
+ DPCoreStats total;
- show_intro(out_filename);
+ show_intro(out_filename);
if (is_multiple_capture()) {
for (int i = 0; i < m_dp_core_count; i++) {
std::stringstream ss;
ss << out_filename << "-" << i;
- run_dp_core(i, ss.str(), simulated_pkts_cnt, written_pkts_cnt);
+ run_dp_core(i, ss.str(), core_stats, total);
}
} else {
for (int i = 0; i < m_dp_core_count; i++) {
- run_dp_core(i, out_filename, simulated_pkts_cnt, written_pkts_cnt);
+ run_dp_core(i, out_filename, core_stats, total);
}
}
@@ -354,12 +371,25 @@ SimStateless::run_dp(const std::string &out_filename) {
std::cout << "\n\nSimulation summary:\n";
std::cout << "-------------------\n\n";
- std::cout << "simulated " << simulated_pkts_cnt << " packets\n";
+
+ for (int i = 0; i < m_dp_core_count; i++) {
+ std::cout << "core index " << i << "\n";
+ std::cout << "-----------------\n\n";
+ std::cout << " simulated packets : " << core_stats[i].m_simulated_pkts << "\n";
+ std::cout << " non active packets : " << core_stats[i].m_non_active_pkts << "\n";
+ std::cout << " on-wire packets : " << core_stats[i].get_on_wire_count() << "\n\n";
+ }
+
+ std::cout << "Total:" << "\n";
+ std::cout << "-----------------\n\n";
+ std::cout << " simulated packets : " << total.m_simulated_pkts << "\n";
+ std::cout << " non active packets : " << total.m_non_active_pkts << "\n";
+ std::cout << " on-wire packets : " << total.get_on_wire_count() << "\n\n";
if (m_is_dry_run) {
std::cout << "*DRY RUN* - no packets were written\n";
} else {
- std::cout << "written " << written_pkts_cnt << " packets " << "to '" << out_filename << "'\n\n";
+ std::cout << "written " << total.m_written_pkts << " packets " << "to '" << out_filename << "'\n\n";
}
std::cout << "\n";
@@ -395,8 +425,8 @@ SimStateless::get_limit_per_core(int core_index) {
void
SimStateless::run_dp_core(int core_index,
const std::string &out_filename,
- uint64_t &simulated_pkts,
- uint64_t &written_pkts) {
+ std::vector<DPCoreStats> &stats,
+ DPCoreStats &total) {
CFlowGenListPerThread *lpt = m_fl.m_threads_info[core_index];
@@ -406,10 +436,17 @@ SimStateless::run_dp_core(int core_index,
flush_dp_to_cp_messages_core(core_index);
- simulated_pkts += lpt->m_node_gen.m_cnt;
+ /* core */
+ stats[core_index].m_simulated_pkts = lpt->m_node_gen.m_cnt;
+ stats[core_index].m_non_active_pkts = lpt->m_node_gen.m_non_active;
+
+ /* total */
+ total.m_simulated_pkts += lpt->m_node_gen.m_cnt;
+ total.m_non_active_pkts += lpt->m_node_gen.m_non_active;
if (should_capture_core(core_index)) {
- written_pkts += lpt->m_node_gen.m_cnt;
+ stats[core_index].m_written_pkts = (lpt->m_node_gen.m_cnt - lpt->m_node_gen.m_non_active);
+ total.m_written_pkts += (lpt->m_node_gen.m_cnt - lpt->m_node_gen.m_non_active);
}
}