您的位置:首页 > 运维架构

用OpenStack界面轻松创建虚拟机的你,看得懂虚拟机启动的这24个参数么?

2018-03-08 15:31 453 查看
用OpenStack界面轻松创建虚拟机的你,看得懂虚拟机启动的这24个参数么?
  
  看这篇文章之前,保证看过以下文章:
  
  我是虚拟机内核我困惑?!
  
  Qemu,KVM,Virsh傻傻的分不清
  
  裸用KVM创建虚拟机,体验virtualbox为你做的10件事情
  
  大家从OpenStack页面上,轻松一点就创建了一个虚拟机,但是当你登陆到一台物理机上ps查看的时候,却发现参数复杂之极。
  
  qemu-system-x86_64
  
  -enable-kvm
  
  -name instance-00000024
  
  -machine pc-i440fx-trusty,accel=kvm,usb=off
  
  -cpu SandyBridge,+erms,+smep,+fsgsbase,+pdpe1gb,+rdrand,+f16c,+osxsave,+dca,+pcid,+pdcm,+xtpr,+tm2,+est,+smx,+vmx,+ds_cpl,+monitor,+dtes64,+pbe,+tm,+ht,+ss,+acpi,+ds,+vme
  
  -m 2048 -realtime mlock=off
  
  -smp 1,sockets=1,cores=1,threads=1
  
  -uuid 1f8e6f7e-5a70-4780-89c1-464dc0e7f308
  
  -smbios type=1,manufacturer=OpenStack Foundation,product=OpenStack Nova,version=2014.1,serial=80590690-87d2-e311-b1b0-a0481cabdfb4,uuid=1f8e6f7e-5a70-4780-89c1-464dc0e7f308
  
  -no-user-config
  
  -nodefaults
  
  -chardev socket,id=charmonitor,path=/var/lib/libvirt/qemu/instance-00000024.monitor,server,nowait
  
  -mon chardev=charmonitor,id=monitor,mode=control
  
  -rtc base=utc,driftfix=slew
  
  -global kvm-pit.lost_tick_policy=discard
  
  -no-hpet
  
  -no-shutdown
  
  -boot strict=on
  
  -device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2
  
  -drive file=/var/lib/nova/instances/1f8e6f7e-5a70-4780-89c1-464dc0e7f308/disk,if=none,id=drive-virtio-disk0,format=qcow2,cache=none
  
  -device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x4,drive=drive-virtio-disk0,id=virtio-disk0,bootindex=1
  
  -netdev tap,fd=32,id=hostnet0,vhost=on,vhostfd=37
  
  -device virtio-net-pci,netdev=hostnet0,id=net0,mac=fa:16:3e:d1:2d:99,bus=pci.0,addr=0x3
  
  -chardev file,id=charserial0,path=/www.tygj178.com var/lib/nova/instances/1f8e6f7e-5a70-4780-89c1-464dc0e7f308/console.log
  
  -device isa-serial,chardev=charserial0,id=serial0
  
  -chardev pty,id=charserial1
  
  -device isa-serial,chardev=charserial1,id=serial1
  
  -device usb-tablet,id=input0
  
  -vnc 0.0.0.0:12
  
  -k en-us
  
  -device cirrus-vga,id=video0,www.xucaizxyl.com bus=pci.0,addr=0x2
  
  -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x5
  
  参数一:-enable-kvm
  
  启用硬件辅助虚拟化
  
  参数二:-name instance-00000024
  
  虚拟机的名称
  
  参数三:-machine pc-i440fx-trusty,accel=kvm,usb=off
  
  machine是什么呢,其实是计算机体系结构
  
  还记得大学学的这门课么?
  
  QEMU会模拟多种体系结构,常用的有:
  
  普通PC机,也即x86的32位或者64位的体系结构
  
  MAC电脑PowerPC的体系结构
  
  Sun的体系结构
  
  MIPS的体系结构,精简指令集的
  
  如果使用KVM hardware-assisted virtualization,也即BIOS中VD-T是打开的,则参数中accel=kvm
  
  如果不使用hardware-assisted www.baqist.cn/ virtualization,用的是纯模拟,则有参数accel = tcg,-no-kvm
  
  参数四:-cpu SandyBridge,+erms,+smep,+fsgsbase,+pdpe1gb,+rdrand,+f16c,+osxsave,+dca,+pcid,+pdcm,+xtpr,+tm2,+est,+smx,+vmx,+ds_cpl,+monitor,+dtes64,+pbe,+tm,+ht,+ss,+acpi,+ds,+vme
  
  设置CPU,SandyBridge是Intel处理器,后面的加号都是添加的CPU的参数,这些参数会显示在/proc/cpuinfo里面
  
  参数五:-m 2048
  
  这是内存
  
  guest真正运行态的占用的内存的大小,是用MemoryBallooning来调整-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x5
  
  参数六:-smp 1,sockets=1,cores=1,threads=1
  
  SMP是什么呢?全称Symmetrical Multi-Processing,名为对称多处理器
  
  指在一个计算机上汇集了一组处理器(多CPU),多个CPU之间通过系统总线共享内存。
  
  但是这种方式也有缺点,就是所有的CPU访问内存都需要经过总线,所以总线就会成为瓶颈,导致CPU访问内存的速度变慢。
  
  为了解决这个问题,后来有了NUMA结构,全称为Non Uniform Memory Access Architecture
  
  在NUMA结构下,每个CPU有直连的本地内存,访问本地的内存非常快,而且不用过系统总线,如果写程序的时候,能够保证每个CPU指令尽量访问本地的内存,可以大大提高性能。通过命令numactl可以查看NUMA架构。
  
  我们的参数中有-smp1,sockets=1,cores=1,threads=1
  
  qemu仿真了一个具有1个vcpu,一个socket,一个core,一个threads的处理器。
  
  socket,core, threads是什么概念呢。socket就是主板上插cpu的槽的数目,也即常说的“路”,core就是我们平时说的“核”,即双核,4核等,thread就是每个core的硬件线程数,即超线程。
  
  具体例子,某个服务器是:2路4核超线程(一般默认为2个线程),通过cat /proc/cpuinfo看到的是2*4*2=16个processor,很多人也习惯成为16核了
  
  参数七:-uuid 1f8e6f7e-5a70-4780-89c1-464dc0e7f308
  
  给每个虚拟机设置一个www.huayyule.com UUID
  
  参数八:-smbios type=1,manufacturer=OpenStack Foundation,product=OpenStack Nova,v
