Skip to content

Commit ce35a00

Browse files
Wei Liuwenlingz
authored andcommitted
acrn-config: add 'cpu_sharing' support for launch config
Add support to parse and get 'cpu_sharing' item value from launch config files, these values are editable by user. Tracked-On: #3854 Signed-off-by: Wei Liu <weix.w.liu@intel.com> Acked-by: Victor Sun <victor.sun@intel.com>
1 parent 3544f7c commit ce35a00

File tree

4 files changed

+45
-1
lines changed

4 files changed

+45
-1
lines changed

misc/acrn-config/launch_config/com.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -382,7 +382,8 @@ def launch_end(names, args, virt_io, vmid, config):
382382
print("", file=config)
383383
i += 1
384384

385-
off_line_cpus(args, vmid, uos_type, config)
385+
if args['cpu_sharing'][vmid] == "Disabled":
386+
off_line_cpus(args, vmid, uos_type, config)
386387

387388
uos_launch(names, args, virt_io, vmid, config)
388389

misc/acrn-config/launch_config/launch_cfg_gen.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ def get_launch_item_values(board_info):
4646

4747
launch_item_values["uos,vbootloader"] = launch_cfg_lib.BOOT_TYPE
4848
launch_item_values['uos,vuart0'] = launch_cfg_lib.DM_VUART0
49+
launch_item_values['uos,cpu_sharing'] = launch_cfg_lib.CPU_SHARING
4950
launch_item_values['uos,poweroff_channel'] = launch_cfg_lib.PM_CHANNEL
5051

5152
return launch_item_values

misc/acrn-config/launch_config/launch_item.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ def get_args(self):
2020
self.args["gvt_args"] = launch_cfg_lib.get_leaf_tag_map(self.launch_info, "gvt_args")
2121
self.args["vbootloader"] = launch_cfg_lib.get_leaf_tag_map(self.launch_info, "vbootloader")
2222
self.args["vuart0"] = launch_cfg_lib.get_leaf_tag_map(self.launch_info, "vuart0")
23+
self.args["cpu_sharing"] = launch_cfg_lib.get_leaf_tag_map(self.launch_info, "cpu_sharing")
2324
self.args["pm_channel"] = launch_cfg_lib.get_leaf_tag_map(self.launch_info, "poweroff_channel")
2425
self.args["off_pcpus"] = launch_cfg_lib.get_leaf_tag_map(self.scenario_info, "vcpu_affinity", "pcpu_id")
2526
self.args["xhci"] = launch_cfg_lib.get_leaf_tag_map(self.launch_info, "usb_xhci")
@@ -31,6 +32,7 @@ def check_item(self):
3132
launch_cfg_lib.mem_size_check(self.args["mem_size"], "mem_size")
3233
launch_cfg_lib.args_aval_check(self.args["vbootloader"], "vbootloader", launch_cfg_lib.BOOT_TYPE)
3334
launch_cfg_lib.args_aval_check(self.args["vuart0"], "vuart0", launch_cfg_lib.DM_VUART0)
35+
launch_cfg_lib.cpu_sharing_check(self.args["cpu_sharing"], "cpu_sharing")
3436

3537

3638
class AvailablePthru():

misc/acrn-config/library/launch_cfg_lib.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
BOOT_TYPE = ['no', 'vsbl', 'ovmf']
1717
RTOS_TYPE = ['no', 'Soft RT', 'Hard RT']
1818
DM_VUART0 = ['Disable', 'Enable']
19+
CPU_SHARING = ['Disabled', 'Enabled']
1920
UOS_TYPES = ['CLEARLINUX', 'ANDROID', 'ALIOS', 'PREEMPT-RT LINUX', 'VXWORKS', 'WINDOWS', 'ZEPHYR', 'GENERIC LINUX']
2021

2122
PT_SUB_PCI = {}
@@ -643,3 +644,42 @@ def check_block_mount(virtio_blk_dic):
643644
mount_flags.append(False)
644645

645646
MOUNT_FLAG_DIC[vmid] = mount_flags
647+
648+
649+
def cpu_sharing_check(cpu_sharing, item):
650+
"""
651+
Check cpu sharing status with cpu affinity setting
652+
:param cpu_share_status:
653+
:param item:
654+
:return: None
655+
"""
656+
use_cpus = []
657+
use_same_cpu = False
658+
vm_cpu_share = []
659+
vm_cpu_share_consistent = True
660+
661+
cpu_affinity = get_leaf_tag_map(SCENARIO_INFO_FILE, "vcpu_affinity", "pcpu_id")
662+
for vm_i in cpu_affinity.keys():
663+
for cpu in cpu_affinity[vm_i]:
664+
if cpu in use_cpus:
665+
use_same_cpu = True
666+
else:
667+
use_cpus.append(cpu)
668+
669+
for vm_i in cpu_sharing.keys():
670+
cpu_share = cpu_sharing[vm_i]
671+
stat_len = len(vm_cpu_share)
672+
if stat_len != 0 and cpu_share not in vm_cpu_share:
673+
vm_cpu_share_consistent = False
674+
else:
675+
vm_cpu_share.append(cpu_share)
676+
677+
if not vm_cpu_share_consistent:
678+
key = "uos:id={},{}".format(vm_i, item)
679+
ERR_LIST[key] = "CPU sharing for all VMs should be consistent to 'Disabled' or 'Enabled'"
680+
return
681+
682+
if cpu_sharing[vm_i] == "Disabled" and use_same_cpu:
683+
key = "uos:id={},{}".format(vm_i, item)
684+
ERR_LIST[key] = "The same pcpu was configurated in scenario config, and not allow to set the cpu_sharing to 'Disabled'!"
685+
return

0 commit comments

Comments
 (0)