[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[ImageBuilder][PATCH] uboot-script-gen: add ability to cfg vcpu hard affinity



From: Grygorii Strashko <grygorii_strashko@xxxxxxxx>

Add DOMU_VCPU_HARD_AFFINITY[number,vcpu] configuration file string option
specifying the hard affinity configuration for the VM vCPU(vcpu) in DT.

The format is a comma-separated list of pCPUs or ranges of pCPUs. Ranges
are hyphen-separated intervals (such as 0-4) and are inclusive on both
sides. The numbers refer to logical pCPU ids.

For example:
DOMU_VCPUS[0]="2"
DOMU_VCPU_HARD_AFFINITY[0,0]="1"

will be reflected in domU0/vcpu0 DT node with "hard-affinity" set:
vcpu0 {
        hard-affinity = "1";
        id = <0x00000000>;
        compatible = "xen,vcpu";
};

Signed-off-by: Grygorii Strashko <grygorii_strashko@xxxxxxxx>
---
 README.md                | 11 +++++++++++
 scripts/uboot-script-gen |  4 ++++
 scripts/xen_dt_domu      | 39 +++++++++++++++++++++++++++++++++++++++
 3 files changed, 54 insertions(+)
 create mode 100644 scripts/xen_dt_domu

diff --git a/README.md b/README.md
index 5b75018ea956..262022c665be 100644
--- a/README.md
+++ b/README.md
@@ -186,6 +186,17 @@ Where:
 
 - DOMU_VCPUS[number] is the number of vcpus for the VM, default 1
 
+- DOMU_VCPU_HARD_AFFINITY[number,vcpu] optional, is the A string
+  specifying the hard affinity configuration for the VM vCPU(vcpu):
+  a comma-separated list of pCPUs or ranges of pCPUs is used.
+  Ranges are hyphen-separated intervals (such as `0-4`) and are inclusive
+  on both sides. The numbers refer to logical pCPU ids. Below is an example:
+```
+      DOMU_VCPUS[number]=2
+      DOMU_VCPU_HARD_AFFINITY[number,0]="0-2"
+      DOMU_VCPU_HARD_AFFINITY[number,1]="3"
+```
+
 - DOMU_COLORS[number] specifies the colors (cache coloring) to be used
   for the domain and is in the format startcolor-endcolor
 
diff --git a/scripts/uboot-script-gen b/scripts/uboot-script-gen
index 74e3b076910c..9229f9af567b 100755
--- a/scripts/uboot-script-gen
+++ b/scripts/uboot-script-gen
@@ -392,6 +392,8 @@ function xen_device_tree_editing()
             dt_set "/chosen/domU$i" "colors" "hex" "$(printf "0x%x" 
$bitcolors)"
         fi
 
+        xen_dt_domu_add_vcpu_nodes "/chosen/domU$i" $i ${DOMU_VCPUS[$i]}
+
         add_device_tree_kernel "/chosen/domU$i" ${domU_kernel_addr[$i]} 
${domU_kernel_size[$i]} "${DOMU_CMD[$i]}"
         if test "${domU_ramdisk_addr[$i]}"
         then
@@ -1164,10 +1166,12 @@ fi
 
 check_depends
 
+declare -A DOMU_VCPU_HARD_AFFINITY
 source "$cfg_file"
 
 SCRIPT_PATH=$(dirname "$0")
 source "$SCRIPT_PATH/common"
+source "$SCRIPT_PATH/xen_dt_domu"
 
 # command line overrides
 LOAD_CMD=${load_opt:-$LOAD_CMD}
diff --git a/scripts/xen_dt_domu b/scripts/xen_dt_domu
new file mode 100644
index 000000000000..e1cb2376c37e
--- /dev/null
+++ b/scripts/xen_dt_domu
@@ -0,0 +1,39 @@
+#!/bin/bash
+
+# uses:
+# DOMU_VCPU_HARD_AFFINITY
+function xen_dt_domu_add_vcpu_nodes()
+{
+    # $1 - dt path
+    local path=$1
+    # $2 - domain number
+    local dom_num=$2
+    # $3 - number of vcpus for the domain
+    local vcpus=$3
+    local hard_affinity=""
+    local gen_vcpu=""
+
+    for (( vcpu=0; vcpu<${vcpus}; vcpu++ ))
+    do
+        gen_vcpu=""
+        if test "${DOMU_VCPU_HARD_AFFINITY[$dom_num,$vcpu]}"
+        then
+            hard_affinity=${DOMU_VCPU_HARD_AFFINITY[$dom_num,$vcpu]}
+            gen_vcpu="1"
+        fi
+
+        if test -z $gen_vcpu
+        then
+            continue
+        fi
+
+        dt_mknode "${path}" "vcpu$vcpu"
+        dt_set "${path}/vcpu$vcpu" "compatible" "str_a" "xen,vcpu"
+        dt_set "${path}/vcpu$vcpu" "id" "int"  "$vcpu"
+
+        if test -n $hard_affinity
+        then
+            dt_set "${path}/vcpu$vcpu" "hard-affinity" "str" "$hard_affinity"
+        fi
+    done
+}
-- 
2.34.1




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.