diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/gtest/trex_stateless_gtest.cpp | 4 | ||||
-rw-r--r-- | src/rpc-server/commands/trex_rpc_cmd_stream.cpp | 16 | ||||
-rw-r--r-- | src/stateless/cp/trex_stateless_port.cpp | 6 | ||||
-rw-r--r-- | src/stateless/cp/trex_stream.h | 44 | ||||
-rw-r--r-- | src/stateless/cp/trex_streams_compiler.cpp | 45 | ||||
-rw-r--r-- | src/stateless/cp/trex_streams_compiler.h | 17 |
6 files changed, 84 insertions, 48 deletions
diff --git a/src/gtest/trex_stateless_gtest.cpp b/src/gtest/trex_stateless_gtest.cpp index 70f397b1..2c55fc39 100644 --- a/src/gtest/trex_stateless_gtest.cpp +++ b/src/gtest/trex_stateless_gtest.cpp @@ -2887,7 +2887,7 @@ TEST_F(basic_stl, graph_generator1) { const TrexStreamsGraphObj *obj = graph.generate(streams); - EXPECT_EQ(obj->get_max_bps(), 405120); + EXPECT_EQ(obj->get_max_bps_l2(), 405120); EXPECT_EQ(obj->get_max_pps(), 50); for (auto stream : streams) { @@ -2939,7 +2939,7 @@ TEST_F(basic_stl, graph_generator2) { const TrexStreamsGraphObj *obj = graph.generate(streams); EXPECT_EQ(obj->get_max_pps(), 1000.0); - EXPECT_EQ(obj->get_max_bps(), (1000 * (128 + 4) * 8)); + EXPECT_EQ(obj->get_max_bps_l2(), (1000 * (128 + 4) * 8)); for (auto stream : streams) { diff --git a/src/rpc-server/commands/trex_rpc_cmd_stream.cpp b/src/rpc-server/commands/trex_rpc_cmd_stream.cpp index 95cd895b..b6585a88 100644 --- a/src/rpc-server/commands/trex_rpc_cmd_stream.cpp +++ b/src/rpc-server/commands/trex_rpc_cmd_stream.cpp @@ -629,9 +629,10 @@ TrexRpcCmdValidate::_run(const Json::Value ¶ms, Json::Value &result) { } - result["result"]["rate"]["max_bps"] = graph->get_max_bps(); - result["result"]["rate"]["max_pps"] = graph->get_max_pps(); - result["result"]["rate"]["max_line_util"] = graph->get_max_bps() / port->get_port_speed_bps(); + result["result"]["rate"]["max_bps_l2"] = graph->get_max_bps_l2(); + result["result"]["rate"]["max_bps_l1"] = graph->get_max_bps_l1(); + result["result"]["rate"]["max_pps"] = graph->get_max_pps(); + result["result"]["rate"]["max_line_util"] = (graph->get_max_bps_l1() / port->get_port_speed_bps()) * 100.0; result["result"]["graph"]["expected_duration"] = graph->get_duration(); result["result"]["graph"]["events_count"] = (int)graph->get_events().size(); @@ -643,10 +644,11 @@ TrexRpcCmdValidate::_run(const Json::Value ¶ms, Json::Value &result) { for (const auto &ev : graph->get_events()) { Json::Value ev_json; - ev_json["time_usec"] = ev.time; - ev_json["diff_bps"] = ev.diff_bps; - ev_json["diff_pps"] = ev.diff_pps; - ev_json["stream_id"] = ev.stream_id; + ev_json["time_usec"] = ev.time; + ev_json["diff_bps_l2"] = ev.diff_bps_l2; + ev_json["diff_bps_l1"] = ev.diff_bps_l1; + ev_json["diff_pps"] = ev.diff_pps; + ev_json["stream_id"] = ev.stream_id; events_json.append(ev_json); diff --git a/src/stateless/cp/trex_stateless_port.cpp b/src/stateless/cp/trex_stateless_port.cpp index 05283d5f..f14cc84c 100644 --- a/src/stateless/cp/trex_stateless_port.cpp +++ b/src/stateless/cp/trex_stateless_port.cpp @@ -461,7 +461,7 @@ TrexStatelessPort::calculate_effective_factor(const TrexPortMultiplier &mul) { switch (mul.m_type) { case TrexPortMultiplier::MUL_BPS: - return (mul.m_value / m_graph_obj->get_max_bps()); + return (mul.m_value / m_graph_obj->get_max_bps_l2()); case TrexPortMultiplier::MUL_PPS: return (mul.m_value / m_graph_obj->get_max_pps()); @@ -471,7 +471,7 @@ TrexStatelessPort::calculate_effective_factor(const TrexPortMultiplier &mul) { if (mul.m_op == TrexPortMultiplier::OP_ABS) { double required = (mul.m_value / 100.0) * get_port_speed_bps(); - return (required / m_graph_obj->get_max_bps()); + return (required / m_graph_obj->get_max_bps_l1()); } else { return (m_factor * (mul.m_value / 100.0)); } @@ -606,7 +606,7 @@ TrexStatelessPort::get_port_effective_rate(uint64_t &bps, uint64_t &pps) { generate_streams_graph(); } - bps = m_graph_obj->get_max_bps() * m_factor; + bps = m_graph_obj->get_max_bps_l2() * m_factor; pps = m_graph_obj->get_max_pps() * m_factor; } diff --git a/src/stateless/cp/trex_stream.h b/src/stateless/cp/trex_stream.h index 0964d39a..6bb30cf9 100644 --- a/src/stateless/cp/trex_stream.h +++ b/src/stateless/cp/trex_stream.h @@ -221,23 +221,15 @@ public: return ( (m_burst_total_pkts / m_pps) * 1000 * 1000); } - double get_bps() { - - /* lazy calculate the expected packet length */ - if (m_expected_pkt_len == 0) { - /* if we have a VM - it might have changed the packet (even random) */ - if (m_vm.is_vm_empty()) { - m_expected_pkt_len = m_pkt.len; - } else { - m_expected_pkt_len = m_vm.calc_expected_pkt_size(m_pkt.len); - } - } - + double get_bps_l2() { + return get_bps(false); + } - /* packet length + 4 CRC bytes to bits and multiplied by PPS */ - return (m_pps * (m_expected_pkt_len + 4) * 8); + double get_bps_l1() { + return get_bps(true); } + void Dump(FILE *fd); StreamVmDp * getDpVm(){ @@ -296,6 +288,30 @@ public: /* original template provided by requester */ Json::Value m_stream_json; +private: + + double get_bps(bool layer1) { + + /* lazy calculate the expected packet length */ + if (m_expected_pkt_len == 0) { + /* if we have a VM - it might have changed the packet (even random) */ + if (m_vm.is_vm_empty()) { + m_expected_pkt_len = m_pkt.len; + } else { + m_expected_pkt_len = m_vm.calc_expected_pkt_size(m_pkt.len); + } + } + + + /* packet length + 4 CRC bytes to bits and multiplied by PPS */ + + if (layer1) { + /* layer one includes preamble, frame delimiter and interpacket gap */ + return (m_pps * (m_expected_pkt_len + 4 + 8 + 12) * 8); + } else { + return (m_pps * (m_expected_pkt_len + 4) * 8); + } + } }; diff --git a/src/stateless/cp/trex_streams_compiler.cpp b/src/stateless/cp/trex_streams_compiler.cpp index aa3fa1a0..d9f979e8 100644 --- a/src/stateless/cp/trex_streams_compiler.cpp +++ b/src/stateless/cp/trex_streams_compiler.cpp @@ -549,8 +549,9 @@ TrexStreamsGraph::add_rate_events_for_stream_cont(double &offset_usec, const Tre start_event.stream_id = stream->m_stream_id; start_event.time = offset_usec + stream->m_isg_usec; - start_event.diff_pps = stream->get_pps(); - start_event.diff_bps = ((TrexStream *)stream)->get_bps(); + start_event.diff_pps = stream->get_pps(); + start_event.diff_bps_l2 = ((TrexStream *)stream)->get_bps_l2(); + start_event.diff_bps_l1 = ((TrexStream *)stream)->get_bps_l1(); m_graph_obj->add_rate_event(start_event); /* no more events after this stream */ @@ -571,19 +572,21 @@ TrexStreamsGraph::add_rate_events_for_stream_single_burst(double &offset_usec, c /* for debug purposes */ - start_event.stream_id = stream->m_stream_id; + start_event.stream_id = stream->m_stream_id; stop_event.stream_id = stream->m_stream_id; /* start event */ start_event.time = offset_usec + stream->m_isg_usec; start_event.diff_pps = stream->get_pps(); - start_event.diff_bps = ((TrexStream *)stream)->get_bps(); + start_event.diff_bps_l2 = ((TrexStream *)stream)->get_bps_l2(); + start_event.diff_bps_l1 = ((TrexStream *)stream)->get_bps_l1(); m_graph_obj->add_rate_event(start_event); /* stop event */ stop_event.time = start_event.time + stream->get_burst_length_usec(); stop_event.diff_pps = -(start_event.diff_pps); - stop_event.diff_bps = -(start_event.diff_bps); + stop_event.diff_bps_l2 = -(start_event.diff_bps_l2); + stop_event.diff_bps_l1 = -(start_event.diff_bps_l1); m_graph_obj->add_rate_event(stop_event); /* next stream starts from here */ @@ -605,13 +608,15 @@ TrexStreamsGraph::add_rate_events_for_stream_multi_burst(double &offset_usec, co /* for debug purposes */ - start_event.diff_pps = stream->get_pps(); - start_event.diff_bps = ((TrexStream *)stream)->get_bps(); - start_event.stream_id = stream->m_stream_id; + start_event.diff_pps = stream->get_pps(); + start_event.diff_bps_l2 = ((TrexStream *)stream)->get_bps_l2(); + start_event.diff_bps_l1 = ((TrexStream *)stream)->get_bps_l1(); + start_event.stream_id = stream->m_stream_id; - stop_event.diff_pps = -(start_event.diff_pps); - stop_event.diff_bps = -(start_event.diff_bps); - stop_event.stream_id = stream->m_stream_id; + stop_event.diff_pps = -(start_event.diff_pps); + stop_event.diff_bps_l2 = -(start_event.diff_bps_l2); + stop_event.diff_bps_l1 = -(start_event.diff_bps_l1); + stop_event.stream_id = stream->m_stream_id; /* for each burst create up/down events */ for (int i = 0; i < stream->m_num_bursts; i++) { @@ -730,17 +735,22 @@ TrexStreamsGraphObj::find_max_rate() { double max_rate_pps = 0; double current_rate_pps = 0; - double max_rate_bps = 0; - double current_rate_bps = 0; + double max_rate_bps_l1 = 0; + double current_rate_bps_l1 = 0; + + double max_rate_bps_l2 = 0; + double current_rate_bps_l2 = 0; /* now we simply walk the list and hold the max */ for (auto &ev : m_rate_events) { current_rate_pps += ev.diff_pps; - current_rate_bps += ev.diff_bps; + current_rate_bps_l2 += ev.diff_bps_l2; + current_rate_bps_l1 += ev.diff_bps_l1; - max_rate_pps = std::max(max_rate_pps, current_rate_pps); - max_rate_bps = std::max(max_rate_bps, current_rate_bps); + max_rate_pps = std::max(max_rate_pps, current_rate_pps); + max_rate_bps_l2 = std::max(max_rate_bps_l2, current_rate_bps_l2); + max_rate_bps_l1 = std::max(max_rate_bps_l1, current_rate_bps_l1); } /* if not mark as inifite - get the last event time */ @@ -749,7 +759,8 @@ TrexStreamsGraphObj::find_max_rate() { } m_max_pps = max_rate_pps; - m_max_bps = max_rate_bps; + m_max_bps_l2 = max_rate_bps_l2; + m_max_bps_l1 = max_rate_bps_l1; } static diff --git a/src/stateless/cp/trex_streams_compiler.h b/src/stateless/cp/trex_streams_compiler.h index 4b61dcfa..aaef78be 100644 --- a/src/stateless/cp/trex_streams_compiler.h +++ b/src/stateless/cp/trex_streams_compiler.h @@ -142,7 +142,8 @@ public: TrexStreamsGraphObj() { m_max_pps = 0; - m_max_bps = 0; + m_max_bps_l1 = 0; + m_max_bps_l2 = 0; m_expected_duration = 0; } @@ -156,7 +157,8 @@ public: struct rate_event_st { double time; double diff_pps; - double diff_bps; + double diff_bps_l1; + double diff_bps_l2; uint32_t stream_id; }; @@ -164,8 +166,12 @@ public: return m_max_pps; } - double get_max_bps() const { - return m_max_bps; + double get_max_bps_l1() const { + return m_max_bps_l1; + } + + double get_max_bps_l2() const { + return m_max_bps_l2; } int get_duration() const { @@ -191,7 +197,8 @@ private: void find_max_rate(); double m_max_pps; - double m_max_bps; + double m_max_bps_l1; + double m_max_bps_l2; int m_expected_duration; /* list of rate events */ |