[nova][ptg] pinned and unpinned CPUs in one instance
On Fri, 2019-11-08 at 07:09 +0000, BalÃ¡zs Gibizer wrote:
> spec: https://review.opendev.org/668656
> Agreements from the PTG:
> How we will test it:
> * do functional test with libvirt driver, like the pinned cpu tests we
> have today
> * donyd's CI supports nested virt so we can do pinned cpu testing but
> not realtime. As this CI is still work in progress we should not block
> on this.
we can do realtime testing in that ci.
i already did. also there is a new label that is available across 3 providers
so we wont just be relying on donyd's good work.
> * coverage inhttps://opendev.org/x/whitebox-tempest-pluginis a nice to
> Naming: use the 'shared' and 'dedicated' terminology
didn't we want to have a hw:cpu_policy=mixed specificaly for this case?
> Support both the hw:pinvcpus=3 and the resources:PCPU=2 flavor extra
> specs syntaxtbut not in the same flavor. The resources:PCPU=2 syntax
> will have less expression power until nova models NUMA in placement. So
> nova will try to evenly distribute PCPUs between numa nodes. If it not
> possible we reject the request and ask the user to use the
> hw:pinvcpus=3 syntax.
> Realtime mask is an exclusion mask, any vcpus not listed there has to
> be in the dedicated set of the instance.
> TODOInvestigate whether we want to enable NUMA by default
> * Pros: Simpler, everything is NUMA by default
> * Cons: We'll either have to break/make configurablethe 1:1 guest:host
in the context of mix if we dont enable numa affinity by default we should remove that behavior from all case
where we do it today.
> NUMA mapping else we won't be able to boot e.g. a 40 core shared
> instance on a 40 core, 2 NUMA node host
if this is a larger question of if we should have all instance be numa by default i have argued yes
for quite a while as i think having 1 code path has many advantages. that said im aware of this limitation.
one way to solve this was the use of the proposed can_split placmenent paramter. so if you did not specify
a numa toplogy we would add can_split=vCPUs and then create a singel or multiple numa node toplogy based on the
allcoations. if we combine that with a allocation weigher we could sort the allocation candiates by smallest number
of numa nodes so we would prefer landing on hosts that can fit it on 1 numa node.
its a big change but long overdue.
that said i have also argued the other point too in responce to pushback on "all vms have numa of 1 unless you say
otherwise" i.e. that the 1:1 between mapping virtual and host numa nodes shoudl be configurable and is not required by
the api today. the backwards compatible way to do that is its not requried by default if you are using shared cores and
is required if you are using pinned but that is a littel confusing.
i dont really know what the right answer to this is but i think its a seperate question form the topic of this thread.
we dont need to solve this to enable pinned and unpinned cpus in one instance but we do need to adress this before
we can model numa in placment.