KVM 性能调优与限制

kvm内存优化:

调高内存回收水位值
echo 10 > /proc/sys/vm/swappiness
echo 1024000 > /proc/sys/vm/min_free_kbytes

在文件/etc/sysctl.conf中加入 vm.dirty_ratio=10
原理:linux会设置40%的可用内存用来做系统cache,当flush数据时这40%内存中的数据由于和IO同步问题可能导致超时(120s),所将40%减小到10%,避免超时

echo 'vm.dirty_ratio=10' >> /etc/sysctl.conf && sysctl -p
/#swap使用阀值:
echo 'vm.swappiness=1' >> /etc/sysctl.conf &&sysctl -p

/#手动释放swap
sync && echo 1 > /proc/sys/vm/drop_caches
nohup swapoff -a && swapon -a &

http://www.sohu.com/a/137793375_610730
1、开启内存扩展技术EPT
有了EPT技术,那么能够将虚拟机的物理地址直接翻译为宿主机的物理地址,从而把后面那个转换过程去掉了,增加了效率。
只要在BIOS打开了intel 的VT设置

2、
虚拟机可以通过分配巨型页也就是刚才说的大页来提高运行性能。
我们可以先通过命令 cat /proc/meminfo | grep HugePages查看当前系统有多少个大页:
我们看到,当前数量是0。
那么如何设置大页的数量呢?也就是上面的HugePages_Total的数量。
只要运行echo 2000 > /proc/sys/vm/nr_hugepages这个命令即可:

当然这样重启会失效,我们运行这个命令让它永久生效 :sysctl -w vm.nr_hugepages=2000
centos7 如何设置?
接下来,我们还得把大页进行挂载,我们运行:
mount -t hugetlbfs hugetlbfs /dev/hugepages
这个hugetlbfs 是一种特殊文件系统,那至于为什么采用这样的文件系统是因为这样花费的代价小。
那么通过这几步操作,开启->设置大页数量->挂载, 那么宿主机这块就没什么问题了。

3、KSM(Kernel SamePage Merging),也就是所谓的相同页面内存压缩技术。
KSM的原理,是多个进程中,Linux将内核相似的内存页合并成一个内存页。这个特性,被KVM用来减少多个相似的虚拟机的内存占用,提高内存的使用效率。由于内存是共享的,所以多个虚拟机使用的内存减少了。这个特性,对于虚拟机使用相同镜像和操作系统时,效果更加明显。
但是,事情总是有代价的,使用这个特性,都要增加内核开销,用时间换空间。所以为了提高效率,可以将这个特性关闭。方法是:

4、KVM Huge Page Backed Memory
使用方法,需要三部:
mount -t hugetlbfs hugetlbfs /dev/hugepages
保留一些内存给巨页
sysctl vm.nr_hugepages=516
给 kvm 传递参数 hugepages
qemu-kvm - qemu-kvm -mem-path /dev/hugepages

cpu优化:
cpu结构参考文档:
http://kodango.com/cpu-topology

绑定cpu,共享了L3 cache,运行效率自然比随机选择cpu运行,运行中还有可能切换cpu,内存访问有可能跨node的第一种方式要快了

kvm针对cpu和内存是全虚拟机和,针对io和网络则是半虚拟化virtio。
writeback mode在mailserver这种小文件高io的服务器上,其性能是很差的,none模式大部分情况要比writethrough性能稍好一点,所以选择none。
启用方式在libvirt xml disk中加入

磁盘io:

aio
异步读写,分别包括Native aio: kernel AIO 和 threaded aio: user space AIO emulated by posix thread workers,内核方式要比用户态的方式性能稍好一点,所以一般情况都选择native,开启方式

块设备调度器
cfq:perprocess IO queue,较好公平性,较低aggregate throughput
deadline:per-device IO queue,较好实时性,较好aggregate throughput,不够公平,当某些vm有大量io操作,占用了大量io资源时,其它后加入的vm很有可能抢占不到io资源。
echo cfq > /sys/block/sda/queue/scheduler 改成cfq模式

Linux文件系统性能优化参考:
http://blog.chinaunix.net/uid-7530389-id-2050116.html

KVM 缓存模式概览 通常,虚拟机使用宿主机上的一个文件保存它的数据,这个文件代表一个虚拟机作为正常的物理磁盘使用的虚 拟磁盘,然而,从宿主机的角度来看这个虚拟磁盘只是一个正常的数据文件并且可以对它缓存

在这种情况下,缓存是隐藏一些磁盘数据在内存中.当我们只在内存中存储上次读的数据,我们称之为读缓存,或 者 write-through 缓存.当我们还存储一些要写到硬盘的数据在内存中,在以后的某个时间再写到磁盘,我们称 之为读写缓存,或者 write-back 缓存,write-back 缓存通过将写磁盘请求缓存到高速内存中,有更高的性能,然 而它也比 write-through 更有可能丢失数据,因为后者只缓存读请求,写请求立即写到磁盘里。

 如果缓存策略是'writeback',数据会缓存到宿主机的页缓存中 
 如果缓存策略是'none',数据立即写到物理磁盘 
 如果缓存策略是'writethrough',数据将立即写到物理磁盘 

qcow2镜像优势:

1、更小的空间占用
2、支持写时拷贝  copy on write
3、 支持快照
4、支持zilib压缩
5、支持加密

preallocation :
预分配就是说预先将镜像所需的文件空间提供给镜像,这样文件的真实大小不再是“假”的了,对于磁盘来说这个文件真的用了这么多地址 使用df -h 或者du 也会看到真的占用了这么多空间 还可以减少文件的碎片产生,因为地址空间是连续的 raw和qcow2都支持preallocation选项,就是空间预分配。

