KVM虚拟化技术详解(四)--KVM的优化

目录:
(4.1)KVM虚拟机性能优化思路及方案
(4.2)利用tuned优化
(4.3)配置KSM
(4.4)经过配置大页优化guestos
(4.5)配置CPU的亲和性
(4.6)半虚拟化驱动vim


(4.1)KVM虚拟机性能优化思路及方案
经过前面的学习咱们已经能够正常的建立虚拟机了,固然运行虚拟机不是难点,难点在于怎样让咱们建立的虚拟机运行的更高效。咱们要运行的KVM虚拟机通常要从内存来考虑,考虑每台虚拟机消耗内存的大小;同时还要从CPU资源来考虑,确保每台虚拟机有足够的CPU资源使用,还要保证每台虚拟机使用CPU资源时不会越界而致使系统管理异常;还要从虚拟机的网络消耗来考虑确保网络传输通畅,以及服务在运行时网络的可靠性保证等;最后还要从虚拟机硬盘的IO速率来考虑,保证数据传输时的IO高可靠传输。缓存


(4.2)利用tuned优化
(4.2.1)首先咱们检查一下系统中tuned服务是不是正常的运行的。
# yum list tuned*
# systemctl list-unit-files | grep tuned
# systemctl is-active tuned
KVM虚拟化技术详解(四)--KVM的优化
(4.2.2)tuned服务为咱们提供了一系列的优化方案,对系统不一样的用途能够采用不一样的方案,咱们可使用以下的命令进行查看,其中balanced表示优化负载均衡,desktop表示优化桌面的,network-latency表示优化网络延迟的,network-throughput表示优化网络吞吐量的,powersave表示使用节电模式优化,virtual-guest表示优化客户机的,virtual-host表示优化宿主机的。
# tuned-adm list
KVM虚拟化技术详解(四)--KVM的优化
(4.2.3)若是咱们想知道每一个优化方案的具体内容,能够进入到/usr/lib/tuned/目录中查看,能够发现virtual-guest中设置的vm.dirty_ratio值就是/proc/sys/vm/目录下的dirty_ratio
KVM虚拟化技术详解(四)--KVM的优化
KVM虚拟化技术详解(四)--KVM的优化
KVM虚拟化技术详解(四)--KVM的优化
(4.2.4)咱们也能够本身定制一个方案kvm-os,在tuned.conf配置文件中修改vm.dirty_ratio值为20
KVM虚拟化技术详解(四)--KVM的优化
KVM虚拟化技术详解(四)--KVM的优化
(4.2.5)此时咱们发现kvm-os这个方案已经生成了,接着咱们设置当前生效的方案为kvm-os,同时发如今咱们的系统中/proc/sys/vm/dirty_ratio的值也已经由以前的30变成当前的20了
# tuned-adm list
# tuned-adm profile kvm-os
# cat /proc/sys/vm/dirty_ratio
KVM虚拟化技术详解(四)--KVM的优化
KVM虚拟化技术详解(四)--KVM的优化
KVM虚拟化技术详解(四)--KVM的优化
(4.2.6)咱们若是只想查看当前系统使用的方案可使用active的参数查看,若是咱们想查看系统的推荐的优化方案则可使用recommend参数
# tuned-adm active
# tuned-adm recommend
KVM虚拟化技术详解(四)--KVM的优化性能优化


