本学习笔记系列都是采用CentOS6.x操作系统,KVM虚拟机的管理也是采用virsh方式,网上的很多的文章都基于ubuntu高版本内核下,KVM的一些新的特性支持更好,本文只是记录了CentOS6.x系列操作系统下KVM优化的点,有很多都是默认支持开启了的,除了采用virtio方式的磁盘IO,与网络IO接口优化之外,其它真是无需太多优化。

1. CPU性能优化

(1) 服务器或宿主机主板BIOS中开启Intel Virtualization Technology(简称VT), 如果主板支持Intel VT-d,建议开启,一些高级的设备的直接分配功能,需要用到该功能。

[root@node01 ~]# egrep '(vmx|svm)' --color=always /proc/cpuinfo

(2) 将qemu进程绑定到特定的CPU node(CPU)或core(核)上——避免L2/L3 Cache miss

待进一步学习。

2. 内存的优化(CentOS6.5 默认开启)

1)EPT巡址优化(默认开启),虚拟地址到物理地址的转换。

[root@node01 ~]# egrep '(ept|vpid)' --color=always /proc/cpuinfo   
fpu_exception   : yes    
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts mmx fxsr sse sse2 ss ht syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts xtopology tsc_reliable nonstop_tsc aperfmperf unfair_spinlock pni pclmulqdq vmx ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt aes xsave avx f16c rdrand hypervisor lahf_lm ida arat epb xsaveopt pln pts dts tpr_shadow vnmi ept vpid fsgsbase smep    
fpu_exception   : yes    
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts mmx fxsr sse sse2 ss ht syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts xtopology tsc_reliable nonstop_tsc aperfmperf unfair_spinlock pni pclmulqdq vmx ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt aes xsave avx f16c rdrand hypervisor lahf_lm ida arat epb xsaveopt pln pts dts tpr_shadow vnmi ept vpid fsgsbase smep

2)开启透明巨页支持

kernel进程khugepaged周期性扫描内存, 自动将地址连续可合并的普通4KB page合并为2MB Hugepage,减少page table.该功能针对KVM虚拟化可能有效果,对于一些特殊服务器,例如数据库等可能会起到相反的结果。

CentOS6.5 默认支持透明巨页,参数查看如下:

# cat /sys/kernel/mm/transparent_hugepage/enabled    
[always] madvise never

# cat /sys/kernel/mm/transparent_hugepage/defrag    
[always] madvise never

# 参数说明:    
never   : 关闭    
alway   : 尽量使用透明内存,扫描内存,有512个4k页面可以整合,就整合成一个2M的页面, 需要使用swap的时候,内存被分割为4k大小.    
madvise : 避免改变内存占用

# 建议宿主机、KVM虚拟机均开启THP、EPT ,性能有很大的提升。

其它: 临时关闭THP方式

echo never > /sys/kernel/mm/transparent_hugepage/enabled   
echo never > /sys/kernel/mm/transparent_hugepage/defrag

3) KSM (Kernel same-page merging) 如果虚拟机内存不会超配,可以禁用KSM。

CentOS系统中KSM默认是关闭的   
# cat /sys/kernel/mm/ksm/run    
0

开启KSM

# echo 1 > /sys/kernel/mm/ksm/run

关闭KSM    
# echo 0 > /sys/kernel/mm/ksm/run

3. 磁盘IO优化

virtio半虚拟化I/O设备框架,标准化guest与host之间数据交换接口,简化流程,减少内存拷贝,提升虚拟机I/O效率

1) virtio-blk  (PCI方式挂盘) virtio默认模式 /dev/vda

2) virtio-SCSI (SCSI方式挂盘)磁盘模式/dev/sda,与真实服务器环境一致,需要高版本内核才支持。等进一步测试。

3) 磁盘缓存模式

writeback    :性能好 (小IO不适用)   
none         :中    
writethrough :下(KVM默认)

4) Native aio: kernel AIO (2%-3%) threaded aio: user space AIO emulated by posix thread workers

5) 块设备IO调度器

CentOS6.5 系统中默认采用的是cfq

# cat /sys/block/sda/queue/scheduler   
noop anticipatory deadline [cfq]

参数说明,其它几种参数可以尝试。   
cfq          :perprocess IO queue  较好公平性,较低aggregate throughput    
deadline     :per-device IO queue  较好实时性,较好aggregate throughput, 不够公平,容易出现VM starvation

可以直接采用如下方式修改:   
# echo "noop" > /sys/block/sda/queue/scheduler    
# cat /sys/block/sda/queue/scheduler          
[noop] anticipatory deadline cfq

4. Network IO

参考学习:http://cloud.51cto.com/art/201412/459638_all.htm

参考学习:http://www.netfoucs.com/article/VICTOR1984/89055.html

1)virtio 本系列KVM虚拟机均是采用该模块,windows操作系统需要单独安装驱动kvm虚拟化学习笔记(五)之windows虚拟机性能调整

2) vhost-net 基于virtio框架的虚拟以太网设备。高版本内核才支持。

说明:上面只是列出优化点,有些还需要进一步的实验进行验证。

