1. 为什么要用虚拟化
充分利用物理资源,提供冗余性、向云计算演进的必要基础。
2. CPU虚拟化
CPU的虚拟化本质上是时间分片。这里我们用的是KVM来虚拟的。
流程如下: QEMU调用ioctl进入内核,内核读取VMCS,(这里先解释下VMCS,VMCS是异常处理的关键结构,里面存储了 客户机,宿主机,陷入退出的各种状态。)把客户机的状态装在到CPU的CS:EIP,然后执行 kvm_exit_handler. 如果是IO引起的,则进入用户模式,执行QEMU
3. 内存虚拟化
一般的内存虚拟化都经过了两次的页表转换。 客户机线性地址到 客户机物理地址, 然后再到宿主机物理地 址。 这样经过了两次转换,效率很难提高。于是就出现了影子页表。
这里就不得不说影子页表了。 这里有一张hash表,维护者物理机和客户机的内存地址映射表。 那么如何被建 立的呢?
当发生页故障的时候,VMM搜索客户页表,如果不存在客户线性地址VGA 到 客户机物理地址 GPA的转换,那 么则返回给虚拟机异常,由虚拟机处理页故障。
如果存在映射关系,则先去寻找QEMU地址空间的主机线性地址 HVA, 如果不存在 HVA 映射到 HPA, 那么 kernel 去分配物理地址。 然后VMM可以使用该HPA构建影子页表。 至此,影子页表建立完成。
4. 磁盘使用raw/qcow2有什么区别
raw不支持快照但性能好,常用的是qcom2支持快照,性能相比差一点。
5. kvm和Xen有何区别?
Xen是一个外部的hypervisor程序(虚拟机管理程序);它能够控制虚拟机和给多个客户机分配资源. 另一方 面, kvm是linux的一部分, 可使用通常的linux调度器和内存管理. 这意味着kvm更小更易使用. 另一方面, Xen同时支持全虚拟化和半虚拟化(修改过的客户机能有更好的性能). kvm当前不支持半虚拟化
6. 如果对一个VM进程使用kill -9将会发生什么?
从客户机的角度来看, 就如你猛地把电源线从主机上拔出一样. 从主机的角度来看, 进程被杀掉, 进程占用的所有资源被施放
7. kvm各模式说明
有三种模式:用户模式,内核模式,客户模式。 QEMU运行在用户模式,用户模式就是一般意义上运行的进程的模式,QEMU调用一系列的ioctl就可以进入内核模式,这里内核模式再调用kvm_create等函数就可以进入客户模式,客户模式也就是虚拟机运行的模式。
但是如果虚拟机出现了异常或者常见的缺页中断或者IO操作的时候呢,他是没有权限对全局资源进行操作的, 这样就会被VMM,这里也就是KVM进行捕获,然后捕获之后呢再跳转到用户模式调用QEMU进行IO操作。所以说内核模式其实是个中间变量,专门用来进行错误发现的时候的转换的。
8. kvm框架包含哪些
KVM 分为了两个模块,一个是KVM Driver, 另一个是QEMU。前者负责CPU和内存的虚拟化,后者负责IO的 虚拟化。用户空间的QEMU调用一系列的ioctl() 函数进入内核空间,然后内核控件再调用一系列函数进入 Guest OS客户空间运行虚拟机
9. kvm的三个组件及作用
libvirt(用来管理虚拟机)、virt(安装和克隆虚拟机)、qemu(管理虚拟机磁盘的)
10. 简述kvm的几种模式
有三种模式:用户模式,内核模式,客户模式。 QEMU运行在用户模式,用户模式就是一般意义上运行的进程 的模式,QEMU调用一系列的ioctl就可以进入内核模式,这里内核模式再调用kvm_create等函数就可以进入 客户模式,客户模式也就是虚拟机运行的模式。
但是如果虚拟机出现了异常或者常见的缺页中断或者IO操作的时候呢,他是没有权限对全局资源进行操作的, 这样就会被VMM,这里也就是KVM进行捕获,然后捕获之后呢再跳转到用户模式调用QEMU进行IO操作。所以说 内核模式其实是个中间变量,专门用来进行错误发现的时候的转换的。
11. kvm如何做CPU虚拟化
CPU的虚拟化本质上是时间分片。这里我们用的是KVM来虚拟的。流程如下:
QEMU调用ioctl进入内核,内核读取VMCS,(这里先解释下VMCS,VMCS是异常处理的关键结构,里面存储了 客户机,宿主机,陷入退出的各种状态。)把客户机的状态装在到CPU的CS:EIP,然后执行 kvm_exit_handler. 如果是IO引起的,则进入用户模式,执行QEMU
12. 如何对KVM的I/O优化
调优kvm的I/O调度算法,centos7默认的是deadline,使用命令将参数改为noop并查询,将以上的命令和 查询结果以文本形式提交到答题框。
[root@localhost ~]# cat /sys/block/vda/queue/scheduler
[root@localhost ~]# echo noop > /sys/block/vda/queue/scheduler
[root@localhost ~]# cat /sys/block/vda/queue/scheduler
13. 如何对KVM内存调优
Kvm大页:所谓的大页指的是内存的大页面,内存采用的是分页机制,内存默认的页面大小都是4KB,假如系统 里的一个应用程序需要2MB的内容,如果操作系统还是以4KB小页为单位,那么内存里就要有512个页面 (512*4KB=2M),所以在TLB里就需要512个表项以及512个页表项,因此操作系统就要经历512次的TLB miss和512次的缺页中断才能将2MB的应用程序空间全部映射到物理内存里。必然操作数量会大大增加,从而 间接的影响性能。
使用cat命令,只查看当前系统有多少大页,然后设置大页数量为20并查看,接着使用命令使配置永久生效, 最后将大页挂载到/dev/hugepages/上。将上述所有命令和返回结果以文本形式提交到答题框。
[root@localhost ~]# cat /proc/meminfo | grep HugePages
[root@localhost ~]# echo 20 >/proc/sys/vm/nr_hugepages
[root@localhost ~]# cat /proc/meminfo |grep Hugepages
[root@localhost ~]# sysctl -w vm.nr_HugePages=20
[root@localhost ~]# mount -t hugetlbfs huagetlbfs /dev/huagepages/