Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/135706/?format=api
http://patches.dpdk.org/api/patches/135706/?format=api", "web_url": "http://patches.dpdk.org/project/dpdk/patch/20240103125438.182098-1-Luca.Vizzarro@arm.com/", "project": { "id": 1, "url": "http://patches.dpdk.org/api/projects/1/?format=api", "name": "DPDK", "link_name": "dpdk", "list_id": "dev.dpdk.org", "list_email": "dev@dpdk.org", "web_url": "http://core.dpdk.org", "scm_url": "git://dpdk.org/dpdk", "webscm_url": "http://git.dpdk.org/dpdk", "list_archive_url": "https://inbox.dpdk.org/dev", "list_archive_url_format": "https://inbox.dpdk.org/dev/{}", "commit_url_format": "" }, "msgid": "<20240103125438.182098-1-Luca.Vizzarro@arm.com>", "list_archive_url": "https://inbox.dpdk.org/dev/20240103125438.182098-1-Luca.Vizzarro@arm.com", "date": "2024-01-03T12:54:37", "name": "dts: improve documentation", "commit_ref": null, "pull_url": null, "state": "superseded", "archived": true, "hash": "e61e770d54042f21c5f8aef0cfe370a8c1cce76c", "submitter": { "id": 3197, "url": "http://patches.dpdk.org/api/people/3197/?format=api", "name": "Luca Vizzarro", "email": "luca.vizzarro@arm.com" }, "delegate": { "id": 1, "url": "http://patches.dpdk.org/api/users/1/?format=api", "username": "tmonjalo", "first_name": "Thomas", "last_name": "Monjalon", "email": "thomas@monjalon.net" }, "mbox": "http://patches.dpdk.org/project/dpdk/patch/20240103125438.182098-1-Luca.Vizzarro@arm.com/mbox/", "series": [ { "id": 30712, "url": "http://patches.dpdk.org/api/series/30712/?format=api", "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=30712", "date": "2024-01-03T12:54:37", "name": "dts: improve documentation", "version": 1, "mbox": "http://patches.dpdk.org/series/30712/mbox/" } ], "comments": "http://patches.dpdk.org/api/patches/135706/comments/", "check": "success", "checks": "http://patches.dpdk.org/api/patches/135706/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<dev-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 DFEFD437DF;\n\tWed, 3 Jan 2024 13:54:56 +0100 (CET)", "from mails.dpdk.org (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 783CA402DD;\n\tWed, 3 Jan 2024 13:54:56 +0100 (CET)", "from foss.arm.com (foss.arm.com [217.140.110.172])\n by mails.dpdk.org (Postfix) with ESMTP id 682BB402DC\n for <dev@dpdk.org>; Wed, 3 Jan 2024 13:54:54 +0100 (CET)", "from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])\n by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 7E6B1C15;\n Wed, 3 Jan 2024 04:55:39 -0800 (PST)", "from localhost.localdomain (unknown [172.31.20.19])\n by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 9B1D13F64C;\n Wed, 3 Jan 2024 04:54:52 -0800 (PST)" ], "From": "Luca Vizzarro <Luca.Vizzarro@arm.com>", "To": "dev@dpdk.org", "Cc": "Luca Vizzarro <Luca.Vizzarro@arm.com>,\n Paul Szczepanek <Paul.Szczepanek@arm.com>,\n Thomas Monjalon <thomas@monjalon.net>, Lijuan Tu <lijuan.tu@intel.com>,\n\t=?utf-8?q?Juraj_Linke=C5=A1?= <juraj.linkes@pantheon.tech>", "Subject": "[PATCH] dts: improve documentation", "Date": "Wed, 3 Jan 2024 12:54:37 +0000", "Message-Id": "<20240103125438.182098-1-Luca.Vizzarro@arm.com>", "X-Mailer": "git-send-email 2.34.1", "MIME-Version": "1.0", "Content-Type": "text/plain; charset=UTF-8", "Content-Transfer-Encoding": "8bit", "X-BeenThere": "dev@dpdk.org", "X-Mailman-Version": "2.1.29", "Precedence": "list", "List-Id": "DPDK patches and discussions <dev.dpdk.org>", "List-Unsubscribe": "<https://mails.dpdk.org/options/dev>,\n <mailto:dev-request@dpdk.org?subject=unsubscribe>", "List-Archive": "<http://mails.dpdk.org/archives/dev/>", "List-Post": "<mailto:dev@dpdk.org>", "List-Help": "<mailto:dev-request@dpdk.org?subject=help>", "List-Subscribe": "<https://mails.dpdk.org/listinfo/dev>,\n <mailto:dev-request@dpdk.org?subject=subscribe>", "Errors-To": "dev-bounces@dpdk.org" }, "content": "Improve instructions for installing dependencies, configuring and\nlaunching the project. Finally, document the configuration schema\nby adding more comments to the example and documenting every\nproperty and definition.\n\nReviewed-by: Paul Szczepanek <Paul.Szczepanek@arm.com>\nSigned-off-by: Luca Vizzarro <Luca.Vizzarro@arm.com>\n---\n .mailmap | 1 +\n doc/guides/tools/dts.rst | 255 +++++++++++++++++++++++++++++++++------\n dts/conf.yaml | 31 +++--\n 3 files changed, 240 insertions(+), 47 deletions(-)", "diff": "diff --git a/.mailmap b/.mailmap\nindex ab0742a382..6326e28d08 100644\n--- a/.mailmap\n+++ b/.mailmap\n@@ -815,6 +815,7 @@ Louise Kilheeney <louise.kilheeney@intel.com>\n Louis Luo <llouis@vmware.com>\n Louis Peens <louis.peens@corigine.com> <louis.peens@netronome.com>\n Luca Boccassi <luca.boccassi@microsoft.com> <bluca@debian.org> <luca.boccassi@gmail.com> <lboccass@brocade.com> <luca.boccassi@intl.att.com>\n+Luca Vizzarro <Luca.Vizzarro@arm.com>\n Luc Pelletier <lucp.at.work@gmail.com>\n Lukasz Bartosik <lbartosik@marvell.com>\n Lukasz Czapnik <lukasz.czapnik@intel.com>\ndiff --git a/doc/guides/tools/dts.rst b/doc/guides/tools/dts.rst\nindex 32c18ee472..31495cad51 100644\n--- a/doc/guides/tools/dts.rst\n+++ b/doc/guides/tools/dts.rst\n@@ -91,7 +91,7 @@ Setting up DTS environment\n \n .. code-block:: console\n \n- poetry install\n+ poetry install --no-root\n poetry shell\n \n #. **SSH Connection**\n@@ -189,72 +189,73 @@ Running DTS\n -----------\n \n DTS needs to know which nodes to connect to and what hardware to use on those nodes.\n-Once that's configured, DTS needs a DPDK tarball and it's ready to run.\n+Once that's configured, DTS needs a DPDK tarball or a git ref ID and it's ready to run.\n \n Configuring DTS\n ~~~~~~~~~~~~~~~\n \n-DTS configuration is split into nodes and executions and build targets within executions.\n-By default, DTS will try to use the ``dts/conf.yaml`` config file,\n-which is a template that illustrates what can be configured in DTS:\n-\n- .. literalinclude:: ../../../dts/conf.yaml\n- :language: yaml\n- :start-at: executions:\n-\n+DTS configuration is split into nodes and executions and build targets within executions,\n+and follows a defined schema as described in `Configuration Schema`_.\n+By default, DTS will try to use the ``dts/conf.yaml`` :ref:`config file <configuration_schema_example>`,\n+which is a template that illustrates what can be configured in DTS.\n \n The user must have :ref:`administrator privileges <sut_admin_user>`\n which don't require password authentication.\n-The other fields are mostly self-explanatory\n-and documented in more detail in ``dts/framework/config/conf_yaml_schema.json``.\n \n DTS Execution\n ~~~~~~~~~~~~~\n \n-DTS is run with ``main.py`` located in the ``dts`` directory after entering Poetry shell::\n+DTS is run with ``main.py`` located in the ``dts`` directory after entering Poetry shell:\n+\n+.. code-block:: console\n \n- usage: main.py [-h] [--config-file CONFIG_FILE] [--output-dir OUTPUT_DIR] [-t TIMEOUT]\n- [-v VERBOSE] [-s SKIP_SETUP] [--tarball TARBALL]\n- [--compile-timeout COMPILE_TIMEOUT] [--test-cases TEST_CASES]\n- [--re-run RE_RUN]\n+ (dts-py3.10) $ ./main.py --help\n+ usage: main.py [-h] [--config-file CONFIG_FILE] [--output-dir OUTPUT_DIR] [-t TIMEOUT] [-v VERBOSE]\n+ [-s SKIP_SETUP] [--tarball TARBALL] [--compile-timeout COMPILE_TIMEOUT]\n+ [--test-cases TEST_CASES] [--re-run RE_RUN]\n \n- Run DPDK test suites. All options may be specified with the environment variables provided in\n- brackets. Command line arguments have higher priority.\n+ Run DPDK test suites. All options may be specified with the environment variables provided in brackets.\n+ Command line arguments have higher priority.\n \n options:\n -h, --help show this help message and exit\n --config-file CONFIG_FILE\n- [DTS_CFG_FILE] configuration file that describes the test cases, SUTs\n- and targets. (default: conf.yaml)\n+ [DTS_CFG_FILE] configuration file that describes the test cases, SUTs and targets.\n+ (default: conf.yaml)\n --output-dir OUTPUT_DIR, --output OUTPUT_DIR\n- [DTS_OUTPUT_DIR] Output directory where dts logs and results are\n- saved. (default: output)\n+ [DTS_OUTPUT_DIR] Output directory where dts logs and results are saved. (default:\n+ output)\n -t TIMEOUT, --timeout TIMEOUT\n- [DTS_TIMEOUT] The default timeout for all DTS operations except for\n- compiling DPDK. (default: 15)\n+ [DTS_TIMEOUT] The default timeout for all DTS operations except for compiling DPDK.\n+ (default: 15)\n -v VERBOSE, --verbose VERBOSE\n- [DTS_VERBOSE] Set to 'Y' to enable verbose output, logging all\n- messages to the console. (default: N)\n+ [DTS_VERBOSE] Set to 'Y' to enable verbose output, logging all messages to the\n+ console. (default: N)\n -s SKIP_SETUP, --skip-setup SKIP_SETUP\n- [DTS_SKIP_SETUP] Set to 'Y' to skip all setup steps on SUT and TG\n- nodes. (default: N)\n- --tarball TARBALL, --snapshot TARBALL\n- [DTS_DPDK_TARBALL] Path to DPDK source code tarball which will be\n- used in testing. (default: dpdk.tar.xz)\n+ [DTS_SKIP_SETUP] Set to 'Y' to skip all setup steps on SUT and TG nodes. (default: N)\n+ --tarball TARBALL, --snapshot TARBALL, --git-ref TARBALL\n+ [DTS_DPDK_TARBALL] Path to DPDK source code tarball or a git commit ID, tag ID or\n+ tree ID to test. To test local changes, first commit them, then use the commit ID\n+ with this option. (default: dpdk.tar.xz)\n --compile-timeout COMPILE_TIMEOUT\n [DTS_COMPILE_TIMEOUT] The timeout for compiling DPDK. (default: 1200)\n --test-cases TEST_CASES\n- [DTS_TESTCASES] Comma-separated list of test cases to execute.\n- Unknown test cases will be silently ignored. (default: )\n+ [DTS_TESTCASES] Comma-separated list of test cases to execute. Unknown test cases\n+ will be silently ignored. (default: )\n --re-run RE_RUN, --re_run RE_RUN\n- [DTS_RERUN] Re-run each test case the specified amount of times if a\n- test failure occurs (default: 0)\n+ [DTS_RERUN] Re-run each test case the specified amount of times if a test failure\n+ occurs (default: 0)\n \n \n The brackets contain the names of environment variables that set the same thing.\n-The minimum DTS needs is a config file and a DPDK tarball.\n+The minimum DTS needs is a config file and a DPDK tarball or git ref ID.\n You may pass those to DTS using the command line arguments or use the default paths.\n \n+Example command for running DTS with the template configuration and DPDK tag v23.07:\n+\n+.. code-block:: console\n+\n+ (dts-py3.10) $ ./main.py --git-ref v23.07\n \n DTS Results\n ~~~~~~~~~~~\n@@ -335,3 +336,183 @@ There are three tools used in DTS to help with code checking, style and formatti\n These three tools are all used in ``devtools/dts-check-format.sh``,\n the DTS code check and format script.\n Refer to the script for usage: ``devtools/dts-check-format.sh -h``.\n+\n+Configuration Schema\n+--------------------\n+\n+Definitions\n+~~~~~~~~~~~\n+\n+_`Node name`\n+ *string* – A unique identifier for a node. **Examples**: ``SUT1``, ``TG1``.\n+\n+_`ARCH`\n+ *string* – The CPU architecture. **Supported values**: ``x86_64``, ``arm64``, ``ppc64le``.\n+\n+_`CPU`\n+ *string* – The CPU microarchitecture. Use ``native`` for x86. **Supported values**: ``native``, ``armv8a``, ``dpaa2``, ``thunderx``, ``xgene1``.\n+\n+_`OS`\n+ *string* – The operating system. **Supported values**: ``linux``.\n+\n+_`Compiler`\n+ *string* – The compiler used for building DPDK. **Supported values**: ``gcc``, ``clang``, ``icc``, ``mscv``.\n+\n+_`Build target`\n+ *object* – Build targets supported by DTS for building DPDK, described as:\n+\n+ ==================== =========================================================================================\n+ ``arch`` See `ARCH`_\n+ ``os`` See `OS`_\n+ ``cpu`` See `CPU`_\n+ ``compiler`` See `Compiler`_\n+ ``compiler_wrapper`` *string* – Value prepended to the CC variable for the DPDK build.\n+\n+ **Example**: ``ccache``\n+ ==================== =========================================================================================\n+\n+_`hugepages`\n+ *object* – hugepages described as:\n+\n+ ==================== ================================================================\n+ ``amount`` *integer* – The amount of hugepages to configure.\n+\n+ Hugepage size will be the system default.\n+ ``force_first_numa`` (*optional*, defaults to ``false``) – If ``true``, it forces the\n+\n+ configuration of hugepages on the first NUMA node.\n+ ==================== ================================================================\n+\n+_`Network port`\n+ *object* – the NIC port described as:\n+\n+ ====================== =================================================================================\n+ ``pci`` *string* – the local PCI address of the port. **Example**: ``0000:00:08.0``\n+ ``os_driver_for_dpdk`` | *string* – this port's device driver when using with DPDK\n+ | When setting up the SUT, DTS will bind the network device to this driver\n+ | for compatibility with DPDK.\n+\n+ **Examples**: ``vfio-pci``, ``mlx5_core``\n+ ``os_driver`` | *string* – this port's device driver when **not** using with DPDK\n+ | When tearing down the tests on the SUT, DTS will bind the network device\n+ | *back* to this driver. This driver is meant to be the one that the SUT would\n+ | normally use for this device, or whichever driver it is preferred to leave the\n+ | device bound to after testing.\n+\n+ **Examples**: ``i40e``, ``mlx5_core``\n+ ``peer_node`` *string* – the name of the peer node connected to this port.\n+ ``peer_pci`` *string* – the PCI address of the peer node port. **Example**: ``000a:01:00.1``\n+ ====================== =================================================================================\n+\n+_`Test suite`\n+ *string* – name of the test suite to run. **Examples**: ``hello_world``, ``os_udp``\n+\n+_`Test target`\n+ *object* – selects specific test cases to run from a test suite. Object is described as follows:\n+\n+ ========= =============================================================================================\n+ ``suite`` See `Test suite`_\n+ ``cases`` (*optional*) *array* of *string* – list of the selected test cases in the test suite to run.\n+\n+ Unknown test cases will be silently ignored.\n+ ========= =============================================================================================\n+\n+Properties\n+~~~~~~~~~~\n+\n+The configuration requires listing all the execution environments and nodes\n+involved in the testing. These can be defined with the following properties:\n+\n+``executions``\n+ *array* listing the execution environments. Each entry is described as per the following object:\n+\n+ +----------------------------+-------------------------------------------------------------------+\n+ | ``build_targets`` | *array* of `Build target`_ |\n+ +----------------------------+-------------------------------------------------------------------+\n+ | ``perf`` | *boolean* – Enable performance testing. |\n+ +----------------------------+-------------------------------------------------------------------+\n+ | ``func`` | *boolean* – Enable functional testing. |\n+ +----------------------------+-------------------------------------------------------------------+\n+ | ``test_suites`` | *array* of **one of** `Test suite`_ **or** `Test target`_ |\n+ +----------------------------+-------------------------------------------------------------------+\n+ | ``skip_smoke_tests`` | (*optional*) *boolean* – Allows you to skip smoke testing |\n+ | | if ``true``. |\n+ +----------------------------+-------------------------------------------------------------------+\n+ | ``system_under_test_node`` | System under test node specified with: |\n+ | +---------------+---------------------------------------------------+\n+ | | ``node_name`` | See `Node name`_ |\n+ | +---------------+---------------------------------------------------+\n+ | | ``vdevs`` | (*optional*) *array* of *string* |\n+ | | | |\n+ | | | List of virtual devices passed with the ``--vdev``|\n+ | | | argument to DPDK. **Example**: ``crypto_openssl`` |\n+ +----------------------------+---------------+---------------------------------------------------+\n+ | ``traffic_generator_node`` | Node name for the traffic generator node. |\n+ +----------------------------+-------------------------------------------------------------------+\n+\n+``nodes``\n+ *array* listing the nodes. Each entry is described as per the following object:\n+\n+ +-----------------------+---------------------------------------------------------------------------------------+\n+ | ``name`` | See `Node name`_ |\n+ +-----------------------+---------------------------------------------------------------------------------------+\n+ | ``hostname`` | *string* – The network hostname or IP address of this node. |\n+ +-----------------------+---------------------------------------------------------------------------------------+\n+ | ``user`` | *string* – The SSH user credential to use to login to this node. |\n+ +-----------------------+---------------------------------------------------------------------------------------+\n+ | ``password`` | (*optional*) *string* – The SSH password credential for this node. |\n+ | | |\n+ | | **NB**: Use only as last resort. SSH keys are **strongly** preferred. |\n+ +-----------------------+---------------------------------------------------------------------------------------+\n+ | ``arch`` | The architecture of this node. See `ARCH`_ for supported values. |\n+ +-----------------------+---------------------------------------------------------------------------------------+\n+ | ``os`` | The operating system of this node. See `OS`_ for supported values. |\n+ +-----------------------+---------------------------------------------------------------------------------------+\n+ | ``lcores`` | | (*optional*, defaults to 1) *string* – Comma-separated list of logical |\n+ | | | cores to use. An empty string means use all lcores. |\n+ | | |\n+ | | **Example**: ``1,2,3,4,5,18-22`` |\n+ +-----------------------+---------------------------------------------------------------------------------------+\n+ | ``use_first_core`` | (*optional*, defaults to ``false``) *boolean* |\n+ | | |\n+ | | Indicates whether DPDK should use only the first physical core or not. |\n+ +-----------------------+---------------------------------------------------------------------------------------+\n+ | ``memory_channels`` | (*optional*, defaults to 1) *integer* |\n+ | | |\n+ | | The number of the memory channels to use. |\n+ +-----------------------+---------------------------------------------------------------------------------------+\n+ | ``hugepages`` | (*optional*) See `hugepages`_. If unset, hugepages won't be configured |\n+ | | |\n+ | | in favour of the system configuration. |\n+ +-----------------------+---------------------------------------------------------------------------------------+\n+ | ``ports`` | | *array* of `Network port`_ – Describe ports that are **directly** paired with other |\n+ | | | nodes used in conjunction with this one. Both ends of the links must be |\n+ | | | described. If there any inconsistencies DTS won't run. |\n+ | | |\n+ | | **Example**: port 1 of node ``SUT1`` is connected to port 1 of node ``TG1`` etc. |\n+ +-----------------------+---------------------------------------------------------------------------------------+\n+ | ``traffic_generator`` | (*optional*) Traffic generator, if any, setup on this node described as: |\n+ | +----------+----------------------------------------------------------------------------+\n+ | | ``type`` | *string* – **Supported values**: *SCAPY* |\n+ +-----------------------+----------+----------------------------------------------------------------------------+\n+\n+.. _configuration_schema_example:\n+\n+Example\n+~~~~~~~\n+\n+The following example (which can be found in ``dts/conf.yaml``) sets up two nodes:\n+\n+* ``SUT1`` which is already setup with the DPDK build requirements and any other\n+ required for execution;\n+* ``TG1`` which already has Scapy installed in the system.\n+\n+And they both have two network ports which are physically connected to each other.\n+\n+.. note::\n+ This example assumes that you have setup SSH keys in both the system under test\n+ and traffic generator nodes.\n+\n+.. literalinclude:: ../../../dts/conf.yaml\n+ :language: yaml\n+ :start-at: executions:\n\\ No newline at end of file\ndiff --git a/dts/conf.yaml b/dts/conf.yaml\nindex 37967daea0..2d6fa38a2c 100644\n--- a/dts/conf.yaml\n+++ b/dts/conf.yaml\n@@ -1,65 +1,76 @@\n # SPDX-License-Identifier: BSD-3-Clause\n # Copyright 2022-2023 The DPDK contributors\n+# Copyright 2023 Arm Limited\n \n executions:\n+ # define one execution environment\n - build_targets:\n - arch: x86_64\n os: linux\n cpu: native\n+ # the combination of the following two makes CC=\"ccache gcc\"\n compiler: gcc\n compiler_wrapper: ccache\n- perf: false\n- func: true\n- skip_smoke_tests: false # optional flag that allows you to skip smoke tests\n- test_suites:\n+ perf: false # disable performance testing\n+ func: true # enable functional testing\n+ skip_smoke_tests: false\n+ test_suites: # the following test suites will be run in their entirety\n - hello_world\n - os_udp\n+ # The machine running the DPDK test executable\n system_under_test_node:\n node_name: \"SUT 1\"\n vdevs: # optional; if removed, vdevs won't be used in the execution\n - \"crypto_openssl\"\n+ # Traffic generator node to use for this execution environment\n traffic_generator_node: \"TG 1\"\n nodes:\n+ # Define a system under test node, having two network ports physically\n+ # connected to the corresponding ports in TG 1 (the peer node)\n - name: \"SUT 1\"\n hostname: sut1.change.me.localhost\n user: dtsuser\n arch: x86_64\n os: linux\n- lcores: \"\"\n- use_first_core: false\n- memory_channels: 4\n+ lcores: \"\" # use all the available logical cores\n+ use_first_core: false # tells DPDK to use any physical core\n+ memory_channels: 4 # tells DPDK to use 4 memory channels\n hugepages: # optional; if removed, will use system hugepage configuration\n amount: 256\n force_first_numa: false\n ports:\n+ # sets up the physical link between \"SUT 1\"@000:00:08.0 and \"TG 1\"@0000:00:08.0\n - pci: \"0000:00:08.0\"\n os_driver_for_dpdk: vfio-pci # OS driver that DPDK will use\n- os_driver: i40e\n+ os_driver: i40e # OS driver to bind when the tests are not running\n peer_node: \"TG 1\"\n peer_pci: \"0000:00:08.0\"\n+ # sets up the physical link between \"SUT 1\"@000:00:08.1 and \"TG 1\"@0000:00:08.1\n - pci: \"0000:00:08.1\"\n os_driver_for_dpdk: vfio-pci\n os_driver: i40e\n peer_node: \"TG 1\"\n peer_pci: \"0000:00:08.1\"\n+ # Define a Scapy traffic generator node, having two network ports\n+ # physically connected to the corresponding ports in SUT 1 (the peer node).\n - name: \"TG 1\"\n hostname: tg1.change.me.localhost\n user: dtsuser\n arch: x86_64\n os: linux\n- lcores: \"\"\n ports:\n+ # sets up the physical link between \"TG 1\"@000:00:08.0 and \"SUT 1\"@0000:00:08.0\n - pci: \"0000:00:08.0\"\n os_driver_for_dpdk: rdma\n os_driver: rdma\n peer_node: \"SUT 1\"\n peer_pci: \"0000:00:08.0\"\n+ # sets up the physical link between \"SUT 1\"@000:00:08.0 and \"TG 1\"@0000:00:08.0\n - pci: \"0000:00:08.1\"\n os_driver_for_dpdk: rdma\n os_driver: rdma\n peer_node: \"SUT 1\"\n peer_pci: \"0000:00:08.1\"\n- use_first_core: false\n hugepages: # optional; if removed, will use system hugepage configuration\n amount: 256\n force_first_numa: false\n", "prefixes": [] }{ "id": 135706, "url": "