summary refs log tree commit diff stats
path: root/docs/system/devices/vdpa-net.rst
blob: 323d8c926ad8bf2417a8bc2b8506da71855cebd6 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
vdpa net
============

This document explains the setup and usage of the vdpa network device.
The vdpa network device is a paravirtualized vdpa emulate device.

Description
-----------

VDPA net devices support dirty page bitmap mark and vring state saving and recovery.

Users can use this VDPA device for live migration simulation testing in a nested virtualization environment.

Registers layout
----------------

The vdpa device add live migrate registers layout as follow::

  Offset       Register Name	        Bitwidth     Associated vq
  0x0          LM_LOGGING_CTRL          4bits
  0x10         LM_BASE_ADDR_LOW         32bits
  0x14         LM_BASE_ADDR_HIGH        32bits
  0x18         LM_END_ADDR_LOW          32bits
  0x1c         LM_END_ADDR_HIGH         32bits
  0x20         LM_RING_STATE_OFFSET	32bits       vq0
  0x24         LM_RING_STATE_OFFSET	32bits       vq1
  0x28         LM_RING_STATE_OFFSET	32bits       vq2
  ......
  0x20+1023*4  LM_RING_STATE_OFFSET     32bits       vq1023

These registers are extended at the end of the notify bar space.

Architecture diagram
--------------------
::

  |------------------------------------------------------------------------|
  | guest-L1-user-space                                                    |
  |                                                                        |
  |                               |----------------------------------------|
  |                               |       [virtio-net driver]              |
  |                               |              ^  guest-L2-src(iommu=on) |
  |                               |--------------|-------------------------|
  |                               |              |  qemu-L2-src(viommu)    |
  | [dpdk-vdpa]<->[vhost socket]<-+->[vhost-user backend(iommu=on)]        |
  --------------------------------------------------------------------------
  --------------------------------------------------------------------------
  |       ^                             guest-L1-kernel-space              |
  |       |                                                                |
  |    [VFIO]                                                              |
  |       ^                                                                |
  |       |                             guest-L1-src(iommu=on)             |
  --------|-----------------------------------------------------------------
  --------|-----------------------------------------------------------------
  | [vdpa net device(iommu=on)]        [manager nic device]                |
  |          |                                    |                        |
  |          |                                    |                        |
  |     [tap device]     qemu-L1-src(viommu)      |                        |
  ------------------------------------------------+-------------------------
                                                  |
                                                  |
                        ---------------------     |
                        | kernel net bridge |<-----
                        |     virbr0        |<----------------------------------
                        ---------------------                                  |
                                                                               |
                                                                               |
  --------------------------------------------------------------------------   |
  | guest-L1-user-space                                                    |   |
  |                                                                        |   |
  |                               |----------------------------------------|   |
  |                               |       [virtio-net driver]              |   |
  |                               |              ^  guest-L2-dst(iommu=on) |   |
  |                               |--------------|-------------------------|   |
  |                               |              |  qemu-L2-dst(viommu)    |   |
  | [dpdk-vdpa]<->[vhost socket]<-+->[vhost-user backend(iommu=on)]        |   |
  --------------------------------------------------------------------------   |
  --------------------------------------------------------------------------   |
  |       ^                             guest-L1-kernel-space              |   |
  |       |                                                                |   |
  |    [VFIO]                                                              |   |
  |       ^                                                                |   |
  |       |                             guest-L1-dst(iommu=on)             |   |
  --------|-----------------------------------------------------------------   |
  --------|-----------------------------------------------------------------   |
  | [vdpa net device(iommu=on)]        [manager nic device]----------------+----
  |          |                                                             |
  |          |                                                             |
  |     [tap device]     qemu-L1-dst(viommu)                               |
  --------------------------------------------------------------------------


Device properties
-----------------

The Virtio vdpa device can be configured with the following properties:

 * ``vdpa=on`` open vdpa device emulated.

Usages
--------
This patch add virtio sriov support and vdpa live migrate support.
You can open vdpa by set xml file as follow::

  <qemu:commandline  xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
  <qemu:arg value='-device'/>
  <qemu:arg value='intel-iommu,intremap=on,device-iotlb=on,aw-bits=48'/>
  <qemu:arg value='-netdev'/>
  <qemu:arg value='tap,id=hostnet1,script=no,downscript=no,vhost=off'/>
  <qemu:arg value='-device'/>
  <qemu:arg value='virtio-net-pci,netdev=hostnet1,id=net1,mac=56:4a:b7:4f:4d:a9,bus=pci.6,addr=0x0,iommu_platform=on,ats=on,vdpa=on'/>
  </qemu:commandline>

Limitations
-----------
1. Dependent on tap device with param ``vhost=off``.
2. Nested virtualization environment only supports ``q35`` machines.
3. Current only support split vring live migrate.