Ejemplo n.º 1
0
    def dpdk_setup(self):
        """dpdk setup"""

        # setup dpdk loopback in VM
        self.testpmd_script = pkg_resources.resource_filename(
            'yardstick.benchmark.scenarios.networking',
            VsperfDPDK.TESTPMD_SCRIPT)

        self.client._put_file_shell(self.testpmd_script,
                                    '~/testpmd_vsperf.sh')

        # disable Address Space Layout Randomization (ASLR)
        cmd = "echo 0 | sudo tee /proc/sys/kernel/randomize_va_space"
        self.client.send_command(cmd)

        if not self._is_dpdk_setup():
            self.tgen_port1_ip = \
                utils.get_port_ip(self.client, self.tg_port1)
            self.tgen_port1_mac = \
                utils.get_port_mac(self.client, self.tg_port1)
            self.client.run("tee ~/.testpmd.ipaddr.port1 > /dev/null",
                            stdin=self.tgen_port1_ip)
            self.client.run("tee ~/.testpmd.macaddr.port1 > /dev/null",
                            stdin=self.tgen_port1_mac)
            self.tgen_port2_ip = \
                utils.get_port_ip(self.client, self.tg_port2)
            self.tgen_port2_mac = \
                utils.get_port_mac(self.client, self.tg_port2)
            self.client.run("tee ~/.testpmd.ipaddr.port2 > /dev/null",
                            stdin=self.tgen_port2_ip)
            self.client.run("tee ~/.testpmd.macaddr.port2 > /dev/null",
                            stdin=self.tgen_port2_mac)
            cmd = "ip link set %s down" % (self.tg_port1)
            LOG.debug("Executing command: %s", cmd)
            self.client.send_command(cmd)
            cmd = "ip link set %s down" % (self.tg_port2)
            LOG.debug("Executing command: %s", cmd)
            self.client.send_command(cmd)
        else:
            cmd = "cat ~/.testpmd.macaddr.port1"
            status, stdout, stderr = self.client.execute(cmd)
            if status:
                raise RuntimeError(stderr)
            self.tgen_port1_mac = stdout
            cmd = "cat ~/.testpmd.macaddr.port2"
            status, stdout, stderr = self.client.execute(cmd)
            if status:
                raise RuntimeError(stderr)
            self.tgen_port2_mac = stdout

        cmd = "screen -d -m sudo -E bash ~/testpmd_vsperf.sh %s %s" % \
            (self.moongen_port1_mac, self.moongen_port2_mac)
        LOG.debug("Executing command: %s", cmd)
        status, stdout, stderr = self.client.execute(cmd)
        if status:
            raise RuntimeError(stderr)

        time.sleep(1)

        self.dpdk_setup_done = True
Ejemplo n.º 2
0
    def test_pktgen_dpdk_successful_get_port_mac(self):

        args = {
            'options': {'packetsize': 60},
        }
        p = pktgen_dpdk.PktgenDPDKLatency(args, self.ctx)
        p.server = self.mock_ssh.SSH.from_node()

        self.mock_ssh.SSH.from_node().execute.return_value = (0, '', '')

        utils.get_port_mac(p.server, "eth1")

        self.mock_ssh.SSH.from_node().execute.assert_called_with(
            "ifconfig |grep HWaddr |grep eth1 |awk '{print $5}' ")
