yahoo-eng-team team mailing list archive
-
yahoo-eng-team team
-
Mailing list archive
-
Message #86208
[Bug 1930706] [NEW] nova allows suboptimal emulator tread pinning for realtime guests
Public bug reported:
today when ever you use a realtime guest you are required to enable cpu
pinning and other feature such as spcifing a real time core mask via
hw:cpu_realtime_mask or hw_cpu_realtime_mask.
in the victoria release this requriement was relaxed somewhat with the
intoduction of mixed cpu policy guest that are assinged pinned and
floating cores.
https://github.com/openstack/nova/commit/9fc63c764429c10f9041e6b53659e0cbd595bf6b
It is now possible to allocate all cores in an instance to realtime and
omit the ``hw:cpu_realtime_mask`` extra spec. This requires specifying the
``hw:emulator_threads_policy`` extra spec.
https://github.com/openstack/nova/blob/50fdbc752a9ca9c31488140ef2997ed59d861a41/releasenotes/notes/bug-1884231-16acf297d88b122e.yaml
however while that works well it also possible to hw:cpu_realtime_mask
but not specify hw:emulator_threads_policy which leads to sub optimal
xml generation for the libvirt driver.
this is reported downstream as
https://bugzilla.redhat.com/show_bug.cgi?id=1700390 for older releas
that predata the changes referenced above.
though in revaluation of this a possible improvment can be made as
detailed in https://bugzilla.redhat.com/show_bug.cgi?id=1700390#c11
today if we have a 2 core vm where guest cpu 0 is non realtime and guest cpu 1 is realtime we
.e.g. hw:cpu_policy=dedicated hw:cpu_realtime=True hw:cpu_realtime_mask=^0
would generate the xml as follows
<vcpupin vcpu="0" cpuset="0"/>
<vcpupin vcpu="1" cpuset="1"/>
<vcpusched vcpus='1' scheduler='fifo' priority='1'/>
<emulatorpin cpuset="0,1"/>
this is because the default behavior when no emulator_threads_policy is specifed is for the
emulator thread to float over all the vm cores.
but a slight modifcation to the xml could be made to have a more optimal default in this case
useing the cpu_realtime_mask we can instead restrict the emulator thread to float over the non realtime cores with realtime priortiy.
<vcpupin vcpu="0" cpuset="0"/>
<vcpupin vcpu="1" cpuset="1"/>
<vcpusched vcpus='1' scheduler='fifo' priority='1'/>
<emulatorpin cpuset="0"/>
<emulatorsched scheduler='fifo' priority='1'>
this will ensure that if qemu need to process a request for a device attach for example
that the emulator thread has higher priorty then the guest vcpus that deal with guest house keeping task but will not interupt the realtime cores.
this would give many of the benifits of emulator_threads_policy=share or
emulator_threads_policy=isolate without increase resource usage or
requireing any config,flavor or image changes. this should also be a
backporable solution to this problem.
this is espically important given realtime host often are deplopy with
the kernel isolcpus paramater which mean that the kernel will not load
balance the emulator thread acrros the range and will instead leave it
onthe core it intially spwaned on. today you coudl get lucky and it
could be spawn on core 0 in which case the new behvior would be the same
or it coudl get spwaned on core 1. wehn the emulatro thread is spawned
on core 1 sicne it has less priority then the vcpu thread it will only
run if the guest vcpu idels resulting in the iablity for qemu to process
device attach and other qemu monitor commands form libvirt or the user.
** Affects: nova
Importance: Wishlist
Status: Triaged
** Tags: libvirt numa
--
You received this bug notification because you are a member of Yahoo!
Engineering Team, which is subscribed to OpenStack Compute (nova).
https://bugs.launchpad.net/bugs/1930706
Title:
nova allows suboptimal emulator tread pinning for realtime guests
Status in OpenStack Compute (nova):
Triaged
Bug description:
today when ever you use a realtime guest you are required to enable
cpu pinning and other feature such as spcifing a real time core mask
via hw:cpu_realtime_mask or hw_cpu_realtime_mask.
in the victoria release this requriement was relaxed somewhat with the
intoduction of mixed cpu policy guest that are assinged pinned and
floating cores.
https://github.com/openstack/nova/commit/9fc63c764429c10f9041e6b53659e0cbd595bf6b
It is now possible to allocate all cores in an instance to realtime and
omit the ``hw:cpu_realtime_mask`` extra spec. This requires specifying the
``hw:emulator_threads_policy`` extra spec.
https://github.com/openstack/nova/blob/50fdbc752a9ca9c31488140ef2997ed59d861a41/releasenotes/notes/bug-1884231-16acf297d88b122e.yaml
however while that works well it also possible to hw:cpu_realtime_mask
but not specify hw:emulator_threads_policy which leads to sub optimal
xml generation for the libvirt driver.
this is reported downstream as
https://bugzilla.redhat.com/show_bug.cgi?id=1700390 for older releas
that predata the changes referenced above.
though in revaluation of this a possible improvment can be made as
detailed in https://bugzilla.redhat.com/show_bug.cgi?id=1700390#c11
today if we have a 2 core vm where guest cpu 0 is non realtime and guest cpu 1 is realtime we
.e.g. hw:cpu_policy=dedicated hw:cpu_realtime=True hw:cpu_realtime_mask=^0
would generate the xml as follows
<vcpupin vcpu="0" cpuset="0"/>
<vcpupin vcpu="1" cpuset="1"/>
<vcpusched vcpus='1' scheduler='fifo' priority='1'/>
<emulatorpin cpuset="0,1"/>
this is because the default behavior when no emulator_threads_policy is specifed is for the
emulator thread to float over all the vm cores.
but a slight modifcation to the xml could be made to have a more optimal default in this case
useing the cpu_realtime_mask we can instead restrict the emulator thread to float over the non realtime cores with realtime priortiy.
<vcpupin vcpu="0" cpuset="0"/>
<vcpupin vcpu="1" cpuset="1"/>
<vcpusched vcpus='1' scheduler='fifo' priority='1'/>
<emulatorpin cpuset="0"/>
<emulatorsched scheduler='fifo' priority='1'>
this will ensure that if qemu need to process a request for a device attach for example
that the emulator thread has higher priorty then the guest vcpus that deal with guest house keeping task but will not interupt the realtime cores.
this would give many of the benifits of emulator_threads_policy=share
or emulator_threads_policy=isolate without increase resource usage or
requireing any config,flavor or image changes. this should also be a
backporable solution to this problem.
this is espically important given realtime host often are deplopy with
the kernel isolcpus paramater which mean that the kernel will not load
balance the emulator thread acrros the range and will instead leave it
onthe core it intially spwaned on. today you coudl get lucky and it
could be spawn on core 0 in which case the new behvior would be the
same or it coudl get spwaned on core 1. wehn the emulatro thread is
spawned on core 1 sicne it has less priority then the vcpu thread it
will only run if the guest vcpu idels resulting in the iablity for
qemu to process device attach and other qemu monitor commands form
libvirt or the user.
To manage notifications about this bug go to:
https://bugs.launchpad.net/nova/+bug/1930706/+subscriptions