看这篇文章之前,保证看过以下文章:

我是虚拟机内核我困惑?!

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

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

  1. Openstack(十四)创建虚拟机

    启动虚拟机之前需要先做一些前期准备,比如网络和IP地址分配.虚拟机:类型创建等等,具体如下: 14.1网络规划及IP划分 #官网安装文档:https://docs.openstack.org/ocat ...

  2. 完整部署CentOS7.2+OpenStack+kvm 云平台环境(6)--在线调整虚拟机的大小

    前面提到过openstack环境部署及创建虚拟机的完整过程,然后有时候会发现创建的虚拟机规格太小,满足不了业务需求:亦或是虚拟机规格太大,容易造成资源浪费.于是就有了在线拉伸虚拟机规格的需求.所以,今 ...

  3. Bootstrap Magic – 轻松创建自己的 Bootstrap 主题

    Bootstrap Magic 是一款基于 Bootstrap 和 AngularJS 的主题创建工具.您可以轻松地创建您自己的 Twitter Bootstrap 主题,可以立即看到你的内容变化.您 ...

  4. BeeFree - 在线轻松创建电子邮件消息

    Beefree 可以很容易地创建一个电子邮件消息,可以被用来发送企业简讯,宣布一个新产品,促进销售等.可以免费使用,您甚至不需要创建任何类型的帐户.您可以使用 Beefree 创建创新的,易于使用的电 ...

  5. OpenStack 界面开发中response.body的中文编码问题

    Contents [hide] 1 问题的引入= 1.1 解决办法 2 用户限制输入中文 3 不限制用户输入,呈现上修改 问题的引入= G在我们创建虚拟机的时候,会设置虚拟机的名称,描述,如果没有限制 ...

  6. Web开发入门教程:Pycharm轻松创建Flask项目

    Web开发入门教程:Pycharm轻松创建Flask项目 打开Pycharm的file,选择创建新的项目,然后弹出对话框,我们可以看到里面有很多的案例,Flask.Django等等,我们选择生成Fla ...

  7. 《深入理解Java虚拟机》(二)Java虚拟机运行时数据区

    Java虚拟机运行时数据区 详解 2.1 概述 本文参考的是周志明的 <深入理解Java虚拟机>第二章 ,为了整理思路,简单记录一下,方便后期查阅. 2.2 运行时数据区域 Java虚拟机 ...

  8. JVM虚拟机(一):java虚拟机的基本结构

    1: 类加载子系统(负责从文件系统或者网络中加载class信息,加载的类信息存放于一块成为方法区的内存空间.除了类信息外,方法区中可能还存放运行时常量池信息,包括字符串字面量和数字常量(这部分常量信息 ...

  9. 《深入理解Java虚拟机》之(三、虚拟机性能监控与故障处理工具)

    一.JDK的命令行工具 1.jps:虚拟机进程状况工具 功能:可以列出正在运行的虚拟机进程,并显示虚拟机执行朱磊名称以及这些进程的本地虚拟机唯一ID. 2.jstat:虚拟机统计信息监控工具 Jsta ...

随机推荐

  1. 【Tomcat】Tomcat的使用

    第一章 JDK的安装 1.1  windows下安装 1.1.1  配置环境变量 安装完成后,还要进行 Java 环境的配置,才能正常使用,步骤如下: (1)在我的电脑点击右键——〉选择属性, (2) ...

  2. D 区间求和 [数学 树状数组]

    D 区间求和 题意:求 \[ \sum_{k=1}^n \sum_{l=1}^{n-k+1} \sum_{r=l+k-1}^n 区间前k大值和 \] 比赛时因为被B卡了没有深入想这道题 结果B没做出来 ...

  3. [Sdoi2017]序列计数 [矩阵快速幂]

    [Sdoi2017]序列计数 题意:长为\(n \le 10^9\)由不超过\(m \le 2 \cdot 10^7\)的正整数构成的和为\(t\le 100\)的倍数且至少有一个质数的序列个数 总- ...

  4. Java DecimalFormat 用法

    Java 提供 DecimalFormat 类,帮你用最快的速度将数字格式化为你需要的样子.下面是一个例子: importjava.text.DecimalFormat; publicclassTes ...

  5. struct stat结构体简介

    在使用这个结构体和方法时,需要引入: <sys/types.h> <sys/stat.h> struct stat这个结构体是用来描述一个linux系统文件系统中的文件属性的结 ...

  6. [Python Study Notes]WdSaveFormat 枚举

    WdSaveFormat 枚举 指定要在保存文档时使用的格式. 版本信息 已添加版本: 名称 值 说明 wdFormatDocument 0 Microsoft Word 格式. wdFormatDO ...

  7. 【linux之设备,分区,文件系统】

    一.设备 IDE磁盘的设备文件采用/dev/hdx来命名,分区则采用/dev/hdxy来命名,其中x表示磁盘(a是第一块磁盘,b是第二块磁盘,以此类推), y代表分区的号码(由1开始,..3以此类推) ...

  8. linux集群架构

    Linux集群架构   根据功能划分为两大类:高可用和负载均衡 高可用集群通常为两台服务器,一台工作,另外一台作为冗余,当提供服务的机器宕机,冗余将接替继续提供服务 实现高可用的开源软件有:heart ...

  9. [求助][SPOJ MARIOGAM]-高斯消元(内含标程,数据等)

    小蒟蒻开始做概率的题之后,遇到了这道题,然而,他发现自己的程序调试了无数次也无法通过,系统总是返回令人伤心的WA, 于是,他决定把这一天半的时间收集到的资料放在网上, 寻求大家的帮助, 也可以节省后来 ...

  10. NDK 开发中,各种指令集的坑,arm64

          最近在NDK开发中遇到了一个奇怪的问题,希望记录下,可以帮到大家:         我编译了一些 .so 动态库,只编译了armeabi-v7a.armeabi 指令集,其它指令集编译不了 ...