用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=/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,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 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

 

給每個虛擬機設置一個UUID

 

參數八:-smbios type=1,manufacturer=OpenStack Foundation,product=OpenStack Nova,version=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

 

歡迎關注微信公眾號

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM