您的位置:首页 > 其它

QEMU KVM Libvirt手册(7): 硬件虚拟化

2014-11-04 19:04 471 查看
在openstack中,如果我们启动一个虚拟机,我们会看到非常复杂的参数

qemu-system-x86_64

-enable-kvm

-name instance-00000024

-S

-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

这节我们会一一解析

QEMU会模拟多种Processor architectures, 常用的是PC (x86 or x86_64 processor), Mac99 PowerMac (PowerPC processor), Sun4u/Sun4v (64-bit Sparc processor), MIPS magnum (64-bit MIPS processor)

通过下面的命令我们可以列出支持的PC bus architecture



# qemu-system-x86_64 --machine ?

Supported machines are:

pc-0.13 Standard PC (i440FX + PIIX, 1996)

pc-i440fx-2.0 Standard PC (i440FX + PIIX, 1996)

pc-1.0 Standard PC (i440FX + PIIX, 1996)

pc-q35-1.7 Standard PC (Q35 + ICH9, 2009)

pc-1.1 Standard PC (i440FX + PIIX, 1996)

q35 Standard PC (Q35 + ICH9, 2009) (alias of pc-q35-2.0)

pc-q35-2.0 Standard PC (Q35 + ICH9, 2009)

pc-i440fx-1.4 Standard PC (i440FX + PIIX, 1996)

pc-i440fx-1.5 Standard PC (i440FX + PIIX, 1996)

pc-0.14 Standard PC (i440FX + PIIX, 1996)

pc-0.15 Standard PC (i440FX + PIIX, 1996)

xenfv Xen Fully-virtualized PC

pc-q35-1.4 Standard PC (Q35 + ICH9, 2009)

isapc ISA-only PC

pc-0.10 Standard PC (i440FX + PIIX, 1996)

pc Ubuntu 14.04 PC (i440FX + PIIX, 1996) (alias of pc-i440fx-trusty)

pc-i440fx-trusty Ubuntu 14.04 PC (i440FX + PIIX, 1996) (default)

pc-1.2 Standard PC (i440FX + PIIX, 1996)

pc-0.11 Standard PC (i440FX + PIIX, 1996)

pc-i440fx-1.7 Standard PC (i440FX + PIIX, 1996)

pc-i440fx-1.6 Standard PC (i440FX + PIIX, 1996)

none empty machine

xenpv Xen Para-virtualized PC

pc-q35-1.5 Standard PC (Q35 + ICH9, 2009)

pc-q35-1.6 Standard PC (Q35 + ICH9, 2009)

pc-0.12 Standard PC (i440FX + PIIX, 1996)

pc-1.3 Standard PC (i440FX + PIIX, 1996)

默认的是pc-i440fx-trusty,所以在上面的参数中我们可以看到

-machine pc-i440fx-trusty,accel=kvm,usb=off

在x86 architecture下,很多硬件都可以被模拟

SeaBIOS (from QEMU 0.12.0), PC BIOS from the Bochs project (up QEMU 0.11)

Plex86/Bochs LGPL VGA BIOS

Symmetric multiprocessor system (SMP) for up to 255 CPUs

PC bus: PCI or ISA system (i440FX Host PCI Bridge and PCI to ISA Bridge PIIX3)

Two PCI IDE interfaces with support for up to four (virtual) hard drives or CD / DVD-ROMs

two floppy disk drives

CD or DVD drive

Graphics card (Cirrus CLGD 5446 PCI VGA card or standard VGA graphics card with Bochs VESA BIOS Extension)

2 mouse and keyboard

PCI UHCI USB controller and a virtual USB hub

PCI-/ISA-Netzwerkadapter

Network cards (Intel e1000 and others)

Parallel port

Serial ports

Sound card (Creative Sound Blaster 16, ENSONIQ AudioPCI ES1370 PCI, Intel 82801AA AC97, Adlib OPL2 Yamaha

YM3812, Gravis Ultrasound GF1, CS4231A)

Supervisor Mode Execution Prevention (SMEP) from Intel

Functionalities of VIA CPUs.


CPU

下面的命令可以列出支持的CPU

# qemu-system-x86_64 --cpu ?

x86 qemu64 QEMU Virtual CPU version 2.0.0

x86 phenom AMD Phenom(tm) 9550 Quad-Core Processor

x86 core2duo Intel(R) Core(TM)2 Duo CPU T7700 @ 2.40GHz

x86 kvm64 Common KVM processor

x86 qemu32 QEMU Virtual CPU version 2.0.0

x86 kvm32 Common 32-bit KVM processor

x86 coreduo Genuine Intel(R) CPU T2600 @ 2.16GHz

x86 486

x86 pentium

x86 pentium2

x86 pentium3

x86 athlon QEMU Virtual CPU version 2.0.0

x86 n270 Intel(R) Atom(TM) CPU N270 @ 1.60GHz

x86 Conroe Intel Celeron_4x0 (Conroe/Merom Class Core 2)

x86 Penryn Intel Core 2 Duo P9xxx (Penryn Class Core 2)

x86 Nehalem Intel Core i7 9xx (Nehalem Class Core i7)

x86 Westmere Westmere E56xx/L56xx/X56xx (Nehalem-C)

x86 SandyBridge Intel Xeon E312xx (Sandy Bridge)

