From 49b7a658766c62dc15d094c35437c7269e433cfc Mon Sep 17 00:00:00 2001 From: Kunhui-Li Date: Mon, 10 Jan 2022 14:06:17 +0800 Subject: [PATCH] config_tools: update the usage of cpu affinity param in launch script Update the usage of cpu affinity param in launch script generation logic, use apic_id got from board XML file instead of pcpu id from scenario XML file according to the refined usage '--cpu_affinity lapic_id'. The generated script will look like this: `--cpu_affinity 0,2 \` Tracked-On: #6690 Signed-off-by: Kunhui-Li --- misc/config_tools/launch_config/com.py | 30 ++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/misc/config_tools/launch_config/com.py b/misc/config_tools/launch_config/com.py index 4cf67ede9..7bd797316 100644 --- a/misc/config_tools/launch_config/com.py +++ b/misc/config_tools/launch_config/com.py @@ -5,6 +5,7 @@ import scenario_cfg_lib import launch_cfg_lib +import lxml.etree import common import pt @@ -531,10 +532,35 @@ def get_cpu_affinity_list(cpu_affinity, vmid): return pcpu_id_list +def get_apic_id_list(scenario_pcpu_id_list): + + apic_id_list = [] + board_etree = lxml.etree.parse(common.BOARD_INFO_FILE) + board_root = board_etree.getroot() + board_pcpu_list = board_root.find('CPU_PROCESSOR_INFO').text.strip().split(',') + if isinstance(board_pcpu_list, list): + board_pcpu_list = [cpu.strip() for cpu in board_pcpu_list] + + if scenario_pcpu_id_list is not None: + for scenario_pcup_id in scenario_pcpu_id_list: + if scenario_pcup_id not in board_pcpu_list: + key = "scenario config error" + launch_cfg_lib.ERR_LIST[key] = "No available cpu {} in {} file.".format(scenario_pcup_id, common.BOARD_INFO_FILE) + + for pcpu_id in scenario_pcpu_id_list: + apic_id = common.get_node(f"//processors/die/core/thread[cpu_id='{pcpu_id}']/apic_id/text()", board_etree) + apic_id_list.append(int(apic_id, 16)) + + return apic_id_list + + def pcpu_arg_set(dm, vmid, config): + pcpu_id_list = get_cpu_affinity_list(dm["cpu_affinity"], vmid) - if pcpu_id_list: - print(" --cpu_affinity {} \\".format(','.join(pcpu_id_list)), file=config) + apic_id_list = get_apic_id_list(pcpu_id_list) + + if apic_id_list: + print(" --cpu_affinity {} \\".format(','.join([str(id) for id in apic_id_list])), file=config) def dm_arg_set(names, sel, virt_io, dm, sriov, vmid, config):