kvm虚拟化学习(更新中...)

来源:互联网 发布:tp3.2数据库配置 编辑:程序博客网 时间:2024/04/28 18:17

一:快速启动一个虚拟机
1:安装虚拟机

qemu-kvm -m 1024 -smp 4 -boot order=cd -hda /root/qemu-kvm/vm_1.img -cdrom /root/qemu-kvm/Red\ Hat\ Enterprise\ 6.5\ x86_64.iso 

该命令是利用cdrom设备启动一个虚拟机,order=cd 指定虚拟机的启动顺序是cdrom然后才是disk,所以会先从cdrom(光盘)中启动虚拟机,此时需要进行安装,安装完成后,系统才能保存在disk中。
2:启动虚拟机

qemu-kvm -m 1024 -smp 4 /root/qemu-kvm/vm_1.img -usbdevice tablet

该命令是从vm_1.img磁盘镜像中起到虚拟机,因为第一步已经将系统安装完成并保存到磁盘镜像中了,所以这里只需要将磁盘中的镜像启动即可。
二:启动虚拟机时的参数
1.对称多处理器系统(smp)

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

n:设置虚拟机的逻辑CPU的数量(默认值1)。
maxcpus:设置客户机中最大可能被使用的cpu数量,启动时或者热拔插的CPU数量不能大于该值。
cores:每个cpu socket上的core数量,即每个物理cpu上的核心数(默认值1)。
threads:每个cpu核上的线程数(默认值1),用于设置超线程。
sockets:物理CPU的个数。
linux中 逻辑处理器=物理CPU*每个物理CPU的核心数*每个核心数上的线程数

使用默认-smp参数

qemu-kvm -m 1024 vm_1.img

在虚拟机中查看cpu信息

cat /proc/cpuinfoprocessor   : 0...

可以看到只有processor:0这一个逻辑处理器,

[root@localhost qemu-kvm]# qemu-kvm -m 1024 -smp 8,cores=2,threads=2,sockets=2 vm_1.img

设置8个逻辑处理器,2个物理CPU,每个物理CPU上有两个核心,每个核心有两个线程。
在虚拟机中查看cpu信息

cat /proc/cpuinfo

在处理器上可以看到有8个逻辑处理器,physical id总共有0和1两个,所以有两个物理CPU,cpu cores表示每个物理CPU上有几个核心,该值为2表示有两个核心,siblings表示每个物理CPU上有几个超线程,该值为4,所以每个cpu core上有两个超线程。这些值与启动虚拟机时的参数是对应的。
同时在qemu monitor中也可以执行info cpus命令可以看到有8个逻辑CPU。

2.虚拟机的CPU模型

qemu-kvm -cpu ?   可以查看QEMU支持的所有CPU模型

在启动虚拟机时用-cpu cpu_name 可以给虚拟机指定cpu的类型

3.进程的处理器亲和性和vCPU的绑定
指将进程绑定到特定的一个或者多个CPU上去执行,而不允许将进程调度到其他的CPU上。
比如启动一个虚拟机,有两个虚拟的逻辑处理器,将逻辑处理器绑定到宿主机的1,2,3号逻辑处理器上。步骤如下:

在内核启动行上加入isolcpus=1,2,3,表明1,2,3号处理器已经被占用了,其他的进程线程将不能在这三个cpu上运行。
利用ps -eLo psr | grep n | wc -l 命令依次查看linux中0,1,2,3号处理器线程的个数,发现1,2,3处理器仅仅有几个与进程线程调度有关的线程或者进程了。
cpu0:347
cpu1:7
cpu2:7
cpu3:7
启动虚拟机,将代表整个客户机的QEMU进程绑定到cpu1上,其余两个vcpu线程绑定到cpu2和cpu3上,如下
taskset -p 0x2 pid
taskset -p 0x4 vcpu_tid1
taskset -p 0x8 vcpu_tid2

执行ps -eLo ruser,pid,ppid,lwp,psr,args | grep qemu | grep -v grep命令可以看到绑定效果
root 5747 3549 5747 1 qemu-kvm -smp 2 -m 1024 vm_1.img
root 5747 3549 5749 2 qemu-kvm -smp 2 -m 1024 vm_1.img
root 5747 3549 5750 3 qemu-kvm -smp 2 -m 1024 vm_1.img
绑定后的宿主机的CPU上的线程个数如下:
cpu0:347
cpu1:10
cpu2:8
cpu3:8

4.虚拟机的内存设置
-m megs 设置客户机的大小为megs MB大小,默认单位时MB,也可以加上M或者G
如果不加-m 则默认大小为128MB

