zoukankan      html  css  js  c++  java
  • QEMU KVM Libvirt手册(7): 硬件虚拟化

    在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

    744px-Computer_system_bus.svg

    # 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

  • 相关阅读:
    timequest 中set input delay set output delay 的使用
    ALTERA的FPGA命名规则
    modelsim仿真常用系统函数
    altium布局布线原则
    altium常用快捷键记录
    第五篇:使用无缓冲IO函数读写文件
    第四篇:“ 不确定 "限制值的使用
    第三篇:POSIX标准中的 “ 限制 ”
    第二篇:库函数和系统调用的区别
    hdu 4284(状压dp)
  • 原文地址:https://www.cnblogs.com/popsuper1982/p/3840340.html
Copyright © 2011-2022 走看看