KVM虚拟化技术 笔记(一)

KVM虚拟化技术 笔记

[email protected]

[S1 虚拟化与云计算]

通过网络获取所需服务

分为三类:

SaaS EndUsers 基础设施类

PaaS ApplicationDeveloper 平台服务

IaaS NetworkArchitects 软件服务


私有云:

1.部署在企业内部网络

2.部署在云服务商上


现大规模商用的厂家

亚马逊IaaS 全球最大的公有云服务提供商

威瑞VMware vSphere 私有云占有率最高的虚拟化解决方案

思杰Citrix Xen

RHEV

IBM蓝云


虚拟化分类:

1.软件虚拟化

2.硬件方案

1.准虚拟化 缺乏硬件支持情况

2.全虚拟化


KVM:Kernel Virtual Machine:内核虚拟机

优势:

1.内存管理:Kernel Same-page Merging,KSM)

2.存储

3.设备驱动程序

4.性能和可伸缩性:KVM宿主机支持4096个CPU核心,64TB内存


[S2KVM核心基础功能]

硬件平台和软件版本说明

1.硬件平台:硬件要支持辅助虚拟化(Intel VT-x)

2.KVM内核:在linux.git源码仓库中执行

# git tag

v3.4-rc6

v3.4-rc7

v3.5-rc1

...

#git checkout v3.5

在kvm.git中,没有v标签,可以

# git log

# git checkout 73bcc499

在qemu-kvm.git中,可以使用git tag

在编译qemu时,configure加上 --disable-sdl

使用qemu命令行,默认开启对KVM支持,# qemu-kvm 查看KVM默认打开,需要启动QEMU命令行上加上-enable-kvm


CPU配置

QEMU/KVM为客户机提供一套完整的硬件系统环境

客户机所拥有的CPU是vCPU

在KVM环境中,每个客户机都是一个标准的Linux进程(QEMU进程)

每一个vCPU在宿主机中是QEMU进程派生的一个普通线程

客户机的命令模拟实现:

1.用户模式

处理I/O模拟和管理,由QEMU代码实现

2.内核模式

处理需要高性能和安全相关指令。处理客户模式下I/O指令或其他特权指令引起的退出,处理影子内存管理

3.客户模式

执行Guest中的大部分指令,I/O和一些特权指令除外(引起VM-Exit,被hypervisor截获并模拟)


SMP支持

多处理,多进程

逻辑CPU个数

# cat /proc/cpuinfo | grep "pro"|wc -l

多线程支持

# cat /proc/cpuinfo | grep -qi "core id" |echo $?

实际CPU个数

# cat /proc/cpuinfo | grep "physical id" |sort | uniq | wc -l

每个物理CPU中逻辑CPU的个数

logical_cpu_per_phy_cpu=$(cat /proc/cpuinfo |grep "siblings"| sort | uniq | awk -F: '{print $2}')

echo $logical_cpu_per_phy_cpu

在qemu的命令行中,模拟客户机的SMP系统,参数

-qemu n[,maxcpus=cpus][,cores=cores][,threads=threads][,sockets=sockets]

n 逻辑cpu数量

maxcpus 最大可被使用的cpu数量

cores 每个cpu socket上的core数量

threads 每个cpu core上的线程数

sockets 客户机中看的总的cops socket数量


8个客户机logical cpu即宿主机的8个线程

logical cpu 8

physical cpu 2

core cpu 2

logical cpu 4

8个逻辑cpu

2个物理

PUC socket 每个socket有两个核,每个核有2个线程


CPU模型

查看当前qemu支持的所有CPU模型

# qemu-system-x86_64 -cpu ?

启动镜像时,可以使用上命令的结果的CPU模型启动

# qemu-system-x86_64 /root/.../...img -cpu SandyBridge

隔离其他CPU不供客户机使用

grub 文件

root=UUID.... isolcpus=2,3

查看隔离成功

# ps -eLo psr|grep 0|wc-l

然后改变0,检查各个CPU的进程数

把一个有两个的vCPU的客户机绑定到宿主机的两个CPU上

# qemu-system-x86_64 rhel6u3.img -smp 2 -m 512 -daemonize

查看代表vCPU的QEMU的线程

#ps -eLo ruser,pid,ppid,lwp,psr,args |grep qemgrep -v grep

