..
声明:
本博客欢迎转发,但请保留原作者信息!
博客地址:http://blog.csdn.net/halcyonbaby
新浪微博:@寻觅神迹
内容系本人学习、研究和总结,如有雷同,实属荣幸!
虚拟机实时性特性是openstack M版本引入的。
虚拟机实时性特性,旨在改善提供低延迟的CPU调度能力。
实时性虚拟机主要用于跑需要对CPU执行延迟要求苛刻的负载。典型的如NFV场景的应用,也可以用于金融市场高频交易等场合。
目前主要有以下手段改善实时性:
实时性是存在代价的。为了在最坏情况下,满足对CPU延迟的苛刻要求,整个系统的吞吐能力都要做妥协。
因此,无条件使用实时性,并不合理。只有在业务负载真的需要时,才开启这个选项。
很多情况下,仅仅使用CPU pinning就可以满足业务的对实时性的 要求。
根据社区的测试效果:
为了达到最优的效果,需要配合使用之前的numa亲和特性、dedicated cpu pinning特性、huge page特性。
由于开启实时是有代价的,一般来说,需要通过host aggregate将支持实时和不支持实时的computes host分开。
# 如果不配置cpu绑定会出现以下错误。
[stack@localhost devstack]$ openstack server create --flavor realtime --image cirros-0.3.4-x86_64-uec realtime
Cannot set realtime policy in a non dedicated cpu pinning policy (HTTP 400) (Request-ID: req-95b9c93c-cbac-4f1b-bf37-4942afa53860)
# 如果不配置配置cpu mask会出现以下错误
[stack@localhost devstack]$ openstack server create --flavor realtime --image cirros-0.3.4-x86_64-uec realtime
Realtime policy needs vCPU(s) mask configured with at least 1 RT vCPU and 1 ordinary vCPU. See hw:cpu_realtime_mask or hw_cpu_realtime_mask (HTTP 400) (Request-ID: req-0f09c25a-9f56-4baf-9519-71d5b3abae29)
openstack flavor create --ram 1024 --vcpu 4 --disk 1 realtime4
openstack flavor set --property hw:cpu_realtime=yes realtime4
openstack flavor set --property hw:cpu_policy=dedicated realtime4
openstack flavor set --property hw:cpu_realtime_mask=^0-1 realtime4
openstack server create --flavor realtime4 --image cirros-0.3.4-x86_64-uec realtime4
[stack@localhost devstack]$ sudo virsh list
Id Name State
----------------------------------------------------
3 instance-00000003 running
[stack@localhost devstack]$ sudo virsh show 3
error: unknown command: 'show'
[stack@localhost devstack]$ sudo virsh dumpxml 3
<domain type='kvm' id='3'>
<name>instance-00000003name>
<uuid>bcd4164b-f0da-4f70-8864-6514ff5c1c54uuid>
<metadata>
<nova:instance xmlns:nova="http://openstack.org/xmlns/libvirt/nova/1.0">
<nova:package version="15.0.4"/>
<nova:name>realtime4nova:name>
<nova:creationTime>2017-05-05 09:14:48nova:creationTime>
<nova:flavor name="realtime4">
<nova:memory>1024nova:memory>
<nova:disk>1nova:disk>
<nova:swap>0nova:swap>
<nova:ephemeral>0nova:ephemeral>
<nova:vcpus>4nova:vcpus>
nova:flavor>
<nova:owner>
<nova:user uuid="2a925cf044ec4d8daace6d716c114e2b">adminnova:user>
<nova:project uuid="2d1d6c8084544f09a3e78b0a5f5ab323">adminnova:project>
nova:owner>
<nova:root type="image" uuid="fc7db502-c469-4617-85cc-13c7cc05c0ce"/>
nova:instance>
metadata>
<memory unit='KiB'>1048576memory>
<currentMemory unit='KiB'>1048576currentMemory>
<memoryBacking>
<nosharepages/>
<locked/>
memoryBacking>
<vcpu placement='static'>4vcpu>
<cputune>
<shares>4096shares>
<vcpupin vcpu='0' cpuset='0'/>
<vcpupin vcpu='1' cpuset='1'/>
<vcpupin vcpu='2' cpuset='2'/>
<vcpupin vcpu='3' cpuset='3'/>
<emulatorpin cpuset='0-1'/>
<vcpusched vcpus='2-3' scheduler='fifo' priority='1'/>
cputune>
<numatune>
<memory mode='strict' nodeset='0'/>
<memnode cellid='0' mode='strict' nodeset='0'/>
numatune>
<resource>
<partition>/machinepartition>
resource>
<sysinfo type='smbios'>
<system>
<entry name='manufacturer'>OpenStack Foundationentry>
<entry name='product'>OpenStack Novaentry>
<entry name='version'>15.0.4entry>
<entry name='serial'>187ec700-6ff3-4e83-87b2-9559c4406874entry>
<entry name='uuid'>bcd4164b-f0da-4f70-8864-6514ff5c1c54entry>
<entry name='family'>Virtual Machineentry>
system>
sysinfo>
<os>
<type arch='x86_64' machine='pc-i440fx-2.7'>hvmtype>
<kernel>/opt/stack/data/nova/instances/bcd4164b-f0da-4f70-8864-6514ff5c1c54/kernelkernel>
<initrd>/opt/stack/data/nova/instances/bcd4164b-f0da-4f70-8864-6514ff5c1c54/ramdiskinitrd>
<cmdline>root=/dev/vda console=tty0 console=ttyS0cmdline>
<boot dev='hd'/>
<smbios mode='sysinfo'/>
os>
<features>
<acpi/>
<apic/>
features>
<cpu>
<topology sockets='2' cores='1' threads='2'/>
<numa>
<cell id='0' cpus='0-3' memory='1048576' unit='KiB'/>
numa>
cpu>
<clock offset='utc'>
<timer name='pit' tickpolicy='delay'/>
<timer name='rtc' tickpolicy='catchup'/>
<timer name='hpet' present='no'/>
clock>
<on_poweroff>destroyon_poweroff>
<on_reboot>restarton_reboot>
<on_crash>destroyon_crash>
<devices>
<emulator>/usr/bin/qemu-kvmemulator>
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2' cache='none'/>
<source file='/opt/stack/data/nova/instances/bcd4164b-f0da-4f70-8864-6514ff5c1c54/disk'/>
<backingStore type='file' index='1'>
<format type='raw'/>
<source file='/opt/stack/data/nova/instances/_base/85c8d3de1cae1e1b02f19d8a745fb3a132aeb055'/>
<backingStore/>
backingStore>
<target dev='vda' bus='virtio'/>
<alias name='virtio-disk0'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
disk>
<controller type='usb' index='0' model='piix3-uhci'>
<alias name='usb'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
controller>
<controller type='pci' index='0' model='pci-root'>
<alias name='pci.0'/>
controller>
<interface type='bridge'>
<mac address='fa:16:3e:9b:4e:f5'/>
<source bridge='qbr08a5bede-6a'/>
<target dev='tap08a5bede-6a'/>
<model type='virtio'/>
<alias name='net0'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
interface>
<serial type='pty'>
<source path='/dev/pts/23'/>
<log file='/opt/stack/data/nova/instances/bcd4164b-f0da-4f70-8864-6514ff5c1c54/console.log' append='off'/>
<target port='0'/>
<alias name='serial0'/>
serial>
<console type='pty' tty='/dev/pts/23'>
<source path='/dev/pts/23'/>
<log file='/opt/stack/data/nova/instances/bcd4164b-f0da-4f70-8864-6514ff5c1c54/console.log' append='off'/>
<target type='serial' port='0'/>
<alias name='serial0'/>
console>
<input type='mouse' bus='ps2'>
<alias name='input0'/>
input>
<input type='keyboard' bus='ps2'>
<alias name='input1'/>
input>
<graphics type='vnc' port='5900' autoport='yes' listen='127.0.0.1' keymap='en-us'>
<listen type='address' address='127.0.0.1'/>
graphics>
<video>
<model type='cirrus' vram='16384' heads='1' primary='yes'/>
<alias name='video0'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
video>
<memballoon model='virtio'>
<stats period='10'/>
<alias name='balloon0'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
memballoon>
devices>
<seclabel type='dynamic' model='selinux' relabel='yes'>
<label>system_u:system_r:svirt_t:s0:c687,c779label>
<imagelabel>system_u:object_r:svirt_image_t:s0:c687,c779imagelabel>
seclabel>
<seclabel type='dynamic' model='dac' relabel='yes'>
<label>+107:+107label>
<imagelabel>+107:+107imagelabel>
seclabel>
domain>