config_tools: track whether each vCPU is used for real-time or not

According to DX recommendations, this patch adds a Boolean item to each
vCPU which allows users to specify the vCPUs intended for
real-time-critical tasks. This information will be used to organize other
widgets (CAT-related ones for now) in the configurator to tell apart
real-time ones from the others for better clarity.

All vCPUs are by default not real-time-critical, except those in the RT VMs
which are.

Tracked-On: #6690
Signed-off-by: Junjie Mao <junjie.mao@intel.com>
This commit is contained in:
Junjie Mao 2022-04-19 14:28:27 +08:00 committed by acrnsi-robot
parent 7ca33206fb
commit 4fe6cae877
31 changed files with 621 additions and 196 deletions

View File

@ -807,7 +807,7 @@ def main(args):
if mmio_dev_node is not None and mmio_dev_node.text.strip() == 'y':
dict_passthru_devices[vm_id].append(mmio_dev_node.tag)
dict_pcpu_list[vm_id] = []
for pcpu_id in vm.findall('cpu_affinity/pcpu_id'):
for pcpu_id in vm.findall('cpu_affinity//pcpu_id'):
if pcpu_id is not None and pcpu_id.text.strip() in pcpu_list:
dict_pcpu_list[vm_id].append(int(pcpu_id.text))

View File

@ -69,7 +69,9 @@
<vm_type>STANDARD_VM</vm_type>
<name>SAFETY_VM0</name>
<cpu_affinity>
<pcpu_id>3</pcpu_id>
<pcpu>
<pcpu_id>3</pcpu_id>
</pcpu>
</cpu_affinity>
<clos>
<vcpu_clos>0</vcpu_clos>
@ -102,9 +104,15 @@
<vm_type>STANDARD_VM</vm_type>
<name>ACRN_Service_VM</name>
<cpu_affinity>
<pcpu_id>0</pcpu_id>
<pcpu_id>1</pcpu_id>
<pcpu_id>2</pcpu_id>
<pcpu>
<pcpu_id>0</pcpu_id>
</pcpu>
<pcpu>
<pcpu_id>1</pcpu_id>
</pcpu>
<pcpu>
<pcpu_id>2</pcpu_id>
</pcpu>
</cpu_affinity>
<clos>
<vcpu_clos>0</vcpu_clos>
@ -129,7 +137,9 @@
<vm_type>STANDARD_VM</vm_type>
<name>POST_STD_VM1</name>
<cpu_affinity>
<pcpu_id>2</pcpu_id>
<pcpu>
<pcpu_id>2</pcpu_id>
</pcpu>
</cpu_affinity>
<clos>
<vcpu_clos>0</vcpu_clos>
@ -161,7 +171,9 @@
<vm_type>STANDARD_VM</vm_type>
<name>POST_STD_VM2</name>
<cpu_affinity>
<pcpu_id>2</pcpu_id>
<pcpu>
<pcpu_id>2</pcpu_id>
</pcpu>
</cpu_affinity>
<clos>
<vcpu_clos>0</vcpu_clos>

View File

@ -78,8 +78,14 @@
<name>PRE_RT_VM0</name>
<lapic_passthrough>y</lapic_passthrough>
<cpu_affinity>
<pcpu_id>6</pcpu_id>
<pcpu_id>7</pcpu_id>
<pcpu>
<pcpu_id>6</pcpu_id>
<real_time_vcpu>y</real_time_vcpu>
</pcpu>
<pcpu>
<pcpu_id>7</pcpu_id>
<real_time_vcpu>y</real_time_vcpu>
</pcpu>
</cpu_affinity>
<clos>
<vcpu_clos>0</vcpu_clos>
@ -118,12 +124,24 @@
<vm_type>STANDARD_VM</vm_type>
<name>ACRN_Service_VM</name>
<cpu_affinity>
<pcpu_id>0</pcpu_id>
<pcpu_id>1</pcpu_id>
<pcpu_id>2</pcpu_id>
<pcpu_id>3</pcpu_id>
<pcpu_id>4</pcpu_id>
<pcpu_id>5</pcpu_id>
<pcpu>
<pcpu_id>0</pcpu_id>
</pcpu>
<pcpu>
<pcpu_id>1</pcpu_id>
</pcpu>
<pcpu>
<pcpu_id>2</pcpu_id>
</pcpu>
<pcpu>
<pcpu_id>3</pcpu_id>
</pcpu>
<pcpu>
<pcpu_id>4</pcpu_id>
</pcpu>
<pcpu>
<pcpu_id>5</pcpu_id>
</pcpu>
</cpu_affinity>
<clos>
<vcpu_clos>0</vcpu_clos>
@ -149,9 +167,15 @@
<vm_type>STANDARD_VM</vm_type>
<name>POST_STD_VM1</name>
<cpu_affinity>
<pcpu_id>1</pcpu_id>
<pcpu_id>2</pcpu_id>
<pcpu_id>3</pcpu_id>
<pcpu>
<pcpu_id>1</pcpu_id>
</pcpu>
<pcpu>
<pcpu_id>2</pcpu_id>
</pcpu>
<pcpu>
<pcpu_id>3</pcpu_id>
</pcpu>
</cpu_affinity>
<clos>
<vcpu_clos>0</vcpu_clos>
@ -166,8 +190,12 @@
<vm_type>STANDARD_VM</vm_type>
<name>POST_STD_VM2</name>
<cpu_affinity>
<pcpu_id>4</pcpu_id>
<pcpu_id>5</pcpu_id>
<pcpu>
<pcpu_id>4</pcpu_id>
</pcpu>
<pcpu>
<pcpu_id>5</pcpu_id>
</pcpu>
</cpu_affinity>
<clos>
<vcpu_clos>0</vcpu_clos>

View File

@ -69,8 +69,12 @@
<vm_type>STANDARD_VM</vm_type>
<name>PRE_STD_VM0</name>
<cpu_affinity>
<pcpu_id>0</pcpu_id>
<pcpu_id>2</pcpu_id>
<pcpu>
<pcpu_id>0</pcpu_id>
</pcpu>
<pcpu>
<pcpu_id>2</pcpu_id>
</pcpu>
</cpu_affinity>
<clos>
<vcpu_clos>0</vcpu_clos>
@ -107,8 +111,12 @@
<vm_type>STANDARD_VM</vm_type>
<name>PRE_STD_VM1</name>
<cpu_affinity>
<pcpu_id>1</pcpu_id>
<pcpu_id>3</pcpu_id>
<pcpu>
<pcpu_id>1</pcpu_id>
</pcpu>
<pcpu>
<pcpu_id>3</pcpu_id>
</pcpu>
</cpu_affinity>
<clos>
<vcpu_clos>0</vcpu_clos>

View File

