瀏覽代碼

Adds some QOL.

master
Lukas Prause 3 年之前
父節點
當前提交
b8f2aaeed5
共有 1 個檔案被更改,包括 79 行新增20 行删除
  1. +79
    -20
      measurement_main.py

+ 79
- 20
measurement_main.py 查看文件





def is_hystart_activated(): 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(): def set_default_receive_window():
run_cmds = [NR_CQI_COMMAND, NR_SERVINGCELL_COMMAND, NR_EN_DC_STATUS_COMMAND] run_cmds = [NR_CQI_COMMAND, NR_SERVINGCELL_COMMAND, NR_EN_DC_STATUS_COMMAND]
try: try:
while ser.is_open: 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: for cmd in run_cmds:
ser.write(cmd) ser.write(cmd)
sleep(0.3) sleep(0.3)
if not ser.is_open: if not ser.is_open:
print_message("Serial port is closed. Exit monitoring thread.") print_message("Serial port is closed. Exit monitoring thread.")
else: 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 return



class Server: class Server:
def __init__(self, config): def __init__(self, config):
self.config = config self.config = config
print_message("HARQ nothing to do on server side.") print_message("HARQ nothing to do on server side.")


def bandwidth(self): def bandwidth(self):
use_reverse_mode = False
server_is_sender = False
if "reverse" in self.config["set"]: 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() tcp_algo = list()
if "algo" in self.config["set"]: if "algo" in self.config["set"]:
# prevent address already in use # prevent address already in use
sleep(2) sleep(2)
ws_filter = "" ws_filter = ""
if use_reverse_mode:
if server_is_sender:
# server sends # 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): for n in range(1, self.config["number_of_measurements"] + 1):
print_message( print_message(
"{} of {}".format(n, self.config["number_of_measurements"]) "{} of {}".format(n, self.config["number_of_measurements"])
) )
print_message(
"Using {} for congestion control".format(
tcp_algo[congestion_control_index]
)
)
iperf_command = [ iperf_command = [
"iperf3", "iperf3",
"-s", "-s",
) )
subprocess.call(iperf_command) subprocess.call(iperf_command)
processHandler.kill_all() processHandler.kill_all()
congestion_control_index = (congestion_control_index + 1) % len(
tcp_algo
)
else: else:
# client sends # client sends
ws_filter = "{} and port {}".format("tcp", self.config["port"]) ws_filter = "{} and port {}".format("tcp", self.config["port"])
else: else:
name_option = "" name_option = ""
filepath = "{}{}{}_bandwidth_{}_{}_{}.pcap".format( 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") tcpdump_flags.append("-s96")
thread = Thread( thread = Thread(
subprocess.call(iperf_command) subprocess.call(iperf_command)
sleep(2) sleep(2)
processHandler.kill_all() 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): def cbr(self):
use_reverse_mode = False use_reverse_mode = False
self.config["number_of_measurements"], self.config["number_of_measurements"],
) )
command = [c] 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") ping_out = subprocess.check_output(command, shell=True).decode("utf-8")
filepath = "{}{}_ping_no_gap.txt".format( filepath = "{}{}_ping_no_gap.txt".format(
self.config["folder"], self.config["prefix"] self.config["folder"], self.config["prefix"]
processHandler.kill_all() processHandler.kill_all()


def bandwidth(self): def bandwidth(self):
use_reverse_mode = False
server_is_sender = False
if "reverse" in self.config["set"]: 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() tcp_algo = list()
if "algo" in self.config["set"]: if "algo" in self.config["set"]:
sleep(2) sleep(2)


congestion_control_index = 0 congestion_control_index = 0
if use_reverse_mode:
if server_is_sender:
# server is sending # server is sending
ws_filter = "{} and port {}".format("tcp", self.config["port"]) ws_filter = "{} and port {}".format("tcp", self.config["port"])
print_message("Use ws filter: {}".format(ws_filter)) print_message("Use ws filter: {}".format(ws_filter))
"{} of {}".format(n, self.config["number_of_measurements"]) "{} of {}".format(n, self.config["number_of_measurements"])
) )
print_message( print_message(
"Measurement {} of {}".format(
n, self.config["number_of_measurements"]
"Using {} for congestion control".format(
tcp_algo[congestion_control_index]
) )
) )
tcpdump_flags = [] tcpdump_flags = []
filepath = "{}{}_bandwidth_reverse_{}_{}_{}.pcap".format( 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") tcpdump_flags.append("-s96")
thread = Thread( thread = Thread(
subprocess.call(iperf_command) subprocess.call(iperf_command)
sleep(4) sleep(4)
processHandler.kill_all() processHandler.kill_all()
congestion_control_index = (congestion_control_index + 1) % len(tcp_algo)
congestion_control_index = (congestion_control_index + 1) % len(
tcp_algo
)
else: else:
# client is sending # client is sending
state_counter = 0 state_counter = 0
name_option = "" 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): for n in range(1, self.config["number_of_measurements"] + 1):
print_message( print_message(
"{} of {}".format(n, self.config["number_of_measurements"]) "{} of {}".format(n, self.config["number_of_measurements"])
sleep(2) sleep(2)
subprocess.call(iperf_command) subprocess.call(iperf_command)
processHandler.kill_all() 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) sleep(4)


def cbr(self): def cbr(self):
default=False, default=False,
help="Measure greedy tcp throughput with iperf3." help="Measure greedy tcp throughput with iperf3."
"Use the --set flag for: " "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." "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.). " "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.", "time=10 length of transmission in seconds.",

Loading…
取消
儲存