KVM的优化

【 cpu的优化部分】

ring0内核态,级别高,可以直接操作硬件
ring0,用户态,级别低,无法直接操作硬件,如想写硬盘,切换到内核态执行
这是一种上下文切换。

客户机不知道自己是否工作在内核态
vt-x,可以帮你进行上下文切换,加速上下文切换
kvm是个进程,需要被cpu调度,cpu有缓存,为了访问速度更快
kvm可以被调度到任何cpu上执行。

这个kvm这时候在cpu1上运行,有了缓存
下一刻跑到了cpu2上执行,这就是cache miss
把kvm绑定到某个cpu上,命中率就搞了,提供性能。

●绑定CPU
taskset绑定进程到某个或者某几个cpu上。
绑定之后,性能能提高不到10%,
一般一个cpu多核心,它们的缓存是共享的。
查看帮助:taskset --help
①使用ps aux | grep kvm命令查看到当前kvm虚拟机进程号是8598,我把它绑定到1号cpu上运行。
②绑定:taskset -cp 1 8598
①把它绑定到1号和2号运行,让它只能在这两个cpu之间运行。
②taskset -cp 1,2 8598

【内存优化】
1、宿主机bios打开EPT功能,加快地址映射。
2、宿主机系统配置大页内存,这样寻址快一点(使用大页内存虚拟机性能提高10%以上)。
3、打开内存合并。
EPT为了提升虚拟化内存映射的效率而提供的一项技术。
打开EPT后,GuestOS运行时,通过页表转化出来的地址不再是真实的物理地址,而是被称作为guest-physical addresses,经过EPT的转化后才成为真实的物理地址。
可以使用 $cat /proc/cpuinfo | grep ept检查硬件是否支持ept机制。如果支持那么kvm会自动的利用EPT。
intel开发的ept技术加快地址映射。bios打开这个功能就行 。

①现在宿主机的是进行内存的合并。把连续的内存合并为2MB的大页内存
减少内存碎片。
cat /sys/kernel/mm/transparent_hugepage/enabled

②大页内存,这里默认是2MB
查看:cat /proc/meminfo | tail -10

【IO的优化】

1,关于IO缓存模式的优化,参考:
http://blog.chinaunix.net/uid-20940095-id-3371268.html
http://blog.sina.com.cn/s/blog_5ff8e88e0101bjmb.html
http://chuansong.me/n/2187028
2,主要的优化方法包括:
(1)采用virtio驱动代替ide驱动,目前kvm使用的就是virtio。
virtio半虚拟化I/O设备框架,标准化guest与host之间数据交换接口,简化流程,减少内存拷贝,提升虚拟机I/O效率。
(2)禁用host层的page cache
(3)开启huge page,开启大页内存
(4)禁用ksm

【IO的调度算法的优化】
如果你的磁盘是ssd的话,一定要设置noop
noop就是为了缓存,闪存设备配置的。

现在有3种,在centos7默认是deadline。
查看方法:cat /sys/block/sda/queue/scheduler

①可以通过下面方式修改的调度算法
echo noop > /sys/block/sda/queue/scheduler
cat /sys/block/sda/queue/scheduler
echo deadline > /sys/block/sda/queue/scheduler
cat /sys/block/sda/queue/scheduler

②deadline算法
centos7默认的算法
读多写少,对数据库支持好,但是只要使用ssd,设置为noop即可
深入了解调度算法,可以参照下面博文
http://www.cnblogs.com/kongzhongqijing/articles/5786002.html


本文参考:
https://www.cnblogs.com/nmap/p/6369180.html

posted @ 2019-04-06 17:48  山的那一边  阅读(280)  评论(0)    收藏  举报