kvm高级功能详解

半虚拟化驱动

 

1.qemu模拟IO设备的基本原理和优缺点

KVM是必须使用硬件虚拟化辅助技术,kvm中实现半虚拟化驱动的方式是采用virtio这个linux上的设备驱动标准框架

原理:在使用qemu模拟IO的情况下,当客户机中的设备驱动程序发起IO操作请求之时,kvm模块中的IO操作捕获代码会拦截这次IO请求,然后在经过处理后将本次IO请求的信息存放到IO共享页,并通知用户控件的qemu程序。qemu模拟程序获得IO操作的具体信息之后,交由硬件模拟代码来模拟出本次的IO操作。完成之后,将结果放回到IO共享页,并通知KVM模块中的IO操作捕获代码。最后由kvm模块中的捕获代码读取IO共享页中的操作结果,并把结果返回到客户机中。当然在这个操作过程中客户机作为一个qemu进程在等待IO时也可能被阻塞,另外当客户机通过DMA访问大块IO之时,qemu模拟程序将不会把操作结果放到IO共享页中,而是通过内存映射的方式将结果直接写到客户机的内存中去,然后通过kvm模块告诉客户机DMA操作已经完成。

优点:可以模拟各种各样的硬件设备,包括一些不长用的或很老很经典的设备,而且不用修改操作系统,就可以实现模拟设备在客户机中正常工作。

缺点:每次IO的操作的路径比较长,有较多的VMEntryVMExit发生,需要多次上下文切换,也需要多次数据复制,所以它的性能较差

 

2.virtio的基本原理和优缺点

virtio的基本结构框架:

其中前端驱动是在客户机中存在的驱动程序模块,而后端处理程序是在qemu中实现的,在前后端驱动之间,还定义了客户机与qemu之间的通信,其中virtio这一层是虚拟队列接口,虚拟队列实际上实现跨越客户机操作系统和kvm的衔接点。virtio半虚拟化驱动的方式,可以很好的IO性能,性能几乎可以达到和native(原生)差不多的IO性能。

virtio缺点:它需要客户机必须安装特定的virtio驱动使其知道是运行在虚拟化环境中,并且按照virtio的规定格式进行数据传输,不过客户机中可能有一些老的linux系统不支持virtio还有一些主流的windows系统需要安装特定的驱动才支持virtio

 

使用virtio_balloon

内存的balloon(气球)技术可以在客户机运行时动态地调整它所占用的宿主机内存资源,而不需要关闭客户机

气球内的内存是可以供宿主机使用的(但不能被客户机访问或使用),当宿主机内存紧张,空余内存不足时,可以请求客户机收回部分客户机的部分内存,客户机就会释放其空闲的内存。若此时客户机的空闲内存不足,可能还会回收部分使用中的内存,可能会将部分内存换出到客户机的交换分区(swap),从而使内存气球膨胀,进而使宿主机回收气球中的内存用于其他进程,当客户机内存不足时,也可以让客户机的内存气球压缩,释放出内存气球中的部分内存,让客户机使用更多的内存。

 

原理:

1.kvm发送请求到客户机操作系统让其归还一定数量的内存给kvm

2.客户机操作系统中的virtio_balloon 驱动接收到kvm的请求

3.virtio_balloon驱动使客户机的内存气球膨胀,气球中的内存就不能被客户机访问,如果此时客户机中内存剩余量不多,并且不能让内存气球膨胀到足够大以满足kvm的请求,那么尽量区满足

4.客户机操作系统归还气球中内存给kvm

5.kvm可以从气球中得来的内存分配到任何地方

 

优点:

1.因为气球能够被控制和监控,所以能潜在节约大量内存。它不同于KSM(内存页共享技术)不可控的由内核自发完成。

2.气球对内存的调节很灵活,可以精细也可以粗旷

3.宿主机收回来的内存也可以不分配出去

 

缺点:

1.气球需要客户机操作系统加载virtio_balloon驱动,然而并非每个客户机系统都有该驱动

2.如果大量回收客户机系统的内存,那么气球可能会降低客户机操作系统的性能,增加客户机磁盘的IO,如果处理机制不好,还有可能使正在运行的进程由于内存不足导致执行失败

3.目前没有比较方便的,自动化的机制管理气球。

