Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/130738/?format=api
http://patchwork.dpdk.org/api/patches/130738/?format=api", "web_url": "http://patchwork.dpdk.org/project/dts/patch/20230825152825.2831565-6-songx.jiale@intel.com/", "project": { "id": 3, "url": "http://patchwork.dpdk.org/api/projects/3/?format=api", "name": "DTS", "link_name": "dts", "list_id": "dts.dpdk.org", "list_email": "dts@dpdk.org", "web_url": "", "scm_url": "git://dpdk.org/tools/dts", "webscm_url": "http://git.dpdk.org/tools/dts/", "list_archive_url": "https://inbox.dpdk.org/dts", "list_archive_url_format": "https://inbox.dpdk.org/dts/{}", "commit_url_format": "" }, "msgid": "<20230825152825.2831565-6-songx.jiale@intel.com>", "list_archive_url": "https://inbox.dpdk.org/dts/20230825152825.2831565-6-songx.jiale@intel.com", "date": "2023-08-25T15:28:21", "name": "[V2,5/9] framework/dut: add and modify methods to adapt to MEV testing", "commit_ref": null, "pull_url": null, "state": "superseded", "archived": false, "hash": "7e3b00e791214656d059a396213b3d63d9b58e42", "submitter": { "id": 2352, "url": "http://patchwork.dpdk.org/api/people/2352/?format=api", "name": "Jiale, SongX", "email": "songx.jiale@intel.com" }, "delegate": null, "mbox": "http://patchwork.dpdk.org/project/dts/patch/20230825152825.2831565-6-songx.jiale@intel.com/mbox/", "series": [ { "id": 29337, "url": "http://patchwork.dpdk.org/api/series/29337/?format=api", "web_url": "http://patchwork.dpdk.org/project/dts/list/?series=29337", "date": "2023-08-25T15:28:16", "name": "add functions to test MEV", "version": 2, "mbox": "http://patchwork.dpdk.org/series/29337/mbox/" } ], "comments": "http://patchwork.dpdk.org/api/patches/130738/comments/", "check": "pending", "checks": "http://patchwork.dpdk.org/api/patches/130738/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<dts-bounces@dpdk.org>", "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])\n\tby inbox.dpdk.org (Postfix) with ESMTP id 71EB0430FD;\n\tFri, 25 Aug 2023 09:20:02 +0200 (CEST)", "from mails.dpdk.org (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 6C75843248;\n\tFri, 25 Aug 2023 09:20:02 +0200 (CEST)", "from mgamail.intel.com (mgamail.intel.com [192.55.52.88])\n by mails.dpdk.org (Postfix) with ESMTP id 2226042D13\n for <dts@dpdk.org>; Fri, 25 Aug 2023 09:19:59 +0200 (CEST)", "from fmsmga008.fm.intel.com ([10.253.24.58])\n by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 25 Aug 2023 00:19:59 -0700", "from unknown (HELO localhost.localdomain) ([10.239.252.96])\n by fmsmga008-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 25 Aug 2023 00:19:56 -0700" ], "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple;\n d=intel.com; i=@intel.com; q=dns/txt; s=Intel;\n t=1692948000; x=1724484000;\n h=from:to:cc:subject:date:message-id:in-reply-to:\n references:mime-version:content-transfer-encoding;\n bh=VusDqTk4TmL13u/G7CbCyV6LPZfZnW2oKaXLfE0lBDc=;\n b=XVShHlaUh1e7+SH3tCuOsbt38wjL2DV4n4uy7ViXf90RfWBhSaHPtkjV\n tvXwdxLRtVMkc6fI9wNxzvd2oMNtewmFKDm7ZYGoH3V2+MdstUi8TYGNM\n bKl4lOReRinLrlc2qRLNOXjp/MGoJj6u63KG2Cmo1+3o6JerSSW2uqxOL\n oYKtxIewDyYpxmwtes32vFHI9rjM1JxLYRl9ng2EheD1PQDs4IFzID7Nf\n D0TwWPZGNBRSdqMcG5c0CJdANBY4qbwr5P81XbLazPFHzcMUm07mPtp6c\n 6JJ4heT/AtPACMR8GvHYzv+Eg27y74EZrumYm1V9CJN7vPo9Rfydd8wmU Q==;", "X-IronPort-AV": [ "E=McAfee;i=\"6600,9927,10812\"; a=\"405654466\"", "E=Sophos;i=\"6.02,195,1688454000\"; d=\"scan'208\";a=\"405654466\"", "E=McAfee;i=\"6600,9927,10812\"; a=\"802869649\"", "E=Sophos;i=\"6.02,195,1688454000\"; d=\"scan'208\";a=\"802869649\"" ], "X-ExtLoop1": "1", "From": "Jiale Song <songx.jiale@intel.com>", "To": "dts@dpdk.org", "Cc": "Jiale Song <songx.jiale@intel.com>", "Subject": "[dts] [PATCH V2 5/9] framework/dut: add and modify methods to adapt\n to MEV testing", "Date": "Fri, 25 Aug 2023 15:28:21 +0000", "Message-Id": "<20230825152825.2831565-6-songx.jiale@intel.com>", "X-Mailer": "git-send-email 2.25.1", "In-Reply-To": "<20230825152825.2831565-1-songx.jiale@intel.com>", "References": "<20230825152825.2831565-1-songx.jiale@intel.com>", "MIME-Version": "1.0", "Content-Transfer-Encoding": "8bit", "X-BeenThere": "dts@dpdk.org", "X-Mailman-Version": "2.1.29", "Precedence": "list", "List-Id": "test suite reviews and discussions <dts.dpdk.org>", "List-Unsubscribe": "<https://mails.dpdk.org/options/dts>,\n <mailto:dts-request@dpdk.org?subject=unsubscribe>", "List-Archive": "<http://mails.dpdk.org/archives/dts/>", "List-Post": "<mailto:dts@dpdk.org>", "List-Help": "<mailto:dts-request@dpdk.org?subject=help>", "List-Subscribe": "<https://mails.dpdk.org/listinfo/dts>,\n <mailto:dts-request@dpdk.org?subject=subscribe>", "Errors-To": "dts-bounces@dpdk.org" }, "content": "add and modify methods to adapt to MEV testing.\n\nSigned-off-by: Jiale Song <songx.jiale@intel.com>\n---\n framework/dut.py | 174 ++++++++++++++++++++++++++++++++++++++++++++---\n 1 file changed, 165 insertions(+), 9 deletions(-)", "diff": "diff --git a/framework/dut.py b/framework/dut.py\nindex 0adb2786..d2a9cda5 100644\n--- a/framework/dut.py\n+++ b/framework/dut.py\n@@ -2,6 +2,7 @@\n # Copyright(c) 2010-2014 Intel Corporation\n #\n \n+import copy\n import os\n import re\n import threading\n@@ -15,7 +16,16 @@ from nics.net_device import GetNicObj\n from .config import AppNameConf, PortConf\n from .crb import Crb\n from .exception import ParameterInvalidException\n-from .settings import LOG_NAME_SEP, NICS\n+from .logger import getLogger\n+from .settings import (\n+ DPDK_QUEUE_MODEL_SETTING,\n+ DPDK_RX_VPORT_SETTING,\n+ DPDK_TEST_ACC_SETTING,\n+ DPDK_TEST_MEV_SETTING,\n+ DPDK_VPORT_SETTING,\n+ LOG_NAME_SEP,\n+ NICS,\n+)\n from .ssh_connection import SSHConnection\n from .test_result import ResultTable\n from .utils import RED, remove_old_rsa_key\n@@ -62,6 +72,11 @@ class Dut(Crb):\n self.apps_name = {}\n self.dpdk_version = \"\"\n self.nic = None\n+ self.test_mev = settings.load_global_setting(DPDK_TEST_MEV_SETTING).lower()\n+ self.test_acc = settings.load_global_setting(DPDK_TEST_ACC_SETTING).lower()\n+ if self.test_mev == \"true\":\n+ self.imc_session = None\n+ self.set_up_mev_test_env(alt_session)\n \n def filter_cores_from_crb_cfg(self):\n # get core list from crbs.cfg\n@@ -188,20 +203,18 @@ class Dut(Crb):\n \n return file_prefix\n \n- def init_host_session(self, vm_name):\n+ def init_host_session(self, name):\n \"\"\"\n Create session for each VM, session will be handled by VM instance\n \"\"\"\n self.host_session = SSHConnection(\n self.get_ip_address(),\n- vm_name + \"_host\",\n+ name + \"_host\",\n self.get_username(),\n self.get_password(),\n )\n self.host_session.init_log(self.logger)\n- self.logger.info(\n- \"[%s] create new session for VM\" % (threading.current_thread().name)\n- )\n+ self.logger.info(\"create new session for %s\" % (name))\n \n def new_session(self, suite=\"\"):\n \"\"\"\n@@ -274,6 +287,18 @@ class Dut(Crb):\n \"\"\"\n self.send_expect(\"mount -t procfs proc /proc\", \"# \")\n \n+ def get_imc_ip_address(self):\n+ \"\"\"\n+ Get MEV imc ip address.\n+ \"\"\"\n+ return self.crb[\"IMC IP\"]\n+\n+ def get_acc_ip_address(self):\n+ \"\"\"\n+ Get MEV acc ip address.\n+ \"\"\"\n+ return self.crb[\"ACC IP\"]\n+\n def get_ip_address(self):\n \"\"\"\n Get DUT's ip address.\n@@ -331,7 +356,6 @@ class Dut(Crb):\n # disable tester port ipv6\n self.disable_tester_ipv6()\n self.get_nic_configurations()\n-\n # print latest ports_info\n for port_info in self.ports_info:\n self.logger.info(port_info)\n@@ -354,6 +378,26 @@ class Dut(Crb):\n if self.nic.default_driver == \"ice\":\n self.get_nic_pkg(retry_times)\n \n+ def get_mev_nic_configurations(self):\n+ self.vport = settings.load_global_setting(DPDK_VPORT_SETTING).lower()\n+ try:\n+ vport = self.vport.split(\"-\")\n+ vport = list(range(int(vport[0]), int(vport[1]) + 1))\n+ except:\n+ vport = [\n+ int(self.vport),\n+ ]\n+\n+ if len(vport) > 1:\n+ for i in range(len(vport) - 1):\n+ dut_port_info = copy.copy(self.ports_info[0])\n+ tester_port_info = copy.copy(self.tester.ports_info[0])\n+ dut_port_info[\"mac\"] = self.ports_info[0][\"mac\"].replace(\n+ \"0\", str(i + 1), 2\n+ )\n+ self.ports_info.append(dut_port_info)\n+ self.tester.ports_info.append(tester_port_info)\n+\n def get_nic_pkg(self, retry_times=3):\n self.nic.pkg = self.nic.get_nic_pkg()\n while not self.nic.pkg.get(\"type\") and retry_times > 0:\n@@ -1363,6 +1407,8 @@ class Dut(Crb):\n self.alt_session = None\n if self.host_init_flag:\n self.host_session.close()\n+ if self.imc_session:\n+ self.imc_session.close()\n \n def virt_exit(self):\n \"\"\"\n@@ -1382,6 +1428,98 @@ class Dut(Crb):\n self.close()\n self.logger.logger_exit()\n \n+ def create_imc_session(self):\n+ self.logger.info(\"create new session for %s\" % (\"dut_imc\"))\n+ self.imc_session = SSHConnection(\n+ host=self.get_imc_ip_address(),\n+ session_name=\"dut_imc\",\n+ username=self.get_username(),\n+ password=self.get_password(),\n+ )\n+ self.imc_session.init_log(getLogger(\"dut_imc\"))\n+\n+ def create_acc_session(self, alt_session=True):\n+ self.logger.info(\"create new session for %s\" % (\"dut_acc\"))\n+ self.acc_session = SSHConnection(\n+ host=self.get_acc_ip_address(),\n+ session_name=\"dut_acc\",\n+ username=self.get_username(),\n+ password=self.get_password(),\n+ )\n+ self.acc_session.init_log(getLogger(\"dut_acc\"))\n+ if alt_session:\n+ self.acc_alt_session = SSHConnection(\n+ host=self.get_acc_ip_address(),\n+ session_name=\"dut_acc\",\n+ username=self.get_username(),\n+ password=self.get_password(),\n+ )\n+\n+ def create_session(self, name=\"\"):\n+ \"\"\"\n+ Create new session for additional usage. This session will not enable log.\n+ \"\"\"\n+ if self.test_acc:\n+ logger = getLogger(name)\n+ session = SSHConnection(\n+ self.get_acc_ip_address(),\n+ name,\n+ self.get_username(),\n+ self.get_password(),\n+ dut_id=self.dut_id,\n+ )\n+ session.init_log(logger)\n+ else:\n+ logger = getLogger(name)\n+ session = SSHConnection(\n+ self.get_ip_address(),\n+ name,\n+ self.get_username(),\n+ self.get_password(),\n+ dut_id=self.dut_id,\n+ )\n+ session.init_log(logger)\n+ self.sessions.append(session)\n+ return session\n+\n+ def mev_config_rx_port(self, out):\n+ rx_vport = settings.load_global_setting(DPDK_RX_VPORT_SETTING).lower()\n+ # matching rx vport mac addresses\n+ regex = re.compile(\n+ \"Port\\s+%s.*\\s*.*:\\s*(([0-9A-F]{2}:){5}[0-9A-F]{2})\" % rx_vport\n+ )\n+ match_mac = regex.search(out)\n+ if match_mac:\n+ mac = match_mac.group(1)\n+ else:\n+ raise ParameterInvalidException(\n+ \"Unable to match the mac address of the rx vport!!!\"\n+ )\n+ output = self.imc_session.send_expect(\n+ \"cli_client --query --config --verbose\", \"# \"\n+ )\n+ match_vsi_id = re.search(\n+ \"vsi_id:\\s+0x(\\w+).*is_created:\\s+yes.*mac\\s+addr:\\s+%s\" % (mac.lower()),\n+ output,\n+ )\n+ if match_vsi_id:\n+ self.imc_session.send_expect(\n+ \"devmem 0x202920C100 64 0x80%s\" % (match_vsi_id.group(1)), \"# \"\n+ )\n+ else:\n+ raise ParameterInvalidException(\n+ \"Unable to match the vsi id of the rx vport!!!\"\n+ )\n+\n+ def set_up_mev_test_env(self, alt_session=True):\n+ if self.test_acc == \"true\":\n+ self.close()\n+ self.create_acc_session(alt_session)\n+ self.session = self.acc_session\n+ self.alt_session = self.acc_alt_session\n+ self.init_host_session(\"mev_host\")\n+ self.create_imc_session()\n+\n \n class _EalParameter(object):\n def __init__(\n@@ -1428,6 +1566,8 @@ class _EalParameter(object):\n param other_eal_param: user defined DPDK eal parameters, eg:\n other_eal_param='--single-file-segments';\n \"\"\"\n+ self.test_mev = settings.load_global_setting(DPDK_TEST_MEV_SETTING).lower()\n+ self.test_acc = settings.load_global_setting(DPDK_TEST_ACC_SETTING).lower()\n self.os_type = dut.get_os_type()\n self.fixed_prefix = fixed_prefix\n self.socket = socket\n@@ -1561,7 +1701,11 @@ class _EalParameter(object):\n for port_info in self.dut.ports_info:\n pci_list.append(\"%s %s\" % (allow_option, port_info[\"pci\"]))\n self.dut.logger.info(pci_list)\n- return \" \".join(pci_list)\n+ port_param = \" \".join(pci_list)\n+ if self.test_mev == \"true\":\n+ mev_port_options = self._get_mev_port_options()\n+ return port_param + f\",{mev_port_options}\"\n+ return port_param\n \n def _make_b_ports_param(self) -> str:\n b_pci_list = []\n@@ -1638,8 +1782,11 @@ class _EalParameter(object):\n port_mac_addr = self.dut.ports_info[port][\"pci\"] if type(port) == int else port\n port_param = f\"{allow_option} {port_mac_addr}\"\n port_option = self._get_port_options_from_config(port)\n+ if self.test_mev == \"true\":\n+ mev_port_options = self._get_mev_port_options()\n+ port_param = port_param + f\",{mev_port_options}\"\n if port_option:\n- port_param = f\"{port_param},{port_option}\"\n+ port_param = port_param + f\",{port_option}\"\n return port_param\n \n def _get_port_options_from_config(self, port: Union[str, int]) -> str:\n@@ -1680,3 +1827,12 @@ class _EalParameter(object):\n ]\n )\n return _eal_str\n+\n+ def _get_mev_port_options(self):\n+ self.queue_model = settings.load_global_setting(DPDK_QUEUE_MODEL_SETTING)\n+ self.vport = settings.load_global_setting(DPDK_VPORT_SETTING)\n+ port_options_dict = {\n+ \"splitq\": f\"vport={self.vport}\",\n+ \"singleq\": f\"vport={self.vport},rx_single=1,tx_single=1\",\n+ }\n+ return port_options_dict[self.queue_model]\n", "prefixes": [ "V2", "5/9" ] }{ "id": 130738, "url": "