From 1c1d5cbe67254f0457d8f27acb32882eded47b67 Mon Sep 17 00:00:00 2001 From: Peter Mikus Date: Thu, 23 Apr 2020 16:10:06 +0000 Subject: [PATCH] Performance: MLX best practice - Part II Signed-off-by: Peter Mikus Change-Id: I869a3d7e051dcbae3a230d4646219e70e5de2e87 --- resources/libraries/python/InterfaceUtil.py | 43 +++++++++++++++++++++-- resources/libraries/robot/shared/interfaces.robot | 13 +++++-- 2 files changed, 52 insertions(+), 4 deletions(-) diff --git a/resources/libraries/python/InterfaceUtil.py b/resources/libraries/python/InterfaceUtil.py index 5bb6264676..bfc0ba7a08 100644 --- a/resources/libraries/python/InterfaceUtil.py +++ b/resources/libraries/python/InterfaceUtil.py @@ -25,7 +25,7 @@ from resources.libraries.python.IPAddress import IPAddress from resources.libraries.python.L2Util import L2Util from resources.libraries.python.PapiExecutor import PapiSocketExecutor from resources.libraries.python.parsers.JsonParser import JsonParser -from resources.libraries.python.ssh import SSH, exec_cmd_no_error +from resources.libraries.python.ssh import SSH, exec_cmd, exec_cmd_no_error from resources.libraries.python.topology import NodeType, Topology from resources.libraries.python.VPPUtil import VPPUtil @@ -229,7 +229,7 @@ class InterfaceUtil: @staticmethod def set_interface_mtu(node, pf_pcis, mtu=9200): - """Set Ethernet MTU for specified interface. + """Set Ethernet MTU for specified interfaces. :param node: Topology node. :param pf_pcis: List of node's interfaces PCI addresses. @@ -237,12 +237,51 @@ class InterfaceUtil: :type nodes: dict :type pf_pcis: list :type mtu: int + :raises RuntimeError: If failed to set MTU on interface. """ for pf_pci in pf_pcis: pf_eth = InterfaceUtil.pci_to_eth(node, pf_pci) cmd = f"ip link set {pf_eth} mtu {mtu}" exec_cmd_no_error(node, cmd, sudo=True) + @staticmethod + def set_interface_flow_control(node, pf_pcis, rx=u"off", tx=u"off"): + """Set Ethernet flow control for specified interfaces. + + :param node: Topology node. + :param pf_pcis: List of node's interfaces PCI addresses. + :param rx: RX flow. Default: off. + :param tx: TX flow. Default: off. + :type nodes: dict + :type pf_pcis: list + :type rx: str + :type tx: str + """ + for pf_pci in pf_pcis: + pf_eth = InterfaceUtil.pci_to_eth(node, pf_pci) + cmd = f"ethtool -A {pf_eth} rx off tx off" + ret_code, _, _ = exec_cmd(node, cmd, sudo=True) + if int(ret_code) not in (0, 78): + raise RuntimeError("Failed to set MTU on {pf_eth}!") + + + @staticmethod + def set_pci_parameter(node, pf_pcis, key, value): + """Set PCI parameter for specified interfaces. + + :param node: Topology node. + :param pf_pcis: List of node's interfaces PCI addresses. + :param key: Key to set. + :param value: Value to set. + :type nodes: dict + :type pf_pcis: list + :type key: str + :type value: str + """ + for pf_pci in pf_pcis: + cmd = f"setpci -s {pf_pci} {key}={value}" + exec_cmd_no_error(node, cmd, sudo=True) + @staticmethod def vpp_set_interface_mtu(node, interface, mtu=9200): """Set Ethernet MTU on interface. diff --git a/resources/libraries/robot/shared/interfaces.robot b/resources/libraries/robot/shared/interfaces.robot index 195ba10472..7d27ac563c 100644 --- a/resources/libraries/robot/shared/interfaces.robot +++ b/resources/libraries/robot/shared/interfaces.robot @@ -145,9 +145,14 @@ | Pre-initialize layer rdma-core on all DUTs | | [Documentation] -| | ... | Pre-initialize rdma-core driver. Currently no operation. +| | ... | Pre-initialize rdma-core driver. | | -| | No operation +| | FOR | ${dut} | IN | @{duts} +| | | Set Interface Flow Control +| | | ... | ${nodes['${dut}']} | ${${dut}_pf_pci} | rx="off" | tx="off" +| | | Set PCI Parameter +| | | ... | ${nodes['${dut}']} | ${${dut}_pf_pci} | key="68.w" | value="3BCD" +| | END | Pre-initialize layer mlx5_core on all DUTs | | [Documentation] @@ -158,6 +163,10 @@ | | | ... | Set Interface MTU | ${nodes['${dut}']} | ${${dut}_pf_pci} | mtu=9200 | | | ... | ELSE | | | ... | Set Interface MTU | ${nodes['${dut}']} | ${${dut}_pf_pci} | mtu=1500 +| | | Set Interface Flow Control +| | | ... | ${nodes['${dut}']} | ${${dut}_pf_pci} | rx="off" | tx="off" +| | | Set PCI Parameter +| | | ... | ${nodes['${dut}']} | ${${dut}_pf_pci} | key="68.w" | value="3BCD" | | END | Initialize layer driver -- 2.16.6