x86 Haswell Intel Core Processor (Haswell)

x86 Opteron_G1 AMD Opteron 240 (Gen 1 Class Opteron)

x86 Opteron_G2 AMD Opteron 22xx (Gen 2 Class Opteron)

x86 Opteron_G3 AMD Opteron 23xx (Gen 3 Class Opteron)

x86 Opteron_G4 AMD Opteron 62xx class CPU

x86 Opteron_G5 AMD Opteron 63xx class CPU

x86 host KVM processor with all supported host features (only available in KVM mode)

Recognized CPUID flags:

pbe ia64 tm ht ss sse2 sse fxsr mmx acpi ds clflush pn pse36 pat cmov mca pge mtrr sep apic cx8 mce pae msr tsc pse de vme fpu

hypervisor rdrand f16c avx osxsave xsave aes tsc-deadline popcnt movbe x2apic sse4.2|sse4_2 sse4.1|sse4_1 dca pcid pdcm xtpr cx16 fma cid ssse3 tm2 est smx vmx ds_cpl monitor dtes64 pclmulqdq|pclmuldq pni|sse3

smap adx rdseed rtm invpcid erms bmi2 smep avx2 hle bmi1 fsgsbase

3dnow 3dnowext lm|i64 rdtscp pdpe1gb fxsr_opt|ffxsr mmxext nx|xd syscall

perfctr_nb perfctr_core topoext tbm nodeid_msr tce fma4 lwp wdt skinit xop ibs osvw 3dnowprefetch misalignsse sse4a abm cr8legacy extapic svm cmp_legacy lahf_lm

pmm-en pmm phe-en phe ace2-en ace2 xcrypt-en xcrypt xstore-en xstore

kvm_pv_unhalt kvm_pv_eoi kvm_steal_time kvm_asyncpf kvmclock kvm_mmu kvm_nopiodelay kvmclock

pfthreshold pause_filter decodeassists flushbyasid vmcb_clean tsc_scale nrip_save svm_lock lbrv npt

所以我们的参数中有下面的CPU设置及添加的flag

-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


SMP对称多处理器

对称多处理"(Symmetrical Multi-Processing)简称SMP,是指在一个计算机上汇集了一组处理器(多CPU),各CPU之间共享内存子系统以及总线结构。

在这种架构中,一台电脑不再由单个CPU组成,而同时由多个处理器运行操作系统的单一复本,并共享内存和一台计算机的其他资源。虽然同时使用多个CPU,但是从管理的角度来看,它们的表现就像一台单机一样。系统将任务队列对称地分布于多个CPU之上,从而极大地提高了整个系统的数据处理能力。所有的处理器都可以平等地访问内存、I/O和外部中断。在对称多处理系统中,系统资源被系统中所有CPU共享,工作负载能够均匀地分配到所有可用处理器之上。

QEMU and KVM 可以最多模拟SMP到255个CPU.

我们的参数中有

-smp 1,sockets=1,cores=1,threads=1

qemu仿真了一个具有1个vcpu,一个socket,一个core,一个threads的处理器。

socket, core, threads是什么概念呢

(1)socket就是主板上插cpu的槽的数目,也即管理员说的”路“

(2)core就是我们平时说的”核“,即双核,4核等

(3)thread就是每个core的硬件线程数,即超线程

具体例子,某个服务器是:2路4核超线程(一般默认为2个线程),那么,通过cat /proc/cpuinfo看到的是2*4*2=16个processor,很多人也习惯成为16核了!

如果使用KVM hardware-assisted virtualization,也即nova-compute.conf中的libvirt_type=kvm,也即BIOS中VD-T是打开的,则参数中accel=kvm

如果不使用hardware-assisted virtualization,也即nova-compute.conf中的libvirt_type=qemu,用的是纯模拟,则有参数accel = tcg,-no-kvm

When you install Microsoft Windows as a guest operating system, the KVM hardware-assisted virtualization should be disabled. After installation, the KVM hardware-assisted virtualization can be enabled on all Windows versions.


其他硬件

还模拟了其他的设备,可以使用默认配置,如果不使用默认配置,则有参数-nodefaults

在monitor中,用下面的命令可以打印出所有的device

virsh # qemu-monitor-command instance-00000024 --hmp "info qtree"

bus: main-system-bus

type System

dev: kvm-ioapic, id ""

gpio-in 24

gsi_base = 0 (0)

irq 0

mmio 00000000fec00000/0000000000001000

dev: i440FX-pcihost, id ""

pci-hole64-size = 18446744073709551615 (16 EiB)

short_root_bus = 0 (0)

irq 0

bus: pci.0

type PCI

dev: virtio-balloon-pci, id "balloon0"

indirect_desc = true

event_idx = true

class = 255 (0xff)

addr = 05.0

romfile = ""

rombar = 1 (0x1)

multifunction = false

command_serr_enable = true

class Class 00ff, addr 00:05.0, pci id 1af4:1002 (sub 1af4:0005)

bar 0: i/o at 0xc080 [0xc09f]

bus: virtio-bus

type virtio-pci-bus

dev: virtio-balloon-device, id ""

dev: cirrus-vga, id "video0"

vgamem_mb = 8 (0x8)

addr = 02.0

romfile = "vgabios-cirrus.bin"