(4.3)配置KSM
(4.3.1)咱们若是从内存方面来考虑优化时,主要会从三个方面入手,分别是balloon、KSM、大页。首先是balloon气球,它主要是经过balloon来实现内存的一种动态收缩,通常若是咱们须要修改虚拟机的内存是经过关闭虚拟机后,而后去设置虚拟机的内存大小,正常状况下是没法实如今线修改的,可是咱们使用了balloon技术后就能够实如今线修改虚拟机内存大小的需求
KVM虚拟化技术详解(四)--KVM的优化
(4.3.2)在Linux系统中默认是开启balloon服务的。
# grep -i balloon /boot/config-3.10.0-229.el7.x86_64
KVM虚拟化技术详解(四)--KVM的优化
(4.3.3)咱们在vms002主机上打开KVM环境中的rhel7.1虚拟机,查询到rhel7.1虚拟机的可用内存为2G左右。而后咱们能够设置rhel7.1虚拟机的balloon气球的大小为512M,也能够设置rhel7.1虚拟机的balloon气球的大小为1024M,因此能够看出来balloon的数值减少则虚拟机的可用内存减少,balloon的数值增大则虚拟机的可用内存增大。
# virsh --help | grep qemu
# virsh qemu-monitor-command rhel7-1 --hmp --cmd info balloon
# virsh qemu-monitor-command rhel7-1 --hmp --cmd balloon 512
KVM虚拟化技术详解(四)--KVM的优化
KVM虚拟化技术详解(四)--KVM的优化
KVM虚拟化技术详解(四)--KVM的优化
KVM虚拟化技术详解(四)--KVM的优化
KVM虚拟化技术详解(四)--KVM的优化
(4.3.4)虽然基于内核的虚拟机KVM被设计为自调优,可是能够调整一些参数使KVM主机性能更好。最重要的参数之一就是内核同页合并KSM(kernel samepage merging),这一特性容许内核更有效地处理内存。KSM容许Linux内核识别出包含相同内容页的内存页,而后合并这些内存页,将数据整合在一个位置能够屡次引用。在咱们的物理机中若是使用了KSM技术,是能够很好的节约咱们的内存空间提高效率的。内存的最小单位是page(页),如今假设咱们的物理机上有两台虚拟机,vm1和vm2这两台虚拟机都是会消耗物理机的内存的,因此虚拟机里的内存数据,最终仍是保存在物理机的内存中承载的,如今假设vm1和vm2两台虚拟机都各自消耗了1G的内存,此时在物理机中一共消耗2G的内存,此时若是这两个系统是相同的,且运行的服务也是相同的,那么此时vm1的内存中和vm2的内存中应该会存在不少的相同数据,例若有800M的相同数据,那么经过KSM技术即可以将这800M的数据合并在一块儿共同使用,此时两台虚拟机一共占用的实际物理总内存就会由原来的2048M减小到如今的1248M的空间,这样能够极大的节约咱们的物理内存资源。这样就让咱们一个物理机4G内存,运行30-50台虚拟机就变成了可能,不过此时还会有其余的问题,例如咱们的硬盘可能没法支撑如此多的虚拟机同时运行时的大量IO读写,且咱们的CPU若是不够强悍的话可能也是会占用到咱们其余服务对CPU资源的使用。
KVM虚拟化技术详解(四)--KVM的优化
(4.3.5)如今咱们在/var/lib/libvirt/images目录中方两个相同的镜像small1.img和small2.img,分别给small1.img和small2.img镜像的内存大小都设置为2048M,并设置好网卡,硬盘,显示协议的配置信息。
注意:咱们能够在虚拟机中设置以下的信息,指定虚拟机不使用共享页
# virsh edit small1
<memoryBacking>
<nosharepages/>
</memoryBacking>
KVM虚拟化技术详解(四)--KVM的优化
KVM虚拟化技术详解(四)--KVM的优化
KVM虚拟化技术详解(四)--KVM的优化
KVM虚拟化技术详解(四)--KVM的优化
(4.3.6)若是咱们想要使用KSM技术,则必需要开启ksm.service和ksmtuned.service这两个服务。
# systemctl list-unit-files | grep ksm
KVM虚拟化技术详解(四)--KVM的优化
(4.3.7)咱们进入到/sys/kernel/mm/ksm/目录下,此处的配资文件就是对咱们的KSM属性进行设置的。
KVM虚拟化技术详解(四)--KVM的优化
(4.3.8)/sys/kernel/mm/ksm/目录下run参数通常有3个可用值:0、一、2,其中run值为0表明的是中止相同页扫描,可是已经合并的相同页会继续保留;若是设置的run值为1表明激活相同页合并的扫描;若是设置的run值为2表明的是中止扫描,已经合并的相同页会分开。咱们将small1和small2两台虚拟机启动起来后,而后让small1虚拟机和small2虚拟机消耗足够大的内存,将两台虚拟机都挂载到内存中,同时在small1虚拟机上建立一个文件大小为2G,名称为file的文件,并将建立的2G文件拷贝到small2虚拟机上。
# mount -t tmpfs none /mnt
# dd if=/dev/zero of=file bs=1G count=2
# scp file 192.168.122.159:/mnt/
KVM虚拟化技术详解(四)--KVM的优化
KVM虚拟化技术详解(四)--KVM的优化
(4.3.9)因为KSM中run的值默认的状态是1,因此是启用相同页合并的功能的,此时咱们将run的值修改成2即中止扫描,并将已经合并的相同页分开。能够发现此时两台虚拟机small1和small2所使用的共享内存已经分开了,因此物理机vms002主机消耗由926M增长到了3661M。这就是使用KSM技术给咱们内存使用效率带来极大提高的一个表现方式。
# echo 2 > /sys/kernel/mm/ksm/run
KVM虚拟化技术详解(四)--KVM的优化
(4.3.10)若是咱们想要计算使用KSM实际节省了多少的内存,计算正在被合并的page的数量,则能够查看pages_sharing参数,已知系统里page的默认大小值为4096b即4K,因此计算出801794个pages_sharing值为3132M,大约为3G左右的内存空间。
# getconf -a | grep -i page
# echo 801794*4/1024 | bc
KVM虚拟化技术详解(四)--KVM的优化
KVM虚拟化技术详解(四)--KVM的优化
KVM虚拟化技术详解(四)--KVM的优化
(4.3.11)sleep_millisecs表示的是扫描的时间间隔,KSM须要去扫描内存,找到那些相同页,而后把这些相同页合并,由于KSM须要经过扫描操做而找到相同页,可是扫描不可能一直进行,正常的是要有间隔的,因此sleep_millisecs参数就是设置这个间隔参数的,sleep_millisecs参数的默认单位是毫秒,例如在个人主机中cat sleep_millisecs的参数值为41毫秒。每隔41ms扫描一次,扫描的时候,run里的值会被自动设置为1,待扫描完成后,run里的值会自动设置为0。
KVM虚拟化技术详解(四)--KVM的优化
(4.3.12)pages_unshared表示的是在内存中没有共同数据而没法合并的页;pages_volatile表示的是在内存中有一部分的数据变化很是的频繁,而致使内存是没法合并的;pages_to_scan表示的是从上次休眠到此次休眠之间扫描了多少个页面。
KVM虚拟化技术详解(四)--KVM的优化服务器


