[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 00/15] Make migration work with hotplug
From: |
Yoshiaki Tamura |
Subject: |
Re: [Qemu-devel] [PATCH 00/15] Make migration work with hotplug |
Date: |
Thu, 24 Jun 2010 15:02:43 +0900 |
2010/6/24 Alex Williamson <address@hidden>:
> Ok, new approach. I'm going to attempt to extract myself for the
> canonical device path approach, because we're missing too many pieces
> to make that work. Instead, I'll take Anthony's advice and try to
> simplify. We still want a unique name for ramblocks and savevm, but
> the hotplug problem today is only for PCI devices. PCI conveniently
> has globally unique, dare I say canonical, addressing in the form of
> <domain>:<bus>:<device>.<func>. To get to this, let's add a new
> function on the BusInfo structure called get_dev_path(). For a PCI
> device, we can simply traverse up the qdev tree to the BusInfo
> structure, look for the function, and call it to return a global PCI
> address.
>
> For some buses, these functions could chain up to their parent bus
> appending strings together to get a unique path. An example would be
> USB, where the USB port number may not be unique. If we traverse up
> to the PCI device providing USB, and then to the PCI bus, we get a
> globally unique PCI path, appended with a USB port number.
>
> To make this work for ramblocks and savevm, we need a DeviceState
> pointer when the they are create/registered, and we need a caller
> provided context in case there are multiple ramblocks/savevm
> associated with a device. Savevm already provies the context,
> and I've attempted to make reasonable guesses at these for the
> ramblocks. Note that most of the ramblocks aren't associated with
> a device, so I don't think it makes sense to link savevm and
> ramblocks together with the same absolute id string.
>
> Once we have savevm with unique id strings, rather than hotplug
> unfriendly instance numbers, we can be sure that the right driver
> instance is loading the correct vmstate. I've also implemented
> a compat field for this, so we can still accept incoming migrations
> from previous versions.
>
> Once we have ramblocks with a unique id string, we can switch to
> using id + offset for migration, which enables a ram_addr_t space
> that supports gaps, which enables us to implement qemu_ram_free().
> With that, I think we can finally do migrations reliable after
> hotplug! Note that the target VM still needs to be created to
> match the current devices and bus addresses of the source VM. We
> can also still maintain compatibility for migrations here by bumping
> the ram migration version and supporting both new and old (just
> hope the source hasn't done any hotplugs).
>
> Sound reasonable? Is get_dev_path the right name? In the right
> place? The PCI return is currently "dddd:bb:dd.f", should this be
> "PCI:dddd:bb:dd.f"? Something else? Thanks,
Hi Alex,
Is there additional overhead to save rams introduce by this series?
If so, how much?
Thanks,
Yoshi
>
> Alex
>
> ---
>
> Alex Williamson (15):
> ramblocks: No more being lazy about duplicate names
> pci: Free the space allocated for the option rom on removal
> qemu_ram_free: Implement it
> savevm: Create a new continue flag to avoid resending block name
> savevm: Use RAM blocks for basis of migration
> savevm: Migrate RAM based on name/offset
> ramblocks: Make use of DeviceState pointer and BusInfo.get_dev_path
> qemu_ram_alloc: Add DeviceState and name parameters
> virtio-net: Incorporate a DeviceState pointer and let savevm track
> instances
> eepro100: Add a dev field to eeprom new/free functions
> savevm: Make use of DeviceState
> savevm: Add DeviceState param
> pci: Implement BusInfo.get_dev_path()
> qdev: Add a get_dev_path() function to BusInfo
> Remove uses of ram.last_offset (aka last_ram_offset)
>
>
> arch_init.c | 183
> +++++++++++++++++++++++++++++++++++------
> audio/audio.c | 2
> block-migration.c | 4 -
> cpu-all.h | 5 +
> cpu-common.h | 2
> exec.c | 96 +++++++++++++++++++---
> hw/adb.c | 4 -
> hw/ads7846.c | 2
> hw/an5206.c | 4 -
> hw/arm_gic.c | 2
> hw/arm_timer.c | 4 -
> hw/armv7m.c | 9 +-
> hw/armv7m_nvic.c | 2
> hw/axis_dev88.c | 4 -
> hw/cirrus_vga.c | 2
> hw/cuda.c | 2
> hw/dma.c | 4 -
> hw/dummy_m68k.c | 2
> hw/eepro100.c | 8 +-
> hw/eeprom93xx.c | 8 +-
> hw/eeprom93xx.h | 4 -
> hw/etraxfs.c | 6 +
> hw/fw_cfg.c | 2
> hw/g364fb.c | 4 -
> hw/grackle_pci.c | 4 -
> hw/gt64xxx.c | 3 -
> hw/gumstix.c | 6 +
> hw/heathrow_pic.c | 2
> hw/hw.h | 18 ++--
> hw/i2c.c | 2
> hw/i8254.c | 2
> hw/i8259.c | 2
> hw/ide/cmd646.c | 2
> hw/ide/isa.c | 2
> hw/ide/macio.c | 2
> hw/ide/microdrive.c | 2
> hw/ide/mmio.c | 2
> hw/ide/piix.c | 2
> hw/integratorcp.c | 4 -
> hw/m48t59.c | 2
> hw/mac_dbdma.c | 2
> hw/mac_nvram.c | 4 -
> hw/mainstone.c | 6 +
> hw/max111x.c | 3 -
> hw/mcf5208.c | 4 -
> hw/mips_jazz.c | 4 -
> hw/mips_malta.c | 4 -
> hw/mips_mipssim.c | 4 -
> hw/mips_r4k.c | 6 +
> hw/mipsnet.c | 4 -
> hw/mst_fpga.c | 3 -
> hw/musicpal.c | 11 ++
> hw/nand.c | 2
> hw/omap1.c | 6 +
> hw/omap2.c | 6 +
> hw/omap_sx1.c | 12 ++-
> hw/onenand.c | 2
> hw/openpic.c | 5 +
> hw/palm.c | 3 -
> hw/pc.c | 8 +-
> hw/pci.c | 34 +++++++-
> hw/pckbd.c | 2
> hw/petalogix_s3adsp1800_mmu.c | 7 +-
> hw/piix4.c | 2
> hw/pl011.c | 2
> hw/pl022.c | 2
> hw/pl061.c | 2
> hw/ppc405_boards.c | 18 ++--
> hw/ppc405_uc.c | 2
> hw/ppc4xx_devs.c | 4 +
> hw/ppc4xx_pci.c | 4 -
> hw/ppc_newworld.c | 6 +
> hw/ppc_oldworld.c | 6 +
> hw/ppc_prep.c | 4 -
> hw/ppce500_mpc8544ds.c | 3 -
> hw/ppce500_pci.c | 4 -
> hw/ps2.c | 4 -
> hw/pxa2xx.c | 39 +++++----
> hw/pxa2xx_dma.c | 2
> hw/pxa2xx_gpio.c | 2
> hw/pxa2xx_keypad.c | 2
> hw/pxa2xx_lcd.c | 2
> hw/pxa2xx_mmci.c | 2
> hw/pxa2xx_pic.c | 3 -
> hw/pxa2xx_timer.c | 2
> hw/qdev.c | 4 -
> hw/qdev.h | 3 +
> hw/r2d.c | 4 -
> hw/rc4030.c | 2
> hw/realview.c | 6 +
> hw/s390-virtio.c | 2
> hw/serial.c | 4 -
> hw/sm501.c | 2
> hw/spitz.c | 11 +-
> hw/ssd0323.c | 3 -
> hw/ssi-sd.c | 2
> hw/stellaris.c | 11 +-
> hw/stellaris_enet.c | 4 -
> hw/stellaris_input.c | 2
> hw/sun4m.c | 8 +-
> hw/sun4u.c | 4 -
> hw/syborg.c | 2
> hw/syborg_fb.c | 2
> hw/syborg_interrupt.c | 3 -
> hw/syborg_keyboard.c | 2
> hw/syborg_pointer.c | 2
> hw/syborg_rtc.c | 3 -
> hw/syborg_serial.c | 2
> hw/syborg_timer.c | 2
> hw/tc6393xb.c | 2
> hw/tcx.c | 2
> hw/tosa.c | 2
> hw/tsc2005.c | 2
> hw/tsc210x.c | 4 -
> hw/unin_pci.c | 6 +
> hw/versatilepb.c | 2
> hw/vga-isa-mm.c | 2
> hw/vga-isa.c | 2
> hw/vga.c | 2
> hw/virtio-balloon.c | 3 -
> hw/virtio-blk.c | 2
> hw/virtio-net.c | 7 +-
> hw/virtio-serial-bus.c | 2
> hw/vmmouse.c | 2
> hw/vmware_vga.c | 4 -
> hw/zaurus.c | 2
> qemu-timer.c | 2
> savevm.c | 106 +++++++++++++++++++++---
> slirp/slirp.c | 5 +
> vl.c | 2
> 130 files changed, 648 insertions(+), 286 deletions(-)
>
>
>
- [Qemu-devel] [PATCH 10/15] savevm: Migrate RAM based on name/offset, (continued)
- [Qemu-devel] [PATCH 10/15] savevm: Migrate RAM based on name/offset, Alex Williamson, 2010/06/24
- [Qemu-devel] [PATCH 09/15] ramblocks: Make use of DeviceState pointer and BusInfo.get_dev_path, Alex Williamson, 2010/06/24
- [Qemu-devel] [PATCH 11/15] savevm: Use RAM blocks for basis of migration, Alex Williamson, 2010/06/24
- [Qemu-devel] [PATCH 12/15] savevm: Create a new continue flag to avoid resending block name, Alex Williamson, 2010/06/24
- [Qemu-devel] [PATCH 13/15] qemu_ram_free: Implement it, Alex Williamson, 2010/06/24
- [Qemu-devel] [PATCH 14/15] pci: Free the space allocated for the option rom on removal, Alex Williamson, 2010/06/24
- [Qemu-devel] [PATCH 15/15] ramblocks: No more being lazy about duplicate names, Alex Williamson, 2010/06/24
- Re: [Qemu-devel] [PATCH 00/15] Make migration work with hotplug,
Yoshiaki Tamura <=
- [Qemu-devel] [PATCH v2 00/16] Make migration work with hotplug, Alex Williamson, 2010/06/25
- [Qemu-devel] [PATCH v2 16/16] ramblocks: No more being lazy about duplicate names, Alex Williamson, 2010/06/25
- [Qemu-devel] [PATCH v2 14/16] qemu_ram_free: Implement it, Alex Williamson, 2010/06/25
- [Qemu-devel] [PATCH v2 15/16] pci: Free the space allocated for the option rom on removal, Alex Williamson, 2010/06/25
- [Qemu-devel] [PATCH v2 13/16] savevm: Create a new continue flag to avoid resending block name, Alex Williamson, 2010/06/25
- [Qemu-devel] [PATCH v2 12/16] savevm: Use RAM blocks for basis of migration, Alex Williamson, 2010/06/25
- [Qemu-devel] [PATCH v2 10/16] ramblocks: Make use of DeviceState pointer and BusInfo.get_dev_path, Alex Williamson, 2010/06/25