rombar = 1 (0x1)

multifunction = false

command_serr_enable = true

class VGA controller, addr 00:02.0, pci id 1013:00b8 (sub 1af4:1100)

bar 0: mem at 0xfc000000 [0xfdffffff]

bar 1: mem at 0xfebd0000 [0xfebd0fff]

bar 6: mem at 0xffffffffffffffff [0xfffe]

dev: virtio-net-pci, id "net0"

ioeventfd = false

vectors = 3 (0x3)

indirect_desc = true

event_idx = true

any_layout = true

csum = true

guest_csum = true

gso = true

guest_tso4 = true

guest_tso6 = true

guest_ecn = true

guest_ufo = true

host_tso4 = true

host_tso6 = true

host_ecn = true

host_ufo = true

mrg_rxbuf = true

status = true

ctrl_vq = true

ctrl_rx = true

ctrl_vlan = true

ctrl_rx_extra = true

ctrl_mac_addr = true

ctrl_guest_offloads = true

mq = false

mac = "fa:16:3e:d1:2d:99"

vlan = <null>

netdev = "hostnet0"

bootindex = -1 (0xffffffffffffffff)

x-txtimer = 150000 (0x249f0)

x-txburst = 256 (0x100)

tx = ""

addr = 03.0

romfile = "efi-virtio.rom"

rombar = 1 (0x1)

multifunction = false

command_serr_enable = true

class Ethernet controller, addr 00:03.0, pci id 1af4:1000 (sub 1af4:0001)

bar 0: i/o at 0xc060 [0xc07f]

bar 1: mem at 0xfebd1000 [0xfebd1fff]

bar 6: mem at 0xffffffffffffffff [0x3fffe]

bus: virtio-bus

type virtio-pci-bus

dev: virtio-net-device, id ""

mac = "fa:16:3e:d1:2d:99"

vlan = <null>

netdev = "hostnet0"

bootindex = -1 (0xffffffffffffffff)

x-txtimer = 150000 (0x249f0)

x-txburst = 256 (0x100)

tx = ""

dev: virtio-blk-pci, id "virtio-disk0"

class = 0 (0)

ioeventfd = true

vectors = 2 (0x2)

x-data-plane = false

indirect_desc = true

event_idx = true

drive = "drive-virtio-disk0"

logical_block_size = 512 (0x200)

physical_block_size = 512 (0x200)

min_io_size = 0 (0)

opt_io_size = 0 (0)

bootindex = 1 (0x1)

discard_granularity = 4294967295 (0xffffffff)

cyls = 0 (0)

heads = 0 (0)

secs = 0 (0)

serial = ""

config-wce = true

scsi = false

x-iothread = ""

addr = 04.0

romfile = ""

rombar = 1 (0x1)

multifunction = false

command_serr_enable = true

class SCSI controller, addr 00:04.0, pci id 1af4:1001 (sub 1af4:0002)

bar 0: i/o at 0xc000 [0xc03f]

bar 1: mem at 0xfebd2000 [0xfebd2fff]

bus: virtio-bus

type virtio-pci-bus

dev: virtio-blk-device, id ""

drive = "drive-virtio-disk0"

logical_block_size = 512 (0x200)

physical_block_size = 512 (0x200)

min_io_size = 0 (0)

opt_io_size = 0 (0)

bootindex = 1 (0x1)

discard_granularity = 4294967295 (0xffffffff)

cyls = 16383 (0x3fff)

heads = 16 (0x10)

secs = 63 (0x3f)

serial = ""

config-wce = true

scsi = false

x-iothread = ""

dev: piix3-usb-uhci, id "usb"

masterbus = ""

firstport = 0 (0)

bandwidth = 1280 (0x500)

maxframes = 128 (0x80)

addr = 01.2

romfile = ""

rombar = 1 (0x1)

multifunction = false

command_serr_enable = true

class USB controller, addr 00:01.2, pci id 8086:7020 (sub 1af4:1100)

bar 4: i/o at 0xc040 [0xc05f]

bus: usb.0

type usb-bus

dev: usb-tablet, id "input0"

usb_version = 2 (0x2)

port = ""

serial = ""

full-path = true

msos-desc = true

addr 0.2, port 1, speed 12, name QEMU USB Tablet, attached

dev: PIIX4_PM, id ""

smb_io_base = 45312 (0xb100)

disable_s3 = 0 (0)

disable_s4 = 0 (0)

s4_val = 2 (0x2)

acpi-pci-hotplug-with-bridge-support = true

addr = 01.3

romfile = ""

rombar = 1 (0x1)

multifunction = false

command_serr_enable = true

class Bridge, addr 00:01.3, pci id 8086:7113 (sub 1af4:1100)

bus: i2c

type i2c-bus

dev: smbus-eeprom, id ""

address = 87 (0x57)

dev: smbus-eeprom, id ""

address = 86 (0x56)

dev: smbus-eeprom, id ""

address = 85 (0x55)

dev: smbus-eeprom, id ""

address = 84 (0x54)

dev: smbus-eeprom, id ""

address = 83 (0x53)

dev: smbus-eeprom, id ""

address = 82 (0x52)

dev: smbus-eeprom, id ""

address = 81 (0x51)

dev: smbus-eeprom, id ""

