From: Yoshiaki Tamura <tamura.yoshiaki@lab.ntt.co.jp>
To: Alex Williamson <alex.williamson@redhat.com>
Cc: jan.kiszka@siemens.com, qemu-devel@nongnu.org, armbru@redhat.com,
paul@codesourcery.com, cam@cs.ualberta.ca, kraxel@redhat.com
Subject: Re: [Qemu-devel] [PATCH 00/15] Make migration work with hotplug
Date: Thu, 24 Jun 2010 15:02:43 +0900 [thread overview]
Message-ID: <AANLkTilbStX3nKh4PcJxDbDjbyzBdL7QLJ2y2prR3YYi@mail.gmail.com> (raw)
In-Reply-To: <20100624044046.16168.32804.stgit@localhost.localdomain>
2010/6/24 Alex Williamson <alex.williamson@redhat.com>:
> 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(-)
>
>
>
next prev parent reply other threads:[~2010-06-24 6:02 UTC|newest]
Thread overview: 60+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-06-24 4:40 [Qemu-devel] [PATCH 00/15] Make migration work with hotplug Alex Williamson
2010-06-24 4:40 ` [Qemu-devel] [PATCH 01/15] Remove uses of ram.last_offset (aka last_ram_offset) Alex Williamson
2010-06-24 4:41 ` [Qemu-devel] [PATCH 02/15] qdev: Add a get_dev_path() function to BusInfo Alex Williamson
2010-06-24 4:41 ` [Qemu-devel] [PATCH 03/15] pci: Implement BusInfo.get_dev_path() Alex Williamson
2010-06-24 7:39 ` Isaku Yamahata
2010-06-24 15:05 ` Alex Williamson
2010-06-24 4:41 ` [Qemu-devel] [PATCH 04/15] savevm: Add DeviceState param Alex Williamson
2010-06-24 4:41 ` [Qemu-devel] [PATCH 05/15] savevm: Make use of DeviceState Alex Williamson
2010-06-24 4:41 ` [Qemu-devel] [PATCH 06/15] eepro100: Add a dev field to eeprom new/free functions Alex Williamson
2010-06-24 4:41 ` [Qemu-devel] [PATCH 07/15] virtio-net: Incorporate a DeviceState pointer and let savevm track instances Alex Williamson
2010-06-24 4:41 ` [Qemu-devel] [PATCH 08/15] qemu_ram_alloc: Add DeviceState and name parameters Alex Williamson
2010-06-24 4:41 ` [Qemu-devel] [PATCH 09/15] ramblocks: Make use of DeviceState pointer and BusInfo.get_dev_path Alex Williamson
2010-06-24 4:42 ` [Qemu-devel] [PATCH 10/15] savevm: Migrate RAM based on name/offset Alex Williamson
2010-06-24 5:49 ` [Qemu-devel] " Paolo Bonzini
2010-06-24 4:42 ` [Qemu-devel] [PATCH 11/15] savevm: Use RAM blocks for basis of migration Alex Williamson
2010-06-24 4:42 ` [Qemu-devel] [PATCH 12/15] savevm: Create a new continue flag to avoid resending block name Alex Williamson
2010-06-24 5:51 ` [Qemu-devel] " Paolo Bonzini
2010-06-24 15:06 ` Alex Williamson
2010-06-24 4:42 ` [Qemu-devel] [PATCH 13/15] qemu_ram_free: Implement it Alex Williamson
2010-06-24 4:42 ` [Qemu-devel] [PATCH 14/15] pci: Free the space allocated for the option rom on removal Alex Williamson
2010-06-24 4:42 ` [Qemu-devel] [PATCH 15/15] ramblocks: No more being lazy about duplicate names Alex Williamson
2010-06-24 6:02 ` Yoshiaki Tamura [this message]
2010-06-24 15:04 ` [Qemu-devel] [PATCH 00/15] Make migration work with hotplug Alex Williamson
2010-06-24 15:23 ` Alex Williamson
2010-06-25 2:01 ` Yoshiaki Tamura
2010-06-25 17:08 ` [Qemu-devel] [PATCH v2 00/16] " Alex Williamson
2010-06-25 17:08 ` [Qemu-devel] [PATCH v2 01/16] Remove uses of ram.last_offset (aka last_ram_offset) Alex Williamson
2010-07-06 15:45 ` Anthony Liguori
2010-06-25 17:08 ` [Qemu-devel] [PATCH v2 02/16] pc: Allocate all ram in a single qemu_ram_alloc() Alex Williamson
2010-06-25 17:08 ` [Qemu-devel] [PATCH v2 03/16] qdev: Add a get_dev_path() function to BusInfo Alex Williamson
2010-06-25 17:08 ` [Qemu-devel] [PATCH v2 04/16] pci: Implement BusInfo.get_dev_path() Alex Williamson
2010-06-25 17:09 ` [Qemu-devel] [PATCH v2 05/16] savevm: Add DeviceState param Alex Williamson
2010-06-25 17:09 ` [Qemu-devel] [PATCH v2 06/16] savevm: Make use of DeviceState Alex Williamson
2010-06-25 17:09 ` [Qemu-devel] [PATCH v2 07/16] eepro100: Add a dev field to eeprom new/free functions Alex Williamson
2010-06-25 17:09 ` [Qemu-devel] [PATCH v2 08/16] virtio-net: Incorporate a DeviceState pointer and let savevm track instances Alex Williamson
2010-06-25 17:09 ` [Qemu-devel] [PATCH v2 09/16] qemu_ram_alloc: Add DeviceState and name parameters Alex Williamson
2010-06-25 17:09 ` [Qemu-devel] [PATCH v2 10/16] ramblocks: Make use of DeviceState pointer and BusInfo.get_dev_path Alex Williamson
2010-06-25 17:09 ` [Qemu-devel] [PATCH v2 11/16] savevm: Migrate RAM based on name/offset Alex Williamson
2010-06-25 17:09 ` [Qemu-devel] [PATCH v2 12/16] savevm: Use RAM blocks for basis of migration Alex Williamson
2010-06-25 17:10 ` [Qemu-devel] [PATCH v2 13/16] savevm: Create a new continue flag to avoid resending block name Alex Williamson
2010-06-25 17:10 ` [Qemu-devel] [PATCH v2 14/16] qemu_ram_free: Implement it Alex Williamson
2010-06-25 17:10 ` [Qemu-devel] [PATCH v2 15/16] pci: Free the space allocated for the option rom on removal Alex Williamson
2010-06-25 17:10 ` [Qemu-devel] [PATCH v2 16/16] ramblocks: No more being lazy about duplicate names Alex Williamson
2010-07-02 17:11 ` [Qemu-devel] [PATCH v3 00/16] Make migration work with hotplug Alex Williamson
2010-07-02 17:11 ` [Qemu-devel] [PATCH v3 01/16] Remove uses of ram.last_offset (aka last_ram_offset) Alex Williamson
2010-07-02 17:12 ` [Qemu-devel] [PATCH v3 02/16] pc: Allocate all ram in a single qemu_ram_alloc() Alex Williamson
2010-07-02 17:12 ` [Qemu-devel] [PATCH v3 03/16] qdev: Add a get_dev_path() function to BusInfo Alex Williamson
2010-07-02 17:12 ` [Qemu-devel] [PATCH v3 04/16] pci: Implement BusInfo.get_dev_path() Alex Williamson
2010-07-02 17:12 ` [Qemu-devel] [PATCH v3 05/16] savevm: Add DeviceState param Alex Williamson
2010-07-02 17:12 ` [Qemu-devel] [PATCH v3 06/16] savevm: Make use of DeviceState Alex Williamson
2010-07-02 17:12 ` [Qemu-devel] [PATCH v3 07/16] eepro100: Add a dev field to eeprom new/free functions Alex Williamson
2010-07-02 17:12 ` [Qemu-devel] [PATCH v3 08/16] virtio-net: Incorporate a DeviceState pointer and let savevm track instances Alex Williamson
2010-07-02 17:12 ` [Qemu-devel] [PATCH v3 09/16] qemu_ram_alloc: Add DeviceState and name parameters Alex Williamson
2010-07-02 17:12 ` [Qemu-devel] [PATCH v3 10/16] ramblocks: Make use of DeviceState pointer and BusInfo.get_dev_path Alex Williamson
2010-07-02 17:12 ` [Qemu-devel] [PATCH v3 11/16] savevm: Migrate RAM based on name/offset Alex Williamson
2010-07-02 17:13 ` [Qemu-devel] [PATCH v3 12/16] savevm: Use RAM blocks for basis of migration Alex Williamson
2010-07-02 17:13 ` [Qemu-devel] [PATCH v3 13/16] savevm: Create a new continue flag to avoid resending block name Alex Williamson
2010-07-02 17:13 ` [Qemu-devel] [PATCH v3 14/16] qemu_ram_free: Implement it Alex Williamson
2010-07-02 17:13 ` [Qemu-devel] [PATCH v3 15/16] pci: Free the space allocated for the option rom on removal Alex Williamson
2010-07-02 17:13 ` [Qemu-devel] [PATCH v3 16/16] ramblocks: No more being lazy about duplicate names Alex Williamson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=AANLkTilbStX3nKh4PcJxDbDjbyzBdL7QLJ2y2prR3YYi@mail.gmail.com \
--to=tamura.yoshiaki@lab.ntt.co.jp \
--cc=alex.williamson@redhat.com \
--cc=armbru@redhat.com \
--cc=cam@cs.ualberta.ca \
--cc=jan.kiszka@siemens.com \
--cc=kraxel@redhat.com \
--cc=paul@codesourcery.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).