4.内存的动态增加或减少,可能会造成内存被过度碎片化。从而降低内存使用时的性能。另外内存的变化会影响到客户机内核对内存使用的优化。

 

气球增加给客户机的内存  不能超过 客户机启动时的总内存

 

内存过载使用主要有三种方式:wappingballooningpage sharing。气球是一种让内存过载使用的非常有效的机制

 

 

使用virtio_net

使用virtio_net半虚拟化驱动,可以提高网络吞吐量和降低网络延迟。要使用virtio_net需要两部分支持:宿主机中的qemu工具的支持和客户机中的virtio_net驱动的支持。

 

lspci显示系统中所有pci总线设备或连接到该总线上的所有设备的工具  

-v 显示设备的详细信息

-vv显示设备更详细的信息

-vvv显示设备所有可解析的信息

 

ethtool 用于查询及设置网卡参数的命令 -i 查询ethn 网关的相关信息

 

宿主机中的TSOGSO的设置

在使用virtio_net时得到的依然是较低的性能,可以检查宿主机中对GSOTSO特性的设置,关闭GSOTSO可以是半虚拟化网络驱动的性能更加优化

 

ethtool -K eth0 gso off  关闭gso

 

使用virtio_blk

virtio_blk驱动使用virtio API为客户机提供了一个高效访问块设备IO的方法

使用virtio_blk驱动的磁盘显示为/dev/vda  如果未被正确识别  可以在fstab中修改下

 

kvm_clock的配置

 

由于虚拟机的中断并不是真正的中断,而是通过宿主机注入的虚拟中断,因此终端并不是总能同时立即传递给一个虚拟机所有虚拟cpu,导致了客户机的时间不准却性

不变的时钟计数器  查看宿主机 #grep constant_tsc /proc/cpuinfo

在启动时 使用 -cpu host 才能将这个特性传递给客户机

 

dmesg用于检测和控制内核环缓冲    

 

设备直接分配(VT-d

客户机使用的设备大致分为3种类型

1.qemu纯软件模拟的设备

2.实现VIRTIO API 的半虚拟化驱动的设备

3.pci设备直接分配

 

模拟IO设备的方式优点:对硬件平台的依赖性较低,可以方便模拟一些流行的和较老的设备,不需要宿主机和客户机的额外支持,因此兼容性高;缺点是IO路径较长,VM-exit次数较多,因此性能较差。一般适用于对IO性能要求不高的场景或者模拟一些老旧的设备

 

virtio半虚拟化设备方式的优点:实现了VIRTIO API ,减少了vm-exit次数,提高了客户机IO执行效率,比普通模拟IO的效率高很多;缺点是需要客户机中与virtio相关驱动的支持,因为兼容性较差,而且IO频繁时的cpu使用率较高

 

PCI设备直接分配

它允许将宿主机中的物理pci设备直接分配给客户机完全使用。 客户机对直接分配的设备 不需要kvm插手  和真的一样使用。为了设备的分配的安全性,还需要中断重映射。缺点:在动态迁移功能将受到限制,不过可以用热插拔或libvirt工具等方式来缓解这个问题。

 

在宿主机中隐藏设备

使用pci_stub这个内核模块来对需要分配给客户机的设备进行隐藏,从而让宿主机来和未被分配该设备的客户机都无发使用该设备,达到隔离和安全使用的目的

1.#modprobe pci_stub

2.ls /sys/bus/pci/drivers/pci-stub

3.查看设备的厂商IDvendor ID)和设备IDdevice ID#lspci -Dn -s 0800.0 (假设此设备的BDF0800.0

4.绑定设备到pci_stub驱动

 

lspci -k -s 0800.0 -k显示输出正在使用的驱动和内核中可以支持该设备的模块。 -s 显示后面设备的信息

 

SR-IOV技术

为了实现多个虚拟机共享一个物理设备的资源,并且达到直接分配的性能。

SR-IOV新功能类型:

 1.物理功能PF:一个普通的PCI-e设备(带有SR-IOV功能)可以放在宿主机中配置和管理其他VF,本身也可作为单独的功能使用

 2.虚拟功能VF:由PF衍生而来的轻量级的PCI-e功能包含数据传送所需的资源,简言之,VF通过PF的配置之后,可以分配到客户机中作为独立功能使用。

SR-IOV为客户机中使用的VF提供了独立的内存空间,中断,DMA流,从而不需要kvm介入数据的传送过程,