address = 80 (0x50)

dev: piix3-ide, id ""

addr = 01.1

romfile = ""

rombar = 1 (0x1)

multifunction = false

command_serr_enable = true

class IDE controller, addr 00:01.1, pci id 8086:7010 (sub 1af4:1100)

bar 4: i/o at 0xc0a0 [0xc0af]

bus: ide.1

type IDE

bus: ide.0

type IDE

dev: PIIX3, id ""

addr = 01.0

romfile = ""

rombar = 1 (0x1)

multifunction = true

command_serr_enable = true

class ISA bridge, addr 00:01.0, pci id 8086:7000 (sub 1af4:1100)

bus: isa.0

type ISA

dev: isa-serial, id "serial1"

index = 1 (0x1)

iobase = 760 (0x2f8)

irq = 3 (0x3)

chardev = "charserial1"

wakeup = 0 (0)

isa irq 3

dev: isa-serial, id "serial0"

index = 0 (0)

iobase = 1016 (0x3f8)

irq = 4 (0x4)

chardev = "charserial0"

wakeup = 0 (0)

isa irq 4

dev: isa-fdc, id ""

iobase = 1008 (0x3f0)

irq = 6 (0x6)

dma = 2 (0x2)

driveA = ""

driveB = ""

bootindexA = -1 (0xffffffffffffffff)

bootindexB = -1 (0xffffffffffffffff)

check_media_rate = true

isa irq 6

dev: port92, id ""

dev: vmmouse, id ""

dev: vmport, id ""

dev: i8042, id ""

isa irqs 1,12

dev: isa-pcspk, id ""

iobase = 97 (0x61)

dev: kvm-pit, id ""

gpio-in 1

iobase = 64 (0x40)

lost_tick_policy = "discard"

dev: mc146818rtc, id ""

base_year = 0 (0)

lost_tick_policy = "slew"

isa irq 8

dev: kvm-i8259, id ""

iobase = 160 (0xa0)

elcr_addr = 1233 (0x4d1)

elcr_mask = 222 (0xde)

master = false

dev: kvm-i8259, id ""

iobase = 32 (0x20)

elcr_addr = 1232 (0x4d0)

elcr_mask = 248 (0xf8)

master = true

dev: i440FX, id ""

addr = 00.0

romfile = ""

rombar = 1 (0x1)

multifunction = false

command_serr_enable = true

class Host bridge, addr 00:00.0, pci id 8086:1237 (sub 1af4:1100)

dev: fw_cfg, id ""

ctl_iobase = 1296 (0x510)

data_iobase = 1297 (0x511)

irq 0

mmio ffffffffffffffff/0000000000000002

mmio ffffffffffffffff/0000000000000001

dev: kvmclock, id ""

irq 0

dev: kvmvapic, id ""

irq 0

dev: icc-bridge, id ""

irq 0

mmio 00000000fee00000/0000000000100000

bus: icc

type icc-bus

dev: kvm-apic, id ""

id = 0 (0)

vapic = true

dev: SandyBridge-x86_64-cpu, id ""

pmu = false

hv-spinlocks = -1 (0xffffffffffffffff)

hv-relaxed = false

hv-vapic = false

hv-time = false

check = false

enforce = false


SMBIOS

SMBIOS全称System Management BIOS,用于表示x86 architectures的硬件信息

在unix系统上,可以使用下面的命令dmidecode得到,SMBIOS的信息被分为多个table中,称为type

type 0是BIOS信息

# dmidecode --type 0

# dmidecode 2.12

# SMBIOS entry point at 0xcbadeb98

SMBIOS 2.7 present.

Handle 0x0000, DMI type 0, 24 bytes

BIOS Information

Vendor: Hewlett-Packard

Version: J61 v03.69

Release Date: 03/25/2014

Address: 0xF0000

Runtime Size: 64 kB

ROM Size: 16384 kB

Characteristics:

PCI is supported

PNP is supported

BIOS is upgradeable

BIOS shadowing is allowed

Boot from CD is supported

Selectable boot is supported

EDD is supported

Print screen service is supported (int 5h)

8042 keyboard services are supported (int 9h)

Serial services are supported (int 14h)

Printer services are supported (int 17h)

ACPI is supported

USB legacy is supported

BIOS boot specification is supported

Function key-initiated network boot is supported

Targeted content distribution is supported

UEFI is supported

BIOS Revision: 3.69

type 1是系统信息

# dmidecode --type 1

# dmidecode 2.12

# SMBIOS entry point at 0xcbadeb98

SMBIOS 2.7 present.

Handle 0x0001, DMI type 1, 27 bytes

System Information

Manufacturer: Hewlett-Packard

Product Name: HP Z620 Workstation

Version: Not Specified

Serial Number: 6CR419WFHT

UUID: 90065980-D287-11E3-B1B0-A0481CABDFB4

Wake-up Type: Power Switch

SKU Number: G2F14UC#AB2

Family: 103C_53335X G=D

type 2是主板信息

# dmidecode --type 2

# dmidecode 2.12

# SMBIOS entry point at 0xcbadeb98

SMBIOS 2.7 present.

Handle 0x0002, DMI type 2, 15 bytes

Base Board Information

Manufacturer: Hewlett-Packard

Product Name: 158A

Version: 0.00