@ -81,8 +81,12 @@
<vm_type>STANDARD_VM</vm_type>
<name>POST_STD_VM1</name>
<cpu_affinity>
<pcpu_id>0</pcpu_id>
<pcpu_id>1</pcpu_id>
<pcpu>
<pcpu_id>0</pcpu_id>
</pcpu>
<pcpu>
<pcpu_id>1</pcpu_id>
</pcpu>
</cpu_affinity>
<clos>
<vcpu_clos>0</vcpu_clos>
@ -116,8 +120,14 @@
<name>POST_RT_VM1</name>
<lapic_passthrough>y</lapic_passthrough>
<cpu_affinity>
<pcpu_id>2</pcpu_id>
<pcpu_id>3</pcpu_id>
<pcpu>
<pcpu_id>2</pcpu_id>
<real_time_vcpu>y</real_time_vcpu>
</pcpu>
<pcpu>
<pcpu_id>3</pcpu_id>
<real_time_vcpu>y</real_time_vcpu>
</pcpu>
</cpu_affinity>
<clos>
<vcpu_clos>0</vcpu_clos>
@ -150,8 +160,12 @@
<vm_type>STANDARD_VM</vm_type>
<name>POST_STD_VM2</name>
<cpu_affinity>
<pcpu_id>0</pcpu_id>
<pcpu_id>1</pcpu_id>
<pcpu>
<pcpu_id>0</pcpu_id>
</pcpu>
<pcpu>
<pcpu_id>1</pcpu_id>
</pcpu>
</cpu_affinity>
<clos>
<vcpu_clos>0</vcpu_clos>
@ -184,8 +198,12 @@
<vm_type>STANDARD_VM</vm_type>
<name>POST_STD_VM3</name>
<cpu_affinity>
<pcpu_id>0</pcpu_id>
<pcpu_id>1</pcpu_id>
<pcpu>
<pcpu_id>0</pcpu_id>
</pcpu>
<pcpu>
<pcpu_id>1</pcpu_id>
</pcpu>
</cpu_affinity>
<clos>
<vcpu_clos>0</vcpu_clos>
@ -218,8 +236,12 @@
<vm_type>STANDARD_VM</vm_type>
<name>POST_STD_VM4</name>
<cpu_affinity>
<pcpu_id>0</pcpu_id>
<pcpu_id>1</pcpu_id>
<pcpu>
<pcpu_id>0</pcpu_id>
</pcpu>
<pcpu>
<pcpu_id>1</pcpu_id>
</pcpu>
</cpu_affinity>
<clos>
<vcpu_clos>0</vcpu_clos>
@ -252,8 +274,12 @@
<vm_type>STANDARD_VM</vm_type>
<name>POST_STD_VM5</name>
<cpu_affinity>
<pcpu_id>0</pcpu_id>
<pcpu_id>1</pcpu_id>
<pcpu>
<pcpu_id>0</pcpu_id>
</pcpu>
<pcpu>
<pcpu_id>1</pcpu_id>
</pcpu>
</cpu_affinity>
<clos>
<vcpu_clos>0</vcpu_clos>

View File

@ -69,7 +69,9 @@
<vm_type>STANDARD_VM</vm_type>
<name>SAFETY_VM0</name>
<cpu_affinity>
<pcpu_id>3</pcpu_id>
<pcpu>
<pcpu_id>3</pcpu_id>
</pcpu>
</cpu_affinity>
<clos>
<vcpu_clos>0</vcpu_clos>
@ -103,9 +105,15 @@
<vm_type>STANDARD_VM</vm_type>
<name>ACRN_Service_VM</name>
<cpu_affinity>
<pcpu_id>0</pcpu_id>
<pcpu_id>1</pcpu_id>
<pcpu_id>2</pcpu_id>
<pcpu>
<pcpu_id>0</pcpu_id>
</pcpu>
<pcpu>
<pcpu_id>1</pcpu_id>
</pcpu>
<pcpu>
<pcpu_id>2</pcpu_id>
</pcpu>
</cpu_affinity>
<clos>
<vcpu_clos>0</vcpu_clos>
@ -129,7 +137,9 @@
<vm_type>STANDARD_VM</vm_type>
<name>POST_STD_VM1</name>
<cpu_affinity>
<pcpu_id>2</pcpu_id>
<pcpu>
<pcpu_id>2</pcpu_id>
</pcpu>
</cpu_affinity>
<clos>
<vcpu_clos>0</vcpu_clos>
@ -161,7 +171,9 @@
<vm_type>STANDARD_VM</vm_type>
<name>POST_STD_VM2</name>
<cpu_affinity>
<pcpu_id>2</pcpu_id>
<pcpu>
<pcpu_id>2</pcpu_id>
</pcpu>
</cpu_affinity>
<clos>
<vcpu_clos>0</vcpu_clos>

View File

@ -91,8 +91,14 @@
<name>PRE_RT_VM0</name>
<lapic_passthrough>y</lapic_passthrough>
<cpu_affinity>
<pcpu_id>2</pcpu_id>
<pcpu_id>3</pcpu_id>
<pcpu>
<pcpu_id>2</pcpu_id>
<real_time_vcpu>y</real_time_vcpu>
</pcpu>
<pcpu>
<pcpu_id>3</pcpu_id>
<real_time_vcpu>y</real_time_vcpu>
</pcpu>
</cpu_affinity>
<clos>
<vcpu_clos>0</vcpu_clos>
@ -128,8 +134,12 @@
<vm_type>STANDARD_VM</vm_type>
<name>ACRN_Service_VM</name>
<cpu_affinity>
<pcpu_id>0</pcpu_id>
<pcpu_id>1</pcpu_id>
<pcpu>
<pcpu_id>0</pcpu_id>
</pcpu>
<pcpu>
<pcpu_id>1</pcpu_id>
</pcpu>
</cpu_affinity>
<clos>
<vcpu_clos>0</vcpu_clos>
@ -152,8 +162,12 @@
<vm_type>STANDARD_VM</vm_type>
<name>POST_STD_VM1</name>
<cpu_affinity>
<pcpu_id>0</pcpu_id>
<pcpu_id>1</pcpu_id>
<pcpu>
<pcpu_id>0</pcpu_id>
</pcpu>
<pcpu>
<pcpu_id>1</pcpu_id>
</pcpu>
</cpu_affinity>
<clos>
<vcpu_clos>0</vcpu_clos>
@ -167,7 +181,9 @@
<vm_type>STANDARD_VM</vm_type>
<name>POST_STD_VM2</name>
<cpu_affinity>
<pcpu_id>1</pcpu_id>
<pcpu>
<pcpu_id>1</pcpu_id>
</pcpu>
</cpu_affinity>
<clos>
<vcpu_clos>0</vcpu_clos>

View File

@ -69,8 +69,12 @@
<vm_type>STANDARD_VM</vm_type>
<name>PRE_STD_VM0</name>
<cpu_affinity>
<pcpu_id>0</pcpu_id>
<pcpu_id>2</pcpu_id>
<pcpu>
<pcpu_id>0</pcpu_id>
</pcpu>
<pcpu>
<pcpu_id>2</pcpu_id>
</pcpu>
</cpu_affinity>
<clos>
<vcpu_clos>0</vcpu_clos>
@ -107,8 +111,12 @@
<vm_type>STANDARD_VM</vm_type>
<name>PRE_STD_VM1</name>
<cpu_affinity>
<pcpu_id>1</pcpu_id>
<pcpu_id>3</pcpu_id>
<pcpu>
<pcpu_id>1</pcpu_id>
</pcpu>
<pcpu>
<pcpu_id>3</pcpu_id>
</pcpu>
</cpu_affinity>
<clos>
<vcpu_clos>0</vcpu_clos>

View File

@ -89,8 +89,12 @@
<vm_type>STANDARD_VM</vm_type>
<name>POST_STD_VM1</name>
<cpu_affinity>
<pcpu_id>0</pcpu_id>
<pcpu_id>1</pcpu_id>
<pcpu>
<pcpu_id>0</pcpu_id>
</pcpu>
<pcpu>
<pcpu_id>1</pcpu_id>
</pcpu>
</cpu_affinity>
<clos>
<vcpu_clos>0</vcpu_clos>
@ -124,8 +128,14 @@
<name>POST_RT_VM1</name>
<lapic_passthrough>y</lapic_passthrough>
<cpu_affinity>
<pcpu_id>2</pcpu_id>
<pcpu_id>3</pcpu_id>
<pcpu>
<pcpu_id>2</pcpu_id>
<real_time_vcpu>y</real_time_vcpu>
</pcpu>
<pcpu>
<pcpu_id>3</pcpu_id>
<real_time_vcpu>y</real_time_vcpu>
</pcpu>
</cpu_affinity>
<clos>
<vcpu_clos>0</vcpu_clos>
@ -158,8 +168,12 @@
<vm_type>STANDARD_VM</vm_type>
<name>POST_STD_VM2</name>
<cpu_affinity>
<pcpu_id>0</pcpu_id>
<pcpu_id>1</pcpu_id>
<pcpu>
<pcpu_id>0</pcpu_id>
</pcpu>
<pcpu>
<pcpu_id>1</pcpu_id>
</pcpu>
</cpu_affinity>
<clos>
<vcpu_clos>0</vcpu_clos>
@ -192,8 +206,12 @@
<vm_type>STANDARD_VM</vm_type>
<name>POST_STD_VM3</name>
<cpu_affinity>
<pcpu_id>0</pcpu_id>
<pcpu_id>1</pcpu_id>
<pcpu>
<pcpu_id>0</pcpu_id>
</pcpu>
<pcpu>
<pcpu_id>1</pcpu_id>
</pcpu>
</cpu_affinity>
<clos>
<vcpu_clos>0</vcpu_clos>
@ -226,8 +244,12 @@
<vm_type>STANDARD_VM</vm_type>
<name>POST_STD_VM4</name>
<cpu_affinity>
<pcpu_id>0</pcpu_id>
<pcpu_id>1</pcpu_id>
<pcpu>
<pcpu_id>0</pcpu_id>
</pcpu>
<pcpu>
<pcpu_id>1</pcpu_id>
</pcpu>
</cpu_affinity>
<clos>
<vcpu_clos>0</vcpu_clos>
@ -260,8 +282,12 @@
<vm_type>STANDARD_VM</vm_type>
<name>POST_STD_VM5</name>
<cpu_affinity>
<pcpu_id>0</pcpu_id>
<pcpu_id>1</pcpu_id>
<pcpu>
<pcpu_id>0</pcpu_id>
</pcpu>
<pcpu>
<pcpu_id>1</pcpu_id>
</pcpu>
</cpu_affinity>
<clos>
<vcpu_clos>0</vcpu_clos>

View File

@ -69,7 +69,9 @@
<vm_type>STANDARD_VM</vm_type>
<name>SAFETY_VM0</name>
<cpu_affinity>
<pcpu_id>3</pcpu_id>
<pcpu>
<pcpu_id>3</pcpu_id>
</pcpu>
</cpu_affinity>
<clos>
<vcpu_clos>0</vcpu_clos>
@ -103,9 +105,15 @@
<vm_type>STANDARD_VM</vm_type>
<name>ACRN_Service_VM</name>
<cpu_affinity>
<pcpu_id>0</pcpu_id>
<pcpu_id>1</pcpu_id>
<pcpu_id>2</pcpu_id>
<pcpu>
<pcpu_id>0</pcpu_id>
</pcpu>
<pcpu>
<pcpu_id>1</pcpu_id>
</pcpu>
<pcpu>
<pcpu_id>2</pcpu_id>
</pcpu>
</cpu_affinity>
<clos>
<vcpu_clos>0</vcpu_clos>
@ -129,7 +137,9 @@
<vm_type>STANDARD_VM</vm_type>
<name>POST_STD_VM1</name>
<cpu_affinity>
<pcpu_id>2</pcpu_id>
<pcpu>
<pcpu_id>2</pcpu_id>
</pcpu>
</cpu_affinity>
<clos>
<vcpu_clos>0</vcpu_clos>
@ -161,7 +171,9 @@
<vm_type>STANDARD_VM</vm_type>
<name>POST_STD_VM2</name>
<cpu_affinity>
<pcpu_id>2</pcpu_id>
<pcpu>
<pcpu_id>2</pcpu_id>
</pcpu>
</cpu_affinity>
<clos>
<vcpu_clos>0</vcpu_clos>

View File

@ -69,8 +69,12 @@
<vm_type>STANDARD_VM</vm_type>
<name>PRE_STD_VM0</name>
<cpu_affinity>
<pcpu_id>0</pcpu_id>
<pcpu_id>2</pcpu_id>
<pcpu>
<pcpu_id>0</pcpu_id>
</pcpu>
<pcpu>
<pcpu_id>2</pcpu_id>
</pcpu>
</cpu_affinity>
<clos>
<vcpu_clos>0</vcpu_clos>
@ -107,8 +111,12 @@
<vm_type>STANDARD_VM</vm_type>
<name>PRE_STD_VM1</name>
<cpu_affinity>
<pcpu_id>1</pcpu_id>
<pcpu_id>3</pcpu_id>
<pcpu>
<pcpu_id>1</pcpu_id>
</pcpu>
<pcpu>
<pcpu_id>3</pcpu_id>
</pcpu>
</cpu_affinity>
<clos>
<vcpu_clos>0</vcpu_clos>

View File

@ -101,8 +101,12 @@
<vm_type>STANDARD_VM</vm_type>
<name>POST_STD_VM1</name>
<cpu_affinity>
<pcpu_id>0</pcpu_id>
<pcpu_id>1</pcpu_id>
<pcpu>
<pcpu_id>0</pcpu_id>
</pcpu>
<pcpu>
<pcpu_id>1</pcpu_id>
</pcpu>
</cpu_affinity>
<clos>
<vcpu_clos>0</vcpu_clos>
@ -136,8 +140,14 @@
<name>POST_RT_VM1</name>
<lapic_passthrough>y</lapic_passthrough>
<cpu_affinity>
<pcpu_id>2</pcpu_id>
<pcpu_id>3</pcpu_id>
<pcpu>
<pcpu_id>2</pcpu_id>
<real_time_vcpu>y</real_time_vcpu>
</pcpu>
<pcpu>
<pcpu_id>3</pcpu_id>
<real_time_vcpu>y</real_time_vcpu>
</pcpu>
</cpu_affinity>
<clos>
<vcpu_clos>0</vcpu_clos>
@ -170,8 +180,12 @@
<vm_type>STANDARD_VM</vm_type>
<name>POST_STD_VM2</name>
<cpu_affinity>
<pcpu_id>0</pcpu_id>
<pcpu_id>1</pcpu_id>
<pcpu>
<pcpu_id>0</pcpu_id>
</pcpu>
<pcpu>
<pcpu_id>1</pcpu_id>
</pcpu>
</cpu_affinity>
<clos>
<vcpu_clos>0</vcpu_clos>
@ -204,8 +218,12 @@
<vm_type>STANDARD_VM</vm_type>
<name>POST_STD_VM3</name>
<cpu_affinity>
<pcpu_id>0</pcpu_id>
<pcpu_id>1</pcpu_id>
<pcpu>
<pcpu_id>0</pcpu_id>
</pcpu>
<pcpu>
<pcpu_id>1</pcpu_id>
</pcpu>
</cpu_affinity>
<clos>
<vcpu_clos>0</vcpu_clos>
@ -238,8 +256,12 @@
<vm_type>STANDARD_VM</vm_type>
<name>POST_STD_VM4</name>
<cpu_affinity>
<pcpu_id>0</pcpu_id>
<pcpu_id>1</pcpu_id>
<pcpu>
<pcpu_id>0</pcpu_id>
</pcpu>
<pcpu>
<pcpu_id>1</pcpu_id>
</pcpu>
</cpu_affinity>
<clos>
<vcpu_clos>0</vcpu_clos>
@ -272,8 +294,12 @@
<vm_type>STANDARD_VM</vm_type>
<name>POST_STD_VM5</name>
<cpu_affinity>
<pcpu_id>0</pcpu_id>
<pcpu_id>1</pcpu_id>
<pcpu>
<pcpu_id>0</pcpu_id>
</pcpu>
<pcpu>
<pcpu_id>1</pcpu_id>
</pcpu>
</cpu_affinity>
<clos>
<vcpu_clos>0</vcpu_clos>

