[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [RFC PATCH 00/34] Hyper-V / VMBus
From: |
Roman Kagan |
Subject: |
[Qemu-devel] [RFC PATCH 00/34] Hyper-V / VMBus |
Date: |
Tue, 6 Feb 2018 23:30:14 +0300 |
This is a work-in-progress series with Hyper-V / VMBus device emulation.
It's still very raw but it's testable so I'd appreciate feedback on
whether the design is sound.
This stuff can also be seen at https://src.openvz.org/scm/up/qemu.git.
Current status of the components included:
* Hyper-V infrastructure (SynIC, VP_INDEX, events & messages, etc):
- works, mostly submission-ready but needs addressing some issues
* VMBus infrastructure (types, vmbus state machine, channel
communication, etc):
- works in main scenarios
* SCSI controller:
- works in main scenarios
- supports multiqueue
- iothread-unaware
- performance competitive to virtio-scsi [*]
- can be used for booting [**]
* network interface:
- basic operation only
- no mac filtering
- no offloads
- no multiqueue
- can be used for booting with limitations [***]
Overall, it's in bad need for documentation, tests, proper patch split.
Migration works but only tested very lightly.
[*] basic measurements with fio rw=randread bs=4k iodepth=256 using
null-co backend give
o Windows guests: hv-scsi 10%-30% better than virtio-scsi
o Linux guests: hv-scsi 10%-20% worse than virtio-scsi
No performance analysis has been done yet.
[**] patches for SeaBIOS and OVMF can be found at
https://src.openvz.org/scm/up/seabios.git and
https://src.openvz.org/scm/up/edk2.git
[***] patches for iPXE can be found at
https://src.openvz.org/scm/up/ipxe.git, limitations:
- OVMF is yet unsupported
- iPXE takes over VMBus state management from SeaBIOS so after
iPXE failure to boot off hv-net booting off hv-scsi doesn't work
Prerequisites:
- KVM 4.14+
- HYPERV_EVENTFD support (in kvm/queue) is optional but recommended for
better performance
How to use:
# qemu \
... \
-machine ...,accel=kvm,vmbus \
-cpu ...,hv_vpindex,hv_synic,hv_stimer,(other hv_* recommended),kvm=off \
-nodefaults \
...
-device hv-scsi,(usual scsi props),(instanceid=<uuid> optional) \
-drive ... \
-device scsi-hd,... \
...
-netdev ... \
-device hv-net,(usual net props),(instanceid=<uuid> optional) \
...
Big kudos to Andrey Smetanin and Evgeny Yakovlev for their research and
prototyping.
Andrey Smetanin (1):
i386: Hyper-V VMBus ACPI DSDT entry
Evgeny Yakovlev (1):
vmbus: build configuration
Roman Kagan (32):
hyperv: ensure VP index equal to QEMU cpu_index
hyperv_testdev: refactor for readability
hyperv: cosmetic: g_malloc -> g_new
hyperv: synic: only setup ack notifier if there's a callback
hyperv: allow passing arbitrary data to sint ack callback
hyperv: address HvSintRoute by X86CPU pointer
hyperv: make HvSintRoute reference-counted
hyperv: qom-ify SynIC
hyperv: block SynIC use in QEMU in incompatible configurations
hyperv: make overlay pages for SynIC
hyperv: add synic message delivery
hyperv: add synic event flag signaling
hyperv: process SIGNAL_EVENT hypercall
hyperv: process POST_MESSAGE hypercall
hyperv_testdev: add SynIC message and event testmodes
hyperv: update copyright notices
[not to commit] import HYPERV_EVENTFD stuff from kernel
hyperv: add support for KVM_HYPERV_EVENTFD
vmbus: add vmbus protocol definitions
vmbus: vmbus implementation
i386: en/disable vmbus by a machine property
scsi: add Hyper-V/VMBus SCSI protocol definitions
scsi: add Hyper-V/VMBus SCSI controller
hv-scsi: limit the number of requests per notification
tests: hv-scsi: add start-stop test
net: add RNDIS definitions
net: add Hyper-V/VMBus network protocol definitions
net: add Hyper-V/VMBus net adapter
hv-net: add .bootindex support
loader: allow arbitrary basename for fw_cfg file roms
vmbus: add support for rom files
hv-net: define default rom file name
configure | 11 +
Makefile.objs | 1 +
hw/net/hvnet-proto.h | 1161 +++++++++++++++++++
hw/net/rndis.h | 391 +++++++
hw/scsi/hvscsi-proto.h | 150 +++
include/hw/i386/pc.h | 8 +
include/hw/loader.h | 2 +-
include/hw/vmbus/vmbus-proto.h | 222 ++++
include/hw/vmbus/vmbus.h | 109 ++
include/sysemu/kvm.h | 1 +
linux-headers/linux/kvm.h | 14 +
target/i386/hyperv.h | 40 +-
accel/kvm/kvm-all.c | 15 +
hw/core/loader.c | 43 +-
hw/i386/acpi-build.c | 42 +
hw/i386/pc.c | 34 +
hw/i386/pc_piix.c | 5 +
hw/i386/pc_q35.c | 5 +
hw/misc/hyperv_testdev.c | 267 ++++-
hw/net/hv-net.c | 1450 +++++++++++++++++++++++
hw/scsi/hv-scsi.c | 403 +++++++
hw/vmbus/vmbus.c | 2475 ++++++++++++++++++++++++++++++++++++++++
target/i386/hyperv.c | 681 ++++++++++-
target/i386/kvm.c | 63 +-
target/i386/machine.c | 9 +
tests/hv-scsi-test.c | 57 +
util/qemu-config.c | 4 +
hw/Makefile.objs | 1 +
hw/net/Makefile.objs | 2 +
hw/scsi/Makefile.objs | 2 +
hw/scsi/trace-events | 6 +
hw/vmbus/Makefile.objs | 1 +
hw/vmbus/trace-events | 8 +
tests/Makefile.include | 3 +
34 files changed, 7561 insertions(+), 125 deletions(-)
create mode 100644 hw/net/hvnet-proto.h
create mode 100644 hw/net/rndis.h
create mode 100644 hw/scsi/hvscsi-proto.h
create mode 100644 include/hw/vmbus/vmbus-proto.h
create mode 100644 include/hw/vmbus/vmbus.h
create mode 100644 hw/net/hv-net.c
create mode 100644 hw/scsi/hv-scsi.c
create mode 100644 hw/vmbus/vmbus.c
create mode 100644 tests/hv-scsi-test.c
create mode 100644 hw/vmbus/Makefile.objs
create mode 100644 hw/vmbus/trace-events
--
2.14.3
- [Qemu-devel] [RFC PATCH 00/34] Hyper-V / VMBus,
Roman Kagan <=
- [Qemu-devel] [RFC PATCH 01/34] hyperv: ensure VP index equal to QEMU cpu_index, Roman Kagan, 2018/02/06
- [Qemu-devel] [RFC PATCH 02/34] hyperv_testdev: refactor for readability, Roman Kagan, 2018/02/06
- [Qemu-devel] [RFC PATCH 03/34] hyperv: cosmetic: g_malloc -> g_new, Roman Kagan, 2018/02/06
- [Qemu-devel] [RFC PATCH 04/34] hyperv: synic: only setup ack notifier if there's a callback, Roman Kagan, 2018/02/06
- [Qemu-devel] [RFC PATCH 05/34] hyperv: allow passing arbitrary data to sint ack callback, Roman Kagan, 2018/02/06
- [Qemu-devel] [RFC PATCH 06/34] hyperv: address HvSintRoute by X86CPU pointer, Roman Kagan, 2018/02/06
- [Qemu-devel] [RFC PATCH 07/34] hyperv: make HvSintRoute reference-counted, Roman Kagan, 2018/02/06
- [Qemu-devel] [RFC PATCH 08/34] hyperv: qom-ify SynIC, Roman Kagan, 2018/02/06