From patchwork Sun Jul 16 09:07:50 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jin Ling X-Patchwork-Id: 129550 Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 8430B42E8A; Sun, 16 Jul 2023 11:08:18 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 7DA6640DFD; Sun, 16 Jul 2023 11:08:18 +0200 (CEST) Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by mails.dpdk.org (Postfix) with ESMTP id D85374013F for ; Sun, 16 Jul 2023 11:08:16 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1689498497; x=1721034497; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=VyyktF3SvfD4f/ioxgW/ngbaNOgrFd0O9u0mYkPeYqw=; b=XYugOGA9GMVX9dLAHacpNahcIPtks7B/AQH/DYwKqFeaJyHPdw6gHce+ 4vKZVVhlyPA+VW5S/wyk9xE6OvEwrzMCp8dCuIjLLRMT/cD77UGtuHETe ms+sRWHkqSoWgYZpLPzbOdnYcCfNiR/V/ppHRZ1hcj5aYvkh3NX1ire5/ JPzEwzI543E9GtmJ7mycNweohjZvemlX7SGbIvgKwZS7GK0LvZB0jdurk pasiu+jDOhBiAxCLGFrEI8OEPSGNs19Vav8GpJ/HA/IbL5Dt8QlMJVA0e 8uJrgkn0L12NhdVOo1uVJBwIzMr+hBw+sW8O7PVYyfbT88+bfjVeCqF5P A==; X-IronPort-AV: E=McAfee;i="6600,9927,10772"; a="350610641" X-IronPort-AV: E=Sophos;i="6.01,210,1684825200"; d="scan'208";a="350610641" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 16 Jul 2023 02:08:16 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10772"; a="788303687" X-IronPort-AV: E=Sophos;i="6.01,210,1684825200"; d="scan'208";a="788303687" Received: from dpdk-lingjin.sh.intel.com ([10.67.114.163]) by fmsmga008.fm.intel.com with ESMTP; 16 Jul 2023 02:08:15 -0700 From: Jin Ling To: dts@dpdk.org Cc: Jin Ling Subject: [DTS][PATCH V1 06/10] framework/dut: add new functions to set up test mev env Date: Sun, 16 Jul 2023 17:07:50 +0800 Message-Id: <20230716090753.1590148-7-jin.ling@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230716090753.1590148-1-jin.ling@intel.com> References: <20230716090753.1590148-1-jin.ling@intel.com> MIME-Version: 1.0 X-BeenThere: dts@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: test suite reviews and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dts-bounces@dpdk.org will set up the test env of mev when creating a dut according the global var 'test_mev'. Signed-off-by: Jin Ling --- framework/dut.py | 121 +++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 113 insertions(+), 8 deletions(-) diff --git a/framework/dut.py b/framework/dut.py index 0adb2786..8a7884f0 100644 --- a/framework/dut.py +++ b/framework/dut.py @@ -6,6 +6,7 @@ import os import re import threading import time +import copy from typing import Dict, List, Optional, Union from uuid import uuid4 @@ -15,11 +16,13 @@ from nics.net_device import GetNicObj from .config import AppNameConf, PortConf from .crb import Crb from .exception import ParameterInvalidException -from .settings import LOG_NAME_SEP, NICS +from .settings import LOG_NAME_SEP, NICS,DPDK_TEST_MEV_SETTING,\ + DPDK_QUEUE_MODEL_SETTING,DPDK_VPORT_SETTING,DPDK_RX_VPORT_SETTING from .ssh_connection import SSHConnection from .test_result import ResultTable from .utils import RED, remove_old_rsa_key from .virt_resource import VirtResource +from .logger import getLogger class Dut(Crb): @@ -62,7 +65,10 @@ class Dut(Crb): self.apps_name = {} self.dpdk_version = "" self.nic = None - + self.test_mev = settings.load_global_setting(DPDK_TEST_MEV_SETTING).lower() + # self.test_acc = settings.load_global_setting(DPDK_TEST_ACC_SETTING).lower() + if self.test_mev=="true": + self.set_up_mev_test_env() def filter_cores_from_crb_cfg(self): # get core list from crbs.cfg core_list = [] @@ -327,11 +333,13 @@ class Dut(Crb): self.load_portconf() self.mount_procfs() # auto detect network topology - self.map_available_ports() + # self.map_available_ports() # disable tester port ipv6 self.disable_tester_ipv6() self.get_nic_configurations() - + self.get_mev_nic_configurations() + # auto detect network topology + self.map_available_ports() # print latest ports_info for port_info in self.ports_info: self.logger.info(port_info) @@ -354,6 +362,24 @@ class Dut(Crb): if self.nic.default_driver == "ice": self.get_nic_pkg(retry_times) + def get_mev_nic_configurations(self): + if self.test_mev=="true": + self.vport=settings.load_global_setting(DPDK_VPORT_SETTING).lower() + try: + vport = self.vport.split("-") + vport = list(range(int(vport[0]),int(vport[1])+1)) + except: + vport = [int(self.vport),] + + if len(vport) > 1 : + for i in range(len(vport)-1): + dut_port_info = copy.copy(self.ports_info[0]) + tester_port_info = copy.copy(self.tester.ports_info[0]) + dut_port_info["mac"] = self.ports_info[0]["mac"].replace("0",str(i+1),2) + self.ports_info.append(dut_port_info) + self.tester.ports_info.append(tester_port_info) + # self.port_info[i+1]["pci"] = "" + def get_nic_pkg(self, retry_times=3): self.nic.pkg = self.nic.get_nic_pkg() while not self.nic.pkg.get("type") and retry_times > 0: @@ -1379,9 +1405,65 @@ class Dut(Crb): Recover all resource before crb exit """ self.enable_tester_ipv6() + try: + self.bak_session.send_expect("pkill minicom","#") + except: + pass + self.close() self.close() self.logger.logger_exit() - + + def create_imc_test_session(self): + self.imc_test_session = SSHConnection(host=self.crb["section"],session_name="imc",username="root",password="tester") + self.imc_test_session.init_log(getLogger("dut_imc_session")) + self.imc_test_session.send_expect("export TERM=linux-c-nc","#") + out = self.imc_test_session.send_command(f"sudo minicom -D {self.crb['IMC PORT']} -b {self.crb['IMC BAUDRATE']} -w") + while "root@mev-imc" not in out: + if "locked" in out: + self.bak_session.send_command("ps -ef | grep 'minicom -D %s' | grep -v grep | awk '{print $2}' | xargs kill -9"%(self.crb['IMC PORT'])) + out = self.imc_test_session.send_command(f"sudo minicom -D {self.crb['IMC PORT']} -b {self.crb['IMC BAUDRATE']}") + elif "login" in out: + out = self.imc_test_session.send_command("root") + else: + out = self.imc_test_session.send_command("\n") + self.logger.info("create imc test session successfully") + + def create_acc_test_session(self): + self.acc_test_session = SSHConnection(host=self.crb["section"],session_name="acc",username="root",password="tester") + self.acc_test_session.init_log(getLogger("dut_acc_session")) + self.acc_test_session.send_expect("export TERM=linux-c-nc","#") + out = self.acc_test_session.send_command(f"sudo minicom -D {self.crb['ACC PORT']} -b {self.crb['ACC BAUDRATE']}") + # out = self.send_command(f"ssh 192.168.0.2") + while "root@mev-acc" not in out: + if "locked" in out: + self.bak_session.send_command("ps -ef | grep 'minicom -D %s' | grep -v grep | awk '{print $2}' | xargs kill -9"%(self.crb['ACC PORT'])) + out = self.acc_test_session.send_command(f"sudo minicom -D {self.crb['ACC PORT']} -b {self.crb['ACC BAUDRATE']}") + elif "login" in out: + out = self.acc_test_session.send_command("root") + else: + out = self.acc_test_session.send_command("\n") + self.acc_test_session.logger.info("login acc successfully") + def mev_config_rx_port(self, out): + rx_vport = settings.load_global_setting(DPDK_RX_VPORT_SETTING).lower() + try: + # self.ports_info[int(rx_vport)]['mac'] = re.findall(f'Port {rx_vport}: (.{17})\\r',out)[0] + mac = re.findall("Port %s: (.{17})\\r"%(rx_vport),out)[0] + except: + # self.ports_info[int(rx_vport)]['mac'] = re.findall('Address:(.{17})',out)[0] + mac = re.findall('Address:(.{17})',out)[0] + output = self.imc_test_session.send_command("cli_client --query --config --verbose") + vsi_id = re.findall("vsi_id: 0x(\w+).*is_created: yes.*mac addr: %s"%(mac.lower()),output) + self.imc_test_session.send_command("devmem 0x202920C100 64 0x80%s"%(vsi_id[0])) + + def set_up_mev_test_env(self): + if self.test_mev == "true": + self.bak_session = SSHConnection(host=self.crb["section"],session_name="bak",username="root",password="tester") + self.bak_session.init_log(getLogger("dut_bak")) + self.create_imc_test_session() + if self.crb["ACC PORT"] != "" and self.crb["ACC BAUDRATE"] != "" and self.crb["IP"] == self.crb["section"]: + self.create_acc_test_session() + self.session = self.acc_test_session + self.alt_session = self.acc_test_session class _EalParameter(object): def __init__( @@ -1428,6 +1510,7 @@ class _EalParameter(object): param other_eal_param: user defined DPDK eal parameters, eg: other_eal_param='--single-file-segments'; """ + self.test_mev=settings.load_global_setting(DPDK_TEST_MEV_SETTING).lower() self.os_type = dut.get_os_type() self.fixed_prefix = fixed_prefix self.socket = socket @@ -1561,7 +1644,12 @@ class _EalParameter(object): for port_info in self.dut.ports_info: pci_list.append("%s %s" % (allow_option, port_info["pci"])) self.dut.logger.info(pci_list) - return " ".join(pci_list) + # return " ".join(pci_list) + if self.test_mev =="true": + mev_port_options = self._get_mev_port_options() + return f"'' '.join(pci_list),{mev_port_options}" + else: + return " ".join(pci_list) def _make_b_ports_param(self) -> str: b_pci_list = [] @@ -1638,8 +1726,11 @@ class _EalParameter(object): port_mac_addr = self.dut.ports_info[port]["pci"] if type(port) == int else port port_param = f"{allow_option} {port_mac_addr}" port_option = self._get_port_options_from_config(port) - if port_option: - port_param = f"{port_param},{port_option}" + # if port_option: + # port_param = f"{port_param},{port_option}" + mev_port_options = self._get_mev_port_options() + if port_option or mev_port_options: + port_param = f"{port_param},{mev_port_options},{port_option}" return port_param def _get_port_options_from_config(self, port: Union[str, int]) -> str: @@ -1680,3 +1771,17 @@ class _EalParameter(object): ] ) return _eal_str + + + def _get_mev_port_options(self): + if self.test_mev == "true": + self.queue_model = settings.load_global_setting(DPDK_QUEUE_MODEL_SETTING) + self.vport = settings.load_global_setting(DPDK_VPORT_SETTING) + port_options_dict = { + "splitq":f"vport={self.vport}", + "singleq":f"vport={self.vport},rx_single=1,tx_single=1", + } + out = port_options_dict[self.queue_model] + return out + else: + return ""