View File

@ -81,7 +81,9 @@
<vm_type>STANDARD_VM</vm_type>
<name>POST_STD_VM1</name>
<cpu_affinity>
<pcpu_id>1</pcpu_id>
<pcpu>
<pcpu_id>1</pcpu_id>
</pcpu>
</cpu_affinity>
<clos>
<vcpu_clos>0</vcpu_clos>

View File

@ -69,7 +69,9 @@
<vm_type>STANDARD_VM</vm_type>
<name>SAFETY_VM0</name>
<cpu_affinity>
<pcpu_id>3</pcpu_id>
<pcpu>
<pcpu_id>3</pcpu_id>
</pcpu>
</cpu_affinity>
<clos>
<vcpu_clos>0</vcpu_clos>
@ -103,9 +105,15 @@
<vm_type>STANDARD_VM</vm_type>
<name>ACRN_Service_VM</name>
<cpu_affinity>
<pcpu_id>0</pcpu_id>
<pcpu_id>1</pcpu_id>
<pcpu_id>2</pcpu_id>
<pcpu>
<pcpu_id>0</pcpu_id>
</pcpu>
<pcpu>
<pcpu_id>1</pcpu_id>
</pcpu>
<pcpu>
<pcpu_id>2</pcpu_id>
</pcpu>
</cpu_affinity>
<clos>
<vcpu_clos>0</vcpu_clos>
@ -130,7 +138,9 @@
<vm_type>STANDARD_VM</vm_type>
<name>POST_STD_VM1</name>
<cpu_affinity>
<pcpu_id>2</pcpu_id>
<pcpu>
<pcpu_id>2</pcpu_id>
</pcpu>
</cpu_affinity>
<clos>
<vcpu_clos>0</vcpu_clos>
@ -143,7 +153,9 @@
<vm_type>STANDARD_VM</vm_type>
<name>POST_STD_VM2</name>
<cpu_affinity>
<pcpu_id>2</pcpu_id>
<pcpu>
<pcpu_id>2</pcpu_id>
</pcpu>
</cpu_affinity>
<clos>
<vcpu_clos>0</vcpu_clos>

View File

@ -69,8 +69,12 @@
<vm_type>STANDARD_VM</vm_type>
<name>PRE_STD_VM0</name>
<cpu_affinity>
<pcpu_id>0</pcpu_id>
<pcpu_id>2</pcpu_id>
<pcpu>
<pcpu_id>0</pcpu_id>
</pcpu>
<pcpu>
<pcpu_id>2</pcpu_id>
</pcpu>
</cpu_affinity>
<clos>
<vcpu_clos>0</vcpu_clos>
@ -107,8 +111,12 @@
<vm_type>STANDARD_VM</vm_type>
<name>PRE_STD_VM1</name>
<cpu_affinity>
<pcpu_id>1</pcpu_id>
<pcpu_id>3</pcpu_id>
<pcpu>
<pcpu_id>1</pcpu_id>
</pcpu>
<pcpu>
<pcpu_id>3</pcpu_id>
</pcpu>
</cpu_affinity>
<clos>
<vcpu_clos>0</vcpu_clos>

View File

@ -102,8 +102,12 @@
<vm_type>STANDARD_VM</vm_type>
<name>POST_STD_VM1</name>
<cpu_affinity>
<pcpu_id>0</pcpu_id>
<pcpu_id>1</pcpu_id>
<pcpu>
<pcpu_id>0</pcpu_id>
</pcpu>
<pcpu>
<pcpu_id>1</pcpu_id>
</pcpu>
</cpu_affinity>
<clos>
<vcpu_clos>0</vcpu_clos>
@ -141,8 +145,14 @@
<name>POST_RT_VM1</name>
<lapic_passthrough>y</lapic_passthrough>
<cpu_affinity>
<pcpu_id>2</pcpu_id>
<pcpu_id>3</pcpu_id>
<pcpu>
<pcpu_id>2</pcpu_id>
<real_time_vcpu>y</real_time_vcpu>
</pcpu>
<pcpu>
<pcpu_id>3</pcpu_id>
<real_time_vcpu>y</real_time_vcpu>
</pcpu>
</cpu_affinity>
<clos>
<vcpu_clos>0</vcpu_clos>

View File

@ -61,7 +61,9 @@
<vm_type>STANDARD_VM</vm_type>
<name>SAFETY_VM0</name>
<cpu_affinity>
<pcpu_id>3</pcpu_id>
<pcpu>
<pcpu_id>3</pcpu_id>
</pcpu>
</cpu_affinity>
<clos>
<vcpu_clos>0</vcpu_clos>
@ -93,9 +95,15 @@
<vm_type>STANDARD_VM</vm_type>
<name>ACRN_Service_VM</name>
<cpu_affinity>
<pcpu_id>0</pcpu_id>
<pcpu_id>1</pcpu_id>
<pcpu_id>2</pcpu_id>
<pcpu>
<pcpu_id>0</pcpu_id>
</pcpu>
<pcpu>
<pcpu_id>1</pcpu_id>
</pcpu>
<pcpu>
<pcpu_id>2</pcpu_id>
</pcpu>
</cpu_affinity>
<clos>
<vcpu_clos>0</vcpu_clos>
@ -119,7 +127,9 @@
<vm_type>STANDARD_VM</vm_type>
<name>POST_STD_VM1</name>
<cpu_affinity>
<pcpu_id>2</pcpu_id>
<pcpu>
<pcpu_id>2</pcpu_id>
</pcpu>
</cpu_affinity>
<clos>
<vcpu_clos>0</vcpu_clos>

View File

@ -78,8 +78,14 @@
<name>PRE_RT_VM0</name>
<lapic_passthrough>y</lapic_passthrough>
<cpu_affinity>
<pcpu_id>2</pcpu_id>
<pcpu_id>3</pcpu_id>
<pcpu>
<pcpu_id>2</pcpu_id>
<real_time_vcpu>y</real_time_vcpu>
</pcpu>
<pcpu>
<pcpu_id>3</pcpu_id>
<real_time_vcpu>y</real_time_vcpu>
</pcpu>
</cpu_affinity>
<clos>
<vcpu_clos>0</vcpu_clos>
@ -118,8 +124,12 @@
<vm_type>STANDARD_VM</vm_type>
<name>ACRN_Service_VM</name>
<cpu_affinity>
<pcpu_id>0</pcpu_id>
<pcpu_id>1</pcpu_id>
<pcpu>
<pcpu_id>0</pcpu_id>
</pcpu>
<pcpu>
<pcpu_id>1</pcpu_id>
</pcpu>
</cpu_affinity>
<clos>
<vcpu_clos>0</vcpu_clos>
@ -142,8 +152,12 @@
<vm_type>STANDARD_VM</vm_type>
<name>POST_STD_VM1</name>
<cpu_affinity>
<pcpu_id>0</pcpu_id>
<pcpu_id>1</pcpu_id>
<pcpu>
<pcpu_id>0</pcpu_id>
</pcpu>
<pcpu>
<pcpu_id>1</pcpu_id>
</pcpu>
</cpu_affinity>
<clos>
<vcpu_clos>0</vcpu_clos>
@ -177,7 +191,9 @@
<vm_type>STANDARD_VM</vm_type>
<name>POST_STD_VM2</name>
<cpu_affinity>
<pcpu_id>1</pcpu_id>
<pcpu>
<pcpu_id>1</pcpu_id>
</pcpu>
</cpu_affinity>
<clos>
<vcpu_clos>0</vcpu_clos>

