From 192c4e19bcbaf42a4e2733c8ff0a10e55d7585d0 Mon Sep 17 00:00:00 2001 From: Tom Barbette Date: Thu, 20 Jul 2023 21:29:05 +0000 Subject: [PATCH] Allow files to get variable in their name ALso enable the fastclick-play generator to run multiple times on the same machine --- modules/fastclick-play-single-mt.npf | 80 +++++++++++++++------------- npf/section.py | 2 +- npf/test.py | 7 +-- 3 files changed, 48 insertions(+), 41 deletions(-) diff --git a/modules/fastclick-play-single-mt.npf b/modules/fastclick-play-single-mt.npf index d706b0d..2b8ab9e 100644 --- a/modules/fastclick-play-single-mt.npf +++ b/modules/fastclick-play-single-mt.npf @@ -23,12 +23,12 @@ default_role_map+={server:dut} %variables PKTGEN_BURST_OUT=32 -PKTGEN_REPLAY_COUNT=1 +-udpgen:PKTGEN_REPLAY_COUNT=1 NIC=0 CLIENT_NIC=0 RCV_NIC=0 LIMIT=50000000 -LIMIT_TIME=65 +LIMIT_TIME=10 GEN_THREADS=4 GEN_PIPELINE=1 udpgen:GEN_PIPELINE=0 @@ -43,6 +43,7 @@ GEN_DESC=0 END_AFTER=0 GEN_PROGRESSIVE=0 progressive:GEN_PROGRESSIVE=1 +rate,prate:GEN_RATE?=1000 GEN_RATE?=-1 LATENCYDUMP=/tmp/latency.csv ITERATION_TIME?=0 @@ -66,6 +67,7 @@ GEN_TX_DESC?=EXPAND($GEN_DESC) GEN_NGEN=EXPAND( $((1 if $GEN_PIPELINE else $GEN_THREADS)) ) GEN_IPV6?=0 GEN_NANO?=0 +GEN_PREFIX?= UNQUEUE= udpgen:UNQUEUE=Unqueue() @@ -120,11 +122,14 @@ BROADCAST_IGNORE= -> c :: Classifier(-, 0/ffffffffffff) %script deps=fastclick-light sudo=true delay=2 name=fastclick-play proc=\$(( $(nproc --all) - 1 )) -$GEN_GDB click --dpdk -l 0-$proc -- PKTGEN_CONFIG +if [ "$GEN_CPUS" = "" ] ; then + GEN_CPUS=0-$proc +fi +$GEN_GDB click --dpdk -l $GEN_CPUS --file-prefix gen-$RCV_NIC -a ${self:$RCV_NIC:pci} -- PKTGEN_CONFIG_${RCV_NIC} PREFIX=$GEN_PREFIX echo "EVENT TX_FINISHED" echo "Generator stopped..." -%file PKTGEN_CONFIG +%file PKTGEN_CONFIG_${RCV_NIC} d :: DPDKInfo($NBBUF) define($bout $PKTGEN_BURST_OUT) @@ -136,7 +141,7 @@ define($RAW_INdstmac ${server:$NIC:raw_mac}) define($ignore $IGNORE) define($replay_count $PKTGEN_REPLAY_COUNT) -define($port ${self:$RCV_NIC:pci}) +define($port 0) define($quick true) define($txverbose 99) define($rxverbose 99) @@ -246,18 +251,18 @@ ig :: Script(TYPE ACTIVE, set sent $(avgSIN.add count), set bytessent $(avgSIN.add byte_count), set bytes $(RIN/avg.add byte_count), - print "IG-$t-RESULT-IGCOUNT $(sub $count $lastcount)", - print "IG-$t-RESULT-IGSENT $(sub $sent $lastsent)", - print "IG-$t-RESULT-IGBYTESSENT $(sub $bytessent $lastbytessent)", + print "IG-$t-RESULT-${PREFIX}IGCOUNT $(sub $count $lastcount)", + print "IG-$t-RESULT-${PREFIX}IGSENT $(sub $sent $lastsent)", + print "IG-$t-RESULT-${PREFIX}IGBYTESSENT $(sub $bytessent $lastbytessent)", set drop $(sub $sent $count), - print "IG-$t-RESULT-IGDROPPED $(sub $drop $lastdrop)", + print "IG-$t-RESULT-${PREFIX}IGDROPPED $(sub $drop $lastdrop)", set lastdrop $drop, - print "IG-$t-RESULT-IGTHROUGHPUT $(div $(mul $(add $(mul $(sub $count $lastcount) 24) $(sub $bytes $lastbytes)) 8) $elapsed)", + print "IG-$t-RESULT-${PREFIX}IGTHROUGHPUT $(div $(mul $(add $(mul $(sub $count $lastcount) 24) $(sub $bytes $lastbytes)) 8) $elapsed)", goto next $(eq $DOLAT 0), -// print "IG-$t-RESULT-ILAT01 $(RIN/tsd0.perc01 $indexA)", -// print "IG-$t-RESULT-ILAT50 $(RIN/tsd0.median $indexA)", - print "IG-$t-RESULT-ILATENCY $(RIN/tsd0.average $indexA)", -// print "IG-$t-RESULT-ILAT99 $(RIN/tsd0.perc99 $indexA)", +// print "IG-$t-RESULT-${PREFIX}ILAT01 $(RIN/tsd0.perc01 $indexA)", +// print "IG-$t-RESULT-${PREFIX}ILAT50 $(RIN/tsd0.median $indexA)", + print "IG-$t-RESULT-${PREFIX}ILATENCY $(RIN/tsd0.average $indexA)", +// print "IG-$t-RESULT-${PREFIX}ILAT99 $(RIN/tsd0.perc99 $indexA)", set indexA $(RIN/tsd0.index), label next, set lastcount $count, @@ -268,7 +273,7 @@ ig :: Script(TYPE ACTIVE, label end ) -StaticThreadSched(ig 15); +StaticThreadSched(ig -1); receiveIN -> RIN :: Receiver($RAW_INsrcmac,"IN"); @@ -306,38 +311,39 @@ dm :: DriverManager( print "Waiting 2 seconds before launching generation...", print >>$LATENCYDUMP $(RIN/tsdD.dump_list),*/ label adump, - print "RESULT-LATENCY $(tsd.avg average)", - print "RESULT-LAT00 $(tsd.avg min)", - print "RESULT-LAT01 $(tsd.avg perc01)", - print "RESULT-LAT50 $(tsd.avg median)", - print "RESULT-LAT95 $(tsd.avg perc95)", - print "RESULT-LAT99 $(tsd.avg perc99)", - print "RESULT-LAT999 $(tsd.avg perc 99.9)", - print "RESULT-LAT100 $(tsd.avg max)", + print "RESULT-${PREFIX}LATENCY $(tsd.avg average)", + print "RESULT-${PREFIX}LAT00 $(tsd.avg min)", + print "RESULT-${PREFIX}LAT01 $(tsd.avg perc01)", + print "RESULT-${PREFIX}LAT50 $(tsd.avg median)", + print "RESULT-${PREFIX}LAT95 $(tsd.avg perc95)", + print "RESULT-${PREFIX}LAT99 $(tsd.avg perc99)", + print "RESULT-${PREFIX}LAT999 $(tsd.avg perc 99.9)", + print "RESULT-${PREFIX}LAT100 $(tsd.avg max)", goto alatval $(eq ${DOLATVAL} 0), set i 0, set step 1, label perc, - print "CDFLATVAL-$(tsd.avg perc $i)-RESULT-CDFLATPC $(div $i 100.0)", + print "CDFLATVAL-$(tsd.avg perc $i)-RESULT-${PREFIX}CDFLATPC $(div $i 100.0)", set i $(add $i $step), set step $(if $(ge $i 99) 0.1 1), goto perc $(le $i 100.0), label alatval, - print "RESULT-TESTTIME $(sub $stoptime $starttime)", - print "RESULT-RCVTIME $(RIN/avg.avg time)", - print "RESULT-THROUGHPUT $(RIN/avg.add link_rate)", + print "RESULT-${PREFIX}TESTTIME $(sub $stoptime $starttime)", + print "RESULT-${PREFIX}RCVTIME $(RIN/avg.avg time)", + print "RESULT-${PREFIX}THROUGHPUT $(RIN/avg.add link_rate)", set sent $(avgSIN.add count), set count $(RIN/avg.add count), set bytes $(RIN/avg.add byte_count), - print "RESULT-COUNT $count", - print "RESULT-BYTES $bytes", - print "RESULT-SENT $sent", - print "RESULT-DROPPED $(sub $sent $count)", - print "RESULT-DROPPEDPC $(div $(sub $sent $count) $sent)", -// print "RESULT-DROPPEDPS $(div $(sub $sent $count) $(RIN/avg.avg time))", - print "RESULT-TX $(avgSIN.add link_rate)", - print "RESULT-TXPPS $(avgSIN.add rate)", - print "RESULT-PPS $(RIN/avg.add rate)", + print "RESULT-${PREFIX}COUNT $count", + print "RESULT-${PREFIX}BYTES $bytes", + print "RESULT-${PREFIX}SENT $sent", + print "RESULT-${PREFIX}DROPPED $(sub $sent $count)", + print "RESULT-${PREFIX}DROPPEDPC $(div $(sub $sent $count) $sent)", +// print "RESULT-${PREFIX}DROPPEDPS $(div $(sub $sent $count) $(RIN/avg.avg time))", + print "RESULT-${PREFIX}TX $(avgSIN.add link_rate)", + print "RESULT-${PREFIX}TXPPS $(avgSIN.add rate)", + print "RESULT-${PREFIX}PPS $(RIN/avg.add rate)", + print "EVENT GEN_POST", stop); -StaticThreadSched(dm 15); +StaticThreadSched(dm -1); diff --git a/npf/section.py b/npf/section.py index 231b551..4ce3a44 100644 --- a/npf/section.py +++ b/npf/section.py @@ -41,7 +41,7 @@ class SectionFactory: varPattern = "([a-zA-Z0-9_:-]+)[=](" + Variable.VALUE_REGEX + ")?" namePattern = re.compile( "^(?P" + Variable.TAGS_REGEX + "[:])?(?Pinfo|config|variables|exit|pypost|pyexit|late_variables|include (?P[a-zA-Z0-9_./-]+)(?P([ \t]+" + - varPattern + ")+)?|(init-)?file(:?[@](?P[a-zA-Z0-9]+))? (?P[a-zA-Z0-9_.-]+)(:? (?Pnoparse))?|require|" + varPattern + ")+)?|(init-)?file(:?[@](?P[a-zA-Z0-9]+))? (?P[a-zA-Z0-9_.${}-]+)(:? (?Pnoparse))?|require|" "import(:?[@](?P[a-zA-Z0-9]+)(:?[-](?P[*0-9]+))?)?[ \t]+(?P" + Variable.VALUE_REGEX + ")(?P([ \t]+" + varPattern + ")+)?|" + "sendfile(:?[@](?P[a-zA-Z0-9]+))?[ \t]+(?P.*)|" + diff --git a/npf/test.py b/npf/test.py index 02c4965..a0bb469 100755 --- a/npf/test.py +++ b/npf/test.py @@ -375,18 +375,19 @@ def test_tags(self): return missings def build_file_list(self, v, self_role=None, files=None) -> List[Tuple[str, str, str]]: - list = [] + create_list = [] if files is None: files = self.files for s in files: role = s.get_role() if s.get_role() else self_role v["NPF_NODE_MAX"] = len(npf.nodes_for_role(role)) if not s.noparse: + s.filename = SectionVariable.replace_variables(v, s.filename, role, default_role_map = self.config.get_dict("default_role_map")) p = SectionVariable.replace_variables(v, s.content, role,default_role_map = self.config.get_dict("default_role_map")) else: p = s.content - list.append((s.filename, p, role)) - return list + create_list.append((s.filename, p, role)) + return create_list def create_files(self, file_list, path_to_root): unique_list = {}