aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--GPL/tools/trex/trex_astf_profile.py249
-rw-r--r--GPL/tools/trex/trex_stl_profile.py27
2 files changed, 130 insertions, 146 deletions
diff --git a/GPL/tools/trex/trex_astf_profile.py b/GPL/tools/trex/trex_astf_profile.py
index a4f03bee3a..205bd260cd 100644
--- a/GPL/tools/trex/trex_astf_profile.py
+++ b/GPL/tools/trex/trex_astf_profile.py
@@ -174,9 +174,7 @@ def simple_burst(
# Load the profile.
client.load_profile(profile)
- ports = [port_0]
- if traffic_directions > 1:
- ports.append(port_1)
+ ports = [port_0, port_1]
# Clear the stats before injecting.
lost_a = 0
@@ -197,9 +195,8 @@ def simple_burst(
# For async stop, we need to export the current snapshot.
xsnap0 = client.ports[port_0].get_xstats().reference_stats
print(f"Xstats snapshot 0: {xsnap0!r}")
- if traffic_directions > 1:
- xsnap1 = client.ports[port_1].get_xstats().reference_stats
- print(f"Xstats snapshot 1: {xsnap1!r}")
+ xsnap1 = client.ports[port_1].get_xstats().reference_stats
+ print(f"Xstats snapshot 1: {xsnap1!r}")
else:
time.sleep(duration + delay)
# Do not block yet, the existing transactions may take long time
@@ -228,8 +225,7 @@ def simple_burst(
approximated_duration = list(sorted(stats.keys()))[-1]
stats = stats[sorted(stats.keys())[-1]]
lost_a = stats[port_0][u"opackets"] - stats[port_1][u"ipackets"]
- if traffic_directions > 1:
- lost_b = stats[port_1][u"opackets"] - stats[port_0][u"ipackets"]
+ lost_b = stats[port_1][u"opackets"] - stats[port_0][u"ipackets"]
# TODO: Latency measurement not used at this phase. This part will
# be aligned in another commit.
@@ -249,131 +245,126 @@ def simple_burst(
str(lat_obj[u"max_usec"]), u"-")
lat_b_hist = str(lat_obj[u"histogram"])
- if traffic_directions > 1:
- total_sent = \
- stats[port_0][u"opackets"] + stats[port_1][u"opackets"]
- total_received = \
- stats[port_0][u"ipackets"] + stats[port_1][u"ipackets"]
- client_sent = stats[port_0][u"opackets"]
- client_received = stats[port_0][u"ipackets"]
- client_stats = stats[u"traffic"][u"client"]
- server_stats = stats[u"traffic"][u"server"]
- # Some zero counters are not sent
- # Active and established flows UDP/TCP
+ total_sent = \
+ stats[port_0][u"opackets"] + stats[port_1][u"opackets"]
+ total_received = \
+ stats[port_0][u"ipackets"] + stats[port_1][u"ipackets"]
+ client_sent = stats[port_0][u"opackets"]
+ client_received = stats[port_0][u"ipackets"]
+ client_stats = stats[u"traffic"][u"client"]
+ server_stats = stats[u"traffic"][u"server"]
+ # Some zero counters are not sent
+ # Active and established flows UDP/TCP
+ # Client
+ c_act_flows = client_stats[u"m_active_flows"]
+ c_est_flows = client_stats[u"m_est_flows"]
+ c_traffic_duration = client_stats.get(u"m_traffic_duration", 0)
+ l7_data = f"client_active_flows={c_act_flows}; "
+ l7_data += f"client_established_flows={c_est_flows}; "
+ l7_data += f"client_traffic_duration={c_traffic_duration}; "
+ # Possible errors
+ # Too many packets in NIC rx queue
+ c_err_rx_throttled = client_stats.get(u"err_rx_throttled", 0)
+ l7_data += f"client_err_rx_throttled={c_err_rx_throttled}; "
+ # Number of client side flows that were not opened
+ # due to flow-table overflow
+ c_err_nf_throttled = client_stats.get(u"err_c_nf_throttled", 0)
+ l7_data += f"client_err_nf_throttled={c_err_nf_throttled}; "
+ # Too many flows
+ c_err_flow_overflow = client_stats.get(u"err_flow_overflow", 0)
+ l7_data += f"client_err_flow_overflow={c_err_flow_overflow}; "
+ # Server
+ s_act_flows = server_stats[u"m_active_flows"]
+ s_est_flows = server_stats[u"m_est_flows"]
+ s_traffic_duration = server_stats.get(u"m_traffic_duration", 0)
+ l7_data += f"server_active_flows={s_act_flows}; "
+ l7_data += f"server_established_flows={s_est_flows}; "
+ l7_data += f"server_traffic_duration={s_traffic_duration}; "
+ # Possible errors
+ # Too many packets in NIC rx queue
+ s_err_rx_throttled = server_stats.get(u"err_rx_throttled", 0)
+ l7_data += f"client_err_rx_throttled={s_err_rx_throttled}; "
+ if u"udp" in profile_file:
# Client
- c_act_flows = client_stats[u"m_active_flows"]
- c_est_flows = client_stats[u"m_est_flows"]
- c_traffic_duration = client_stats.get(u"m_traffic_duration", 0)
- l7_data = f"client_active_flows={c_act_flows}; "
- l7_data += f"client_established_flows={c_est_flows}; "
- l7_data += f"client_traffic_duration={c_traffic_duration}; "
- # Possible errors
- # Too many packets in NIC rx queue
- c_err_rx_throttled = client_stats.get(u"err_rx_throttled", 0)
- l7_data += f"client_err_rx_throttled={c_err_rx_throttled}; "
- # Number of client side flows that were not opened
- # due to flow-table overflow
- c_err_nf_throttled = client_stats.get(u"err_c_nf_throttled", 0)
- l7_data += f"client_err_nf_throttled={c_err_nf_throttled}; "
- # Too many flows
- c_err_flow_overflow = client_stats.get(u"err_flow_overflow", 0)
- l7_data += f"client_err_flow_overflow={c_err_flow_overflow}; "
+ # Established connections
+ c_udp_connects = client_stats.get(u"udps_connects", 0)
+ l7_data += f"client_udp_connects={c_udp_connects}; "
+ # Closed connections
+ c_udp_closed = client_stats.get(u"udps_closed", 0)
+ l7_data += f"client_udp_closed={c_udp_closed}; "
+ # Sent bytes
+ c_udp_sndbyte = client_stats.get(u"udps_sndbyte", 0)
+ l7_data += f"client_udp_tx_bytes={c_udp_sndbyte}; "
+ # Sent packets
+ c_udp_sndpkt = client_stats.get(u"udps_sndpkt", 0)
+ l7_data += f"client_udp_tx_packets={c_udp_sndpkt}; "
+ # Received bytes
+ c_udp_rcvbyte = client_stats.get(u"udps_rcvbyte", 0)
+ l7_data += f"client_udp_rx_bytes={c_udp_rcvbyte}; "
+ # Received packets
+ c_udp_rcvpkt = client_stats.get(u"udps_rcvpkt", 0)
+ l7_data += f"client_udp_rx_packets={c_udp_rcvpkt}; "
+ # Keep alive drops
+ c_udp_keepdrops = client_stats.get(u"udps_keepdrops", 0)
+ l7_data += f"client_udp_keep_drops={c_udp_keepdrops}; "
+ # Client without flow
+ c_err_cwf = client_stats.get(u"err_cwf", 0)
+ l7_data += f"client_err_cwf={c_err_cwf}; "
# Server
- s_act_flows = server_stats[u"m_active_flows"]
- s_est_flows = server_stats[u"m_est_flows"]
- s_traffic_duration = server_stats.get(u"m_traffic_duration", 0)
- l7_data += f"server_active_flows={s_act_flows}; "
- l7_data += f"server_established_flows={s_est_flows}; "
- l7_data += f"server_traffic_duration={s_traffic_duration}; "
- # Possible errors
- # Too many packets in NIC rx queue
- s_err_rx_throttled = server_stats.get(u"err_rx_throttled", 0)
- l7_data += f"client_err_rx_throttled={s_err_rx_throttled}; "
- if u"udp" in profile_file:
- # Client
- # Established connections
- c_udp_connects = client_stats.get(u"udps_connects", 0)
- l7_data += f"client_udp_connects={c_udp_connects}; "
- # Closed connections
- c_udp_closed = client_stats.get(u"udps_closed", 0)
- l7_data += f"client_udp_closed={c_udp_closed}; "
- # Sent bytes
- c_udp_sndbyte = client_stats.get(u"udps_sndbyte", 0)
- l7_data += f"client_udp_tx_bytes={c_udp_sndbyte}; "
- # Sent packets
- c_udp_sndpkt = client_stats.get(u"udps_sndpkt", 0)
- l7_data += f"client_udp_tx_packets={c_udp_sndpkt}; "
- # Received bytes
- c_udp_rcvbyte = client_stats.get(u"udps_rcvbyte", 0)
- l7_data += f"client_udp_rx_bytes={c_udp_rcvbyte}; "
- # Received packets
- c_udp_rcvpkt = client_stats.get(u"udps_rcvpkt", 0)
- l7_data += f"client_udp_rx_packets={c_udp_rcvpkt}; "
- # Keep alive drops
- c_udp_keepdrops = client_stats.get(u"udps_keepdrops", 0)
- l7_data += f"client_udp_keep_drops={c_udp_keepdrops}; "
- # Client without flow
- c_err_cwf = client_stats.get(u"err_cwf", 0)
- l7_data += f"client_err_cwf={c_err_cwf}; "
- # Server
- # Accepted connections
- s_udp_accepts = server_stats.get(u"udps_accepts", 0)
- l7_data += f"server_udp_accepts={s_udp_accepts}; "
- # Closed connections
- s_udp_closed = server_stats.get(u"udps_closed", 0)
- l7_data += f"server_udp_closed={s_udp_closed}; "
- # Sent bytes
- s_udp_sndbyte = server_stats.get(u"udps_sndbyte", 0)
- l7_data += f"server_udp_tx_bytes={s_udp_sndbyte}; "
- # Sent packets
- s_udp_sndpkt = server_stats.get(u"udps_sndpkt", 0)
- l7_data += f"server_udp_tx_packets={s_udp_sndpkt}; "
- # Received bytes
- s_udp_rcvbyte = server_stats.get(u"udps_rcvbyte", 0)
- l7_data += f"server_udp_rx_bytes={s_udp_rcvbyte}; "
- # Received packets
- s_udp_rcvpkt = server_stats.get(u"udps_rcvpkt", 0)
- l7_data += f"server_udp_rx_packets={s_udp_rcvpkt}; "
- elif u"tcp" in profile_file:
- # Client
- # Connection attempts
- c_tcp_connattempt = client_stats.get(u"tcps_connattempt", 0)
- l7_data += f"client_tcp_connattempt={c_tcp_connattempt}; "
- # Established connections
- c_tcp_connects = client_stats.get(u"tcps_connects", 0)
- l7_data += f"client_tcp_connects={c_tcp_connects}; "
- # Closed connections
- c_tcp_closed = client_stats.get(u"tcps_closed", 0)
- l7_data += f"client_tcp_closed={c_tcp_closed}; "
- # Send bytes
- c_tcp_sndbyte = client_stats.get(u"tcps_sndbyte", 0)
- l7_data += f"client_tcp_tx_bytes={c_tcp_sndbyte}; "
- # Received bytes
- c_tcp_rcvbyte = client_stats.get(u"tcps_rcvbyte", 0)
- l7_data += f"client_tcp_rx_bytes={c_tcp_rcvbyte}; "
- # Server
- # Accepted connections
- s_tcp_accepts = server_stats.get(u"tcps_accepts", 0)
- l7_data += f"server_tcp_accepts={s_tcp_accepts}; "
- # Established connections
- s_tcp_connects = server_stats.get(u"tcps_connects", 0)
- l7_data += f"server_tcp_connects={s_tcp_connects}; "
- # Closed connections
- s_tcp_closed = server_stats.get(u"tcps_closed", 0)
- l7_data += f"server_tcp_closed={s_tcp_closed}; "
- # Sent bytes
- s_tcp_sndbyte = server_stats.get(u"tcps_sndbyte", 0)
- l7_data += f"server_tcp_tx_bytes={s_tcp_sndbyte}; "
- # Received bytes
- s_tcp_rcvbyte = server_stats.get(u"tcps_rcvbyte", 0)
- l7_data += f"server_tcp_rx_bytes={s_tcp_rcvbyte}; "
- else:
- total_sent = stats[port_0][u"opackets"]
- total_received = stats[port_1][u"ipackets"]
+ # Accepted connections
+ s_udp_accepts = server_stats.get(u"udps_accepts", 0)
+ l7_data += f"server_udp_accepts={s_udp_accepts}; "
+ # Closed connections
+ s_udp_closed = server_stats.get(u"udps_closed", 0)
+ l7_data += f"server_udp_closed={s_udp_closed}; "
+ # Sent bytes
+ s_udp_sndbyte = server_stats.get(u"udps_sndbyte", 0)
+ l7_data += f"server_udp_tx_bytes={s_udp_sndbyte}; "
+ # Sent packets
+ s_udp_sndpkt = server_stats.get(u"udps_sndpkt", 0)
+ l7_data += f"server_udp_tx_packets={s_udp_sndpkt}; "
+ # Received bytes
+ s_udp_rcvbyte = server_stats.get(u"udps_rcvbyte", 0)
+ l7_data += f"server_udp_rx_bytes={s_udp_rcvbyte}; "
+ # Received packets
+ s_udp_rcvpkt = server_stats.get(u"udps_rcvpkt", 0)
+ l7_data += f"server_udp_rx_packets={s_udp_rcvpkt}; "
+ elif u"tcp" in profile_file:
+ # Client
+ # Connection attempts
+ c_tcp_connattempt = client_stats.get(u"tcps_connattempt", 0)
+ l7_data += f"client_tcp_connattempt={c_tcp_connattempt}; "
+ # Established connections
+ c_tcp_connects = client_stats.get(u"tcps_connects", 0)
+ l7_data += f"client_tcp_connects={c_tcp_connects}; "
+ # Closed connections
+ c_tcp_closed = client_stats.get(u"tcps_closed", 0)
+ l7_data += f"client_tcp_closed={c_tcp_closed}; "
+ # Send bytes
+ c_tcp_sndbyte = client_stats.get(u"tcps_sndbyte", 0)
+ l7_data += f"client_tcp_tx_bytes={c_tcp_sndbyte}; "
+ # Received bytes
+ c_tcp_rcvbyte = client_stats.get(u"tcps_rcvbyte", 0)
+ l7_data += f"client_tcp_rx_bytes={c_tcp_rcvbyte}; "
+ # Server
+ # Accepted connections
+ s_tcp_accepts = server_stats.get(u"tcps_accepts", 0)
+ l7_data += f"server_tcp_accepts={s_tcp_accepts}; "
+ # Established connections
+ s_tcp_connects = server_stats.get(u"tcps_connects", 0)
+ l7_data += f"server_tcp_connects={s_tcp_connects}; "
+ # Closed connections
+ s_tcp_closed = server_stats.get(u"tcps_closed", 0)
+ l7_data += f"server_tcp_closed={s_tcp_closed}; "
+ # Sent bytes
+ s_tcp_sndbyte = server_stats.get(u"tcps_sndbyte", 0)
+ l7_data += f"server_tcp_tx_bytes={s_tcp_sndbyte}; "
+ # Received bytes
+ s_tcp_rcvbyte = server_stats.get(u"tcps_rcvbyte", 0)
+ l7_data += f"server_tcp_rx_bytes={s_tcp_rcvbyte}; "
print(f"packets lost from {port_0} --> {port_1}: {lost_a} pkts")
- if traffic_directions > 1:
- print(f"packets lost from {port_1} --> {port_0}: {lost_b} pkts")
+ print(f"packets lost from {port_1} --> {port_0}: {lost_b} pkts")
except TRexError:
print(u"T-Rex ASTF runtime error!", file=sys.stderr)
diff --git a/GPL/tools/trex/trex_stl_profile.py b/GPL/tools/trex/trex_stl_profile.py
index 09fd7b457c..abf79cdf14 100644
--- a/GPL/tools/trex/trex_stl_profile.py
+++ b/GPL/tools/trex/trex_stl_profile.py
@@ -178,9 +178,8 @@ def simple_burst(
# Disable latency if NIC does not support requested stream type
print(u"##### FAILED to add latency streams #####")
latency = False
- ports = [port_0]
- if traffic_directions > 1:
- ports.append(port_1)
+ # Even for unidir, both ports are needed to see both rx and tx.
+ ports = [port_0, port_1]
# Clear the stats before injecting:
client.clear_stats()
@@ -189,7 +188,7 @@ def simple_burst(
# Choose rate and start traffic:
client.start(
- ports=ports,
+ ports=ports[:traffic_directions],
mult=rate,
duration=duration,
force=force,
@@ -200,9 +199,8 @@ def simple_burst(
# For async stop, we need to export the current snapshot.
xsnap0 = client.ports[0].get_xstats().reference_stats
print(f"Xstats snapshot 0: {xsnap0!r}")
- if traffic_directions > 1:
- xsnap1 = client.ports[1].get_xstats().reference_stats
- print(f"Xstats snapshot 1: {xsnap1!r}")
+ xsnap1 = client.ports[1].get_xstats().reference_stats
+ print(f"Xstats snapshot 1: {xsnap1!r}")
else:
time_start = time.monotonic()
# wait_on_traffic fails if duration stretches by 30 seconds or more.
@@ -223,8 +221,7 @@ def simple_burst(
print(json.dumps(stats, indent=4, separators=(u",", u": ")))
lost_a = stats[port_0][u"opackets"] - stats[port_1][u"ipackets"]
- if traffic_directions > 1:
- lost_b = stats[port_1][u"opackets"] - stats[port_0][u"ipackets"]
+ lost_b = stats[port_1][u"opackets"] - stats[port_0][u"ipackets"]
# Stats index is not a port number, but "pgid".
if latency:
@@ -232,22 +229,18 @@ def simple_burst(
lat_a = fmt_latency(
str(lat_obj[u"total_min"]), str(lat_obj[u"average"]),
str(lat_obj[u"total_max"]), str(lat_obj[u"hdrh"]))
+ # Do not bother with the other dir latency if unidir.
if traffic_directions > 1:
lat_obj = stats[u"latency"][1][u"latency"]
lat_b = fmt_latency(
str(lat_obj[u"total_min"]), str(lat_obj[u"average"]),
str(lat_obj[u"total_max"]), str(lat_obj[u"hdrh"]))
- if traffic_directions > 1:
- total_sent = stats[0][u"opackets"] + stats[1][u"opackets"]
- total_rcvd = stats[0][u"ipackets"] + stats[1][u"ipackets"]
- else:
- total_sent = stats[port_0][u"opackets"]
- total_rcvd = stats[port_1][u"ipackets"]
+ total_sent = stats[0][u"opackets"] + stats[1][u"opackets"]
+ total_rcvd = stats[0][u"ipackets"] + stats[1][u"ipackets"]
print(f"\npackets lost from {port_0} --> {port_1}: {lost_a} pkts")
- if traffic_directions > 1:
- print(f"packets lost from {port_1} --> {port_0}: {lost_b} pkts")
+ print(f"packets lost from {port_1} --> {port_0}: {lost_b} pkts")
except STLError:
print(u"T-Rex STL runtime error!", file=sys.stderr)