SR-IOV设计的目的:允许一个设备支持多个VF,同时也尽量减小每个VF的硬件成本。

一个具有SR-IOV功能的设备能够被配置为在PCI配置空间中呈现出多个Function(包括一个PF和多个VF),每个VF都有自己独立的配置空间和完整的BAR(基址寄存器)。kvm通过将VF实际的配置空间映射到客户机看到的配置空间的方式实现将一个或多个VF分配给一个客户机。每个VF在同一时间只能被分配到一个客户机中。因为VF需要真正的硬件资源。每个PF最多只能拥有256VF

SR-IOV的优势:

1.真正实现了设备的共享(多个客户机共享一个SR-IOV设备的物理端口)

2.接近于原生系统的高性能(比纯软件模拟和virtio设备的性能都要好)

3.相比于VT-dSR-IOV可以用更少的设备支持更多的客户机,可以提高数据中心的空间利用率。

#modinfo igb 查看igb驱动信息

增加VF个数

#modprobe -r igb 或者(rmmod igb

#modprobe igb max-vfs=7

 

 

热插拔

客户机新增的CPU没有自动上线工作,echo 1 > /sys/devices/system/cpu/cpu2/online 命令使其进入可用状态

 

动态迁移原理:KVM动态迁移的具体前过程为:在客户机动态迁移开始后,客户机依然在宿主机上运行,与此同时,客户机的内存页被传输到目的主机之上,QEMU/KVM会监控并记录下迁移过程中所有已被传输的内存页的任何修改,并在所有的内存页都被传输完成后即开始传输在前面过程中内存页的更改内容。qemu/kvm也会估计迁移过程中的传输速度,当剩余的内存数据量能够在一个可设定的时间周期内传输完成之时,qemu/kvm将会关闭源宿主机上的客户机。再将剩余的数据量传输到目的主机上去,最后传输过来的内存内容在目的宿主机上回复客户机的运行状态。

 

当客户机中的内存使用量非常大且修改频繁,内存中数据被不断修改的速度大于kvm能够传输的内存速度之时,动态迁移过程是不会完成的,这时要进行迁移只能进行静态迁移。

 

对于kvm动态迁移注意事项:

1.源宿主机和目的主机之间尽量用网络共享的存储系统来保存客户机磁盘镜像,尽管kvm动态迁移也支持连同磁盘镜像一起复制。共享存储在源宿主机和目的宿主机上的挂载位置必须完全一致。

2.为了提高动态迁移的效率,尽量在同类型的CPU的主机上面进行动态迁移。

3.64位只能在64位之间迁移,32位可以在3264位之间迁移

4.动态迁移的源宿主机和目的主机对NX位的设置是相同,要么同为关闭,要么都打开。

#cat /proc/cpuinfo | grep nx 查看是否有nx的支持

5.不能同名

6.配置尽量相同

 

-incoming tcp:0:6666 这个参数表示6666端口建议一个tcp socket连接用于接收来自源主机的动态迁移的内容,其中“0”表示允许来自任何主机的连接。 “-incoming” 这个参数使这里的qemu-kvm进程进入到迁移监听模式。而不是以命令行中的镜像文件运行客户机

migrate tcp:主机名:6666  源宿主机上的客户机 即可进入迁移的流程

 

KVM嵌套KVM

在硬件之上就是底层的宿主系统我们称之为L0

L0中,加载kvm-intelkvm-amd)模块时需要添加“nested=1”的选项以打开嵌套虚拟化

#modprobe kvm

#modprobe kvm_intel nested=1

#cat /sys/module/kvm_intel/parameters/nested Y

 

写时复制

