Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
s_doering
asteriskperf-python-wrapper
Commits
619a3927
Commit
619a3927
authored
Oct 06, 2015
by
Deathcrow
Browse files
Merge branch 'master' of git.scc.kit.edu:usbml/asteriskperf-python-wrapper
parents
e40658f6
8768a041
Changes
1
Hide whitespace changes
Inline
Side-by-side
wrapper.py
View file @
619a3927
...
...
@@ -103,6 +103,9 @@ def process_proc_tcpprobe(sender): #sampling
tcpprobe_proc
.
close
()
def
process_proc_tcpprobe_optimized
(
sender
):
#sampling
starty
=
time
.
perf_counter
()
unprocessed_senders
=
set
([
key
for
key
in
range
(
len
(
sender
))])
...
...
@@ -128,6 +131,10 @@ def process_proc_tcpprobe_optimized(sender): #sampling
tcpprobe_proc
.
close
()
def
signal_handler
(
signum
,
frame
):
clean_up
()
raise
SystemExit
...
...
@@ -168,10 +175,12 @@ signal.signal(signal.SIGTERM, signal_handler)
parser
=
argparse
.
ArgumentParser
(
description
=
'Configure test environment.'
)
parser
.
add_argument
(
'-l'
,
'--label'
,
default
=
"default"
)
parser
.
add_argument
(
'-u'
,
'--utility'
,
default
=
'iperf'
)
parser
.
add_argument
(
'-u'
,
'--utility'
,
default
=
'iperf'
)
## XXX Note: iperf support is not tested!!
parser
.
add_argument
(
'-t'
,
'--time'
,
default
=
"60"
)
parser
.
add_argument
(
'-s'
,
'--sender'
,
action
=
'append'
,
nargs
=
'+'
,
required
=
True
,
\
help
=
"Specify senders: <src ip>#<dst ip>#<port>#<congestion>#<number>#<interface> -- individual specifications overwrite globals"
)
## "--receiver" sets the receiver if there was no receiver was specified
# (XXX same for --port, etc)
parser
.
add_argument
(
'-r'
,
'--receiver'
,
default
=
"localhost"
)
parser
.
add_argument
(
'-p'
,
'--port'
,
default
=
"5001"
)
parser
.
add_argument
(
'-T'
,
'--tmp-folder'
,
default
=
"/tmp"
)
...
...
@@ -186,10 +195,10 @@ parser.add_argument('-P', '--cpunetlog' , default="", \
help
=
"Path to cpunetlog folder"
)
parser
.
add_argument
(
"--netperf-dataport"
,
default
=
str
(
random
.
randint
(
15000
,
65000
)),
\
help
=
"Port for the data conncections by netperf. Will be incremented per sender"
)
parser
.
add_argument
(
'-D'
,
'--tcpdump'
,
default
=
"
1
"
,
\
help
=
"Enable/Disable tcpdump (Default:
en
abled"
)
parser
.
add_argument
(
'-D'
,
'--tcpdump'
,
default
=
"
0
"
,
\
help
=
"Enable/Disable tcpdump (Default:
dis
abled"
)
parser
.
add_argument
(
'-S'
,
'--samplerate'
,
default
=
"0.1"
,
\
help
=
"Samplerate for measurements"
)
help
=
"Samplerate for measurements
: Sleeptime between samples (in seconds)
"
)
parser
.
add_argument
(
'--legacy'
,
action
=
'store_true'
,
\
help
=
"Record entire tcp_probe output instead of samples by samplerate.
\
Can be less CPU intensive for certain samplerates.
\
...
...
@@ -211,12 +220,24 @@ os.mkdir(args.tmp_folder)
parse_senders
(
flat_sender_args
,
sender
)
#clean slate
print
(
"First, kill all remaining instances of '"
+
args
.
utility
+
"'"
)
subprocess
.
Popen
([
"killall"
,
"-s"
,
"9"
,
args
.
utility
])
print
()
if
args
.
cpunetlog
!=
""
:
args
.
cpunetlog
=
os
.
path
.
abspath
(
args
.
cpunetlog
)
cpunetlog
=
subprocess
.
Popen
([
"python3"
,
args
.
cpunetlog
+
"/__init__.py"
,
"-l"
,
"-d"
,
"--path"
,
args
.
tmp_folder
+
"/cpunetlog"
])
#run cpunetlog in headless mode
## Prepare commandline to start experiment utilities (netperf, etc.) ##
# General conversion between commandline syntax of the tools/utilities
utility_args
=
{}
utility_args
[
'connect'
]
=
"-c"
utility_args
[
'time'
]
=
"-t"
...
...
@@ -252,6 +273,9 @@ if args.tcpdump == "1":
#TODO? if congesion_algo == all check proc and do all
# Prapare command line for each sender
for
key
,
i
in
enumerate
(
sender
):
i
[
'utility_command'
]
=
[
args
.
utility
,
\
utility_args
[
'connect'
],
i
[
'dst'
],
\
...
...
@@ -271,6 +295,11 @@ for key, i in enumerate(sender):
#setup done, run tests in 5 seconds
start_time
=
time
.
perf_counter
()
+
5
## Start senders in different processes
with
multiprocessing
.
Pool
(
len
(
sender
))
as
pool
:
# for key, i in enumerate(sender):
# i['utility'] = subprocess.Popen(i['utility_command'], stdout=i['utility_file'])
...
...
@@ -292,6 +321,10 @@ with multiprocessing.Pool(len(sender)) as pool:
i
[
'utility'
]
=
pool_results
[
key
].
get
()
print
(
i
[
'utility'
].
args
)
## Find out which src_port belongs to which sender (not necessary for netperf) ##
if
args
.
utility
!=
"netperf"
:
ss_file
=
tempfile
.
TemporaryFile
(
mode
=
'r+'
)
subprocess
.
call
([
"ss"
,
"-t"
,
"-i"
,
"-p"
,
"-n"
],
stdout
=
ss_file
)
...
...
@@ -331,12 +364,17 @@ if args.utility != "netperf":
# ss_file.close()
# time.sleep(0.1)
######## MAIN LOOP ########
if
not
args
.
legacy
:
while
(
time
.
perf_counter
()
-
start_time
)
<
(
float
(
args
.
time
)
-
float
(
args
.
samplerate
)):
# print("begin while")
while_start
=
time
.
perf_counter
()
# remember beginning of this loop
process_proc_tcpprobe_optimized
(
sender
)
#heavy lifting here
process_proc_tcpprobe_optimized
(
sender
)
#
<--
heavy lifting here
try
:
# sleep samplerate minus time spent in loop
...
...
@@ -348,6 +386,14 @@ if not args.legacy:
else
:
time
.
sleep
(
float
(
args
.
time
))
### Experiments finished ###
#for i in sender:
# i['utility'].wait()
# wait doesn't work with multiprocessing (?! returncode always 0, even when netperf still running)
...
...
@@ -360,7 +406,11 @@ clean_up()
if
args
.
legacy
:
process_raw_tcpprobe_file
(
tcpprobe_file
,
sender
)
#calculate bandwidth for each sender:
### After the experiments are finished, parse tcpprobe files again and calculate "goodput" ###
# calculate bandwidth for each sender:
for
key
,
i
in
enumerate
(
sender
):
last_timestamp
=
0
last_seq
=
0
...
...
@@ -395,6 +445,14 @@ for i in sender:
if
args
.
comment
is
not
""
:
subprocess
.
call
([
'cp'
,
os
.
path
.
abspath
(
args
.
comment
),
args
.
tmp_folder
])
## packing results into tar file ##
tar_return
=
subprocess
.
call
([
"tar"
,
"cJf"
,
args
.
tmp_folder
+
"/../"
+
args
.
label
+
"_"
+
str
(
mypid
)
+
".tar.xz"
,
"-C"
,
os
.
path
.
abspath
(
args
.
tmp_folder
+
"/../"
),
os
.
path
.
basename
(
args
.
tmp_folder
)])
if
tar_return
is
0
:
#user_input = input("Results in tarfile: "+os.path.abspath(args.tmp_folder+"/../"+args.label+"_"+str(mypid)+".tar.xz")+"\nDelete Folder \""+args.tmp_folder+"\" ? (Y/n) ")
...
...
@@ -408,3 +466,4 @@ print("done")
#while True:
# pass
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment