虚拟机性能优化
条评论一.CPU优化
提升虚拟机cpu性能的手段,包括CPU透传, CPU缓存, CPU亲和性以及CPU线程调度策略
1.CPU透传
CPU透传是指将host的CPU信息对guest可见,由于guest中某些软件算法会依赖特定的CPU指令,通过透传可以提高这些软件算法的性能,libvirt中CPU透传的配置如下:
1 | <cpu mode='host-passthrough'> |
cache mode设置为passthrough,意味着通过将host的cache信息透传给虚拟机,虽然cpu是透传模式,但也可以配置cpu的某些feature是启用还是禁用。
2.CPU亲和性
CPU亲和性是指将vcpu、qemu主线程、io线程绑定到某个或某些物理cpu上,减少cpu调度,提高虚拟机的性能,CPU亲和性在libvirt中配置如下:
1 | <cputune> |
vcpupin是指将指定vcpu绑定到指定的cpuset上,emulatorpin以及iothreadpin的绑定方式也是如此
3.CPU线程调度策略
CPU调度策略是指通过调度sched_setscheduler设置指定线程的调度策略,以及调度优先级,cpu调度策略在libvirt中配置如下:
1 | <cputune> |
libvirt支持的调度策略包括以下几个:
none表示普通进程,采用cfs调度;
batch是普通进程调度策略的分化版本。采用分时策略,根据动态优先级(nice()API设置),分配CPU运算资源;
idle表示在系统空闲时才跑这类进程,优先级最低;
fifo表示先入先出调度算法,属于实时调度策略,相同优先级的任务先到先服务,高优先级的任务可以抢占低优先级的任务;
rr表示时间片轮转调度算法,也属于实时调度策略,使用 Roound-Robin算法,相同优先级的任务当用完时间片会被放到队列尾部,以保证公平性,同样,高优先级的任务可以抢占低优先级的任务。
4.CPU cache
CPU cache功能是在Qemu v2.8.0-rc0开始合入qemu(链接),可以通过”-cpu l3-cache=on”方式为虚拟机的cpu创建一个l3的cache,l3 cache的支持可以显著的减少IPI中断(一种cpu之间的中断),原因是一些软件算法是基于硬件cache信息实现的, 例如在x86 kernel中, 当cpu1想在cpu2唤醒一个任务时, cpu1会触发一个resched IPI 中断,并且告诉cpu2如果不共享低级别缓存,就需要去唤醒这个任务. 相反,如果cpu2有低级别缓存, cpu1 可以直接访问cpu2的runqueue,从而不需要通过IPI中断.cpu cache在libvirt中的配置如下:
1 | <cachetune vcpus='0-3'> |