linux系统中,当使用fork函数创建一个进程之时,子进程与其父进程共享全部的内存,而当子进程或父进程试图修改它们的共享内存区域之时,内核会分配一块新的内存区域,并将试图修改的共享内存区域复制到新的内存区域上。然后让进程去修改复制的内存,这就是著名的“写时复制”(copy-on-writeCOW

 

KSM基本原理

内存同页合并:KSM允许内核在两个或多个进程之间共享完全相同的内存页,KSM让内核扫描检查正在运行中的程序并比较它们的内存,如果发现他们有内存区域或内存页是完全相同的,就将多个相同的内存合并为一个单一的内存页,并将其标识为:写时复制: ,这样可以起到节省系统内存使用量的作用,之后,如果有进程试图去修改被标识为“写时复制”的合并的内存页时,就为该进程复制出一个新的内存页供其使用。

 

KSM能够提高内存的速度和使用效率

1.KSM的帮助下,相同的内存页被合并了,减少了客户机的内存使用量,一方面,内存中的内容更容易被保存到CPU的缓存当中;另一方面,有更多的内存可用于缓存一些磁盘中的数据。

2.KSM是内存过载使用的一种较好的方式,KSM通过减少每个客户机实际占用的内存数量,就可以让多个客户机分配的内存数量之和大于物理上的内存数量。而对使用相同内存量的客户机,在物理内存量不变的情况,可以在一个宿主机中创建更多的客户机,提高了虚拟化客户机部署的密度。提高物理资源的利用率。进程ksmd负责扫描后合并进程的相同内存页。从而实现ksm的功能,root用户可以通过“/sys/kernel/mm/ksm/”目录下的文件来配置和监控ksmd这个守护进程

 

在使用KSM实现内存过载使用时,最好保证系统的交换空间(swap)足够大,因为KSM将不同客户机的相同内存页合并而减少了内存使用量,但是客户机可能由于需要修改被KSM合并的内存页,从而使这些被修改的内存被重新复制出来占用内存空间,因此可能会导致系统内存的不足,这是需要足够的交换空间来保证系统的正常运行。

 

KSM操作实践

[root@baobao ~]# ls /sys/kernel/mm/ksm/

full_scans    pages_sharing  pages_unshared  run

pages_shared  pages_to_scan  pages_volatile  sleep_millisecs

 

full_scans:记录着已经对所有可合并的内存区域扫描过的次数

pages_shared:记录着正在使用中的共享内存页的数量

pages_sharing:记录着有多少数量的内存页正在使用被合并的共享页,不包括合并的内存页本身,这就是实际节省的内存页数量

pages_unshared:记录了守护进程区检查并试图合并,却发现了并没有重复内容而不能被合并的内存页数量

pages_volatile:记录了因为其他内容很容易变化而不被合并的内存页

pages_to_scan:在ksmd进程休眠之前会去扫描的内存页数量

sleep_millisecsksmd进程休眠的时间,ksmd的两次运行之间的间隔

run:控制ksmd进程是否运行的参数,默认值为0,表示停止运行ksmd但保持它已经合并的内存页。设置为1,表示马上运行ksmd进程;设置为2表示停止运行ksmd,并且分离已经合并的所有内存页,但是保持已经注册为可合并的内存区域给下一次运行使用

 

pages_sharing的值越大,说明KSM节省的内存越多,KSM效果越好

pages_sharing除以pages_shared得到的值越大,说明相同内存页重复的次数越多,KSM效率就越高。

pages_unshared除以pages_sharing得到的值越大,说明ksmd扫描不能合并的内存页越多,ksm的效率越低。

 

ksmksmtuned来动态调节ksm的运行情况,在启动ksm服务程序,ksm能够共享最多达到的系统物理内存一半的内存页,而ksmtuned服务一直保持循环执行,以调节ksm服务的运行,其配置文件在/etc/ksmtuned.conf

 

KVM特性

 

1GB大页

查看是否支持1GB大页

#cat /proc/cpuinfo | grep pdge1gb

查看支持2mb          |grep  pse

 

 

1GB大页只能在linux系统的内核启动参数中指定

 title Red Hat Enterprise Linux (2.6.32-358.el6.x86_64)

root (hd0,0)

kernel /vmlinuz-2.6.32-358.el6.x86_64 ro root=/dev/sda1 hugepagesz=1GB hugepages=6 default_hugepagesz=1GB

initrd /initramfs-2.6.32-358.el6.x86_64.img

hugepagesz:表示内存页的大小

hugepages:启动大页分配的数量

default_hugepagesz:表示挂载hugetlb文件系统时,没有设置大页的大小时默认使用大页的大小,如果不设置默认为2M

 

hugepagesz*hugepages 一定不能大于系统的物理内存

使用下面的命令需要安装libhugetlbfs-utils

#hugeadm --pool-list 显示大页状态

#mount 参数-o pagesize=2MB 指定使用2MB的大页

 

qemu-kvm  -mem-path /dev/hugepages/ 为客户机指定1GB大页

缺点:使用大页需要一开始就预留大页的内存(不能分配给普通4KB页使用),不能被交换到交换分区,也不能使用ballooning方式使用大页内存。

 

 

透明大页(THP):透明大页对所有应用程序都是透明的,应用程序不需要任何修改即可享受透明大页带来的好处,透明大页是可减缓的,当需要交换到交换空间时,透明的大页被打碎为常规的4kb大小的内存页,在使用透明大页时,如果因为内存碎片导致大页内存分配失败,这时系统可以优雅地使用常规的4kb页替换,而且不会发生任何错误,故障或用户态的通知。当系统内存充裕时,有很多的大页面可用时,常规的页分配的物理内存可以通过khugepaged进程自动迁往透明大页内存。内核进程khugepaged的作用是,扫描正在运行的进程,然后试图将使用的常规内存页转换到使用大页。

 

目前,透明大页仅仅支持匿名内存的映射,对磁盘缓存和共享内存的透明大页支持还在开发中

匿名内存:那些在文件系统里没有相对应的“储备文件”的那些内存,堆和栈空间的内存都属于匿名内存  匿名内存来源于交换分区 

查看系统透明大页

#cat /proc/meminfo | grep -i AnonHugePages

 

高级失量扩展(AVX):是IntelAMDx86架构指令集的一个扩展。

#cat /proc/cpuinfo | grep avx | grep xsave

AES新指令

AES(高级加密标准)是一种用于对电子数据进行加密的标准。

AES-NIAES新指令)是Intel提出的x86处理器上的指令集扩展。

