CPU,内存虚拟化技术

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CPU,内存虚拟化技术相关的知识,希望对你有一定的参考价值。

内容从<深度实践KVM>一书总结
 CPU、内存虚拟化技术与应用场景
 NUMA技术与应用
1.SMP技术
2.MPP模式
3.NUMA技术(none Uniform memory access architecture)非一致性内存访问架构
numactl --hardware :查看当前CPU硬件的情况
 numastat -c qemu-kvm
 关闭Linux系统的自动平衡:echo 0 > /proc/sys/kernel/numa_balancing
虚拟机NUMA信息查看与配置


virsh numatune:查看修改虚拟机的NUMA配置
<numatune>
    <memory mode=‘strict‘ placment=‘auto‘/>
</numatune>
<numatune>
    <memory mode=‘strict‘ node=‘0,2-3‘/>
</numatune>


使用numatune配置虚拟机的NUMA
    virsh numatune rhel7 --nodeset ‘0,2-3‘
vCPU的设置如下
    <vcpu placement=‘auto‘>8</vcpu>
    <vcpu placement=‘static‘ cpuset=‘0-10,^5‘>8</vcpu>
    
    <vcpu>和<numatune>需要保持一致,<numatune>配置的是物理CPU,<vcpu>配置的是CPU的核,包括超线程产生的核。<numatune>使用strict模式,<nodeset>也必须是.
    
    设置一个虚拟机给32个虚拟CPU,但是一开始只能使用8个.然后根据系统压力,热添加CPU给虚拟机
     <vcpu placement=‘auto‘ current=‘8‘>32</vcpu>

    
    CPU pinning策略
    <cputune>
        <vcpupin vcpu="0" cpuset="1-4",^2"/>
        <vcpupin vcpu="1" cpuset="0,1"/>
        <vcpupin vcpu="2" cpuset="2,3"/>
        <vcpupin vcpu="3" cpuset="0,4"/>
    </cputune>
    

     或者使用emulatorpin的方式
         <cputune>
             <emulatorpin cpuset="1-3"/>
         </cputune>

         virsh emulatorpin CentOS7 1-3


     <cpu>
         ……
         <numa>
             <cell cpus=‘0-3‘ memory=‘512000‘/>
             <cell cpus=‘4-7‘ memory=‘512000‘/>
         </numa>
         ...
     </cpu>

             cell:numa的cell或者numa节点
             cpus:一个物理CPU可以使用的CPU范围
             memory:可以使用的内存大小,单位为KB

     虚拟机NUMA和内存KSM
         KSM技术可以合并相同的页,即使是不同的NUMA节点

         关闭ksm

         echo 0 > /sys/kernel/mm/ksm/merge_across_nodes
         或者
         <memoryBacking>
             <nosharepages/>
         </memoryBakcing>

         CPU绑定操作方法
             可以在线配置,并且立即生效


             1.CPU信息查看
             virsh vcpuinfo 21  <------ 虚拟机ID
             
             在线绑定虚拟机的CPU

                 virsh emulatorpin 21 26-31 --live
                 virsh vcpuinfo 21

                 virsh # dumpxml 21


         NUMA在虚拟化应用之外的提示:
         某些应用,比如数据库,为了保证性能,需要尽量使用更多的内存.如果使用系统默认的NUMA自动平衡策略,有可能一个CPU的内存消耗光,另外一个CPU还有内存可以使用,但是系统却去调度swap使用,造成严重的性能下降,使用这些内存消耗型的应用时,可以考虑直接将系统的NUMA自动平衡策略关闭



CPU热添加与应用
    cat /proc/interrupts 查看CPU中断可是看到有几颗CPU在工作
        virsh setvcpus CentOS7 5 --live
        echo 1 > /proc/devices/system/cpu/cpu4/online激活CPU4



        CPU Nested技术与配置方法
        第一步
            rmmode kvm-intel
            modprobe kvm-intel nested=1
            或者修改modprobe.d  编辑/etc/modprobe.d/kvm_mod.conf
            options kvm-intel nested=y


            检查cat /sys/module/kvm_intel/parameters/nested   Y
        第二步:
            第一层的虚拟机配置文件,要将物理机CPU的特性全部传给虚拟机,使用CPU HOST技术

            <cpu mode=‘host-passthrough‘/>
        第三步:
            和宿主机一样,将第一层虚拟机按照宿主机配置,安装相应的组件,然后就可以安装第二层的虚拟机




KSM技术与应用
1. 宿主机内存合并
      KSM服务
      ksmtuned服务
      要关闭KSM,关闭相关的两个服务
              service ksm stop
              servicde ksmtuned stop
              chkconfig ksm off
              chkconfig ksmtuned off
       桌面虚拟机推荐使用, 但是要根据实际情况控制内存超用的比率


  内存气球技术
              1.安装virt balloon的驱动,内核开启CONFIG_VIRTIO_BALLOON    CentOS7默认开启,并且默认安装该驱动

               lspci
                 ...
                 Red Hat.Inc Vritio balloon

                 虚拟机需要增加以下配置
                 <memballoon model=‘virtio‘>
                         <alias name=‘balloon0‘/>
                 </memballoon>



                 查看当前内存大小
                       virsh qemu-monitor-command windows7 --hmp --cmd info balloon
                       balloon:actual=4096
                   限制内存大小为2GB并查看
                       virsh qemu-monitor-command windows7 --hmp --cmd balloon 2048

      内存限制技术
                  virsh memtune virtual_machine --parameter size


                  hard_limit
                  soft_limit
                  swap_hard_limit
                  min_guarantee

                      virsh memtune windows7 --hard_limit 9437184 --config
                      virsh memtune windows7 --soft_limit 7340032 --config
                      virsh memtune windows7 --swap_hard_limit 10488320 --config
                      virsh memtune windows7 --min_guarantee 4194304 --config



                      --config写到配置文件中,下次重启虚拟机进程生效
                      --live:影响正在运行的虚拟机,虚拟机进程停止后,效果消失
                      --current:影响停止和正在运行的虚拟机,如果虚拟机运行,虚拟机进程停止后,效果消失

本文出自 “lionel” 博客,请务必保留此出处http://reliable.blog.51cto.com/10292844/1782384

以上是关于CPU,内存虚拟化技术的主要内容,如果未能解决你的问题,请参考以下文章

[虚拟化] CPU虚拟化技术 - Introduction

Linux 操作系统原理 — 虚拟内存管理

OpenStack 之 虚拟化原理

intel 6核心 12线程 支持虚拟化技术的CPU 都有哪些?

(技术分析)kvm虚拟化原理

内存虚拟化实现