Adds some QOL.
This commit is contained in:
@@ -166,7 +166,25 @@ def activate_hystart():
|
||||
|
||||
|
||||
def is_hystart_activated():
|
||||
return subprocess.check_output('cat /sys/module/tcp_cubic/parameters/hystart', shell=True) == "1"
|
||||
return (
|
||||
subprocess.check_output(
|
||||
"cat /sys/module/tcp_cubic/parameters/hystart", shell=True
|
||||
)
|
||||
== "1"
|
||||
)
|
||||
|
||||
|
||||
def is_tcp_probe_enabled():
|
||||
return (
|
||||
subprocess.check_output(
|
||||
"cat /sys/kernel/debug/tracing/events/tcp/tcp_probe/enable", shell=True
|
||||
)
|
||||
== "1"
|
||||
)
|
||||
|
||||
|
||||
def enable_tcp_probe():
|
||||
os.system("echo '1' > /sys/kernel/debug/tracing/events/tcp/tcp_probe/enable")
|
||||
|
||||
|
||||
def set_default_receive_window():
|
||||
@@ -187,7 +205,9 @@ def monitor_serial(ser, output_file):
|
||||
run_cmds = [NR_CQI_COMMAND, NR_SERVINGCELL_COMMAND, NR_EN_DC_STATUS_COMMAND]
|
||||
try:
|
||||
while ser.is_open:
|
||||
response = subprocess.check_output(CMD_TIME_EPOCH, shell=True).decode("utf-8")
|
||||
response = subprocess.check_output(CMD_TIME_EPOCH, shell=True).decode(
|
||||
"utf-8"
|
||||
)
|
||||
for cmd in run_cmds:
|
||||
ser.write(cmd)
|
||||
sleep(0.3)
|
||||
@@ -203,9 +223,12 @@ def monitor_serial(ser, output_file):
|
||||
if not ser.is_open:
|
||||
print_message("Serial port is closed. Exit monitoring thread.")
|
||||
else:
|
||||
print_message("Something went wrong while monitoring serial interface. Exit monitoring thread.")
|
||||
print_message(
|
||||
"Something went wrong while monitoring serial interface. Exit monitoring thread."
|
||||
)
|
||||
return
|
||||
|
||||
|
||||
class Server:
|
||||
def __init__(self, config):
|
||||
self.config = config
|
||||
@@ -235,10 +258,10 @@ class Server:
|
||||
print_message("HARQ nothing to do on server side.")
|
||||
|
||||
def bandwidth(self):
|
||||
use_reverse_mode = False
|
||||
server_is_sender = False
|
||||
if "reverse" in self.config["set"]:
|
||||
use_reverse_mode = self.config["set"]["reverse"]
|
||||
print_message("Use reverse mode: {}".format(use_reverse_mode))
|
||||
server_is_sender = self.config["set"]["server_is_sender"]
|
||||
print_message("Use reverse mode: {}".format(server_is_sender))
|
||||
|
||||
tcp_algo = list()
|
||||
if "algo" in self.config["set"]:
|
||||
@@ -257,12 +280,22 @@ class Server:
|
||||
# prevent address already in use
|
||||
sleep(2)
|
||||
ws_filter = ""
|
||||
if use_reverse_mode:
|
||||
if server_is_sender:
|
||||
# server sends
|
||||
if not is_tcp_probe_enabled():
|
||||
print_message("tcp probe is not enabled!")
|
||||
enable_tcp_probe()
|
||||
print_message("tcp probe is now enabled")
|
||||
|
||||
for n in range(1, self.config["number_of_measurements"] + 1):
|
||||
print_message(
|
||||
"{} of {}".format(n, self.config["number_of_measurements"])
|
||||
)
|
||||
print_message(
|
||||
"Using {} for congestion control".format(
|
||||
tcp_algo[congestion_control_index]
|
||||
)
|
||||
)
|
||||
iperf_command = [
|
||||
"iperf3",
|
||||
"-s",
|
||||
@@ -281,6 +314,9 @@ class Server:
|
||||
)
|
||||
subprocess.call(iperf_command)
|
||||
processHandler.kill_all()
|
||||
congestion_control_index = (congestion_control_index + 1) % len(
|
||||
tcp_algo
|
||||
)
|
||||
else:
|
||||
# client sends
|
||||
ws_filter = "{} and port {}".format("tcp", self.config["port"])
|
||||
@@ -319,7 +355,12 @@ class Server:
|
||||
else:
|
||||
name_option = ""
|
||||
filepath = "{}{}{}_bandwidth_{}_{}_{}.pcap".format(
|
||||
self.config["folder"], self.config["prefix"], name_option, "tcp", tcp_algo[congestion_control_index], n
|
||||
self.config["folder"],
|
||||
self.config["prefix"],
|
||||
name_option,
|
||||
"tcp",
|
||||
tcp_algo[congestion_control_index],
|
||||
n,
|
||||
)
|
||||
tcpdump_flags.append("-s96")
|
||||
thread = Thread(
|
||||
@@ -344,7 +385,9 @@ class Server:
|
||||
subprocess.call(iperf_command)
|
||||
sleep(2)
|
||||
processHandler.kill_all()
|
||||
congestion_control_index = (congestion_control_index + 1) % len(tcp_algo)
|
||||
congestion_control_index = (congestion_control_index + 1) % len(
|
||||
tcp_algo
|
||||
)
|
||||
|
||||
def cbr(self):
|
||||
use_reverse_mode = False
|
||||
@@ -479,7 +522,11 @@ class Client:
|
||||
self.config["number_of_measurements"],
|
||||
)
|
||||
command = [c]
|
||||
print_message("Start sending {} pings with nog gap.".format(self.config["number_of_measurements"]))
|
||||
print_message(
|
||||
"Start sending {} pings with nog gap.".format(
|
||||
self.config["number_of_measurements"]
|
||||
)
|
||||
)
|
||||
ping_out = subprocess.check_output(command, shell=True).decode("utf-8")
|
||||
filepath = "{}{}_ping_no_gap.txt".format(
|
||||
self.config["folder"], self.config["prefix"]
|
||||
@@ -599,10 +646,10 @@ class Client:
|
||||
processHandler.kill_all()
|
||||
|
||||
def bandwidth(self):
|
||||
use_reverse_mode = False
|
||||
server_is_sender = False
|
||||
if "reverse" in self.config["set"]:
|
||||
use_reverse_mode = self.config["set"]["reverse"] == "true"
|
||||
print_message("Use reverse mode: {}".format(use_reverse_mode))
|
||||
server_is_sender = self.config["set"]["reverse"] == "true"
|
||||
print_message("Use reverse mode: {}".format(server_is_sender))
|
||||
|
||||
tcp_algo = list()
|
||||
if "algo" in self.config["set"]:
|
||||
@@ -626,7 +673,7 @@ class Client:
|
||||
sleep(2)
|
||||
|
||||
congestion_control_index = 0
|
||||
if use_reverse_mode:
|
||||
if server_is_sender:
|
||||
# server is sending
|
||||
ws_filter = "{} and port {}".format("tcp", self.config["port"])
|
||||
print_message("Use ws filter: {}".format(ws_filter))
|
||||
@@ -635,13 +682,17 @@ class Client:
|
||||
"{} of {}".format(n, self.config["number_of_measurements"])
|
||||
)
|
||||
print_message(
|
||||
"Measurement {} of {}".format(
|
||||
n, self.config["number_of_measurements"]
|
||||
"Using {} for congestion control".format(
|
||||
tcp_algo[congestion_control_index]
|
||||
)
|
||||
)
|
||||
tcpdump_flags = []
|
||||
filepath = "{}{}_bandwidth_reverse_{}_{}_{}.pcap".format(
|
||||
self.config["folder"], self.config["prefix"], "tcp", tcp_algo[congestion_control_index], n
|
||||
self.config["folder"],
|
||||
self.config["prefix"],
|
||||
"tcp",
|
||||
tcp_algo[congestion_control_index],
|
||||
n,
|
||||
)
|
||||
tcpdump_flags.append("-s96")
|
||||
thread = Thread(
|
||||
@@ -669,11 +720,17 @@ class Client:
|
||||
subprocess.call(iperf_command)
|
||||
sleep(4)
|
||||
processHandler.kill_all()
|
||||
congestion_control_index = (congestion_control_index + 1) % len(tcp_algo)
|
||||
congestion_control_index = (congestion_control_index + 1) % len(
|
||||
tcp_algo
|
||||
)
|
||||
else:
|
||||
# client is sending
|
||||
state_counter = 0
|
||||
name_option = ""
|
||||
if not is_tcp_probe_enabled():
|
||||
print_message("tcp probe is not enabled!")
|
||||
enable_tcp_probe()
|
||||
print_message("tcp probe is now enabled")
|
||||
for n in range(1, self.config["number_of_measurements"] + 1):
|
||||
print_message(
|
||||
"{} of {}".format(n, self.config["number_of_measurements"])
|
||||
@@ -715,7 +772,9 @@ class Client:
|
||||
sleep(2)
|
||||
subprocess.call(iperf_command)
|
||||
processHandler.kill_all()
|
||||
congestion_control_index = (congestion_control_index + 1) % len(tcp_algo)
|
||||
congestion_control_index = (congestion_control_index + 1) % len(
|
||||
tcp_algo
|
||||
)
|
||||
sleep(4)
|
||||
|
||||
def cbr(self):
|
||||
@@ -955,7 +1014,7 @@ if __name__ == "__main__":
|
||||
default=False,
|
||||
help="Measure greedy tcp throughput with iperf3."
|
||||
"Use the --set flag for: "
|
||||
"reverse=false enable reverse mode. Server is sending."
|
||||
"server_is_sender=false if enable server is sending."
|
||||
"algo=cubic set tcp algorithm. Can be a comma separated string for multiple congestion control algorithms."
|
||||
"alternate_hystart=false if enabled alternate reproduce every Cubic measurement wicht and without HyStart (Also raises the receive window.). "
|
||||
"time=10 length of transmission in seconds.",
|
||||
|
||||
Reference in New Issue
Block a user