-cpu qemu64+aes   参数来让客户机支持AES新指令

 

完全暴露宿主机的CPU特性

-cpu host  参数尽可能暴露特性供客户机使用

 

SMEP(监督模式执行保护)

#cat /proc/cpuinfo | grep smep 

 

 

控制客户机的资源使用----------cgroups

cgroups(控制群组)是linux内核中的一个特性,用于限制,记录和隔离进程组对系统物理资源的使用。

cgroups提供的一些功能

1.资源限制,让进程组被设置为使用不能超过某个界限的资源数量。如内存子系统可以为进程组设定一个内存使用的上限,一旦进程组使用的内存达到限额后,在申请内存时就会报错

2.优先级控制,让不同的进程组有不同的优先级,可以让一些进程组占用较大的cpu或磁盘IO吞吐量的百分比,另外一些进程组占用较小的百分比

3.记录,衡量每个进程组(包括kvm客户机)实际占用的资源数量,可以用于对客户机用户进行收费等目的,如使用cpuacct子系统记录某个进程组使用的cpu时间。

4.隔离,对不同的进程组使用不同的命名空间

5.控制,控制进程组的暂停,添加检查点,重启等如使用freezer子系统可以将进程组挂起和恢复

 

1.任务:在cgroups中,一个任务就是linux系统上的一个进程或线程,可以将任务添加到一个或多个控制群组中

2.控制群组:一个控制群组就是按照某种标准划分的一组任务(进程),在cgroups中,资源控制都是以控制群组为基本单位来实现的。一个任务可以被添加到某个控制群组,也从一个控制群组转移到另一个控制群组。一个控制群组中的进程可以使用以控制群组为单位分配的资源,同时也受到以控制为单位而设定的资源限制

3.层级体系:简称“层级”控制群组被组织成有层级关系的一棵控制群组树,控制群组树上的子节点控制群组是父节点控制群组的孩子,继承父节点控制群组的一些特定属性,每个层级需要被添加到一个或多个子系统中,受到子系统的控制。

4.子系统:一个子系统就是一个资源控制器,如blkio子系统就是控制对物理块设备的IO访问的控制器,子系统必须附加到一个层级上才能起作用,一个子系统附加到某个层级以后,该子系统会控制这个层级上的所有控制群组。

 

目前cgroups中主要有如下10个子系统:

需要安装libcgroup这个包

[root@baobao ~]# lssubsys -am 显示已经存在的子系统

 

blkio:这个子系统为块设备(如磁盘,固态硬盘,U盘等)设定读写IO的访问设置限制

cpu:这个子系统通过使用进程调度器提供了对控制群组中的任务在cpu上执行的控制

cpuacct:这个子系统为控制群组中的任务所实际使用的cpu资源自动生成报告