View File

@ -61,8 +61,12 @@
<vm_type>STANDARD_VM</vm_type>
<name>PRE_STD_VM0</name>
<cpu_affinity>
<pcpu_id>0</pcpu_id>
<pcpu_id>2</pcpu_id>
<pcpu>
<pcpu_id>0</pcpu_id>
</pcpu>
<pcpu>
<pcpu_id>2</pcpu_id>
</pcpu>
</cpu_affinity>
<clos>
<vcpu_clos>0</vcpu_clos>
@ -101,8 +105,12 @@
<vm_type>STANDARD_VM</vm_type>
<name>PRE_STD_VM1</name>
<cpu_affinity>
<pcpu_id>1</pcpu_id>
<pcpu_id>3</pcpu_id>
<pcpu>
<pcpu_id>1</pcpu_id>
</pcpu>
<pcpu>
<pcpu_id>3</pcpu_id>
</pcpu>
</cpu_affinity>
<clos>
<vcpu_clos>0</vcpu_clos>

View File

@ -81,8 +81,12 @@
<vm_type>STANDARD_VM</vm_type>
<name>POST_STD_VM1</name>
<cpu_affinity>
<pcpu_id>0</pcpu_id>
<pcpu_id>1</pcpu_id>
<pcpu>
<pcpu_id>0</pcpu_id>
</pcpu>
<pcpu>
<pcpu_id>1</pcpu_id>
</pcpu>
</cpu_affinity>
<clos>
<vcpu_clos>0</vcpu_clos>
@ -96,8 +100,14 @@
<name>POST_STD_VM1</name>
<lapic_passthrough>y</lapic_passthrough>
<cpu_affinity>
<pcpu_id>2</pcpu_id>
<pcpu_id>3</pcpu_id>
<pcpu>
<pcpu_id>2</pcpu_id>
<real_time_vcpu>y</real_time_vcpu>
</pcpu>
<pcpu>
<pcpu_id>3</pcpu_id>
<real_time_vcpu>y</real_time_vcpu>
</pcpu>
</cpu_affinity>
<clos>
<vcpu_clos>0</vcpu_clos>
@ -130,8 +140,12 @@
<vm_type>STANDARD_VM</vm_type>
<name>POST_STD_VM2</name>
<cpu_affinity>
<pcpu_id>0</pcpu_id>
<pcpu_id>1</pcpu_id>
<pcpu>
<pcpu_id>0</pcpu_id>
</pcpu>
<pcpu>
<pcpu_id>1</pcpu_id>
</pcpu>
</cpu_affinity>
<clos>
<vcpu_clos>0</vcpu_clos>
@ -145,8 +159,12 @@
<vm_type>STANDARD_VM</vm_type>
<name>POST_STD_VM3</name>
<cpu_affinity>
<pcpu_id>0</pcpu_id>
<pcpu_id>1</pcpu_id>
<pcpu>
<pcpu_id>0</pcpu_id>
</pcpu>
<pcpu>
<pcpu_id>1</pcpu_id>
</pcpu>
</cpu_affinity>
<clos>
<vcpu_clos>0</vcpu_clos>
@ -160,8 +178,12 @@
<vm_type>STANDARD_VM</vm_type>
<name>POST_STD_VM4</name>
<cpu_affinity>
<pcpu_id>0</pcpu_id>
<pcpu_id>1</pcpu_id>
<pcpu>
<pcpu_id>0</pcpu_id>
</pcpu>
<pcpu>
<pcpu_id>1</pcpu_id>
</pcpu>
</cpu_affinity>
<clos>
<vcpu_clos>0</vcpu_clos>
@ -175,8 +197,12 @@
<vm_type>STANDARD_VM</vm_type>
<name>POST_STD_VM5</name>
<cpu_affinity>
<pcpu_id>0</pcpu_id>
<pcpu_id>1</pcpu_id>
<pcpu>
<pcpu_id>0</pcpu_id>
</pcpu>
<pcpu>
<pcpu_id>1</pcpu_id>
</pcpu>
</cpu_affinity>
<clos>
<vcpu_clos>0</vcpu_clos>

View File

@ -82,8 +82,14 @@
<name>POST_STD_VM1</name>
<lapic_passthrough>y</lapic_passthrough>
<cpu_affinity>
<pcpu_id>0</pcpu_id>
<pcpu_id>1</pcpu_id>
<pcpu>
<pcpu_id>0</pcpu_id>
<real_time_vcpu>y</real_time_vcpu>
</pcpu>
<pcpu>
<pcpu_id>1</pcpu_id>
<real_time_vcpu>y</real_time_vcpu>
</pcpu>
</cpu_affinity>
<clos>
<vcpu_clos>0</vcpu_clos>
@ -113,8 +119,14 @@
<vm_type>RTVM</vm_type>
<name>POST_RT_VM1</name>
<cpu_affinity>
<pcpu_id>2</pcpu_id>
<pcpu_id>3</pcpu_id>
<pcpu>
<pcpu_id>2</pcpu_id>
<real_time_vcpu>y</real_time_vcpu>
</pcpu>
<pcpu>
<pcpu_id>3</pcpu_id>
<real_time_vcpu>y</real_time_vcpu>
</pcpu>
</cpu_affinity>
<clos>
<vcpu_clos>0</vcpu_clos>
@ -128,8 +140,12 @@
<vm_type>STANDARD_VM</vm_type>
<name>POST_STD_VM2</name>
<cpu_affinity>
<pcpu_id>0</pcpu_id>
<pcpu_id>1</pcpu_id>
<pcpu>
<pcpu_id>0</pcpu_id>
</pcpu>
<pcpu>
<pcpu_id>1</pcpu_id>
</pcpu>
</cpu_affinity>
<clos>
<vcpu_clos>0</vcpu_clos>
@ -143,8 +159,12 @@
<vm_type>STANDARD_VM</vm_type>
<name>POST_STD_VM3</name>
<cpu_affinity>
<pcpu_id>0</pcpu_id>
<pcpu_id>1</pcpu_id>
<pcpu>
<pcpu_id>0</pcpu_id>
</pcpu>
<pcpu>
<pcpu_id>1</pcpu_id>
</pcpu>
</cpu_affinity>
<clos>
<vcpu_clos>0</vcpu_clos>
@ -158,8 +178,12 @@
<vm_type>STANDARD_VM</vm_type>
<name>POST_STD_VM4</name>
<cpu_affinity>
<pcpu_id>0</pcpu_id>
<pcpu_id>1</pcpu_id>
<pcpu>
<pcpu_id>0</pcpu_id>
</pcpu>
<pcpu>
<pcpu_id>1</pcpu_id>
</pcpu>
</cpu_affinity>
<clos>
<vcpu_clos>0</vcpu_clos>
@ -173,8 +197,12 @@
<vm_type>STANDARD_VM</vm_type>
<name>POST_STD_VM5</name>
<cpu_affinity>
<pcpu_id>0</pcpu_id>
<pcpu_id>1</pcpu_id>
<pcpu>
<pcpu_id>0</pcpu_id>
</pcpu>
<pcpu>
<pcpu_id>1</pcpu_id>
</pcpu>
</cpu_affinity>
<clos>
<vcpu_clos>0</vcpu_clos>

