1. 经典的虚拟化技术:特权解除、陷入模拟
2. 虚拟化的分类和代表产品(背景)
3. openstack 7大核心组件
Horizon(控制台),又名Dashboard:就是web展示界面操作平台,方便用户交互的
Nova(计算):负责创建,调度,销毁云主机
Neutron(网络):负责实现SDN
Swift(对象存储):目录结构存储数据,用来文件存取
Cinder(块存储):提供持久化块存储,即为云主机提供附加云盘
Glance(镜像):提供镜像服务,装机使用
Keystone(认证):为访问openstack各组件提供认证和授权功能,认证通过后,提供一个服务列表(存放你有权访问的服务),可以通过该列表访问各个组件
4. docker
5. qemu-kvm
1) 提供对cpu,内存(KVM负责),IO设备(QEMU负责)的虚拟
2) 对各种虚拟设备的创建,调用进行管理(QEMU负责)
6. libvirt
为vmm实现的常用功能提供api
virsh命令、virt-manager就是由libvirt提供的
openstack > libvirt > qemu-kvm
kvm核心基础功能
CPU配置
1. vcpu
guestos是一个qemu进程,而vcpu则是qemu进程派生的线程
KVM环境中,vcpu的三种执行模式:用户模式、内核模式、客户模式
2. SMP(对称多处理器)
使用多处理器、多核、超线程等技术来实现进程或线程的并行执行
qemu-kvm -smp n,maxcpus=cpus,cores=cores,threads=threads,sockets=sockets
3. 允许cpu过载使用,即vcpu的数量可大于物理cpu数
4. cpu模型
定义了哪些主机的CPU功能会被暴露给客户机操作系统
qemu-kvm -cpu ? 命令来获取主机所支持的 CPU 模型列表
qemu-kvm xx.img -cpu cpu_model 指定cpu模型
5. 进程的处理器亲和性/vcpu的绑定
优点:减少进程在多个CPU之间交换运行带来的缓存命中失效,在进程运行角度看,提升性能;
缺点:破坏各个CPU的负载均衡,导致整个系统的进程调用变得低效;
内存配置
1. 影子页表:从软件上维护guestos虚拟地址 -> hostos物理地址 的映射
2. EPT(扩展页表):从硬件上支持GVA -> GPA -> HPA 的两次地址转换,并且只需要维护一张EPT页表
与影子页表相比:
不需要像影子页表为每个guestos维护一个页表,只需维护一张EPT页表,减少
3. VPID(虚拟处理器标识):
通过在硬件上为每个TLB项添加一个标识,用于不同虚拟处理器的地址空间,从而区分开Hypervisor和
不同处理器的TLB,避免每次进行VM-Exit时都让TLB全部失效,提高VM切换效率
4. 大页
x86架构CPU默认使用4KB大小的内存页面,但也支持较大的内存页,比如2MB大小的大页
使用大页的好处:
内存页的数量会减少 -> 页表减少 -> 节约页表占用的内存,且地址转换减少
-> TLB缓存失效次数减少 -> 提高内存访问性能
5.内存过载使用(内存交换、气球、页共享)
内存交换:用交换空间来弥补内存不足
内存气泡(气球):通过virtio_balloon驱动来实现VMM和客户机之间的协作
由虚拟机里的balloon驱动来动态占用或释放内存,从而动态改变这台虚拟机当前可用内存。
Balloon驱动占用的内存是从虚拟机可用内存中争抢来的,为虚拟机不可用,宿主机可用的内存。
当某些虚拟机负载较轻时,可通过驱动把不用的内存归还给host,然后host再将内存释放给负载重的guestos,实现动态平衡
页共享:通过KSM(kernel samepage merging)来合并多个客户机中相同的内存页
6. qemu支持的网络模式
网络配置
qemu-kvm为guest提供4种不同模式的网络:
1) 基于网桥的虚拟网卡
2) 基于NAT(Network Address Translation)的虚拟网络(网络地址转换)
3) qemu内置用户模式网络(user mode networking)
4) 直接分配网络设备的网络(VT-d 和 SR-IOV)
bridge:
直接将虚拟网卡(桥接接口br0)桥接到一个物理网卡上面
可以使虚拟机成为网络中具有独立IP的主机
NAT:
通过宿主机器所在的网络来访问公网
支持主机与虚拟机的互访,同时也支持虚拟机访问互联网,但不支持外界访问虚拟机。
同一台主机创建多个虚拟机,虚拟机之间是可以互相访问的
可参考:https://wenku.baidu.com/view/b55f46833c1ec5da51e2702f.html