cpuset:这个子系统为控制群组中的任务分配独立cpu核心和内存节点

devices:这个子系统可以控制一些设备允许或拒绝来自某个控制群组中的任务的访问。

freezer:这个子系统用于挂起或恢复控制群组中的任务

memory:这个子系统为控制群组中任务能使用的内存设置限制,并能自动生成那些任务所使用的内容资源的报告

net_cls:这个子系统使用类别识别符标记网络数据包,允许linux流量控制程序识别来自某个控制群组中任务的数据包

ns:名称空间子系统。用于命名空间的隔离,使不同命令空间中控制群组的任务不能“看到”其他命名空间中的任务信息。

perf_event:这个子系统主要用于对系统中进程运行的性能监控,采样和分析等

linux进程模型最主要的区别是 在linux系统中可以同时存在cgroups的一个或多个相互独立的层级

 

层级-----------》子系统     能一对多  不能多对一

 

 

cgroups中的子系统,层级,控制群组,任务之间的关系,至少有如下几条规则需要遵循

1.每个层级可以有一个或多个子系统附加上去。

2.只要其中的一个层级已经有一个子系统被附加上了,任何一个子系统都不能被添加到两个或多个层级

3.一个任务不能同时是同一个层级中的两个或多个控制群组中的成员,一个任务一旦要成为同一个层级中的第二个控制群组中的成员,它必须先从第一个控制群组中移除。

4.派生出来的一个任务会完全继承它父进程的cgroups群组关系。

5.在每次初始化一个新的层级之时,该系统中所有的任务(进程或线程)都被默认添加该层级默认的控制群组中成为它的成员。该群组被称为根控制群组,在创建层级时自动创建,之后在该层级中创建的所有其他群组都是根控制群组的后代。

 

#service cgconfig start   配置文件/etc/cgconfig.conf

1.启动两个客户机和其中的mysql服务器,让其他应用开始使用mysql服务,需要优先级高的客户机有qemu-kvm命令行启动时加上“-name high_prio”的参数来指定其名称,而优先级低的客户机有“-name low_prio” 参数,启动时为他们取不能的名字,方便区别

2.添加blkio子系统到/cgroup/blkio这个控制群组上,并创建高优先级和低优先级两个群组

#mkdir -p /cgroup/blkio

#mount -t cgroup -o blkio blkio /cgroup/blkio

#mkdir /cgroup/blkio/high_prio

#mkdi /cgroup/blkio/low_prio

#ls /cgroup/blkio/high_prio

 

-o 后面还可以添加多个子系统

3.分别将高优先级和低优先级的客户机的qemu-kvm进程(及其子进程,子线程)移动到相应的控制群组下面去。可以使用下面的脚本执行,使高优先级客户机(用“high_prio”来标识)进程作为high_prio控制器群组的成员;同样修改一下该脚本也可以处理低优先级客户机。

4.分别设置高低优先级的控制群组中块设备IO访问的权重,这里假设高低优先级的比例为101,设置权重的命令如下:

#echo 1000 > /cgroup/blkio/high_prio/blkio.weight

#echo 100 > /cgroup/blkio/low_prio/blkio.weight

blkio.weight 是在一个控制群组中设置块设备IO访问相对比例的参数,其取值范围是100~1000的整数。

5.块设备IO访问控制的效果分析,假设宿主机系统中磁盘IO访问的最大值为每秒写入66M,除客户机qemu-kvm进程之外的其他进程IO忽略不计,则高优先级的为60M   低优先级的为6M

 

 

SElinuxsVirt

svirt是红帽公司开发的针对虚拟化环境的一种安全技术,它主要集成了selinux和虚拟化。

svirt通过SElinux来起作用,svirt框架允许客户机及其资源都打上同一的标签。其使用的镜像也使用这个标签,其他用户不能与这个标签重复。selinux可以控制允许相同标签的qemu-kvm进程可以访问客户机镜像。

[root@baobao ~]# grep -i selinux /boot/config-2.6.32-358.el6.x86_64 

CONFIG_SECURITY_SELINUX=y

CONFIG_SECURITY_SELINUX_BOOTPARAM=y

CONFIG_SECURITY_SELINUX_BOOTPARAM_VALUE=1

CONFIG_SECURITY_SELINUX_DISABLE=y