创建预分配元数据的qcow2格式的镜像应该是参照了 原始的raw镜像文件的一些特点 做的一部分加快读写的优化 ,原理同raw一样,提前以空数据的方式将空间占用,而不是像普通的qcow2格式,按需递增占用 。而以上无论是raw格式还是qcow2预分配元数据的方式都不会直接将1G的空间完全占用,对宿主机的i节点占用上也没有影响,这个可以通过各文件创建和删除后df -hl和df -i 的结果来测试 。
qemu-img create -f qcow2 -o preallocation=metadata

ext4 性能要比 xfs 高,这可能是默认的挂载参数不能充分发挥 xfs 的性能

进程等待IO时,经常处于D状态,即TASK_UNINTERRUPTIBLE状态,处于这种状态的进程不处理信号,所以kill不掉,如果进程长期处于D状态,那么肯定不正常,原因可能有二:
1)IO路径上的硬件出问题了,比如硬盘坏了(只有少数情况会导致长期D,通常会返回错误);
2)内核自己出问题了。
这种问题一旦出现就通常不可恢复,kill不掉,通常只能重启恢复了。
内核针对这种开发了一种hung task的检测机制,基本原理是:定时检测系统中处于D状态的进程,如果其处于D状态的时间超过了指定时间(默认120s,可以配置),则打印相关堆栈信息,也可以通过proc参数配置使其直接panic。

默认的方式下linux会把文件访问的时间atime做记录,文件系统在文件被访问、创建、修改等的时候记录下了文件的一些时间戳,比如:文件创建时间、最近一次修改时间和最近一次访问时间;这在绝大部分的场合都是没有必要的。
因为系统运行的时候要访问大量文件,如果能减少一些动作(比如减少时间戳的记录次数等)将会显著提高磁盘 IO 的效率、提升文件系统的性能。
如果遇到机器IO负载高或是CPU WAIT高的情况,可以尝试使用noatime和nodiratime禁止记录最近一次访问时间戳。
给挂在home下的磁盘批量设置noatime
sed -ri 's/(/home.s+.s+)S+(s+[[:digit:]]+s+[[:digit:]]+)/1noatime2/' /etc/fstab

http://blog.csdn.net/beginning1126/article/details/41983547
http://m.blog.chinaunix.net/uid-30272819-id-5180838.html

io优化参考:
http://syswift.com/124.html

在线对kvm进行限速:

virsh blkdeviotune vm10.39.10.90 hda --total-iops-sec 500 --live --total-bytes-sec 52428800

修改配置文件.xml,在指定disk 内添加

52428800
500

需要关闭虚拟机后重启生效。也可使用动态先进行生效。
sed -i "/target dev='hda'/an52428800n500n " *.xml

带宽限制:









  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 《KVM实战:原理、进阶与性能调优》是一本介绍KVM虚拟化技术的书籍。KVM,全称为Kernel-based Virtual Machine,是一种基于Linux内核的虚拟化解决方案。 这本书首先介绍了KVM的原理。KVM利用Linux内核的虚拟化功能,通过将物理设备的请求转发到虚拟机(VM)来实现虚拟化。它利用虚拟化扩展(Intel VT或AMD-V)来实现快速的虚拟机切换。书中详细介绍了KVM的基本概念、VM的创建与配置以及与其他虚拟化解决方案的对比。 然后,书籍进一步探讨了KVM的进阶技术。它介绍了如何使用KVM进行网络配置、存储管理和虚拟机迁移。此外,书中还介绍了如何集成KVM与云计算、容器等技术,以提高整个系统的性能和可靠性。 最后,这本书还包括了性能调优的内容。它介绍了如何通过对KVM虚拟机的配置进行调整来提高性能。书中讨论了虚拟CPU和内存管理的最佳实践,以及如何合理分配物理资源给虚拟机以提高性能。 通过阅读《KVM实战:原理、进阶与性能调优》,读者可以了解KVM虚拟化技术的原理、基本操作和进阶技术,以及如何通过调优来提高性能。这本书对于想要深入了解KVM技术的从业人员和技术爱好者来说,是一本很好的参考资料。 ### 回答2: KVM是一种开源的虚拟化技术,全称是Kernel-based Virtual Machine,它能够将Linux内核转变为一个虚拟机监控器,通过这种方式可以在一台物理计算机上运行多个虚拟机,提供类似于物理机的计算资源。在《kvm实战:原理,进阶与性能调优》这本书中,作者详细介绍了KVM虚拟化技术的原理、进阶应用和性能调优方法。 这本书首先讲解了KVM虚拟化技术的原理,包括虚拟化的基本概念、KVM的架构和工作原理等。读者可以了解KVM是如何通过虚拟化硬件和内核模块,实现虚拟机的创建、运行和管理的。 接着,书中详细介绍了KVM的进阶应用。例如,如何利用KVM创建高可用性的虚拟机集群,如何通过虚拟机快照功能实现快速备份和恢复等。同时,书中还介绍了与KVM相关的其他开源技术,如QEMU、libvirt等,以及它们在KVM中的应用。 最后一部分是关于KVM性能调优的内容。作者介绍了KVM虚拟化技术的性能瓶颈和优化方法,如CPU调度策略、内存和存储性能优化等。读者可以了解如何根据实际应用场景,调整KVM虚拟机的参数,以达到最佳的性能表现。 通过阅读《kvm实战:原理,进阶与性能调优》,读者可以全面了解KVM虚拟化技术的原理和应用。同时,书中提供了大量实例和案例,帮助读者更好地理解和应用这一技术。这本书对于计算机技术爱好者、系统管理员和云计算从业者来说,都是一本非常实用的参考书。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值