Ejemplo n.º 3
0
    def dpdk_setup(self):
        """dpdk setup"""

        # disable Address Space Layout Randomization (ASLR)
        cmd = "echo 0 | sudo tee /proc/sys/kernel/randomize_va_space"
        self.server.send_command(cmd)
        self.client.send_command(cmd)

        if not self._is_dpdk_setup("client"):
            cmd = "sudo ifup eth1"
            LOG.debug("Executing command: %s", cmd)
            self.client.send_command(cmd)
            time.sleep(1)
            self.source_ipaddr[1] = utils.get_port_ip(self.client, 'eth1')
            self.client.run("tee ~/.pktgen-dpdk.ipaddr.eth1 > /dev/null",
                            stdin=self.source_ipaddr[1])
        else:
            cmd = "cat ~/.pktgen-dpdk.ipaddr.eth1"
            status, stdout, stderr = self.client.execute(cmd)
            if status:
                raise RuntimeError(stderr)
            self.source_ipaddr[1] = stdout

        if not self._is_dpdk_setup("server"):
            cmd = "sudo ifup eth1"
            LOG.debug("Executing command: %s", cmd)
            self.server.send_command(cmd)
            time.sleep(1)
            self.target_ipaddr[1] = utils.get_port_ip(self.server, 'eth1')
            self.target_macaddr[1] = utils.get_port_mac(self.server, 'eth1')
            self.server.run("tee ~/.testpmd.ipaddr.eth1 > /dev/null",
                            stdin=self.target_ipaddr[1])
            self.server.run("tee ~/.testpmd.macaddr.eth1 > /dev/null",
                            stdin=self.target_macaddr[1])

            cmd = "screen sudo -E bash ~/testpmd_rev.sh"
            LOG.debug("Executing command: %s", cmd)
            self.server.send_command(cmd)

            time.sleep(1)
        else:
            cmd = "cat ~/.testpmd.ipaddr.eth1"
            status, stdout, stderr = self.server.execute(cmd)
            if status:
                raise RuntimeError(stderr)
            self.target_ipaddr[1] = stdout

            cmd = "cat ~/.testpmd.macaddr.eth1"
            status, stdout, stderr = self.server.execute(cmd)
            if status:
                raise RuntimeError(stderr)
            self.target_macaddr[1] = stdout

        self.dpdk_setup_done = True
Ejemplo n.º 4
0
    def run(self, result):
        """execute the benchmark"""

        options = self.scenario_cfg['options']
        eth1 = options.get("eth1", "ens4")
        eth2 = options.get("eth2", "ens5")
        if not self.setup_done:
            self.setup()

        if not self.testpmd_args:
            self.testpmd_args = utils.get_port_mac(self.client, eth2)

        if not self.pktgen_args:
            server_rev_mac = utils.get_port_mac(self.server, eth1)
            server_send_mac = utils.get_port_mac(self.server, eth2)
            client_src_ip = utils.get_port_ip(self.client, eth1)
            client_dst_ip = utils.get_port_ip(self.client, eth2)

            self.pktgen_args = [
                client_src_ip, client_dst_ip, server_rev_mac, server_send_mac
            ]

        packetsize = options.get("packetsize", 64)
        rate = options.get("rate", 100)

        cmd = "screen sudo -E bash ~/testpmd_fwd.sh %s %s %s" % \
            (self.testpmd_args, eth1, eth2)
        LOG.debug("Executing command: %s", cmd)
        self.server.send_command(cmd)

        time.sleep(1)

        cmd = "screen sudo -E bash ~/pktgen_dpdk.sh %s %s %s %s %s %s %s %s" % \
            (self.pktgen_args[0], self.pktgen_args[1], self.pktgen_args[2],
             self.pktgen_args[3], rate, packetsize, eth1, eth2)
        LOG.debug("Executing command: %s", cmd)
        self.client.send_command(cmd)

        # wait for finishing test
        time.sleep(60)

        cmd = r"""\
cat ~/result.log -vT \
|awk '{match($0,/\[8;40H +[0-9]+/)} \
{print substr($0,RSTART,RLENGTH)}' \
|grep -v ^$ |awk '{if ($2 != 0) print $2}'\
"""
        client_status, client_stdout, client_stderr = self.client.execute(cmd)

        if client_status:
            raise RuntimeError(client_stderr)

        avg_latency = 0
        if client_stdout:
            latency_list = client_stdout.split('\n')[0:-2]
            LOG.info("10 samples of latency: %s", latency_list)
            latency_sum = 0
            for i in latency_list:
                latency_sum += int(i)
            avg_latency = latency_sum / len(latency_list)

        result.update({"avg_latency": avg_latency})

        if avg_latency and "sla" in self.scenario_cfg:
            sla_max_latency = int(self.scenario_cfg["sla"]["max_latency"])
            LOG.info("avg_latency : %d ", avg_latency)
            LOG.info("sla_max_latency: %d", sla_max_latency)
            debug_info = "avg_latency %d > sla_max_latency %d" \
                % (avg_latency, sla_max_latency)
            assert avg_latency <= sla_max_latency, debug_info