CONFIG_SECURITY_SELINUX_DEVELOP=y

CONFIG_SECURITY_SELINUX_AVC_STATS=y

CONFIG_SECURITY_SELINUX_CHECKREQPROT_VALUE=1  默认开启selinux

# CONFIG_SECURITY_SELINUX_POLICYDB_VERSION_MAX is not set

 

libselinux selinux-policy, selinux-policy-targeted 3个包提供了selinux在用户空间的库文件和安全策略配置文件。

liblinux-utils包提供了设置和管理selinux的一些工具如setenforce

policycoreutils 包提供了一些查询和设置selinux策略的工具 如setfiles

 

selinux相关命令:

sestatus:获取运行selinux系统的状态,通过此命令获取的selinux信息更加详细

getsebool:获取当前selinux策略中各个配置项的布尔值,每个布尔值都开启和关闭的状态

setsbool:设置selinux策略中配置项的布尔值

chon:改变文件或目录的selinux安全上下文

 

svirt 提供的与虚拟化相关的标签

svirt一般工作方式:在rhel系统中使用libvirt的守护进程(libvirtd)在后台管理客户机,在启动客户机之前,libvirt动态选择一个带有两个分类标志的随机的mcs标签,将该客户机使用到的所有存储资源(包括磁盘镜像,光盘)都打上相应的标签然后用该相应的标签执行qemu-kvm进程,从而启动了客户机。

 

TXT简介

TXT:是Intel(可信执行技术)它是在pc或服务器系统启动时对系统的关键部件进行验证的硬件解决方案。TXT主要目标在于:证明一个平台和运行于它之上的操作系统的可靠性,确保一个可靠的操作系统是启动在可信任的环境中的,进而成为一个可信的操作系统,提供给可信任操作系统比被证实的系统更多的安全特性。

TXT提供了动态可信根的机制以增强平台的安全性,为建立可信计算环境和可信链提供必要的支持,动态可信根,依靠一些已知正确的序列来检查系统启动时的配置和行为的一致性。使用这样的基准测试,系统可以很快地评估当前这次启动过程中是否有改变或篡改以设置的启动环境的意图。

 

TXT技术主要通过三个方面提供安全和信任:首先将数字指纹软件保存在一个称为“可信用平台模块”(TMP)的受保护区域内。每次软件启动时,都会检测并确保数字指纹吻合,从而判断系统是否存在风险;其次,它能阻止其他应用程序,操作系统或硬件修改某个应用程序的专用内存区;再次,如果某个应用程序崩溃,txt将清除它在内存中的数据和芯片缓存区。避免攻击软件嗅探其残余数据

 

基于inteltxt技术建立的可信平台 主要由三个部分组成:安全模式指令扩展(SMX),认证代码模块(AC模块),度量过的安全启动环境(MLE)。

 

Tboot简介

Tboot即“可信启动”是使用TXT技术的在内核或KVM启动之前的一个软件模块,用于度量和验证操作系统或kvm的启动过程。

 

 

virt-v2v  从一种虚拟化上迁移到另一个虚拟化上  如kvm迁移到kvm

 

virt-p2v 从物理机迁移到KVM虚拟化环境

1.在服务器端安装virt-p2vlibvirt软件

2.在服务端,修改/etc/virt-v2vconf配置文件,让其有类似如下的示例配置

<virt-v2v>

  <!-- Target profiles -->

 

  <profile name="rhev">

  <method>rhev</method>

  <storage>default</storage>

  <network type="default">

  <network type="network" name="rhevm"/>

  </network>

  </profile>

  </virt-v2v>

3.制作virt-p2v可以启动的设备。可以到RHN下载virt-p2vISO镜像做成光盘或U

4.在待迁移的物理机上选择3里面 做的介质启动系统

5.virt-p2v客户端启动后,根据界面的提示,填写准备服务器IP或主机名,登录用户信息,在连接服务器端后,可以进一步填写转移后的虚拟客户机的名称,vcpu数量,内存大小等信息,最后点击covert(转化)即可,virt-p2v客户端会将物理机中的磁盘信息通过网络传输到服务端,待传输完成后,选择关闭该物理机即可

6.virt-p2v服务端(kvm)宿主机通过libvirtqemu-kvm命令行启动前面转移过来的客户机即可。


你可能感兴趣的:(虚拟机,kvm)