Serial Number: 6CR419WFHT

Asset Tag: 6CR419WFHT

Features:

Board is a hosting board

Board is removable

Board is replaceable

Location In Chassis: Not Specified

Chassis Handle: 0x0003

Type: Motherboard

Contained Object Handles: 0

type 3是背板信息

# dmidecode --type 3

# dmidecode 2.12

# SMBIOS entry point at 0xcbadeb98

SMBIOS 2.7 present.

Handle 0x0003, DMI type 3, 22 bytes

Chassis Information

Manufacturer: Hewlett-Packard

Type: Mini Tower

Lock: Not Present

Version: Not Specified

Serial Number: 6CR419WFHT

Asset Tag: 6CR419WFHT

Boot-up State: Safe

Power Supply State: Safe

Thermal State: Safe

Security Status: Unknown

OEM Information: 0x00000000

Height: Unspecified

Number Of Power Cords: 1

Contained Elements: 0

SKU Number: Not Specified

type 4是CPU信息

# dmidecode --type 4

# dmidecode 2.12

# SMBIOS entry point at 0xcbadeb98

SMBIOS 2.7 present.

Handle 0x0004, DMI type 4, 42 bytes

Processor Information

Socket Designation: CPU0

Type: Central Processor

Family: Xeon

Manufacturer: Intel

ID: E4 06 03 00 FF FB EB BF

Signature: Type 0, Family 6, Model 62, Stepping 4

Flags:

FPU (Floating-point unit on-chip)

VME (Virtual mode extension)

DE (Debugging extension)

PSE (Page size extension)

TSC (Time stamp counter)

MSR (Model specific registers)

PAE (Physical address extension)

MCE (Machine check exception)

CX8 (CMPXCHG8 instruction supported)

APIC (On-chip APIC hardware supported)

SEP (Fast system call)

MTRR (Memory type range registers)

PGE (Page global enable)

MCA (Machine check architecture)

CMOV (Conditional move instruction supported)

PAT (Page attribute table)

PSE-36 (36-bit page size extension)

CLFSH (CLFLUSH instruction supported)

DS (Debug store)

ACPI (ACPI supported)

MMX (MMX technology supported)

FXSR (FXSAVE and FXSTOR instructions supported)

SSE (Streaming SIMD extensions)

SSE2 (Streaming SIMD extensions 2)

SS (Self-snoop)

HTT (Multi-threading)

TM (Thermal monitor supported)

PBE (Pending break enabled)

Version: Intel(R) Xeon(R) CPU E5-2680 v2 @ 2.80GHz

Voltage: 1.0 V

External Clock: 100 MHz

Max Speed: 3800 MHz

Current Speed: 2800 MHz

Status: Populated, Enabled

Upgrade: Socket LGA2011

L1 Cache Handle: 0x0005

L2 Cache Handle: 0x0006

L3 Cache Handle: 0x0007

Serial Number: Not Specified

Asset Tag: Not Specified

Part Number: Not Specified

Core Count: 10

Core Enabled: 10

Thread Count: 20

Characteristics:

64-bit capable

Multi-Core

Hardware Thread

Execute Protection

Enhanced Virtualization

Power/Performance Control

所以我们有参数

-smbios type=1,manufacturer=OpenStack Foundation,product=OpenStack Nova,version=2014.1,serial=80590690-87d2-e311-b1b0-a0481cabdfb4,uuid=1f8e6f7e-5a70-4780-89c1-464dc0e7f308

指定了type 1的信息


RAM

内存的大小在参数中,用-m来指定

-m 2048

If the guest system allocated a large RAM under Linux host system, there may be problems if there is insufficient shared memory type. QEMU then complains about insufficient space in / dev / shm . It is better to expand the file system. For a permanent configuration
file is / etc / default / tmpfs (Ubuntu) adapt.

Host ~ # umount / dev / shm

host ~ # mount-t tmpfs-o remount, size = 144m none / dev / shm

guest真正运行态的占用的内存的大小,是用Memory Ballooning来调整


ACPI

The Advanced Configuration and Power Interface (ACPI) is an open industry standard for power management in computers.

ACPI is the default in QEMU.

If there are problems with the guest operating system, you ACPI disabled with the option -no-acpi .


System Clock

系统时间由参数-rtc指定

-rtc [base = utc | localtime | date] [, clock = host | vm] [, driftfix = none | slew]

For problems with the time-drift in Microsoft Windows ACPI HAL option is driftfix = slew apply (only for x86 architectures).

High Precision Event Timer (HPET)是可以更准确的设定时间的

我们的参数中有

-rtc base=utc,driftfix=slew

-no-hpet


USB

USB的好处就是即插即用

参数-usb,可以模拟一个PCI UHCI USB控制器

通过-usbdevice devname,可以添加一个USB device

mouse

Virtual Mouse. This will override the PS/2 mouse emulation when activated.

tablet

Pointer device that uses absolute coordinates (like a touchscreen). This means QEMU is able to report the

mouse position without having to grab the mouse. Also overrides the PS/2 mouse emulation when activated.

disk:[format=format]:file

Mass storage device based on file. The optional format argument will be used rather than detecting the

format. Can be used to specifiy "format=raw" to avoid interpreting an untrusted format header.

host:bus.addr

