那些年我们在NFV中给openstack做的优化1:内存大页HugePages

正常默认内存页:4k,

大页内存:设置后默认2M=512pages(可以随时设置),如果希望更大,可以设置为1G(只能开机设置),页数视应用内存与OS情况而定。

优点:系统要管理维护一个内存页表,每个内存页一个条目,使用大页,系统管理维护的页面表的条目变少,可以提高性能。

设置:(centos7系统)

1、查看系统是否支持内存大页(有输出表示支持):

# grep -m1 "pse\|pdpe1gb" /proc/cpuinfo
flags		: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch epb cat_l3 cdp_l3 intel_ppin intel_pt ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm cqm rdt_a rdseed adx smap xsaveopt cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local dtherm ida arat pln pts spec_ctrl intel_stibp

 2、确认qemu-img版本,需要2.4.0以上,我的是2.12.0

# qemu-img -V
qemu-img version 2.12.0 (qemu-kvm-ev-2.12.0-18.el7_6.5.1)

3、修改/etc/default/grub文件,将大页内存设置写入内核参数一行,大页size:1G,页数64,禁用透明大页。

(注1:大页分为静态大页跟动态大页,静态大页是预分配的、独占的,比动态大页性能好。静态大页需要对应用源码进行改造,对研发不友好,因此后来增加了动态透明大页,是将4k页面动态合成的大页,对应用透明,系统默认启用透明大页。但是,启动透明大页会造成一些副作用,swap效率低就是之一,透明大页内存swap出去之前会先分解成4k小页面,再swap出去,本身使用swap到硬盘 I/O效率就低。而静态大页是不会被swap出去的,因此使用静态大页,关闭透明大页,可以防止swap。)

(注2:不要讲所有内存均分配给大页内存,留一部分4k页面给OS使用,如果有ceph等应用,也需要使用4k页面。因为他们用不了大页内存。)

GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=hostvg/root rd.lvm.lv=centos/swap rhgb quiet hugepagesz=1G hugepages=64  transparent_hugepage=never"

4、(选)在上一步设置的大页,无法对于每个numa设置,要对numa级别设置需要用命令实现,而且需要设置到开机自启脚本

echo 32 > /sys/devices/system/node/node0/hugepages/hugepages-1048576kB/nr_hugepages
echo 32 > /sys/devices/system/node/node1/hugepages/hugepages-1048576kB/nr_hugepages

5、设置qemu-kvm使用大页内存

KVM_HUGEPAGES=1

6、更新grub,重启系统

基于BIOS的legecy启动方式:

grub2-mkconfig -o /boot/grub2/grub.cfg; reboot

基于UEFI的新式启动方式:

grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg; reboot

7、确认大页内存已开启:

# grep Huge /proc/meminfo

AnonHugePages:    333824 kB
HugePages_Total:      64
HugePages_Free:       64
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:    1048576 kB

8、使用:创建flavor带hw:mem_pages_size 参数,然后创建虚拟机

openstack  flavor create --disk 20 --vcpus 2 --ram 2046 --property hw:mem_pages_size=1G test-hugepage
openstack server create --image xxx --flavor xxx --nic net-id=xxx test

最好配合主机组使用:

创建主机组,设置标记hpgs=true
# nova aggregate-create hpgs-aggr
# nova aggregate-set-metadata hpgs-aggr hpgs=true
添加主机:
# nova aggregate-add-host hpgs-aggr node0
# nova aggregate-add-host hpgs-aggr node1
创建flavor:
openstack  flavor create --disk 20 --vcpus 2 --ram 2046 --property hw:mem_pages_size=1G test-hugepage
为flavor添加标记
openstack flavor set --property aggregate_instance_extra_specs:hpgs=true

为控制节点添加nova scheduler过滤规则并重启服务:AggregateInstanceExtraSpecsFilter
scheduler_default_filters=RetryFilter,AvailabilityZoneFilter,RamFilter,DiskFilter,ComputeFilter,ComputeCapabilitiesFilter,ImagePropertiesFilter,ServerGroupAntiAffinityFilter,ServerGroupAffinityFilter,AggregateInstanceExtraSpecsFilter

systemctl restart openstack-nova-scheduler

创建虚拟机
openstack server create --image xxx --flavor xxx --nic net-id=xxx test

 

你可能感兴趣的:(openstack)