Add send file experiment

Signed-off-by: Benjamin Hesmans <benjamin.hesmans@uclouvain.be>
This commit is contained in:
Benjamin Hesmans 2016-01-18 10:32:56 +01:00 committed by Quentin De Coninck
parent 08857dd9a0
commit 63e16621a2
5 changed files with 95 additions and 0 deletions

8
src/conf/sendfile/topo Normal file
View File

@ -0,0 +1,8 @@
leftSubnet:10.0.
rightSubnet:10.1.
path_0:10,30,10
path_1:40,40,16
changeNetem:yes
netemAt_0:2,delay 10ms limit 30 loss 20%
netemAt_0:5,delay 10ms limit 30
topoType:MultiIf

6
src/conf/sendfile/xp Normal file
View File

@ -0,0 +1,6 @@
xpType:sendfile
clientPcap:yes
kpms:fullmesh
kpmc:fullmesh
sched:metric
rmem:300000 300000 300000

View File

@ -10,6 +10,7 @@ class MpExperience:
EPLOAD = "epload"
NETPERF = "netperf"
AB = "ab"
SENDFILE = "sendfile"
def __init__(self, xpParam, mpTopo, mpConfig):
self.xpParam = xpParam

View File

@ -0,0 +1,76 @@
from mpExperience import MpExperience
from mpParamXp import MpParamXp
from mpPvAt import MpPvAt
import os
class MpExperienceSendFile(MpExperience):
SERVER_LOG = "sendfile_server.log"
CLIENT_LOG = "sendfile_client.log"
WGET_BIN = "./client"
PING_OUTPUT = "ping.log"
def __init__(self, xpParamFile, mpTopo, mpConfig):
MpExperience.__init__(self, xpParamFile, mpTopo, mpConfig)
self.loadParam()
self.ping()
MpExperience.classicRun(self)
def ping(self):
self.mpTopo.commandTo(self.mpConfig.client, "rm " + \
MpExperienceSendFile.PING_OUTPUT )
count = self.xpParam.getParam(MpParamXp.PINGCOUNT)
for i in range(0, self.mpConfig.getClientInterfaceCount()):
cmd = self.pingCommand(self.mpConfig.getClientIP(i),
self.mpConfig.getServerIP(), n = count)
self.mpTopo.commandTo(self.mpConfig.client, cmd)
def pingCommand(self, fromIP, toIP, n=5):
s = "ping -c " + str(n) + " -I " + fromIP + " " + toIP + \
" >> " + MpExperienceSendFile.PING_OUTPUT
print(s)
return s
def loadParam(self):
"""
todo : param LD_PRELOAD ??
"""
self.file = self.xpParam.getParam(MpParamXp.HTTPSFILE)
self.random_size = self.xpParam.getParam(MpParamXp.HTTPSRANDOMSIZE)
def prepare(self):
MpExperience.prepare(self)
self.mpTopo.commandTo(self.mpConfig.client, "rm " + \
MpExperienceSendFile.CLIENT_LOG )
self.mpTopo.commandTo(self.mpConfig.server, "rm " + \
MpExperienceSendFile.SERVER_LOG )
if self.file == "random":
self.mpTopo.commandTo(self.mpConfig.client,
"dd if=/dev/urandom of=random bs=1K count=" + \
self.random_size)
def getSendFileServerCmd(self):
s = "./server &>" + MpExperienceSendFile.SERVER_LOG + "&"
print(s)
return s
def getSendFileClientCmd(self):
s = MpExperienceSendFile.WGET_BIN + " " + self.mpConfig.getServerIP() + " &>" + MpExperienceSendFile.CLIENT_LOG
print(s)
return s
def clean(self):
MpExperience.clean(self)
if self.file == "random":
self.mpTopo.commandTo(self.mpConfig.client, "rm random*")
#todo use cst
#self.mpTopo.commandTo(self.mpConfig.server, "killall netcat")
def run(self):
cmd = self.getSendFileServerCmd()
self.mpTopo.commandTo(self.mpConfig.server, cmd)
self.mpTopo.commandTo(self.mpConfig.client, "sleep 0.1")
cmd = self.getSendFileClientCmd()
self.mpTopo.commandTo(self.mpConfig.client, cmd)
self.mpTopo.commandTo(self.mpConfig.client, "sleep 2")

View File

@ -10,6 +10,7 @@ from mpExperienceNCPV import MpExperienceNCPV
from mpExperienceNC import MpExperienceNC
from mpExperienceHTTPS import MpExperienceHTTPS
from mpExperienceHTTP import MpExperienceHTTP
from mpExperienceSendFile import MpExperienceSendFile
from mpExperienceEpload import MpExperienceEpload
from mpExperienceNetperf import MpExperienceNetperf
from mpExperienceAb import MpExperienceAb
@ -95,6 +96,9 @@ class MpXpRunner:
elif xp == MpExperience.AB:
MpExperienceAb(self.xpParam, self.mpTopo,
self.mpTopoConfig)
elif xp == MpExperience.SENDFILE:
MpExperienceSendFile(self.xpParam, self.mpTopo,
self.mpTopoConfig)
else:
print("Unfound xp type..." + xp)