Pass through the host device identified by bus.addr (Linux only).

host:vendor_id:product_id

Pass through the host device identified by vendor_id:product_id (Linux only).

serial:[vendorid=vendor_id][,productid=product_id]:dev

Serial converter to host character device dev, see "-serial" for the available devices.

braille

Braille device. This will use BrlAPI to display the braille output on a real or fake device.

net:options

Network adapter that supports CDC ethernet and RNDIS protocols.

我们在参数里面看到的是

-device usb-tablet,id=input0

通过tablet,鼠标可以在HOST和GUEST机器之间自由的切换

# qemu-monitor-command instance-00000024 --hmp "info usb"

Device 0.2, Port 1, Speed 12 Mb/s, Product QEMU USB Tablet


PCI

PCI (Peripheral Component Interconnect)是设备总线标准

There are 4 components to the PCI subsytem:

Bus Number

Device Number

Function Number

Register Number

There are up to 256 available Buses on a PCI system, most commonly all the cards and chips will be located on Bus 0 and Bus 1.

When scanning for hardware, it's a good idea to scan all 256 buses as it won't take that much additional time.

A Device is a physical thing on the PCI bus. It could be a video card, an ethernet card, a Northbridge, anything. There is a software maximum of 32 devices that can exist on each bus. The physical hardware limit is much lower than this due to electrical
loading issues, but we won't get into that.

Devices on a motherboard are typically scattered throughout the 32 devices, holes can and will exist. Your software must scan all 32 devices on each bus.

All devices have at least 1 function, function #0. There are 8 possible functions per device, numbered 0-7. Any device that has more than 1 function is (hey clever!) called a multi-function device. Multi-function devices, such as a combination modem+soundcard
will usually have 2 uniquely addressable functions, numbered 0 and 1.

Every function of a device has 256 eight-bit registers. Registers 0-3F are defined by the PCI specification and provide a wealth of information about the particular function. Registers 40-FF are vendor defined and control the properties of the function itself.
Without vendor specific documentation, these registers should probably be left untouched.

virsh # qemu-monitor-command instance-00000024 --hmp "info pci"

Bus 0, device 0, function 0:

Host bridge: PCI device 8086:1237

id ""

Bus 0, device 1, function 0:

ISA bridge: PCI device 8086:7000

id ""

Bus 0, device 1, function 1:

IDE controller: PCI device 8086:7010

BAR4: I/O at 0xc0a0 [0xc0af].

id ""

Bus 0, device 1, function 2:

USB controller: PCI device 8086:7020

IRQ 11.

BAR4: I/O at 0xc040 [0xc05f].

id "usb"

Bus 0, device 1, function 3:

Bridge: PCI device 8086:7113

IRQ 9.

id ""

Bus 0, device 2, function 0:

VGA controller: PCI device 1013:00b8

BAR0: 32 bit prefetchable memory at 0xfc000000 [0xfdffffff].

BAR1: 32 bit memory at 0xfebd0000 [0xfebd0fff].

BAR6: 32 bit memory at 0xffffffffffffffff [0x0000fffe].

id "video0"

Bus 0, device 3, function 0:

Ethernet controller: PCI device 1af4:1000

IRQ 11.

BAR0: I/O at 0xc060 [0xc07f].

BAR1: 32 bit memory at 0xfebd1000 [0xfebd1fff].

BAR6: 32 bit memory at 0xffffffffffffffff [0x0003fffe].

id "net0"

Bus 0, device 4, function 0:

SCSI controller: PCI device 1af4:1001

IRQ 11.

BAR0: I/O at 0xc000 [0xc03f].

BAR1: 32 bit memory at 0xfebd2000 [0xfebd2fff].

id "virtio-disk0"

Bus 0, device 5, function 0:

Class 0255: PCI device 1af4:1002

IRQ 10.

BAR0: I/O at 0xc080 [0xc09f].

id "balloon0"

可以看到总线上的设备

这些设备分别对应参数

USB

-device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2

显示器

-device cirrus-vga,id=video0,bus=pci.0,addr=0x2

网卡

-device virtio-net-pci,netdev=hostnet0,id=net0,mac=fa:16:3e:d1:2d:99,bus=pci.0,addr=0x3

硬盘

-device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x4,drive=drive-virtio-disk0,id=virtio-disk0,bootindex=1

内存

-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x5


显示器

用参数-vga设置,默认为cirrus,它模拟了CL-GD5446 PCI VGA card


声卡

# qemu-system-x86_64 -soundhw ?

Valid sound card names (comma separated):

ac97 Intel 82801AA AC97 Audio

adlib Yamaha YM3812 (OPL2)

cs4231a CS4231A

es1370 ENSONIQ AudioPCI ES1370

gus Gravis Ultrasound GF1

hda Intel HD Audio

pcspk PC speaker

sb16 Creative Sound Blaster 16

-soundhw all will enable all of the above


网卡

使用-net参数


The -device option

其实所有的外设都能通过-device来设定

# qemu-system-x86_64 -device ?

Controller/Bridge/Hub devices:

name "i82801b11-bridge", bus PCI

name "ioh3420", bus PCI, desc "Intel IOH device id 3420 PCIE Root Port"

name "pci-bridge", bus PCI, desc "Standard PCI Bridge"

name "usb-host", bus usb-bus