(4.4)经过配置大页优化guestos
配置大页即经过配置page的大小,选择合适的page从而优化咱们的虚拟机的运行效率。CPU在执行任务的时候,一次只能执行一个任务,例如CPU在执行一个任务的时候,时间片到期了,那么CPU便会将当前执行的任务封存起来去执行下一个任务,可是对每一个任务来讲,每一个进程都会感受本身是独享内存的,这个内存叫作线性内存,咱们使用ps命令查看的VSZ就是这个线性内存。这个线性内存须要映射到物理内存里,这种映射关系叫作PTE,这个条目被保存在TLB的计算机硬件资源上,其中TLB名为旁路转换缓冲,它是CPU的一个缓存硬件。CPU在进行内存的切换的时候,通常是以页为单位进行切换的,而page页的大小默认是4k,若是某个应用程序消耗大量的内存,此时产生PTE的条目就会不少,切换时就会增长CPU的负载,而咱们减缓这个负载的方法就是增大page的单位大小,这样所产生的PTE的条目就会下降,从而使得咱们应用程序所运行的环境获得了优化。在咱们的x86结构的服务器中,它支持的page的大小有3种:4k、2M(透明大页)、1G,默认的page页大小为4k,当设置的page大小为2M或者1G的时候咱们称之为大页或者巨页,当咱们运行消耗很大内存的应用程序的时候,咱们分配给这个应用程序大页,就能够很好的提升咱们读取内存的性能。
KVM虚拟化技术详解(四)--KVM的优化
(4.4.1)咱们经过查看/proc/meminfo就能够了解到当前系统中大页的配置使用状况,当前系统中大页的个数HugePages_Total为0,且大页的默认大小Hugepagesize为2M
# cat /proc/meminfo | grep Huge
KVM虚拟化技术详解(四)--KVM的优化
(4.4.2)咱们也是能够对咱们大页的默认值进行设置的,咱们进入到/proc/sys/vm/目录下,其中nr_hugepages表示设置大页的数值,咱们设置为2500个,因此此时咱们系统中一共有2500*2M即5G左右的大页内存空间可用。
KVM虚拟化技术详解(四)--KVM的优化
KVM虚拟化技术详解(四)--KVM的优化
(4.4.3)以上的设置只是当前生效,在系统重启后就会失效了,若是咱们但愿系统在重启后也仍然可以生效,则应该把设置写入到/etc/sysctl.conf的配置文件中
# sysctl -a | grep nr_hugepages >> /etc/sysctl.conf
KVM虚拟化技术详解(四)--KVM的优化
(4.4.4)接着咱们配置一个虚拟机来使用大页,咱们编辑rhel7-1虚拟机,添加使用大页的参数,将虚拟机启动后
# virsh edit rhel7-1
<memoryBacking>
<hugepages/>
</memoryBacking>
KVM虚拟化技术详解(四)--KVM的优化
KVM虚拟化技术详解(四)--KVM的优化
KVM虚拟化技术详解(四)--KVM的优化
(4.4.5)此时发现(2500-444)*2M=4112M,约等于4G内存,和咱们开启的rhel7-1虚拟机使用的内存一致。这就是咱们经过配置大页优化guestos
# grep -i hugepage /boot/config-3.10.0-229.el7.x86_64---查看系统是否支持hugepage 选项
# cat /proc/meminfo | grep Huge
KVM虚拟化技术详解(四)--KVM的优化
KVM虚拟化技术详解(四)--KVM的优化
(4.4.6)咱们目前使用的大页,系统默认设置的值为2M,咱们也能够经过修改配置文件,将默认的大页值修改成1G,hugepagesz=1GB表示设置大页的值为1G,hugepages=5表示设置大页的个数为5个,default_hugepagesz=1GB表示在使用大页时若是没有指定默认是挂载1个大页。而后更新一下内核参数,并将系统重启一下。
# vim /etc/default/grub
# grub2-mkconfig -o /boot/grub2/grub.cfg
KVM虚拟化技术详解(四)--KVM的优化
KVM虚拟化技术详解(四)--KVM的优化
(4.4.7)此时咱们发现系统中的已经生成了单位大小为1G的大页且有5个,咱们将rhel7-1虚拟机启动起来后,便开始使用3个1G的巨页运行虚拟机了,这样即可以有效的提升咱们内存和CPU的使用效率。
KVM虚拟化技术详解(四)--KVM的优化
KVM虚拟化技术详解(四)--KVM的优化网络