5.虚拟机使用大页
[root@localhost qemu-kvm]# getconf PAGESIZE 获得
4096
[root@localhost qemu-kvm]# cat /proc/meminfo
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
可见 系统中的大页的大小为2M的,目前个数为0个。
挂载hugetlbfs文件系统
mount -t hugetlbfs hugetlbfs /dev/hugepages/
[root@localhost qemu-kvm]# sysctl vm.nr_hugepages=1024 //该大小不能使大页的总大小超过系统的内存
vm.nr_hugepages = 1024
再次查看内存信息
[root@localhost qemu-kvm]# cat /proc/meminfo
AnonHugePages: 178176 kB
HugePages_Total: 909
HugePages_Free: 909
HugePages_Rsvd: 0
HugePages_Surp: 0
启动虚拟机
[root@localhost qemu-kvm]# qemu-kvm -m 1024 vm_1.img -mem-path /dev/hugepages/
再次查看系统内存
[root@localhost qemu-kvm]# cat /proc/meminfo
HugePages_Total: 991
HugePages_Free: 904
HugePages_Rsvd: 433 //系统当前总共保留的HugePages数目,更具体点就是指程序已经向系统申请,但是由于程序还没有实质的HugePages读写操作,因此系统尚未实际分配给程序的HugePages数目。
HugePages_Surp: 0
可见,一些大页已经被虚拟机使用了,这里启动虚拟机时候没有为虚拟机分配全部内存。
若加上-mem-prealloc参数启动虚拟机可以看到减少的内存已经很接近分配的内存了
HugePages_Total: 991
HugePages_Free: 471
HugePages_Rsvd: 0
HugePages_Surp: 0

5.虚拟机的存储配置和启动顺序

-hda file 将file文件作为客户机的第一个IDE设备,在客户机中表现为/dev/hda设备或者/dev/sda设备
-hdb file 将file文件作为客户机的第二个IDE设备,在客户机中表现为/dev/hdb设备或者/dev/sdb设备
-hdc file 将file文件作为客户机的第三个IDE设备,在客户机中表现为/dev/hdc设备或者/dev/sdc设备
-hdd file 将file文件作为客户机的第四个IDE设备,在客户机中表现为/dev/hdd设备或者/dev/sdd设备
-fda file 将file文件作为客户机的第一个软盘设备,在客户机中表现为/dev/fd0设备
-fdb file 将file文件作为客户机的第二个软盘设备,在客户机中表现为/dev/fd1设备
-cdrom file 将file文件作为客户机的光盘CD-ROM,在客户机中通常表现为/dcv/cdrom设备,注意-cdrom参数不能和-hdc参数同时使用,因为-cdrom就是客户机中的第三个IDE设备。
-sd file SD卡
-pflash file 并行Flash存储器

设置虚拟机的启动顺序
-boot [order=drivers][,once=drivers][,menu=on|off][,splash=splashfile][,splash-time=sp-time]
order表示系统的启动顺序,a,b分别表示第一个和第二个软驱,c表示第一个硬盘,d表示cd-rom光驱,n表示从网络启动(默认是从硬盘启动)。
once设置第一次启动的启动顺序,在系统重启后该设置即无效。
memu用于设置交互式的启动菜单选项(默认是on)。

详细配置存储驱动器的-driver参数
-driver option[,option[,option[,…]]]
选项如下:
file=file 将file文件作为镜像文件加载到客户机的驱动器中。
if=interface 指定驱动器使用的接口类型,可用的类型有ids,scsi,sd,mtd,floopy,pflash,virtio。
bus=bus,unit=unit
index=index设置同一种接口的驱动器中的索引编号
media=media 设置驱动器中媒介的类型,其值为disk或者cdrom
cache=cache writethrough(默认):直写模式,同时将数据写入磁盘缓存和后端设备,writeback:回写模式。
id=name 驱动器的id

三:QEMU磁盘的管理工具
qemu-img command[command options]
支持的命令如下:
check [-f fmt] filename 目前仅支持对qcow2,qed,vdi的格式检查,如果不指定格式qemu-img会自动检测。

create [-f fmt][-o option]filename[size]创建一个格式为fmt大小为size,文件名为filename的镜像文件,size选项由于指定镜像文件的大小,其默认单位为字节,size也可以作为-o的一个选型出现(-o后面的多个选项用逗号隔开)。
支持的选项如下:
[root@localhost qemu-kvm]# qemu-img create -f qcow2 -o?
Supported options:
size Virtual disk size
compat Compatibility level (0.10 or 1.1)
backing_file File name of a base image
backing_fmt Image format of the base image
encryption Encrypt the image 当设置要密码时,启动虚拟机时需要在QEMU Monitor中执行c命令 ,然后输入密码。 当它等于on时,镜像被加密,
cluster_size qcow2 cluster size
preallocation Preallocation mode (allowed values: off, metadata, falloc, full)
lazy_refcounts Postpone refcount updates

commit [-f fmt]filename提交filename文件中的更改到后端支持镜像文件

convert [-c] [-f fmt] [-O output_fmt] [-o options] filename output_filename

info [-f fmt] filename 展示filename镜像文件的信息,如果文件使用的是稀疏文件的存储方式也会显示处它的本来分配的大小,以及实际占用的空间大小,如果文件中存放有客户机快照,快照的信息也会被显示出来。

snapshot [-l | -a snapshot | -c snapshot | -d snapshot] filename
-l 选项表示查询并列出镜像文件中的所有快照,-a snapshot表示让镜像文件使用某个快照,-c snapshot表示创建一个快照 -d表示删除一个快照。

四:虚拟机网络设置
-net nic [,vlan=n][,macaddr=mac] [,model=type][,name=name][,addr=addr][,vectors=v]
加上该参数会让QEMU建立一个新的网卡并将其连接到n号VLAN上。
-net nic 是必须的参数,表示这是一个网卡的配置。
vlan=n 表示将网卡放入到编号为n的VLAN,默认为0。
macaddr=mac,设置网卡的MAC地址,默认会根据宿主机中网卡的地址来分配。
model=type 设置模拟网卡的类型,
name=name 设置网卡在客户机中的PCI设备地址addr。

0 0
原创粉丝点击