name "usb-hub", bus usb-bus

name "x3130-upstream", bus PCI, desc "TI X3130 Upstream Port of PCI Express Switch"

name "xio3130-downstream", bus PCI, desc "TI X3130 Downstream Port of PCI Express Switch"

USB devices:

name "ich9-usb-ehci1", bus PCI

name "ich9-usb-ehci2", bus PCI

name "ich9-usb-uhci1", bus PCI

name "ich9-usb-uhci2", bus PCI

name "ich9-usb-uhci3", bus PCI

name "ich9-usb-uhci4", bus PCI

name "ich9-usb-uhci5", bus PCI

name "ich9-usb-uhci6", bus PCI

name "nec-usb-xhci", bus PCI

name "pci-ohci", bus PCI, desc "Apple USB Controller"

name "piix3-usb-uhci", bus PCI

name "piix4-usb-uhci", bus PCI

name "usb-ehci", bus PCI

name "vt82c686b-usb-uhci", bus PCI

Storage devices:

name "am53c974", bus PCI, desc "AMD Am53c974 PCscsi-PCI SCSI adapter"

name "dc390", bus PCI, desc "Tekram DC-390 SCSI adapter"

name "ich9-ahci", bus PCI, alias "ahci"

name "ide-cd", bus IDE, desc "virtual IDE CD-ROM"

name "ide-drive", bus IDE, desc "virtual IDE disk or CD-ROM (legacy)"

name "ide-hd", bus IDE, desc "virtual IDE disk"

name "isa-fdc", bus ISA

name "isa-ide", bus ISA

name "lsi53c810", bus PCI

name "lsi53c895a", bus PCI, alias "lsi"

name "megasas", bus PCI, desc "LSI MegaRAID SAS 1078"

name "nvme", bus PCI, desc "Non-Volatile Memory Express"

name "piix3-ide", bus PCI

name "piix3-ide-xen", bus PCI

name "piix4-ide", bus PCI

name "pvscsi", bus PCI

name "scsi-block", bus SCSI, desc "SCSI block device passthrough"

name "scsi-cd", bus SCSI, desc "virtual SCSI CD-ROM"

name "scsi-disk", bus SCSI, desc "virtual SCSI disk or CD-ROM (legacy)"

name "scsi-generic", bus SCSI, desc "pass through generic scsi device (/dev/sg*)"

name "scsi-hd", bus SCSI, desc "virtual SCSI disk"

name "usb-bot", bus usb-bus

name "usb-storage", bus usb-bus

name "usb-uas", bus usb-bus

name "vhost-scsi", bus virtio-bus

name "vhost-scsi-pci", bus PCI

name "virtio-9p-device", bus virtio-bus

name "virtio-9p-pci", bus PCI

name "virtio-blk-device", bus virtio-bus

name "virtio-blk-pci", bus PCI, alias "virtio-blk"

name "virtio-scsi-device", bus virtio-bus

name "virtio-scsi-pci", bus PCI

Network devices:

name "e1000", bus PCI, desc "Intel Gigabit Ethernet"

name "i82550", bus PCI, desc "Intel i82550 Ethernet"

name "i82551", bus PCI, desc "Intel i82551 Ethernet"

name "i82557a", bus PCI, desc "Intel i82557A Ethernet"

name "i82557b", bus PCI, desc "Intel i82557B Ethernet"

name "i82557c", bus PCI, desc "Intel i82557C Ethernet"

name "i82558a", bus PCI, desc "Intel i82558A Ethernet"

name "i82558b", bus PCI, desc "Intel i82558B Ethernet"

name "i82559a", bus PCI, desc "Intel i82559A Ethernet"

name "i82559b", bus PCI, desc "Intel i82559B Ethernet"

name "i82559c", bus PCI, desc "Intel i82559C Ethernet"

name "i82559er", bus PCI, desc "Intel i82559ER Ethernet"

name "i82562", bus PCI, desc "Intel i82562 Ethernet"

name "i82801", bus PCI, desc "Intel i82801 Ethernet"

name "ne2k_isa", bus ISA

name "ne2k_pci", bus PCI

name "pcnet", bus PCI

name "rtl8139", bus PCI

name "usb-bt-dongle", bus usb-bus

name "usb-net", bus usb-bus

name "virtio-net-device", bus virtio-bus

name "virtio-net-pci", bus PCI, alias "virtio-net"

name "vmxnet3", bus PCI, desc "VMWare Paravirtualized Ethernet v3"

Input devices:

name "ccid-card-passthru", bus ccid-bus, desc "passthrough smartcard"

name "ipoctal232", bus IndustryPack, desc "GE IP-Octal 232 8-channel RS-232 IndustryPack"

name "isa-parallel", bus ISA

name "isa-serial", bus ISA

name "pci-serial", bus PCI

name "pci-serial-2x", bus PCI

name "pci-serial-4x", bus PCI

name "tpci200", bus PCI, desc "TEWS TPCI200 IndustryPack carrier"

name "usb-braille", bus usb-bus

name "usb-ccid", bus usb-bus, desc "CCID Rev 1.1 smartcard reader"

name "usb-kbd", bus usb-bus

name "usb-mouse", bus usb-bus

name "usb-serial", bus usb-bus

name "usb-tablet", bus usb-bus