View File

@ -81,8 +81,12 @@
<vm_type>STANDARD_VM</vm_type>
<name>POST_STD_VM1</name>
<cpu_affinity>
<pcpu_id>0</pcpu_id>
<pcpu_id>1</pcpu_id>
<pcpu>
<pcpu_id>0</pcpu_id>
</pcpu>
<pcpu>
<pcpu_id>1</pcpu_id>
</pcpu>
</cpu_affinity>
<clos>
<vcpu_clos>0</vcpu_clos>
@ -116,8 +120,14 @@
<vm_type>RTVM</vm_type>
<name>POST_RT_VM1</name>
<cpu_affinity>
<pcpu_id>2</pcpu_id>
<pcpu_id>3</pcpu_id>
<pcpu>
<pcpu_id>2</pcpu_id>
<real_time_vcpu>y</real_time_vcpu>
</pcpu>
<pcpu>
<pcpu_id>3</pcpu_id>
<real_time_vcpu>y</real_time_vcpu>
</pcpu>
</cpu_affinity>
<clos>
<vcpu_clos>0</vcpu_clos>
@ -131,8 +141,12 @@
<vm_type>STANDARD_VM</vm_type>
<name>POST_STD_VM2</name>
<cpu_affinity>
<pcpu_id>0</pcpu_id>
<pcpu_id>1</pcpu_id>
<pcpu>
<pcpu_id>0</pcpu_id>
</pcpu>
<pcpu>
<pcpu_id>1</pcpu_id>
</pcpu>
</cpu_affinity>
<clos>
<vcpu_clos>0</vcpu_clos>
@ -146,8 +160,12 @@
<vm_type>STANDARD_VM</vm_type>
<name>POST_STD_VM3</name>
<cpu_affinity>
<pcpu_id>0</pcpu_id>
<pcpu_id>1</pcpu_id>
<pcpu>
<pcpu_id>0</pcpu_id>
</pcpu>
<pcpu>
<pcpu_id>1</pcpu_id>
</pcpu>
</cpu_affinity>
<clos>
<vcpu_clos>0</vcpu_clos>
@ -161,8 +179,12 @@
<vm_type>STANDARD_VM</vm_type>
<name>POST_STD_VM4</name>
<cpu_affinity>
<pcpu_id>0</pcpu_id>
<pcpu_id>1</pcpu_id>
<pcpu>
<pcpu_id>0</pcpu_id>
</pcpu>
<pcpu>
<pcpu_id>1</pcpu_id>
</pcpu>
</cpu_affinity>
<clos>
<vcpu_clos>0</vcpu_clos>
@ -176,8 +198,12 @@
<vm_type>STANDARD_VM</vm_type>
<name>POST_STD_VM5</name>
<cpu_affinity>
<pcpu_id>0</pcpu_id>
<pcpu_id>1</pcpu_id>
<pcpu>
<pcpu_id>0</pcpu_id>
</pcpu>
<pcpu>
<pcpu_id>1</pcpu_id>
</pcpu>
</cpu_affinity>
<clos>
<vcpu_clos>0</vcpu_clos>

View File

@ -81,8 +81,12 @@
<vm_type>STANDARD_VM</vm_type>
<name>POST_STD_VM1</name>
<cpu_affinity>
<pcpu_id>0</pcpu_id>
<pcpu_id>1</pcpu_id>
<pcpu>
<pcpu_id>0</pcpu_id>
</pcpu>
<pcpu>
<pcpu_id>1</pcpu_id>
</pcpu>
</cpu_affinity>
<clos>
<vcpu_clos>0</vcpu_clos>
@ -117,8 +121,14 @@
<name>POST_RT_VM1</name>
<lapic_passthrough>y</lapic_passthrough>
<cpu_affinity>
<pcpu_id>2</pcpu_id>
<pcpu_id>3</pcpu_id>
<pcpu>
<pcpu_id>2</pcpu_id>
<real_time_vcpu>y</real_time_vcpu>
</pcpu>
<pcpu>
<pcpu_id>3</pcpu_id>
<real_time_vcpu>y</real_time_vcpu>
</pcpu>
</cpu_affinity>
<clos>
<vcpu_clos>0</vcpu_clos>
@ -151,8 +161,12 @@
<vm_type>STANDARD_VM</vm_type>
<name>POST_STD_VM2</name>
<cpu_affinity>
<pcpu_id>0</pcpu_id>
<pcpu_id>1</pcpu_id>
<pcpu>
<pcpu_id>0</pcpu_id>
</pcpu>
<pcpu>
<pcpu_id>1</pcpu_id>
</pcpu>
</cpu_affinity>
<clos>
<vcpu_clos>0</vcpu_clos>
@ -166,8 +180,12 @@
<vm_type>STANDARD_VM</vm_type>
<name>POST_STD_VM3</name>
<cpu_affinity>
<pcpu_id>0</pcpu_id>
<pcpu_id>1</pcpu_id>
<pcpu>
<pcpu_id>0</pcpu_id>
</pcpu>
<pcpu>
<pcpu_id>1</pcpu_id>
</pcpu>
</cpu_affinity>
<clos>
<vcpu_clos>0</vcpu_clos>
@ -181,8 +199,12 @@
<vm_type>STANDARD_VM</vm_type>
<name>POST_STD_VM4</name>
<cpu_affinity>
<pcpu_id>0</pcpu_id>
<pcpu_id>1</pcpu_id>
<pcpu>
<pcpu_id>0</pcpu_id>
</pcpu>
<pcpu>
<pcpu_id>1</pcpu_id>
</pcpu>
</cpu_affinity>
<clos>
<vcpu_clos>0</vcpu_clos>
@ -196,8 +218,12 @@
<vm_type>STANDARD_VM</vm_type>
<name>POST_STD_VM5</name>
<cpu_affinity>
<pcpu_id>0</pcpu_id>
<pcpu_id>1</pcpu_id>
<pcpu>
<pcpu_id>0</pcpu_id>
</pcpu>
<pcpu>
<pcpu_id>1</pcpu_id>
</pcpu>
</cpu_affinity>
<clos>
<vcpu_clos>0</vcpu_clos>

View File

