add lua script for RFC 2544 throughput on dpdk packet generator 97/2497/3
authorVincenzo Riccobene <vincenzox.m.riccobene@intel.com>
Tue, 13 Oct 2015 12:54:57 +0000 (13:54 +0100)
committerVincenzo Riccobene <vincenzox.m.riccobene@intel.com>
Thu, 22 Oct 2015 13:45:34 +0000 (14:45 +0100)
First commit for ApexLake: the vTC Characterization Framework
The included file is a lua script for the calculation of the throughput for dpdk_pktgen

JIRA: YARDSTICK-35

Change-Id: I02d015cee5f6b0593d668498439893f9091f5a8b
Signed-off-by: Vincenzo Riccobene <vincenzox.m.riccobene@intel.com>
yardstick/vTC/apexlake/experimental_framework/packet_generators/dpdk_pktgen/rfc2544.lua [new file with mode: 0644]

diff --git a/yardstick/vTC/apexlake/experimental_framework/packet_generators/dpdk_pktgen/rfc2544.lua b/yardstick/vTC/apexlake/experimental_framework/packet_generators/dpdk_pktgen/rfc2544.lua
new file mode 100644 (file)
index 0000000..d20a29b
--- /dev/null
@@ -0,0 +1,132 @@
+-----------------------------------------------------------------------------
+-- Copyright (c) 2015 Intel Research and Development Ireland Ltd.
+--
+-- Licensed under the Apache License, Version 2.0 (the "License");
+-- you may not use this file except in compliance with the License.
+-- You may obtain a copy of the License at
+--
+--      http://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing, software
+-- distributed under the License is distributed on an "AS IS" BASIS,
+-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+-- See the License for the specific language governing permissions and
+-- limitations under the License.
+-----------------------------------------------------------------------------
+
+-------------------------------
+----- RFC-2544 throughput -----
+-------------------------------
+
+package.path = package.path ..";?.lua;test/?.lua;app/?.lua;../?.lua"
+require "Pktgen";
+
+----- Packet Gen Configuration
+local sendport = "0";
+local recvport = "1";
+pktgen.set(recvport, "rate", 1);
+pktgen.vlan(sendport, "on");
+pktgen.ping4("all");
+pktgen.icmp_echo("all", "on");
+pktgen.process("all", "on");
+
+
+----- RFC2544 Configuration
+local traffic_delay = 60;   -- Time in seconds to delay.
+local multicast_delay = 15; -- Time in seconds to delay.
+local starting_rate = 100;  -- Initial Rate in %
+local step = 100;           -- Initial Step in %
+local down_limit = 0;
+local up_limit = 100;
+
+
+-- Creation of a module
+--local rfc2544 = {}
+function start_traffic(rate)
+    local endStats, diff, prev, iteration, flag, found;
+    flag = false;
+    found = false;
+
+    print("PACKET GENERATION - " .. rate .. "%\n");
+
+    -- Send packet to join the multicast group
+    print("Join Multicast Group");
+    pktgen.start(recvport);
+    sleep(multicast_delay);
+    pktgen.stop(recvport);
+    pktgen.clr();
+
+
+    -- Send traffic at the specified rate
+    print("Start Generation");
+    pktgen.set(sendport, "rate", rate);
+    sleep(1);
+    pktgen.start(sendport);
+    sleep(traffic_delay);
+    pktgen.stop(sendport);
+    print("Stop Generation");
+    sleep(5);
+
+    -- Collect statistics about the experiment
+    endStats = pktgen.portStats("all", "port");
+    diff = endStats[0].opackets - endStats[1].ipackets;
+    if ( endStats[0].opackets <= 0) then
+        diff = 0;
+    else
+        diff = diff / endStats[0].opackets;
+    end
+    pktgen.clr();
+
+    print("Missing packets: " .. (diff * 100));
+
+    -- Adjust variable for the next race
+    prev_rate = rate;
+    step = step/2;
+
+    if ( diff > 0.01) then
+        if(endStats[0].opackets > 0) then
+            up_limit = rate;
+            rate = math.floor(rate - (step));
+        end
+    else
+       down_limit = rate;
+        rate = math.floor(rate + (step));
+        print("\nRATE: " .. rate .. " RECEIVED PACKETS: " .. endStats[1].ipackets .. " ");
+       found = true;
+    end
+
+    printf("DOWN LIMIT: %d\n", down_limit);
+    printf("UP LIMIT: %d\n", up_limit);
+
+    if ( rate >= 100 ) then
+        rate = 100;
+    end
+
+    if ( prev ~= rate  and  rate < up_limit  and  rate >= down_limit and step >= 1  ) then
+        if (step < 1 and not found ) or (step >= 1 )  then
+            return start_traffic(rate);
+        end
+    end
+    sleep(3);
+    return down_limit;
+end
+local out_file = "";
+local starting_rate = 100;
+
+pktgen.clr();
+print("RFC 2544 THROUGHPUT CALCULATION");
+
+-- Write output on log file
+file = io.open(out_file, "w");
+
+-- Start experiment
+--rate = rfc2544.start_traffic(starting_rate)
+rate = start_traffic(starting_rate);
+print("RATE: " .. rate);
+file:write(rate);
+
+-- Close the log file
+file:close();
+
+-- Quit the environment
+os.exit(1);