KVM的部署与优化(2)

接上文-----《KVM的概念与云计算》


cpu的缓存绑定cpu的优化

[root@chuck ~] # lscpu|grep cache
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              3072K

L1是静态缓存,造价高,L2,L3是动态缓存,通过脉冲的方式写入0和1,造价较低。cache解决了cpu处理快,内存处理慢的问题,类似于memcaced和数据库。如果cpu调度器把进程随便调度到其他cpu上,而不是当前L1,L2,L3的缓存cpu上,缓存就不生效了,就会产生miss,为了减少cache miss,需要把KVM进程绑定到固定的cpu上,可以使用taskset把某一个进程绑定(cpu亲和力绑定,可以提高20%的性能)在某一个cpu上,例如:taskset -cp 1 25718(1指的是cpu1,也可以绑定到多个cpu上,25718是指的pid).

cpu绑定的优点:提高性能,20%以上

cpu绑定的缺点:不方便迁移,灵活性差

b、内存的优化

1)内存寻址:宿主机虚拟内存 -> 宿主机物理内存

       虚拟机的虚拟内存  -> 虚拟机的物理内存

以前VMM通过采用影子列表解决内存转换的问题,影子页表是一种比较成熟的纯软件的内存虚拟化方式,但影子页表固有的局限性,影响了VMM的性能,例如,客户机中有多个CPU,多个虚拟CPU之间同步页面数据将导致影子页表更新次数幅度增加,测试页表将带来异常严重的性能损失。如下图为影子页表的原理图

wKioL1ZpjiySSHaLAABARR8ozpY926.png       

在此之际,Inter在最新的Core I7系列处理器上集成了EPT技术(对应AMD的为RVI技术),以硬件辅助的方式完成客户物理内存到机器物理内存的转换,完成内存虚拟化,并以有效的方式弥补了影子页表的缺陷,该技术默认是开启的,如下图为EPT技术的原理。

wKiom1ZpmeDDA8vsAAAfYt6BdjU357.jpg

2)KSM内存合并

宿主机上默认会开启ksmd进程,该进程作为内核中的守护进程存在,它定期执行页面扫描,识别副本页面并合并副本,释放这些页面以供它用,CentOS7默认是开启的

[root@chuck ~] # ps aux|grep ksmd|grep -v grep
root        286  0.0  0.0      0     0 ?        SN   12:32   0:00 [ksmd]

3)大页内存,CentOS7默认开启的

[root@chuck ~]# cat /sys/kernel/mm/transparent_hugepage/enabled 

[always] madvise never
[root@chuck ~] # ps aux |grep khugepage|grep -v grep
root        287  0.2  0.0      0     0 ?        SN   12:32   0:21 [khugepaged]


Linux平台默认的内存页面大小都是4K,HugePage进程会将默认的的每个内存页面可以调整为2M。

c、磁盘IO的优化

IO调度算法,也叫电梯算法,详情请看http://www.unixhot.com/article/4

1、Noop Scheduler:简单的FIFO队列,最简单的调度算法,由于会产生读IO的阻塞,一般使用在SSD硬盘,此时不需要调度,IO效果非常好

2、Anticipatory IO Scheduler(as scheduler)适合大数据顺序顺序存储的文件服务器,如ftp server和web server,不适合数据库环境,DB服务器不要使用这种算法。

3、Deadline Schedler:按照截止时间的调度算法,为了防止出现读取被饿死的现象,按照截止时间进行调整,默认的是读期限短于写期限,就不会产生饿死的状况,一般应用在数据库

4、Complete Fair Queueing Schedule:完全公平的排队的IO调度算法,保证每个进程相对特别公平的使用IO

查看本机Centos7默认所支持的调度算法

[root@chuck ~] # dmesg|grep -i "scheduler"
[   11.312549] io scheduler noop registered
[   11.312555] io scheduler deadline registered (default)
[   11.312606] io scheduler cfq registered

临时更改某个磁盘的IO调度算法,将deadling模式改为cfq模式

[root@chuck ~]# cat /sys/block/sda/queue/scheduler 

noop [deadline] cfq 
[root@chuck ~] # echo cfq >/sys/block/sda/queue/scheduler             
[root@chuck ~] # cat /sys/block/sda/queue/scheduler       
noop deadline [cfq]

使更改的IO调度算法永久生效,需要更改内核参数

[root@chuck ~]# vim /boot/grub/menu.lst

kernel /boot/vmlinuz-3.10.0-229.el7 ro root=LABEL=/ elevator=deadline rhgb quiet



d、cache的优化,关于write through和write back,默认write through即可

Write-back

在这种策略下,当数据被写到raid卡的cache中,控制器就向IO调度器返回了写操作完成信号; 双刃剑,它虽然带来了IO性能的提升,但是随之而来的风险:因为cache是ROM,假设服务器突然断电,则cache中的数据可能丢失; 为了解决这个问题,raid卡加加装一块锂电池(BBU),即当服务器断电时,能把cache中的数据刷到磁盘上;同样的道理,BBU又成为一个风险点,因为锂电池需要保证始终有足够的电量来保证能将cache中的数据写到磁盘上,raid卡会加入一个BBU的管理策略,learn cycle(充放电周期,一般有30/90天,让电池充放电一次,持续约6小时),那么这6小时又称为一个风险点;所以raid卡又会增加一个策略:No WB when bad bbu,即当BBU坏掉,或者BBU正在充放电时,禁用write-back,此时Write policy就会变成:write-through。

wKioL1ZpqjuSBfqHAADscRDGpgM591.png

Write through

只有当数据被写到物理磁盘中,控制器才向IO调度器返回了写操作完成信号; 这种策略以牺牲IO性能,来保证数据安全性,淘宝这边的策略:因为Write-Through的io性能无法满足业务的需求,所以我们这边会采用另一个模式:WB when bad bbu,即不管bbu状态是否正常,我们都会采用write-back,那数据安全怎么办?服务器异常断电的情况,在我们这边概率极低;即便很不幸的我们IDC局部断电了,我们也有主备模式来保证数据的相对安全;我们会监控BBU的状态,一旦发生了BBU failed,我们会将安排停机更换

wKiom1Zpqknh_30-AAEAvIAoG2Y580.png



五、创建虚拟机镜像

1、由于在一开始创建了虚拟磁盘,并命名为CentOS-7.1-x86_64.raw,这就是虚拟机的镜像喽。

[root@chuck ~] # cd /opt/
[root@chuck opt] # ls
CentOS-7.1-x86_64.iso  CentOS-7.1-x86_64.raw  rh

2、镜像制作原则

1、分区的时候,只分一个/根分区,并不需要swap分区,由于虚拟机的磁盘性能就不好,如果设置了swap分区,当swap工作的时候,性能会更差。例如阿里云主机,就没有交换分区。

2、镜像制作需要删除网卡(eth0)中的UUID,如果有udev(/etc/udev/rules.d/70-persistent-ipoib.rules)的规则也要删除

3、关闭selinux,关闭iptables

4、安装基础软件的包:net-tools lrzsz screen tree vim wget 

你可能感兴趣的:(优化,部署,kvm, , )