diff options
author | Peter Mikus <pmikus@cisco.com> | 2020-01-30 13:45:11 +0000 |
---|---|---|
committer | Peter Mikus <pmikus@cisco.com> | 2020-01-31 15:57:36 +0000 |
commit | 6bcf4d40d83bbf026f9fd0105bebf579423c65a6 (patch) | |
tree | f223e6562f15fc7544b339d3317d2a42ae073588 /resources/libraries/python/InterfaceUtil.py | |
parent | 47a26ef592c8b3f321fd69e053748606feba09f5 (diff) |
T-Rex: CPU pinning
+ Detect NUMA
+ Pin based on numa location
Signed-off-by: Peter Mikus <pmikus@cisco.com>
Change-Id: Ife350f8c70e5437ac7c1413c7753f2a2f62777d9
Diffstat (limited to 'resources/libraries/python/InterfaceUtil.py')
-rw-r--r-- | resources/libraries/python/InterfaceUtil.py | 92 |
1 files changed, 10 insertions, 82 deletions
diff --git a/resources/libraries/python/InterfaceUtil.py b/resources/libraries/python/InterfaceUtil.py index 0f18f8f807..3e2e38ef81 100644 --- a/resources/libraries/python/InterfaceUtil.py +++ b/resources/libraries/python/InterfaceUtil.py @@ -113,8 +113,6 @@ class RdmaMode(IntEnum): class InterfaceUtil: """General utilities for managing interfaces""" - __UDEV_IF_RULES_FILE = u"/etc/udev/rules.d/10-network.rules" - @staticmethod def pci_to_int(pci_str): """Convert PCI address from string format (0000:18:0a.0) to @@ -542,45 +540,6 @@ class InterfaceUtil: return DUTSetup.get_pci_dev_driver(node, pci_addr) @staticmethod - def tg_set_interfaces_udev_rules(node): - """Set udev rules for interfaces. - - Create udev rules file in /etc/udev/rules.d where are rules for each - interface used by TG node, based on MAC interface has specific name. - So after unbind and bind again to kernel driver interface has same - name as before. This must be called after TG has set name for each - port in topology dictionary. - udev rule example - SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="52:54:00:e1:8a:0f", - NAME="eth1" - - :param node: Node to set udev rules on (must be TG node). - :type node: dict - :raises RuntimeError: If setting of udev rules fails. - """ - ssh = SSH() - ssh.connect(node) - - cmd = f"rm -f {InterfaceUtil.__UDEV_IF_RULES_FILE}" - ret_code, _, _ = ssh.exec_command_sudo(cmd) - if int(ret_code) != 0: - raise RuntimeError(f"'{cmd}' failed on '{node[u'host']}'") - - for interface in node[u"interfaces"].values(): - rule = u'SUBSYSTEM==\\"net\\", ACTION==\\"add\\", ATTR{address}' + \ - u'==\\"' + interface[u"mac_address"] + u'\\", NAME=\\"' + \ - interface[u"name"] + u'\\"' - cmd = f"sh -c \"echo '{rule}'\" >> " \ - f"{InterfaceUtil.__UDEV_IF_RULES_FILE}'" - - ret_code, _, _ = ssh.exec_command_sudo(cmd) - if int(ret_code) != 0: - raise RuntimeError(f"'{cmd}' failed on '{node[u'host']}'") - - cmd = u"/etc/init.d/udev restart" - ssh.exec_command_sudo(cmd) - - @staticmethod def tg_set_interfaces_default_driver(node): """Set interfaces default driver specified in topology yaml file. @@ -667,7 +626,7 @@ class InterfaceUtil: InterfaceUtil.update_nic_interface_names(node) @staticmethod - def update_tg_interface_data_on_node(node, skip_tg_udev=False): + def update_tg_interface_data_on_node(node): """Update interface name for TG/linux node in DICT__nodes. .. note:: @@ -679,9 +638,7 @@ class InterfaceUtil: "00:00:00:00:00:00": "lo" :param node: Node selected from DICT__nodes. - :param skip_tg_udev: Skip udev rename on TG node. :type node: dict - :type skip_tg_udev: bool :raises RuntimeError: If getting of interface name and MAC fails. """ # First setup interface driver specified in yaml file @@ -706,10 +663,6 @@ class InterfaceUtil: continue interface[u"name"] = name - # Set udev rules for interfaces - if not skip_tg_udev: - InterfaceUtil.tg_set_interfaces_udev_rules(node) - @staticmethod def iface_update_numa_node(node): """For all interfaces from topology file update numa node based on @@ -752,25 +705,8 @@ class InterfaceUtil: raise RuntimeError(f"Update numa node failed for: {if_pci}") @staticmethod - def update_all_numa_nodes(nodes, skip_tg=False): - """For all nodes and all their interfaces from topology file update numa - node information based on information from the node. - - :param nodes: Nodes in the topology. - :param skip_tg: Skip TG node - :type nodes: dict - :type skip_tg: bool - :returns: Nothing. - """ - for node in nodes.values(): - if node[u"type"] == NodeType.DUT: - InterfaceUtil.iface_update_numa_node(node) - elif node[u"type"] == NodeType.TG and not skip_tg: - InterfaceUtil.iface_update_numa_node(node) - - @staticmethod def update_all_interface_data_on_all_nodes( - nodes, skip_tg=False, skip_tg_udev=False, numa_node=False): + nodes, skip_tg=False, skip_vpp=False): """Update interface names on all nodes in DICT__nodes. This method updates the topology dictionary by querying interface lists @@ -778,25 +714,17 @@ class InterfaceUtil: :param nodes: Nodes in the topology. :param skip_tg: Skip TG node. - :param skip_tg_udev: Skip udev rename on TG node. - :param numa_node: Retrieve numa_node location. + :param skip_vpp: Skip VPP node. :type nodes: dict :type skip_tg: bool - :type skip_tg_udev: bool - :type numa_node: bool + :type skip_vpp: bool """ - for node_data in nodes.values(): - if node_data[u"type"] == NodeType.DUT: - InterfaceUtil.update_vpp_interface_data_on_node(node_data) - elif node_data[u"type"] == NodeType.TG and not skip_tg: - InterfaceUtil.update_tg_interface_data_on_node( - node_data, skip_tg_udev) - - if numa_node: - if node_data[u"type"] == NodeType.DUT: - InterfaceUtil.iface_update_numa_node(node_data) - elif node_data[u"type"] == NodeType.TG and not skip_tg: - InterfaceUtil.iface_update_numa_node(node_data) + for node in nodes.values(): + if node[u"type"] == NodeType.DUT and not skip_vpp: + InterfaceUtil.update_vpp_interface_data_on_node(node) + elif node[u"type"] == NodeType.TG and not skip_tg: + InterfaceUtil.update_tg_interface_data_on_node(node) + InterfaceUtil.iface_update_numa_node(node) @staticmethod def create_vlan_subinterface(node, interface, vlan): |