Tuomas,

> I haven't but I will write a blueprint for the core pinning part.
Can’t wait to see it!

> Are you using extra specs for carrying cpuset attributes in your 
> implementation?
Yes, exactly. 

Although we're using slightly different syntax to update flavor, for example:
$ nova flavor-key set <flavor> set vcpupin:0=1-5,12-17
In here ‘0’ is vCPU, and '1-5,12-17' - pCPUs. Basically this command results in 
the following libvirt xml:
<cputune>
   <vcpupin vcpu=‘0’ cpuset=‘1-5,12-17’/>
</cputune>

We’re also using the ‘placement’ attribute of <vcpu> set to ‘static’:
$ nova flavor-key <flavor> set vcpu:placement=static
Which results in the following libvirt xml:
<vcpu placement=‘static’>…</vcpu>

Otherwise, the functionality and implementation seem to be identical.

[offtopic] 
Apologies for delayed answer, for some reason I thought your email would arrive 
to my personal mailbox 
[/offtopic]

-Roman

On Nov 19, 2013, at 14:35, Tuomas Paappanen <tuomas.paappa...@tieto.com> wrote:

> Hi Roman,
> 
> I haven't but I will write a blueprint for the core pinning part.
> I considered vcpu element usage as well but in that case you can not set e.g. 
> vcpu-0 to run on pcpu-0. Vcpus and emulator are sharing all pcpus defined in 
> cpuset so I decided to use cputune element.
> 
> Are you using extra specs for carrying cpuset attributes in your 
> implementation?
> 
> Br,Tuomas
> 
> On 18.11.2013 17:14, Roman Verchikov wrote:
>> Tuomas,
>> 
>> Have you published your code/blueprints anywhere? Looks like we’re working 
>> on the same stuff. I have implemented almost the same feature set (haven’t 
>> published anything yet because of this thread), except for the scheduler 
>> part. The main goal is to be able to pin VCPUs in NUMA environment.
>> 
>> Have you considered adding placement and cpuset attributes to <vcpu> 
>> element? For example:
>> <vcpu placement=‘static’ cpuset=‘%whatever%’>
>> 
>> Thanks,
>> Roman
>> 
>> On Nov 13, 2013, at 14:46, Tuomas Paappanen <tuomas.paappa...@tieto.com> 
>> wrote:
>> 
>>> Hi all,
>>> 
>>> I would like to hear your thoughts about core pinning in Openstack. 
>>> Currently nova(with qemu-kvm) supports usage of cpu set of PCPUs what can 
>>> be used by instances. I didn't find blueprint, but I think this feature is 
>>> for isolate cpus used by host from cpus used by instances(VCPUs).
>>> 
>>> But, from performance point of view it is better to exclusively dedicate 
>>> PCPUs for VCPUs and emulator. In some cases you may want to guarantee that 
>>> only one instance(and its VCPUs) is using certain PCPUs.  By using core 
>>> pinning you can optimize instance performance based on e.g. cache sharing, 
>>> NUMA topology, interrupt handling, pci pass through(SR-IOV) in multi socket 
>>> hosts etc.
>>> 
>>> We have already implemented feature like this(PoC with limitations) to Nova 
>>> Grizzly version and would like to hear your opinion about it.
>>> 
>>> The current implementation consists of three main parts:
>>> - Definition of pcpu-vcpu maps for instances and instance spawning
>>> - (optional) Compute resource and capability advertising including free 
>>> pcpus and NUMA topology.
>>> - (optional) Scheduling based on free cpus and NUMA topology.
>>> 
>>> The implementation is quite simple:
>>> 
>>> (additional/optional parts)
>>> Nova-computes are advertising free pcpus and NUMA topology in same manner 
>>> than host capabilities. Instances are scheduled based on this information.
>>> 
>>> (core pinning)
>>> admin can set PCPUs for VCPUs and for emulator process, or select NUMA cell 
>>> for instance vcpus, by adding key:value pairs to flavor's extra specs.
>>> 
>>> EXAMPLE:
>>> instance has 4 vcpus
>>> <key>:<value>
>>> vcpus:1,2,3,4 --> vcpu0 pinned to pcpu1, vcpu1 pinned to pcpu2...
>>> emulator:5 --> emulator pinned to pcpu5
>>> or
>>> numacell:0 --> all vcpus are pinned to pcpus in numa cell 0.
>>> 
>>> In nova-compute, core pinning information is read from extra specs and 
>>> added to domain xml same way as cpu quota values(cputune).
>>> 
>>> <cputune>
>>>      <vcpupin vcpu='0' cpuset='1'/>
>>>      <vcpupin vcpu='1' cpuset='2'/>
>>>      <vcpupin vcpu='2' cpuset='3'/>
>>>      <vcpupin vcpu='3' cpuset='4'/>
>>>      <emulatorpin cpuset='5'/>
>>> </cputune>
>>> 
>>> What do you think? Implementation alternatives? Is this worth of blueprint? 
>>> All related comments are welcome!
>>> 
>>> Regards,
>>> Tuomas
>>> 
>>> 
>>> 
>>> 
>>> 
>>> _______________________________________________
>>> OpenStack-dev mailing list
>>> OpenStack-dev@lists.openstack.org
>>> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
>> 
>> _______________________________________________
>> OpenStack-dev mailing list
>> OpenStack-dev@lists.openstack.org
>> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
>> 
> 
> 
> _______________________________________________
> OpenStack-dev mailing list
> OpenStack-dev@lists.openstack.org
> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev


_______________________________________________
OpenStack-dev mailing list
OpenStack-dev@lists.openstack.org
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev

Reply via email to