Virtio On Xen: Difference between revisions
Lars.kurth (talk | contribs) No edit summary |
(Update for 2021 VirtIO on Xen context: active VirtIO on Xen developments) |
||
Line 5: | Line 5: | ||
<!-- Original date: Wed Aug 31 05:03:59 2011 (1314767039000000) --> |
<!-- Original date: Wed Aug 31 05:03:59 2011 (1314767039000000) --> |
||
= VirtIO on the Xen Hypervisor = |
|||
{{TODO|This is out-of-date. If you think you need VirtIO to meet your end goal but not quite sure, we suggest you send email with all your requirements and constraints to xen-devel@lists.xenproject.org for suggestions. In the mean time, you could also have a look at Xen's PV network protocol, which has been in mainline for years. }} |
|||
There are three separate development approaches within the Xen community towards building support for enabling use of VirtIO device drivers in guest virtual machines with the Xen hypervisor, and a fourth older completed GSOC project. Work on the active approaches is proceeding on the [mailto:xen-devel@lists.xenproject.org xen-devel] public mailing list. |
|||
__NOTOC__ |
|||
= Virtio on Xen = |
|||
Placeholder names have been assigned to each of these approaches for ease of reference in this page: |
|||
The Virtio on Xen .project is a project for Google Summer of Code 2011. It's still working in progress. But fortunately, we have a working prototype. This page is intended to guide people who might be interested in giving it a try. |
|||
* ''VirtIO-EPAM'' |
|||
* ''VirtIO-SuSE'' |
|||
* ''VirtIO-Argo'' |
|||
* ''VirtIO-GSOC'' |
|||
In addition, Linaro has a project 'Stratos' pursuing: "Establish virtio as the standard interface between hypervisors, freeing a mobile, industrial or automotive platform to migrate between hypervisors and reuse the backend implementation." |
|||
* https://linaro.atlassian.net/wiki/spaces/STR/overview |
|||
* https://projects.linaro.org/projects/STR/summary |
|||
* https://op-lists.linaro.org/mailman/listinfo/stratos-dev |
|||
The [https://calendar.google.com/event?action=TEMPLATE&tmeid=MWpidm5lbzM5NjlydnAxdWxvc2s4aGI0ZGpfMjAyMTA5MzBUMTUwMDAwWiBjX2o3bmdpMW84cmxvZmtwZWQ0cjVjaDk4bXZnQGc&tmsrc=c_j7ngi1o8rlofkped4r5ch98mvg%40group.calendar.google.com Stratos project teleconference calls] are open. |
|||
== ''VirtIO-EPAM:'' enabling existing VirtIO-MMIO transport on Xen, using foreign mappings and an IOREQ server == |
|||
Development by EPAM and others, with focus on Xen on Arm platforms. Contact: Oleksandr Tyshchenko |
|||
Enables use of the existing standardized VirtIO-MMIO transport driver, which is present in the mainline Linux kernel, using Xen's IOREQ emulation infrastructure and use of privileged foreign mappings to establish shared memory for access to guest data by the device model backend. |
|||
'''Status: Patches are in progress towards Xen on the xen-devel mailing list. The presentation at Linaro Connect 2021 includes a working demonstration.''' |
|||
VirtIO on Xen hypervisor (Arm), Oleksandr Tyshchenko, EPAM, Linaro Connect 2021: |
|||
* https://static.linaro.org/connect/lvc21/presentations/lvc21-314.pdf |
|||
* https://www.youtube.com/watch?v=XE5Rn8KFunk |
|||
== ''VirtIO-SuSE:'' introducing a new VirtIO transport driver that uses Xen grants == |
|||
Developed by SuSE, presented at the Xen Design and Developer Summit 2021. Contact: Juergen Gross |
|||
A new VirtIO transport device driver is added to the guest kernel, to translate guest physical addresses into grant references, enabling VirtIO data path communication over mutually-negociated shared memory regions between the guest virtual machine and the device model backend. Improves isolation as backend does not need privilege over the guest to perform foreign mappings. |
|||
Grant references are a Xen-specific interface. Design supports driver domains. |
|||
'''Status: A prototype is described in the presentation at the Xen Summit 2021.''' |
|||
VirtIO and Xen with Full Grant Support: |
|||
* https://static.sched.com/hosted_files/xen2021/bf/Thursday_2021-Xen-Summit-virtio.pdf |
|||
* https://www.youtube.com/watch?v=IrlEdaIUDPk&list=PLYyw7IQjL-zGcRPN6EjiTuFVGo4A6KCNf&index=25 |
|||
== ''VirtIO-Argo:'' introducing a new VirtIO transport driver that uses Argo for interdomain communication, supporting isolation and Mandatory Access Control == |
|||
Design and analysis performed within the OpenXT and Xen communities. Contact: Christopher Clark |
|||
A new VirtIO transport device driver is added to the guest kernel to transmit data between the guest domain and the domain hosting the device model via Argo rings: a Hypervisor-Mediated data eXchange protocol where the hypervisor transfers the data, being trusted to strictly adhere to the delivery protocol. |
|||
Supports stronger isolation properties and enforcement of Mandatory Access Control security policy over interdomain communication. Does not use shared |
|||
memory between domains. |
|||
Development of a Hypervisor-agnostic interface for Argo has been proposed and discussed within the Xen community. Design supports driver domains. |
|||
'''Status: Design and analysis published; funding required for development to proceed.''' |
|||
VirtIO-Argo: Documentation at the OpenXT wiki: |
|||
* https://openxt.atlassian.net/wiki/spaces/DC/pages/1348763698/VirtIO%2BArgo |
|||
VirtIO-Argo Development: |
|||
* https://openxt.atlassian.net/wiki/spaces/DC/pages/1696169985/VirtIO-Argo%2BDevelopment%2BPhase%2B1 |
|||
Minutes from the Argo HMX Transport for VirtIO topic call, 14th January 2021: |
|||
* https://lists.xenproject.org/archives/html/xen-devel/2021-02/msg01422.html |
|||
== ''VirtIO-GSOC:'' 2011 Google Summer of Code Project == |
|||
A Google Summer of Code project by Wei Liu investigated enabling VirtIO on Xen. |
|||
A working prototype was produced for both PV and HVM guests, using XenBus and the Qemu VirtIO backends. PV guests require a guest kernel patch to translate guest physical addresses to machine addresses in VirtIO rings. |
|||
'''Status: project completed.''' |
|||
=== Using the prototype === |
|||
This section is intended to guide people who might be interested giving it a try. |
|||
'''Note''': |
'''Note''': |
||
Line 15: | Line 87: | ||
* Checkout Stefano Stabellini's QEMU repository: git://xenbits.xen.org/people/sstabellini/qemu-dm.git xen-stable-0.15 |
* Checkout Stefano Stabellini's QEMU repository: git://xenbits.xen.org/people/sstabellini/qemu-dm.git xen-stable-0.15 |
||
== Virtio for HVM guest == |
==== Virtio for HVM guest ==== |
||
In fact, there is nothing much to do. |
In fact, there is nothing much to do. |
||
Line 25: | Line 97: | ||
Use 'xl' to start the guest, not 'xm'. |
Use 'xl' to start the guest, not 'xm'. |
||
== Virtio for PV guest == |
==== Virtio for PV guest ==== |
||
First of all, you need the patch in the previous section to enable libxl to support configuration syntax for Virtio disk and nic. |
First of all, you need the patch in the previous section to enable libxl to support configuration syntax for Virtio disk and nic. |
||
Line 51: | Line 123: | ||
Hopefully you will get Virtio devices without much trouble. |
Hopefully you will get Virtio devices without much trouble. |
||
== TODO == |
==== TODO ==== |
||
* Enable xen-mapcache for Virtio for PV, improve performance. |
* Enable xen-mapcache for Virtio for PV, improve performance. |
||
* Squash two evtchns into one, hopefully we can eliminate locking in transport layer and improve performance. |
* Squash two evtchns into one, hopefully we can eliminate locking in transport layer and improve performance. |
||
Line 57: | Line 129: | ||
* Bug fixes, transport layer crashes sometimes under heavy workload. |
* Bug fixes, transport layer crashes sometimes under heavy workload. |
||
== Related References == |
==== Related References ==== |
||
* http://wiki.xen.org/xenwiki/QEMUUpstream |
* http://wiki.xen.org/xenwiki/QEMUUpstream |
||
Line 63: | Line 135: | ||
[[Category:Xen]] |
[[Category:Xen]] |
||
[ |
[[Category:Project]] |
||
[[Category:GSoC]] |
[[Category:GSoC]] |
||
[[Category:Internships]] |
[[Category:Internships]] |
Revision as of 04:53, 28 September 2021
VirtIO on the Xen Hypervisor
There are three separate development approaches within the Xen community towards building support for enabling use of VirtIO device drivers in guest virtual machines with the Xen hypervisor, and a fourth older completed GSOC project. Work on the active approaches is proceeding on the xen-devel public mailing list.
Placeholder names have been assigned to each of these approaches for ease of reference in this page:
- VirtIO-EPAM
- VirtIO-SuSE
- VirtIO-Argo
- VirtIO-GSOC
In addition, Linaro has a project 'Stratos' pursuing: "Establish virtio as the standard interface between hypervisors, freeing a mobile, industrial or automotive platform to migrate between hypervisors and reuse the backend implementation."
- https://linaro.atlassian.net/wiki/spaces/STR/overview
- https://projects.linaro.org/projects/STR/summary
- https://op-lists.linaro.org/mailman/listinfo/stratos-dev
The Stratos project teleconference calls are open.
VirtIO-EPAM: enabling existing VirtIO-MMIO transport on Xen, using foreign mappings and an IOREQ server
Development by EPAM and others, with focus on Xen on Arm platforms. Contact: Oleksandr Tyshchenko
Enables use of the existing standardized VirtIO-MMIO transport driver, which is present in the mainline Linux kernel, using Xen's IOREQ emulation infrastructure and use of privileged foreign mappings to establish shared memory for access to guest data by the device model backend.
Status: Patches are in progress towards Xen on the xen-devel mailing list. The presentation at Linaro Connect 2021 includes a working demonstration.
VirtIO on Xen hypervisor (Arm), Oleksandr Tyshchenko, EPAM, Linaro Connect 2021:
- https://static.linaro.org/connect/lvc21/presentations/lvc21-314.pdf
- https://www.youtube.com/watch?v=XE5Rn8KFunk
VirtIO-SuSE: introducing a new VirtIO transport driver that uses Xen grants
Developed by SuSE, presented at the Xen Design and Developer Summit 2021. Contact: Juergen Gross
A new VirtIO transport device driver is added to the guest kernel, to translate guest physical addresses into grant references, enabling VirtIO data path communication over mutually-negociated shared memory regions between the guest virtual machine and the device model backend. Improves isolation as backend does not need privilege over the guest to perform foreign mappings. Grant references are a Xen-specific interface. Design supports driver domains.
Status: A prototype is described in the presentation at the Xen Summit 2021.
VirtIO and Xen with Full Grant Support:
- https://static.sched.com/hosted_files/xen2021/bf/Thursday_2021-Xen-Summit-virtio.pdf
- https://www.youtube.com/watch?v=IrlEdaIUDPk&list=PLYyw7IQjL-zGcRPN6EjiTuFVGo4A6KCNf&index=25
VirtIO-Argo: introducing a new VirtIO transport driver that uses Argo for interdomain communication, supporting isolation and Mandatory Access Control
Design and analysis performed within the OpenXT and Xen communities. Contact: Christopher Clark
A new VirtIO transport device driver is added to the guest kernel to transmit data between the guest domain and the domain hosting the device model via Argo rings: a Hypervisor-Mediated data eXchange protocol where the hypervisor transfers the data, being trusted to strictly adhere to the delivery protocol. Supports stronger isolation properties and enforcement of Mandatory Access Control security policy over interdomain communication. Does not use shared memory between domains. Development of a Hypervisor-agnostic interface for Argo has been proposed and discussed within the Xen community. Design supports driver domains.
Status: Design and analysis published; funding required for development to proceed.
VirtIO-Argo: Documentation at the OpenXT wiki:
VirtIO-Argo Development:
Minutes from the Argo HMX Transport for VirtIO topic call, 14th January 2021:
VirtIO-GSOC: 2011 Google Summer of Code Project
A Google Summer of Code project by Wei Liu investigated enabling VirtIO on Xen.
A working prototype was produced for both PV and HVM guests, using XenBus and the Qemu VirtIO backends. PV guests require a guest kernel patch to translate guest physical addresses to machine addresses in VirtIO rings.
Status: project completed.
Using the prototype
This section is intended to guide people who might be interested giving it a try.
Note:
- Make sure you have the latest Xen unstable source (at least CS23728).
- Checkout Stefano Stabellini's QEMU repository: git://xenbits.xen.org/people/sstabellini/qemu-dm.git xen-stable-0.15
Virtio for HVM guest
In fact, there is nothing much to do.
- With this patch, we can enable libxl to support configuration for Virtio disk and nic.
- For disk configuration syntax, use 'vd*' as virtual identifier, see docs/misc/vbd-interface.txt for details.
- For nic configuration syntax, use 'model=virtio' in vif configuration. Latest QEMU may require 'model=virtio-net'. Just choose the one that works.
- Disable MSI in guest kernel, with 'pci=nomsi' option in guest kernel command line. Currently, MSI delivery is not supported by HVM guest (though Xen has one HVMOP to do this, QEMU is not yet ready for this).
- Also you might want to add 'xen_emul_unplug=never' in the guest kernel command line.
Use 'xl' to start the guest, not 'xm'.
Virtio for PV guest
First of all, you need the patch in the previous section to enable libxl to support configuration syntax for Virtio disk and nic.
Then apply the following patches to upstream QEMU and Linux kernel.
- QEMU
- Linux kernel
- linux-01-virtio-xenbus.patch
- linux-02-virtio-ring.patch. N.B This patch breaks existing virtio ring implementation, so please compile it out of tree and load it manually.
- VM config file
- Make sure you add device_model_args_pv=['-net', 'tap,vlan=0,script=no'] to make QEMU add a tap for you, or you won't be able to send packets via Virtio net.
- Linux kernel config
- Make sure you have 'iommu=soft' in your guest kernel command line.
Run 'xl' to startup VM, 'xm' doesn't understand virtio configuration. After the VM is up, load modified virtio_ring.ko and all the other modules manually in the following order:
- virtio.ko
- virtio_ring.ko
- virtio_net.ko
- virtio_blk.ko
- virtio_xenbus.ko
Hopefully you will get Virtio devices without much trouble.
TODO
- Enable xen-mapcache for Virtio for PV, improve performance.
- Squash two evtchns into one, hopefully we can eliminate locking in transport layer and improve performance.
- Enable Virtio device DMA capability
- Bug fixes, transport layer crashes sometimes under heavy workload.
Related References
For those who encounter problems, please contact Wei Liu <liuw AT liuw SPAMFREE dot name>