(4.5)配置CPU的亲和性
(4.5.1)咱们的主机是有2颗可用的CPU,因此正常状况下咱们的虚拟机的进程是运行在任意的CPU上的。
# ps mo pid,lwp,comm,psr,args pgrep qemu-kvm
KVM虚拟化技术详解(四)--KVM的优化
KVM虚拟化技术详解(四)--KVM的优化
(4.5.2)若是咱们但愿每一个虚拟机运行在各自的CPU上,不会互相抢占资源,则能够经过在KVM虚拟机中设置CPU的亲和性,设置rhel7-1虚拟机的进程在1号CPU上运行,设置rhel7-2虚拟机得进程默认是在0号CPU上运行,咱们使用top命令查询到两台虚拟机的进程,最终发现两台虚拟机都运行在各自设置的CPU上了。
# virsh edit rhel7-1
KVM虚拟化技术详解(四)--KVM的优化
KVM虚拟化技术详解(四)--KVM的优化
KVM虚拟化技术详解(四)--KVM的优化
KVM虚拟化技术详解(四)--KVM的优化
KVM虚拟化技术详解(四)--KVM的优化负载均衡


(4.6)半虚拟化驱动
在以前的虚拟机P2V迁移过程当中,咱们的宿主机KVMhost使用的是rhel6.6系统,被迁移的物理机TestRhel7使用的是rhel7.1系统,通常来讲咱们在作P2V时,就是在被迁移的物理机中,找一张光盘,从光盘引导,而后把这个系统里的数据从本地硬盘迁移到宿主机KVMhost的硬盘里。被迁移的物理机是Linux系统时迁移后是能够正常在宿主机中运行的,可是当被迁移的物理机是Windows系统时却会出现没法正常运行的状况。通常咱们把Windows系统安装在物理机上的时候,都会在物理机里安装驱动,这些都是真实的硬件驱动,可是若是被迁移到宿主机的KVM环境里后,例如没法识别KVM环境里的硬盘virtio类型,因此就会致使没法正常开机。因此对Windows系统进行P2V以前,须要先在Windows系统里安装对应的软件包才能够,包括:virtio-win-1.1.16(disk driver).vfd和libguestfs-winsupport-1.0-7.el6.x86_64.rpm。其中virtio-win就是半虚拟化驱动,libguestfs-winsupport就是提供了对NTFS文件系统支持的驱动程序。
(4.6.1)对Windows系统作P2V的过程:1.首先在被迁移的物理机里安装virtio-win和libguestfs-winsuppor驱动程序;2.插入P2V光盘,开始进行P2V迁移;3.在宿主机启动被迁移的虚拟机。
KVM虚拟化技术详解(四)--KVM的优化
(4.6.2)对Windows系统作V2V的过程:1.首先在Windows虚拟机里安装virtio-win和libguestfs-winsuppor驱动程序;2.把Windows虚拟机的硬盘文件及配置文件拷贝到KVM宿主机里;3.开始对硬盘格式进行转换及配置文件格式转换和文件修改;4.在宿主机启动被迁移的虚拟机。
KVM虚拟化技术详解(四)--KVM的优化
(4.6.3)接着咱们使用一台rhel6.6的系统模拟物理机,在rhel6.6物理机的KVM环境中安装一台Win7系统,用软盘的方式添加virtio-win的驱动
KVM虚拟化技术详解(四)--KVM的优化
KVM虚拟化技术详解(四)--KVM的优化
KVM虚拟化技术详解(四)--KVM的优化
KVM虚拟化技术详解(四)--KVM的优化
KVM虚拟化技术详解(四)--KVM的优化
KVM虚拟化技术详解(四)--KVM的优化
(4.6.4)接着要选择加载驱动程序项,将软盘的Win7加载进来,此时就能正常的看到硬盘分区信息了
KVM虚拟化技术详解(四)--KVM的优化
KVM虚拟化技术详解(四)--KVM的优化
KVM虚拟化技术详解(四)--KVM的优化
KVM虚拟化技术详解(四)--KVM的优化
(4.6.5)安装好系统后会发现网卡不能识别,这是因为KVM中的Windows虚拟机缺乏驱动的缘由形成的,此时咱们须要将RHEV-toolsSetup_3.5_9.iso这个镜像导入到Windows虚拟机中,首先将CD驱动器弹出,而后设置挂载RHEV-toolsSetup_3.5_9.iso这个镜像,此时找到RHEV-toolsSetup软件运行安装起来便可。
KVM虚拟化技术详解(四)--KVM的优化
KVM虚拟化技术详解(四)--KVM的优化
KVM虚拟化技术详解(四)--KVM的优化
KVM虚拟化技术详解(四)--KVM的优化
(4.6.6)全部驱动程序安装完毕后须要将系统重启一下,此时咱们的系统便正常的获取了IP地址了,同时发现相关的设备也已经安装上了Redhat提供的设备驱动正常运行了。
KVM虚拟化技术详解(四)--KVM的优化
KVM虚拟化技术详解(四)--KVM的优化
KVM虚拟化技术详解(四)--KVM的优化ide

—————— 本文至此结束,感谢阅读 ——————性能

相关文章
相关标签/搜索