Lukas Prause пре 3 година
родитељ
комит
b8f2aaeed5
1 измењених фајлова са 79 додато и 20 уклоњено
  1. +79
    -20
      measurement_main.py

+ 79
- 20
measurement_main.py Прегледај датотеку

@@ -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.",

Loading…
Откажи
Сачувај