KVM性能优化学习笔记的更多相关文章

  1. Pandas 性能优化 学习笔记

    摘要 本文介绍了使用 Pandas 进行数据挖掘时常用的加速技巧. 实验环境 import numpy as np import pandas as pd print(np.__version__) ...

  2. 深挖计算机基础:Linux性能优化学习笔记

    参考极客时间专栏<Linux性能优化实战>学习笔记 一.CPU性能:13讲 Linux性能优化实战学习笔记:第二讲 Linux性能优化实战学习笔记:第三讲 Linux性能优化实战学习笔记: ...

  3. mysql性能优化学习笔记-参数介绍及优化建议

    MySQL服务器参数介绍 mysql参数介绍(客户端中执行),尽量只修改session级别的参数. 全局参数(新连接的session才会生效,原有已经连接的session不生效) set global ...

  4. mysql性能优化学习笔记

    mysql性能优化 硬件对数据库的影响 CPU资源和可用内存大小 服务器硬件对mysql性能的影响 我们的应用是CPU密集型? 我们的应用的并发量如何? 数量比频率更好 64位使用32位的服务器版本 ...

  5. js性能优化--学习笔记

    <高性能网站建设进阶指南>: 1.使用局部变量,避免深入作用域查找,局部变量是读写速度最快的:把函数中使用次数超过一次的对象属性和数组存储为局部变量是一个好方法:比如for循环中的.len ...

  6. mysql性能优化学习笔记(1)优化目的、方向及数据库准备

    前言: 最近参加面试,问到了很多关于mysql的优化方面的问题,回答的不是很好,也是因为原先做的项目流量不是很大,所以对mysql优化不是太了解,所以趁着周末,恶补一下. 本文来源于慕课网sqlerc ...

  7. php性能优化学习笔记

    编写代码 1.尽可能多的使用内置函数2.比对内置函数的时间复杂度,选择复杂度低的 比如 循环20万次-测试isset 和 array_key_exists 耗时 对比isset.php , array ...

  8. Java性能优化学习笔记

    1. 尽量在合适的场合使用单例 使用单例可以减轻加载的负担,缩短加载的时间,提高加载的效率,但并不是所有地方都适用于单例,简单来说,单例主要适用于以下三个方面: 第一,控制资源的使用,通过线程同步来控 ...

  9. PHP性能优化学习笔记--PHP周边性能优化--来自慕课网Pangee http://www.imooc.com/learn/205

    PHP一般运行于Linux服务器中,周边主要包括:Linux运行环境.文件存储.数据库.缓存.网络 常见PHP场景的开销次序: 读写内存<<读写数据库(使用内存作为缓存.异步处理)< ...

随机推荐

  1. 有单例模式 Singleton 涉及的一些防止类被继承的东西

    c#中 : ------------------------------- 当对一个类应用 sealed 修饰符时,此修饰符会阻止其他类从该类继承. java中: ------------------ ...

  2. 初认识ZK

    转自:https://www.jianshu.com/p/8e322462bcca 前言: 前段时间做了sdk直播服务,由于给游戏接入,所以必须要考虑并发性能问题,大家知道直播聊天,房间人数多了的话是 ...

  3. 【328】Python 控制鼠标/键盘+图片识别 综合应用

    本文是基于 [267]实现跨网络传数据 的基础上的,由于在弹出 putty 之后,需要手动输入命令(pass.sh.get.sh)来实现数据的传递,另外就是处理完之后需要手动关闭 putty,本文解决 ...

  4. Maven编译并打包Mahout CDH版源码

    目录 1. 问题描述 最近在使用Mahout里的推荐算法进行实验,由于业务需求,需要修改Mahout源码,将原本输出到HDFS上的结果输出到HBase中.由于Mahout发布的源码都是Maven项目, ...

  5. EF CodeFirst生成数据库到Sqlserver中

    EF CodeFirst简单实例这篇文章介绍了如何用EF去快速生成数据库.但是这个并没有生成到sqlserver中,总觉得不爽.下面就来讲一下,如何将数据库生成到sqlserver中. 按照EF Co ...

  6. 【Git】三、工作区、暂存区、版本库

    一.基础概念 工作区:电脑中可以看到的目录,为电脑中的项目文件 暂存区:暂存修改的地方 版本库:存放项目的各个版本文件 二.详细介绍 工作区为我们工作所使用的目录,在工作区我们对项目文件进行增删改查. ...

  7. css常用属性初总结:伪元素和伪元素

    前面几遍中我们分别说到了id选择器和class选择器,以及它们的区别和联系,下面大家一起来探究一下神奇的为类和伪元素吧. 其实以前我对伪类和伪元素也是搞得稀里糊涂的,现在决定剥开它神秘的外衣,首先,究 ...

  8. Redis服务器操作

    [Redis服务器操作] 1.TIME 返回当前服务器时间. 2.DBSIZE 返回当前数据库的 key 的数量. 3.LASTSAVE 返回最近一次 Redis 成功将数据保存到磁盘上的时间,以 U ...

  9. android 读取json数据(遍历JSONObject和JSONArray)(转)

    public String getJson(){ String jsonString = "{\"FLAG\":\"flag\",\"MES ...

  10. jave 逻辑运算 vs 位运算 + Python 逻辑运算 vs 位运算

    JAVA中&&和&.||和|(短路与和逻辑与.短路或和逻辑或)的区别 博客分类: 面试题目 Java.netBlog  转自 :http://blog.csdn.net/web ...