From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:58510) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WhxxF-0006Uu-Hf for qemu-devel@nongnu.org; Wed, 07 May 2014 05:16:02 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WhxxA-0005Yi-Lb for qemu-devel@nongnu.org; Wed, 07 May 2014 05:15:57 -0400 Received: from mail-ph.de-nserver.de ([85.158.179.214]:43936) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WhxxA-0005OZ-8M for qemu-devel@nongnu.org; Wed, 07 May 2014 05:15:52 -0400 Message-ID: <5369F9A8.8030800@profihost.ag> Date: Wed, 07 May 2014 11:15:20 +0200 From: Stefan Priebe - Profihost AG MIME-Version: 1.0 References: <1396618620-27823-1-git-send-email-imammedo@redhat.com> In-Reply-To: <1396618620-27823-1-git-send-email-imammedo@redhat.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH 00/35] pc: ACPI memory hotplug List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Igor Mammedov , qemu-devel@nongnu.org Cc: peter.maydell@linaro.org, mst@redhat.com, aik@ozlabs.ru, hutao@cn.fujitsu.com, mjt@tls.msk.ru, lcapitulino@redhat.com, kraxel@redhat.com, akong@redhat.com, quintela@redhat.com, armbru@redhat.com, aliguori@amazon.com, jan.kiszka@siemens.com, lersek@redhat.com, ehabkost@redhat.com, marcel.a@redhat.com, stefanha@redhat.com, chegu_vinod@hp.com, rth@twiddle.net, kwolf@redhat.com, mreitz@redhat.com, vasilis.liaskovitis@profitbricks.com, pbonzini@redhat.com, afaerber@suse.de Hello Igor, while testing your patchset i came to a very stupid problem. I wanted to test migration and it cames out that the migration works fine after plugging in memory only if i run the target VM without the -daemonize option. If i enable the -daemonize option the target vm tries to read from non readable memory. proc maps shows: 7f9334021000-7f9338000000 ---p 00000000 00:00 0 where it tries to read from. Also the memory layout is different in daemonize mode than in non daemonize mode. Stefan Am 04.04.2014 15:36, schrieb Igor Mammedov: > What's new since v7: > > * Per Andreas' suggestion dropped DIMMBus concept. > > * Added hotplug binding for bus-less devices > > * DIMM device is split to backend and frontend. Therefore following > command/options were added for supporting it: > > For memory-ram backend: > CLI: -object-add memory-ram, > with options: 'id' and 'size' > For dimm frontend: > option "size" became readonly, pulling it's size from attached backend > added option "memdev" for specifying backend by 'id' > > * dropped support for 32 bit guests > > * failed hotplug action doesn't consume 1 slot anymore > > * vaious fixes adressing reviewer's comments most of them in ACPI part > --- > > This series allows to hotplug 'arbitrary' DIMM devices specifying size, > NUMA node mapping (guest side), slot and address where to map it, at runtime. > > Due to ACPI limitation there is need to specify a number of possible > DIMM devices. For this task -m option was extended to support > following format: > > -m [mem=]RamSize[,slots=N,maxmem=M] > > To allow memory hotplug user must specify a pair of additional parameters: > 'slots' - number of possible increments > 'maxmem' - max possible total memory size QEMU is allowed to use, > including RamSize. > > minimal monitor command syntax to hotplug DIMM device: > > object_add memory-ram,id=memX,size=1G > device_add dimm,id=dimmX,memdev=memX > > DIMM device provides following properties that could be used with > device_add / -device to alter default behavior: > > id - unique string identifying device [mandatory] > slot - number in range [0-slots) [optional], if not specified > the first free slot is used > node - NUMA node id [optional] (default: 0) > size - amount of memory to add, readonly derived from backing memdev > start - guest's physical address where to plug DIMM [optional], > if not specified the first gap in hotplug memory region > that fits DIMM is used > > -device option could be used for adding potentially hotunplugable DIMMs > and also for specifying hotplugged DIMMs in migration case. > > Tested guests: > - RHEL 6x64 > - Windows 2012DCx64 > - Windows 2008DCx64 > > Known limitations/bugs/TODOs: > - hot-remove is not supported, yet > - max number of supported DIMM devices 255 (due to ACPI object name > limit), could be increased creating several containers and putting > DIMMs there. (exercise for future) > - e820 table doesn't include DIMM devices added with -device / > (or after reboot devices added with device_add) > - Windows 2008 remembers DIMM configuration, so if DIMM with other > start/size is added into the same slot, it refuses to use it insisting > on old mapping. > > QEMU git tree for testing is available at: > https://github.com/imammedo/qemu/commits/memory-hotplug-v8 > > Example QEMU cmd line: > qemu-system-x86_64 -enable-kvm -monitor unix:/tmp/mon,server,nowait \ > -m 4096,slots=4,maxmem=8G guest.img > > PS: > Windows guest requires SRAT table for hotplug to work so add an extra option: > -numa node > to QEMU command line. > > > Igor Mammedov (34): > vl: convert -m to QemuOpts > object_add: allow completion handler to get canonical path > add memdev backend infrastructure > vl.c: extend -m option to support options for memory hotplug > add pc-{i440fx,q35}-2.1 machine types > pc: create custom generic PC machine type > qdev: hotplug for buss-less devices > qdev: expose DeviceState.hotplugged field as a property > dimm: implement dimm device abstraction > memory: add memory_region_is_mapped() API > dimm: do not allow to set already busy memdev > pc: initialize memory hotplug address space > pc: exit QEMU if slots > 256 > pc: add 'etc/reserved-memory-end' fw_cfg interface for SeaBIOS > pc: add memory hotplug handler to PC_MACHINE > dimm: add busy address check and address auto-allocation > dimm: add busy slot check and slot auto-allocation > acpi: rename cpu_hotplug_defs.h to acpi_defs.h > acpi: memory hotplug ACPI hardware implementation > trace: add acpi memory hotplug IO region events > trace: add DIMM slot & address allocation for target-i386 > acpi:piix4: make plug/unlug callbacks generic > acpi:piix4: add memory hotplug handling > pc: ich9 lpc: make it work with global/compat properties > acpi:ich9: add memory hotplug handling > pc: migrate piix4 & ich9 MemHotplugState > pc: propagate memory hotplug event to ACPI device > pc: ACPI BIOS: punch holes in PCI0._CRS for memory hotplug IO region > pc: ACPI BIOS: name CPU hotplug ACPI0004 device > pc: ACPI BIOS: implement memory hotplug interface > pc: ACPI BIOS: use enum for defining memory affinity flags > pc: ACPI BIOS: reserve SRAT entry for hotplug mem hole > pc: ACPI BIOS: make GPE.3 handle memory hotplug event on PIIX and Q35 > machines > pc: ACPI BIOS: update pregenerated ACPI table blobs > > Paolo Bonzini (1): > qemu-option: introduce qemu_find_opts_singleton > > backends/Makefile.objs | 2 + > backends/hostmem-ram.c | 54 +++ > backends/hostmem.c | 110 +++++ > default-configs/i386-softmmu.mak | 1 + > default-configs/x86_64-softmmu.mak | 1 + > docs/specs/acpi_mem_hotplug.txt | 44 ++ > hw/Makefile.objs | 1 + > hw/acpi/Makefile.objs | 1 + > hw/acpi/ich9.c | 46 ++ > hw/acpi/memory_hotplug.c | 184 ++++++++ > hw/acpi/piix4.c | 52 ++- > hw/core/qdev.c | 30 ++ > hw/i386/Makefile.objs | 3 +- > hw/i386/acpi-build.c | 74 +++- > hw/i386/acpi-dsdt-cpu-hotplug.dsl | 1 + > hw/i386/acpi-dsdt.dsl | 17 +- > hw/i386/acpi-dsdt.hex.generated | 102 ++++- > hw/i386/pc.c | 165 +++++++- > hw/i386/pc_piix.c | 64 ++- > hw/i386/pc_q35.c | 38 +- > hw/i386/q35-acpi-dsdt.dsl | 17 +- > hw/i386/q35-acpi-dsdt.hex.generated | 104 ++++- > hw/i386/ssdt-mem.dsl | 75 ++++ > hw/i386/ssdt-mem.hex.generated | 197 +++++++++ > hw/i386/ssdt-misc.dsl | 163 ++++++++ > hw/i386/ssdt-misc.hex.generated | 809 +++++++++++++++++++++++++++++++++++- > hw/isa/lpc_ich9.c | 33 +- > hw/mem/Makefile.objs | 1 + > hw/mem/dimm.c | 234 +++++++++++ > include/exec/memory.h | 8 + > include/hw/acpi/acpi_defs.h | 35 ++ > include/hw/acpi/cpu_hotplug.h | 2 +- > include/hw/acpi/cpu_hotplug_defs.h | 32 -- > include/hw/acpi/ich9.h | 4 + > include/hw/acpi/memory_hotplug.h | 37 ++ > include/hw/boards.h | 10 + > include/hw/i386/pc.h | 59 +++ > include/hw/mem/dimm.h | 72 ++++ > include/qemu/config-file.h | 2 + > include/sysemu/hostmem.h | 60 +++ > memory.c | 15 +- > qemu-options.hx | 14 +- > qmp.c | 11 +- > trace-events | 17 + > util/qemu-config.c | 14 + > vl.c | 145 +++++-- > 46 files changed, 2987 insertions(+), 173 deletions(-) > create mode 100644 backends/hostmem-ram.c > create mode 100644 backends/hostmem.c > create mode 100644 docs/specs/acpi_mem_hotplug.txt > create mode 100644 hw/acpi/memory_hotplug.c > create mode 100644 hw/i386/ssdt-mem.dsl > create mode 100644 hw/i386/ssdt-mem.hex.generated > create mode 100644 hw/mem/Makefile.objs > create mode 100644 hw/mem/dimm.c > create mode 100644 include/hw/acpi/acpi_defs.h > delete mode 100644 include/hw/acpi/cpu_hotplug_defs.h > create mode 100644 include/hw/acpi/memory_hotplug.h > create mode 100644 include/hw/mem/dimm.h > create mode 100644 include/sysemu/hostmem.h >