zoukankan      html  css  js  c++  java
  • 虚拟化KVM之优化(三)

     

     KVM的优化

    1.1 cpu的优化

    • inter的cpu的运行级别,(Ring2和Ring1暂时没什么用)Ring3为用户态,Ring0为内核态 

    Ring3的用户态是没有权限管理硬件的,需要切换到内核态Ring0,这样的切换(系统调用)称之为上下文切换,物理机到虚拟机多次的上下文切换,势必会导致性能出现问题。

    对于全虚拟化,inter实现了技术VT-x,在cpu硬件上实现了加速转换,CentOS7默认是不需要开启的

    • cpu的缓存绑定cpu的优化
    [root@linux-node1 qemu]# lscpu|grep cache
    L1d cache:             32K
    L1i cache:             32K
    L2 cache:              256K
    L3 cache:              6144K

    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绑定的缺点:不方便迁移,灵活性差

     1.2 内存优化

    内存寻址:

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

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

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

    • KSM内存合并 

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

    [root@linux-node1 qemu]# ps aux|grep ksmd|grep -v grep
    root         31  0.0  0.0      0     0 ?        SN   07:07   0:00 [ksmd]
    • 大页内存,CentOS7默认开启的
    [root@linux-node1 qemu]# cat /sys/kernel/mm/transparent_hugepage/enabled 
    [always] madvise never

    1.3 I/O优化

    IO调度算法,也叫电梯算法,详情请看http://www.unixhot.com/article/4
    ① Noop Scheduler:简单的FIFO队列,最简单的调度算法,由于会产生读IO的阻塞,一般使用在SSD硬盘,此时不需要调度,IO效果非常好 
    ② Anticipatory IO Scheduler(as scheduler)适合大数据顺序顺序存储的文件服务器,如ftp server和web server,不适合数据库环境,DB服务器不要使用这种算法。 
    ③ Deadline Schedler:按照截止时间的调度算法,为了防止出现读取被饿死的现象,按照截止时间进行调整,默认的是读期限短于写期限,就不会产生饿死的状况,一般应用在数据库 
    ④ Complete Fair Queueing Schedule:完全公平的排队的IO调度算法,保证每个进程相对特别公平的使用IO

    2.6 内核: Noop CFQ AS Deadline 默认:CFQ
    3.10内核: Noop CFQ Deadline 默认:Deadline

    [root@linux-node1 qemu]# dmesg|grep -i "scheduler"  #查看本机Centos7默认所支持的调度算法
    [    1.207359] io scheduler noop registered
    [    1.207362] io scheduler deadline registered (default)
    [    1.207404] io scheduler cfq registered
    [root@linux-node1 qemu]# cat /sys/block/sda/queue/scheduler  #centos 7 默认是deadline
    noop [deadline] cfq 

    虚拟磁盘及镜像

    一开始创建的虚拟磁盘就是镜像

    [root@linux-node1 data]# ls centos-7-x86_64
    centos-7-x86_64

    镜像制作原则

    • 分区的时候,只分一个/根分区,并不需要swap分区,由于虚拟机的磁盘性能就不好,如果设置了swap分区,当swap工作的时候,性能会更差。例如阿里云主机,就没有交换分区。
    • 镜像制作需要删除网卡(eth0)中的UUID,如果有udev(/etc/udev/rules.d/70-persistent-ipoib.rules)的规则也要删除
    • 关闭selinux,关闭iptables
    • 安装基础软件的包:net-tools lrzsz screen tree vim wget
  • 相关阅读:
    Orchard CMS中如何打包不带源码的模块
    牛X的CSS3
    Docker指令
    Spring Boot 应用 发布到Docker
    Haproxy全透明代理
    TCP/IP协议理解
    ubuntu tomcat 部署java web
    UDP"打洞"原理
    java多线程-线程通信
    window环境下杀死tomcat
  • 原文地址:https://www.cnblogs.com/w787815/p/9279579.html
Copyright © 2011-2022 走看看