mirror of
https://github.com/projectacrn/acrn-hypervisor.git
synced 2026-01-05 23:57:10 +00:00
hv/config-tools: add the support for vCAT
Add the VCAT_ENABLED element to RDTType so that user can enable/disable vCAT globally
Add the GUEST_FLAG_VCAT_ENABLED guest flag to enable/disable vCAT per-VM.
Currently we have the following per-VM clos element in scenario file for RDT use:
<clos>
<vcpu_clos>0</vcpu_clos>
<vcpu_clos>0</vcpu_clos>
</clos>
When the GUEST_FLAG_VCAT_ENABLED guest flag is not specified, clos is for RDT use,
vcpu_clos is per-CPU and it configures each CPU in VMs to a desired CLOS ID.
When the GUEST_FLAG_VCAT_ENABLED guest flag is specified, vCAT is enabled for this VM,
clos is for vCAT use, vcpu_clos is not per-CPU anymore in this case, just a list of
physical CLOSIDs (minimum 2) that are assigned to VMs for vCAT use. Each vcpu_clos
will be mapped to a virtual CLOSID, the first vcpu_clos is mapped to virtual CLOSID
0 and the second is mapped to virtual CLOSID 1, etc
Add xs:assert to prevent any problems with invalid configuration data for vCAT:
If any GUEST_FLAG_VCAT_ENABLED guest flag is specified, both RDT_ENABLED and VCAT_ENABLED
must be 'y'
If VCAT_ENABLED is 'y', RDT_ENABLED must be 'y' and CDP_ENABLED must be 'n'
For a vCAT VM, vcpu_clos cannot be set to CLOSID 0, CLOSID 0 is reserved to be used by hypervisor
For a vCAT VM, number of clos/vcpu_clos elements must be greater than 1
For a vCAT VM, each clos/vcpu_clos must be less than L2/L3 COS_MAX
For a vCAT VM, its clos/vcpu_clos elements cannot contain duplicate values
There should not be any CLOS IDs overlap between a vCAT VM and any other VMs
Tracked-On: #5917
Signed-off-by: dongshen <dongsheng.x.zhang@intel.com>
Acked-by: Eddie Dong <eddie.dong@intel.com>
This commit is contained in:
@@ -1044,7 +1044,7 @@ def check_target_connection(vm_id, target_vm_id, target_uart_id, vm_visited, leg
|
||||
raise TargetError("target vm{}'s vuart{} is not present".format(target_vm_id ,target_uart_id))
|
||||
|
||||
|
||||
def vcpu_clos_check(cpus_per_vm, clos_per_vm, prime_item, item):
|
||||
def vcpu_clos_check(cpus_per_vm, clos_per_vm, guest_flags, prime_item, item):
|
||||
|
||||
if not board_cfg_lib.is_rdt_enabled():
|
||||
return
|
||||
@@ -1052,6 +1052,9 @@ def vcpu_clos_check(cpus_per_vm, clos_per_vm, prime_item, item):
|
||||
common_clos_max = board_cfg_lib.get_common_clos_max()
|
||||
|
||||
for vm_i,vcpus in cpus_per_vm.items():
|
||||
if vm_i in guest_flags and "GUEST_FLAG_VCAT_ENABLED" in guest_flags[vm_i]:
|
||||
continue
|
||||
|
||||
clos_per_vm_len = 0
|
||||
if vm_i in clos_per_vm:
|
||||
clos_per_vm_len = len(clos_per_vm[vm_i])
|
||||
|
||||
Reference in New Issue
Block a user