@ -81,8 +81,12 @@
<vm_type>STANDARD_VM</vm_type>
<name>POST_STD_VM1</name>
<cpu_affinity>
<pcpu_id>0</pcpu_id>
<pcpu_id>1</pcpu_id>
<pcpu>
<pcpu_id>0</pcpu_id>
</pcpu>
<pcpu>
<pcpu_id>1</pcpu_id>
</pcpu>
</cpu_affinity>
<clos>
<vcpu_clos>0</vcpu_clos>
@ -117,8 +121,14 @@
<name>POST_RT_VM1</name>
<lapic_passthrough>y</lapic_passthrough>
<cpu_affinity>
<pcpu_id>2</pcpu_id>
<pcpu_id>3</pcpu_id>
<pcpu>
<pcpu_id>2</pcpu_id>
<real_time_vcpu>y</real_time_vcpu>
</pcpu>
<pcpu>
<pcpu_id>3</pcpu_id>
<real_time_vcpu>y</real_time_vcpu>
</pcpu>
</cpu_affinity>
<clos>
<vcpu_clos>0</vcpu_clos>
@ -151,8 +161,12 @@
<vm_type>STANDARD_VM</vm_type>
<name>POST_STD_VM2</name>
<cpu_affinity>
<pcpu_id>0</pcpu_id>
<pcpu_id>1</pcpu_id>
<pcpu>
<pcpu_id>0</pcpu_id>
</pcpu>
<pcpu>
<pcpu_id>1</pcpu_id>
</pcpu>
</cpu_affinity>
<clos>
<vcpu_clos>0</vcpu_clos>
@ -179,8 +193,12 @@
<vm_type>STANDARD_VM</vm_type>
<name>POST_STD_VM3</name>
<cpu_affinity>
<pcpu_id>0</pcpu_id>
<pcpu_id>1</pcpu_id>
<pcpu>
<pcpu_id>0</pcpu_id>
</pcpu>
<pcpu>
<pcpu_id>1</pcpu_id>
</pcpu>
</cpu_affinity>
<clos>
<vcpu_clos>0</vcpu_clos>
@ -207,8 +225,12 @@
<vm_type>STANDARD_VM</vm_type>
<name>POST_STD_VM4</name>
<cpu_affinity>
<pcpu_id>0</pcpu_id>
<pcpu_id>1</pcpu_id>
<pcpu>
<pcpu_id>0</pcpu_id>
</pcpu>
<pcpu>
<pcpu_id>1</pcpu_id>
</pcpu>
</cpu_affinity>
<clos>
<vcpu_clos>0</vcpu_clos>
@ -235,8 +257,12 @@
<vm_type>STANDARD_VM</vm_type>
<name>POST_STD_VM5</name>
<cpu_affinity>
<pcpu_id>0</pcpu_id>
<pcpu_id>1</pcpu_id>
<pcpu>
<pcpu_id>0</pcpu_id>
</pcpu>
<pcpu>
<pcpu_id>1</pcpu_id>
</pcpu>
</cpu_affinity>
<clos>
<vcpu_clos>0</vcpu_clos>

View File

@ -206,7 +206,7 @@ def generate_for_one_vm(board_etree, hv_scenario_etree, vm_scenario_etree, vm_id
###
# CPU and memory resources
###
cpus = set(eval_xpath_all(vm_scenario_etree, ".//cpu_affinity/pcpu_id[text() != '']/text()"))
cpus = set(eval_xpath_all(vm_scenario_etree, ".//cpu_affinity//pcpu_id[text() != '']/text()"))
lapic_ids = cpu_id_to_lapic_id(board_etree, vm_name, cpus)
if lapic_ids:
script.add_dynamic_dm_parameter("add_cpus", f"{' '.join([str(x) for x in sorted(lapic_ids)])}")

View File

@ -498,6 +498,29 @@ class ScenarioUpgrader(ScenarioTransformer):
return False
def move_pcpu(self, xsd_element_node, xml_parent_node, new_nodes):
vm_type = self.get_node(xml_parent_node, "parent::vm/vm_type/text()")
pcpus = self.get_from_old_launch_data(xml_parent_node, "cpu_affinity/pcpu_id[text() != '']")
if not pcpus:
pcpus = self.get_from_old_data(xml_parent_node, "cpu_affinity/pcpu_id[text() != '']")
if pcpus:
for n in pcpus:
new_node = etree.Element(xsd_element_node.get("name"))
etree.SubElement(new_node, "pcpu_id").text = n.text
if vm_type == "RTVM":
etree.SubElement(new_node, "real_time_vcpu").text = "y"
new_nodes.append(new_node)
self.old_data_nodes.discard(n)
else:
for n in self.get_from_old_data(xml_parent_node, "cpu_affinity/pcpu"):
new_nodes.append(n)
for child in n.iter():
self.old_data_nodes.discard(child)
return False
def move_os_type(self, xsd_element_node, xml_parent_node, new_nodes):
old_os_type_nodes = self.get_from_old_launch_data(xml_parent_node, ".//user_vm_type")
@ -627,6 +650,7 @@ class ScenarioUpgrader(ScenarioTransformer):
data_movers = {
"vm/name": partialmethod(move_data_from_either_xml, "name", "vm_name"),
"pcpu": move_pcpu,
"pcpu_id": partialmethod(move_data_from_either_xml, "cpu_affinity/pcpu_id[text() != '']", "cpu_affinity/pcpu_id[text() != '']"),
"pci_dev": partialmethod(move_data_from_both_xmls, ".//pci_devs/pci_dev[text()]", "passthrough_devices/*[text()] | sriov/*[text()]"),
"PTM": partialmethod(move_data_from_either_xml, ".//PTM", "enable_ptm"),
@ -670,7 +694,12 @@ class ScenarioUpgrader(ScenarioTransformer):
def add_missing_nodes(self, xsd_element_node, xml_parent_node, xml_anchor_node):
new_nodes = []
def call_mover(mover):
if isinstance(mover, partialmethod):
if isinstance(mover, list):
ret = False
for fn in mover:
ret = call_mover(fn)
return ret
elif isinstance(mover, partialmethod):
return mover.__get__(self, type(self))(xsd_element_node, xml_parent_node, new_nodes)
else:
return mover(self, xsd_element_node, xml_parent_node, new_nodes)

View File

@ -43,8 +43,24 @@
</xs:simpleType>
<xs:complexType name="CPUAffinityConfiguration">
<xs:all>
<xs:element name="pcpu_id" type="xs:integer" default="2">
<xs:annotation acrn:title="pCPU ID"
acrn:options="//processors//thread/cpu_id/text()" acrn:options-sorted-by="int">
<xs:documentation>ID of the pCPU that this VM's vCPU is allowed to pin to.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="real_time_vcpu" type="Boolean" default="n">
<xs:annotation acrn:title="Real-time vCPU">
<xs:documentation>Whether this vCPU is used for real-time-critical workloads.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:all>
</xs:complexType>
<xs:complexType name="CPUAffinityConfigurations">
<xs:sequence>
<xs:element name="pcpu_id" type="xs:integer" default="2" minOccurs="0" maxOccurs="unbounded">
<xs:element name="pcpu" type="CPUAffinityConfiguration" minOccurs="0" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>A pCPU that this VM's vCPU is allowed to pin to.</xs:documentation>
</xs:annotation>

View File

@ -5,30 +5,30 @@
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:acrn="https://projectacrn.org">
<xs:assert test="every $cpu in vm//cpu_affinity/pcpu_id satisfies count(processors//thread[cpu_id = $cpu]) = 1">
<xs:assert test="every $cpu in vm//cpu_affinity//pcpu_id satisfies count(processors//thread[cpu_id = $cpu]) = 1">
<xs:annotation acrn:severity="warning" acrn:report-on="$cpu">
<xs:documentation>The physical CPU {$cpu} allocated to VM "{$cpu/ancestor::vm/name}" does not exist on the target board. Remove this CPU from the CPU affinity setting.</xs:documentation>
</xs:annotation>
</xs:assert>
<xs:assert test="every $vm in /acrn-config/vm satisfies
count(distinct-values($vm//cpu_affinity/pcpu_id)) = count($vm//cpu_affinity/pcpu_id)">
count(distinct-values($vm//cpu_affinity//pcpu_id)) = count($vm//cpu_affinity//pcpu_id)">
<xs:annotation acrn:severity="warning" acrn:report-on="$vm/cpu_affinity">
<xs:documentation>VM "{$vm/name}" repeats a physical CPU affinity assignment: {$vm//cpu_affinity/pcpu_id}. Remove the duplicates.</xs:documentation>
<xs:documentation>VM "{$vm/name}" repeats a physical CPU affinity assignment: {$vm//cpu_affinity//pcpu_id}. Remove the duplicates.</xs:documentation>
</xs:annotation>
</xs:assert>
<xs:assert test="every $pcpu in /acrn-config/vm[load_order = 'PRE_LAUNCHED_VM' and vm_type = 'RTVM']//cpu_affinity/pcpu_id satisfies
count(/acrn-config/vm[@id != $pcpu/ancestor::vm//companion_vmid ]//cpu_affinity[pcpu_id = $pcpu]) &lt;= 1">
<xs:annotation acrn:severity="error" acrn:report-on="//vm//cpu_affinity[pcpu_id = $pcpu]">
<xs:documentation>Physical CPU {$pcpu} is assigned to pre-launched real-time VM (RTVM) "{$pcpu/ancestor::vm/name}" and thus cannot be shared among multiple VMs. Look for, and probably remove, any affinity assignments to {$pcpu} in this VM's settings: {//vm[cpu_affinity/pcpu_id = $pcpu]/name}.</xs:documentation>
<xs:assert test="every $pcpu in /acrn-config/vm[load_order = 'PRE_LAUNCHED_VM' and vm_type = 'RTVM']//cpu_affinity//pcpu_id satisfies
count(/acrn-config/vm[@id != $pcpu/ancestor::vm//companion_vmid ]//cpu_affinity[.//pcpu_id = $pcpu]) &lt;= 1">
<xs:annotation acrn:severity="error" acrn:report-on="//vm//cpu_affinity[.//pcpu_id = $pcpu]">
<xs:documentation>Physical CPU {$pcpu} is assigned to pre-launched real-time VM (RTVM) "{$pcpu/ancestor::vm/name}" and thus cannot be shared among multiple VMs. Look for, and probably remove, any affinity assignments to {$pcpu} in this VM's settings: {//vm[cpu_affinity//pcpu_id = $pcpu]/name}.</xs:documentation>
</xs:annotation>
</xs:assert>
<xs:assert test="every $vm in /acrn-config/vm[load_order != 'SERVICE_VM'] satisfies
count(distinct-values(processors//thread[cpu_id = $vm//cpu_affinity/pcpu_id]/core_type)) &lt;= 1">
count(distinct-values(processors//thread[cpu_id = $vm//cpu_affinity//pcpu_id]/core_type)) &lt;= 1">
<xs:annotation acrn:severity="error" acrn:report-on="$vm//cpu_affinity">
<xs:documentation>The physical CPUs allocated to the VM "{$vm/name}" have both performance cores {processors//thread[cpu_id = $vm//cpu_affinity/pcpu_id and core_type = 'Core']/cpu_id} and efficient cores {processors//thread[cpu_id = $vm//cpu_affinity/pcpu_id and core_type = 'Atom']/cpu_id}, which is unsupported. Remove either all performance or all efficient cores from the CPU affinity.</xs:documentation>
<xs:documentation>The physical CPUs allocated to the VM "{$vm/name}" have both performance cores {processors//thread[cpu_id = $vm//cpu_affinity//pcpu_id and core_type = 'Core']/cpu_id} and efficient cores {processors//thread[cpu_id = $vm//cpu_affinity//pcpu_id and core_type = 'Atom']/cpu_id}, which is unsupported. Remove either all performance or all efficient cores from the CPU affinity.</xs:documentation>
</xs:annotation>
</xs:assert>

View File

@ -342,7 +342,7 @@ Refer to :ref:`vuart_config` for detailed vUART settings.</xs:documentation>
<xs:documentation>Specify TPM2 FIXUP for VM.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="cpu_affinity" type="CPUAffinityConfiguration" minOccurs="0">
<xs:element name="cpu_affinity" type="CPUAffinityConfigurations" minOccurs="0">
<xs:annotation acrn:title="Physical CPU affinity" acrn:views="basic">
<xs:documentation>Select a subset of physical CPUs that this VM can use. More than one can be selected.</xs:documentation>
</xs:annotation>

View File

@ -13,11 +13,11 @@ def sos_cpu_affinity(etree):
if common.get_node("//vm[load_order = 'SERVICE_VM']", etree) is None:
return None
if common.get_node("//vm[load_order = 'SERVICE_VM' and count(cpu_affinity/pcpu_id)]", etree) is not None:
if common.get_node("//vm[load_order = 'SERVICE_VM' and count(cpu_affinity//pcpu_id)]", etree) is not None:
return None
sos_extend_all_cpus = board_cfg_lib.get_processor_info()
pre_all_cpus = etree.xpath("//vm[load_order = 'PRE_LAUNCHED_VM']/cpu_affinity/pcpu_id/text()")
pre_all_cpus = etree.xpath("//vm[load_order = 'PRE_LAUNCHED_VM']/cpu_affinity//pcpu_id/text()")
cpus_for_sos = list(set(sos_extend_all_cpus) - set(pre_all_cpus))
return sorted(cpus_for_sos)

View File

@ -80,7 +80,7 @@
</xsl:for-each>
</xsl:variable>
<xsl:variable name="sos_bootargs" select="normalize-space(str:replace(//vm[acrn:is-service-vm(load_order)]/os_config/bootargs[text()], $sos_rootfs, ''))" />
<xsl:variable name="maxcpunum" select="count(//vm[acrn:is-service-vm(load_order)]/cpu_affinity/pcpu_id)" />
<xsl:variable name="maxcpunum" select="count(//vm[acrn:is-service-vm(load_order)]/cpu_affinity//pcpu_id)" />
<xsl:variable name="hugepages" select="round(number(substring-before(//board-data//TOTAL_MEM_INFO, 'kB')) div (1024 * 1024)) - 3" />
<xsl:variable name="maxcpus">
<xsl:choose>
@ -105,10 +105,10 @@
<xsl:for-each select="vm">
<xsl:choose>
<xsl:when test="acrn:is-service-vm(load_order)">
<xsl:value-of select="acrn:define('SERVICE_VM_CONFIG_CPU_AFFINITY', concat('(', acrn:string-join(//vm[acrn:is-service-vm(load_order)]/cpu_affinity/pcpu_id, '|', 'AFFINITY_CPU(', 'U)'),')'), '')" />
<xsl:value-of select="acrn:define('SERVICE_VM_CONFIG_CPU_AFFINITY', concat('(', acrn:string-join(//vm[acrn:is-service-vm(load_order)]/cpu_affinity//pcpu_id, '|', 'AFFINITY_CPU(', 'U)'),')'), '')" />
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="acrn:define(concat('VM', @id, '_CONFIG_CPU_AFFINITY'), concat('(', acrn:string-join(cpu_affinity/pcpu_id, '|', 'AFFINITY_CPU(', 'U)'),')'), '')" />
<xsl:value-of select="acrn:define(concat('VM', @id, '_CONFIG_CPU_AFFINITY'), concat('(', acrn:string-join(cpu_affinity//pcpu_id, '|', 'AFFINITY_CPU(', 'U)'),')'), '')" />
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>