绑定整个客户机的QEMU进程,运行在CPU2上

#taskset -p 0x4 3963

#绑定第一个cCPU线程,使其运行在cpu2上

# taskset -p 0x4 3967

第二个

#taskset -p 0x8 3968


内存配置

QEMU启动命令

-m megs 设置客户机的内存为MB大小

# free -m 查看内存

# dmesg|grep Memory

内存转换

客户机->宿主机(GVA->GPA)执行者:客户机操作系统

客户机<-宿主机(GVA<-GPA)执行者:hypervisor

在EPT加入之后,直接在硬件上支持虚拟化内存地址转换

查看支持EPT VPID

# grep ept /proc/cpuinfo

# cat /sys/module/kvm_intel/parameters/ept

# cat /sys/module/kvm_intel/parameters/vpid

加载ept vpid模块

# modprobe kvm_intel ept=0,vpid=0

# rmmod kvm_intel

# modprobe kvm_intelept=1,vpid=1

大页

x86默认提供4kb内存页面

x86_64支持2MB大小的大页

# getconf PAGESIZE

# cat /proc/meminfo

挂载大页

# mount -t hugetlbfs hugetlbfs /dev/hugepages

# sysctl vm.nr_hugepages=1024

然后让qemu启动项内存参数使用大页

-mem-path /dev/hugepages

挂载大页内存可以显著提高客户机性能,但是,不能使用swap

内存过载使用

1.内存交换(swaping)

2.气球(ballooning):通过virio_balloon驱动来实现宿主机Hyperviosr和宿主机的合作

3.页共享(page sharing):通过KSMkernel Samepage Merging合并多个客户机使用的相同内存页。

存储配置

存储配置和启动顺序

存储的基本配置选项

-hda file :将file作为客户机第一个IDE设备,序号0,客户机中表现/dev/hda或/dev/sda设备

-hdb /-hdc..

-fda file 软盘

-cdrom,cdrom作为hdc,不能共同使用

-mtdblock file 作为客户机自带的一个FLASH存储器 闪存

-sd file sd 卡

驱动器

-driver file=file 文件作为镜像文件加载到客户机的驱动器中

if=interface 指定驱动器使用的接口类型

bus=bus,unit=unit 总线编号,单元编号

index=index 索引编号

media=media 设置驱动器中没接的类型

snapshot=snapshot on/off ~~~~~

....

配置客户机启动顺序的参数

-boot order=drivers,once=drives,menu=on|off,splash=splashfile,splash-time=sp-time

ex:-boot order=dc,menu=on 按F12

存储配置示例

启动客户机命令

# qemu-system-x86_64 -m 1024 -smp 2 rhel6u3.img

# qemu-system-x86_64 -m 1024 -smp 2-hda rhel6u3.img

# qemu-system-x86_64 -m 1024 -smp 2-drive file=rhl6u3.img,if=ide,cache=writehrough 

qemu命令

qemu-img:qemu磁盘管理工具

check [-f fmt] filename

fmt:qcow2 qed vdi

create [-f fmt][-o options] filename [size] 创建镜像文件

convert 镜像转换

# qemu-img convertmy-vmware.vmdk my-kvm.img #用这个转换

# qemu-img convert -O qcow2 rhel6u3.img rhel6u3-a.gcow2

info [-f fmt] filename

展示filename镜像文件信息

snapshot [-l|-a snapshot|-c snapshot|-d snapshot] filenamne

rebase

resize filename [+|-] size

QEMU支持的镜像文件格式

1.raw

2.host_device

3.qcow2

4.qcow

cow,vid.vmdk,vpc,sheepdog

客户机存储方式

1.本地

2.物理磁盘或磁盘分区

3.LVM

4.NFS

5.ISCSI

6.本地或光纤通道LUN

7.GFS2

高性能IO使用半虚拟化virtio作为磁盘驱动程序


QEMU支持的网络模式

1.基于网桥(bridge)的虚拟网卡

2.基于NAT(Network Address Translation)的虚拟网络

3.QEMU内置的用户模式网络

4.直接分配网络设备的网络(包括VT-d 和 SR-IOV)

-net nic,model=? 会列出默认虚拟网卡

-net nic,model=e1000 会模拟出一个interl e1000的网卡供客户使用


你可能感兴趣的:(KVM虚拟化技术 笔记(一))