Ejemplo n.º 5
0
    def forward_setup(self):
        """forward tool setup"""

        # setup forward loopback in VM
        self.testpmd_script = pkg_resources.resource_filename(
            'yardstick.benchmark.scenarios.networking',
            self.TESTPMD_SCRIPT)

        self.client._put_file_shell(self.testpmd_script,
                                    '~/testpmd_vsperf.sh')

        # disable Address Space Layout Randomization (ASLR)
        cmd = "echo 0 | sudo tee /proc/sys/kernel/randomize_va_space"
        self.client.send_command(cmd)

        if not self._is_forward_setup():
            self.tgen_port1_ip = \
                utils.get_port_ip(self.client, self.tg_port1)
            self.tgen_port1_mac = \
                utils.get_port_mac(self.client, self.tg_port1)
            self.client.run("tee ~/.testpmd.ipaddr.port1 > /dev/null",
                            stdin=self.tgen_port1_ip)
            self.client.run("tee ~/.testpmd.macaddr.port1 > /dev/null",
                            stdin=self.tgen_port1_mac)
            self.tgen_port2_ip = \
                utils.get_port_ip(self.client, self.tg_port2)
            self.tgen_port2_mac = \
                utils.get_port_mac(self.client, self.tg_port2)
            self.client.run("tee ~/.testpmd.ipaddr.port2 > /dev/null",
                            stdin=self.tgen_port2_ip)
            self.client.run("tee ~/.testpmd.macaddr.port2 > /dev/null",
                            stdin=self.tgen_port2_mac)
        else:
            cmd = "cat ~/.testpmd.macaddr.port1"
            status, stdout, stderr = self.client.execute(cmd)
            if status:
                raise RuntimeError(stderr)
            self.tgen_port1_mac = stdout
            cmd = "cat ~/.testpmd.ipaddr.port1"
            status, stdout, stderr = self.client.execute(cmd)
            if status:
                raise RuntimeError(stderr)
            self.tgen_port1_ip = stdout
            cmd = "cat ~/.testpmd.macaddr.port2"
            status, stdout, stderr = self.client.execute(cmd)
            if status:
                raise RuntimeError(stderr)
            self.tgen_port2_mac = stdout
            cmd = "cat ~/.testpmd.ipaddr.port2"
            status, stdout, stderr = self.client.execute(cmd)
            if status:
                raise RuntimeError(stderr)
            self.tgen_port2_ip = stdout

        LOG.info("forward type is %s", self.forward_type)
        if self.forward_type == 'testpmd':
            cmd = "sudo ip link set %s down" % (self.tg_port1)
            LOG.debug("Executing command: %s", cmd)
            self.client.execute(cmd)
            cmd = "sudo ip link set %s down" % (self.tg_port2)
            LOG.debug("Executing command: %s", cmd)
            self.client.execute(cmd)
            cmd = "screen -d -m sudo -E bash ~/testpmd_vsperf.sh %s %s %d" % \
                (self.moongen_port1_mac, self.moongen_port2_mac,
                 self.testpmd_queue)
            LOG.debug("Executing command: %s", cmd)
            status, stdout, stderr = self.client.execute(cmd)
            if status:
                raise RuntimeError(stderr)

        elif self.forward_type == 'l2fwd':
            cmd = ('sed -i "s/static char *net1 = \\\"eth1\\\";'
                   '/static char *net1 = \\\"%s %s %s\\\";/g" /home/l2fwd/l2fwd.c'
                   % (self.tg_port1, self.tgen_port1_ip, self.moongen_port1_mac))
            LOG.debug("Executing command: %s", cmd)
            status, stdout, stderr = self.client.execute(cmd)

            cmd = ('sed -i "s/static char *net2 = \\\"eth2\\\";'
                   '/static char *net2 = \\\"%s %s %s\\\";/g" /home/l2fwd/l2fwd.c'
                   % (self.tg_port2, self.tgen_port2_ip, self.moongen_port2_mac))
            LOG.debug("Executing command: %s", cmd)
            status, stdout, stderr = self.client.execute(cmd)

            cmd = ('cd /home/l2fwd/;make;./gen_debian_package.sh;'
                   'sudo dpkg -i *.deb;'
                   'sudo modprobe l2fwd')
            LOG.debug("Executing command: %s", cmd)
            status, stdout, stderr = self.client.execute(cmd)

        time.sleep(1)

        self.forward_setup_done = True