aab4
ersion=2014.1,serial=80590690-87d2-e311-b1b0-a0481cabdfb4,uuid=1f8e6f7e-5a70-4780-89c1-464dc0e7f308
  
  SM BIOS全称System Management BIOS,用于表示x86体系结构的硬件信息。
  
  在unix系统上,可以使用命令dmidecode得到,SMBIOS的信息被分为多个table中,称为type。
  
  type0是BIOS信息
  
  type 1是系统信息
  
  type 2是主板信息
  
  这个参数设置了type 1的信息
  
  参数九:-chardev socket,id=charmonitor,path=/var/lib/libvirt/qemu/instance-00000024.monitor,server,nowait
  
  参数十:-mon chardev=charmonitor,id=monitor,mode=control
  
  这两个参数是一对,都是指定qemu的monitor接口到一个文件的。
  
  用qemu启动的虚拟机本来就是带monitor的,本来通过monitor就是可以管理虚拟机的。
  
  访问qemu monitor console有两种方式:
  
  用VNC连接到虚拟机, Ctrl+Alt+2进入,Ctrl+Alt+1返回普通console
  
  在 QEMU 启动的时候指定-monitor参数。比如-monitor stdio将允许使用标准输入作为monitor命令源
  
  qemu-system-x86_64 -enable-kvm-name ubuntutest  -m 2048 -hda ubuntutest.qcow2 -vnc :19 -net nic,model=virtio -nettap,ifname=tap0,script=no,downscript=no -monitor stdio
  
  可以在monitor里面查看Block设备: 看到Image文件
  
  查看Network
  
  在这个命令中将monitor映射到一个文件,就是为了将来virsh console连接这个虚拟机的时候,可以从bash里面输入命令,输入的命令通过这个文件传入monitor,从而在monitor中执行这个命令。
  
  参数十一:-rtc base=utc,driftfix=slew
  
  参数十二:-no-hpet
  
  系统时间由参数-rtc指定 -rtc[base = utc | localtime |date] [, clock = host | vm] [, driftfix =none | slew]
  
  HighPrecision Event Timer (HPET)是可以更准确的设定时间的
  
  参数十三:-device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2
  
  参数十四:-device usb-tablet,id=input0
  
  USB的好处就是即插即用,参数-usb,可以模拟一个PCI UHCI USB控制器,通过tablet,鼠标可以在HOST和GUEST机器之间自由的切换
  
  参数十五:-device cirrus-vga,id=video0,bus=pci.0,addr=0x2
  
  显示器用参数-vga设置,默认为cirrus,它模拟了CL-GD5446PCI VGA card
  
  参数十六,十七:有关网卡
  
  使用-net参数和-device
  
  从HOST角度:-netdev tap,fd=32,id=hostnet0,vhost=on,vhostfd=37
  
  从GUEST角度:-device virtio-net-pci,netdev=hostnet0,id=net0,mac=fa:16:3e:d1:2d:99,bus=pci.0,addr=0x3
  
  有关网卡的virtio是半虚拟化的驱动,后面的文章会仔细说
  
  参数十八,十九:有关硬盘
  
  使用-hda -hdb
  
  使用-drive和-device
  
  从HOST角度:-drive file=/var/lib/nova/instances/1f8e6f7e-5a70-4780-89c1-464dc0e7f308/disk,if=none,id=drive-virtio-disk0,format=qcow2,cache=none
  
  从GUEST角度:-device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x4,drive=drive-virtio-disk0,id=virtio-disk0,bootindex=1
  
  有关存储的virtio是半虚拟化的驱动,后面的文章会仔细说
  
  参数二十,二十一:有关console的log
  
  从HOST角度:-chardev file,id=charserial0,path=/var/lib/nova/instances/1f8e6f7e-5a70-4780-89c1-464dc0e7f308/console.log
  
  从GUEST角度:-device isa-serial,chardev=charserial0,id=serial0
  
  当然需要在image里面做如下的配置才能将boot log写入console
  
  /boot/grub/grub.cfg中有linux/boot/vmlinuz-3.2.0-49-virtual root=UUID=6d2231e4-0975-4f35-a94f-56738c1a8150 ro console=ttyS0
  
  参数二十二,二十三:PTY
  
  -chardev pty,id=charserial1
  
  -device isa-serial,chardev=charserial1,id=serial1
  
  参数二十四:VNC
  
  -vnc0.0.0.0:12
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