name "usb-wacom-tablet", bus usb-bus, desc "QEMU PenPartner Tablet"

name "virtconsole", bus virtio-serial-bus

name "virtio-serial-device", bus virtio-bus

name "virtio-serial-pci", bus PCI, alias "virtio-serial"

name "virtserialport", bus virtio-serial-bus

Display devices:

name "cirrus-vga", bus PCI, desc "Cirrus CLGD 54xx VGA"

name "isa-cirrus-vga", bus ISA

name "isa-vga", bus ISA

name "qxl", bus PCI, desc "Spice QXL GPU (secondary)"

name "qxl-vga", bus PCI, desc "Spice QXL GPU (primary, vga compatible)"

name "sga", bus ISA, desc "Serial Graphics Adapter"

name "VGA", bus PCI

name "vmware-svga", bus PCI

Sound devices:

name "AC97", bus PCI, desc "Intel 82801AA AC97 Audio"

name "adlib", bus ISA, desc "Yamaha YM3812 (OPL2)"

name "cs4231a", bus ISA, desc "Crystal Semiconductor CS4231A"

name "ES1370", bus PCI, desc "ENSONIQ AudioPCI ES1370"

name "gus", bus ISA, desc "Gravis Ultrasound GF1"

name "hda-duplex", bus HDA, desc "HDA Audio Codec, duplex (line-out, line-in)"

name "hda-micro", bus HDA, desc "HDA Audio Codec, duplex (speaker, microphone)"

name "hda-output", bus HDA, desc "HDA Audio Codec, output-only (line-out)"

name "ich9-intel-hda", bus PCI, desc "Intel HD Audio Controller (ich9)"

name "intel-hda", bus PCI, desc "Intel HD Audio Controller (ich6)"

name "sb16", bus ISA, desc "Creative Sound Blaster 16"

name "usb-audio", bus usb-bus

Misc devices:

name "i6300esb", bus PCI

name "ib700", bus ISA

name "isa-applesmc", bus ISA

name "isa-debug-exit", bus ISA

name "isa-debugcon", bus ISA

name "ivshmem", bus PCI

name "kvm-pci-assign", bus PCI, alias "pci-assign", desc "KVM-based PCI passthrough"

name "pc-testdev", bus ISA

name "pci-testdev", bus PCI, desc "PCI Test Device"

name "pvpanic", bus ISA

name "usb-redir", bus usb-bus

name "vfio-pci", bus PCI, desc "VFIO-based PCI device assignment"

name "virtio-balloon-device", bus virtio-bus

name "virtio-balloon-pci", bus PCI, alias "virtio-balloon"

name "virtio-rng-device", bus virtio-bus

name "virtio-rng-pci", bus PCI

name "xen-pci-passthrough", bus PCI, desc "Assign an host PCI device with Xen"

name "xen-platform", bus PCI, desc "XEN platform pci device"

Uncategorized devices:

name "i8042", bus ISA

name "xen-pvdevice", bus PCI, desc "Xen PV Device"


Character Devices

Character device (character device) transmit only one character or one byte at a time (serial communication).

使用参数-chardev,每个device都有一个ID,有各种各样的类型type

-chardev null, id = id [, mux = on | off]

-chardev socket, id = id [, host = host ], port = host [, to = to ] [, ipv4] [, ipv6] [, nodelay][, Server] [, nowait] [, telnet] [, mux = on | off] (tcp)

-chardev socket, id = id , path = path [, server] [, nowait] [, telnet], [mux = on | off] (unix)

-chardev udp, id = id [, host = host ], port = port [, localaddr = localaddr ][, Localport = localport ] [, ipv4] [, ipv6] [, mux = on | off]

-chardev msmouse, id = id [, mux = on | off]

-chardev vc, id = id [[, width = width ] [, height = height ]] [[, cols = cols ] [, rows = rows ]][, Mux = on | off]

-chardev file, id = id , path = path [, mux = on | off]

-chardev pipe, id = id , path = path [, mux = on | off]

-chardev pty, id = id [, mux = on | off]

-chardev stdio, id = id [, mux = on | off] [, signal = on | off]

-chardev braille, id = id [, mux = on | off]

-chardev tty, id = id , path = path [, mux = on | off]

-chardev parport, id = id , path = path [, mux = on | off]

-chardev spicevmc, id = id , debug = debug , name = name [, mux = on | off]

在我们的参数中,有下面的设置。

我们可以在monitor中列出所有的chardev

virsh # qemu-monitor-command instance-00000024 --hmp "info chardev"

charserial1: filename=pty:/dev/pts/28

charserial0: filename=file

charmonitor: filename=unix:/var/lib/libvirt/qemu/instance-00000024.monitor,server

第一个chardev是pty

-chardev pty,id=charserial1

-device isa-serial,chardev=charserial1,id=serial1

第二个chardev是file

-chardev file,id=charserial0,path=/var/lib/nova/instances/1f8e6f7e-5a70-4780-89c1-464dc0e7f308/console.log

-device isa-serial,chardev=charserial0,id=serial0

第三个chardev是unix socket

-chardev socket,id=charmonitor,path=/var/lib/libvirt/qemu/instance-00000024.monitor,server,nowait

-mon chardev=charmonitor,id=monitor,mode=control
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: