Currently base on Xen’s scheduler, if users
don’t set vcpu affinity, Vcpu can be run on all p-cpus in machine. If it
is a NUMA machine, performance will be down because of memory latency in memory
access when CPU and memory are on different nodes. So I think their may be need
to supply a mechanism to make xen run better on NUMA machine even if users don’t
set vcpu affinity. I think out policies:
1: Don’t make any changes and only supply node free
memory info to help guest to set proper VCPU affinity which has been realized
in my last patch.
2: When set max-vcpu in domain build, we can choose a node base
on nowadays policy of choose CPU to locate VCPU which mainly considers CPU balance.
Then set this node’s cpumask to all VCPUS’ affinity to bind domain
on this node. The disadvantage of this method is after setting max-vcpu, if
user configures VCPU affinity, VCPU affinity will be set again. This is done in
first patch attached.
3: We can do this in CP. If user doesn’t set VCPU affinity,
we can choose a VCPU affinity for guest domain. This need a new policy to
choose which node guest will run on NUMA machine. I think it is reasonable to
consider memory usage first. I do this in the second patch. This patch depends
on my last patch of get free memory size per node.
Which method do you prefer? Comments are welcome. Thanks.