On 2023/07/24 15:58, Jason Wang wrote:
On Mon, Jul 24, 2023 at 10:32 AM Yui Washizu <yui.washidu@gmail.com>
wrote:
On 2023/07/20 11:20, Jason Wang wrote:
On Wed, Jul 19, 2023 at 9:59 AM Yui Washizu <yui.washidu@gmail.com>
wrote:
This patch series is the first step towards enabling
hardware offloading of the L2 packet switching feature on
virtio-net device to host machine.
We are considering that this hardware offloading enables
the use of high-performance networks in virtual infrastructures,
such as container infrastructures on VMs.
To enable L2 packet switching by SR-IOV VFs, we are considering
the following:
- making the guest recognize virtio-net devices as SR-IOV PF devices
(archived with this patch series)
- allowing virtio-net devices to connect SR-IOV VFs to the backend
networks,
leaving the L2 packet switching feature to the management
layer like libvirt
Could you please show the qemu command line you want to propose here?
I am considering how to specify the properties of VFs to connect SR-IOV
VFs to the backend networks.
For example:
qemu-system-x86_64 -device
pcie-root-port,port=8,chassis=8,id=pci.8,bus=pcie.0,multifunction=on
-netdev tap,id=hostnet0,vhost=on
-netdev tap,id=vfnet1,vhost=on # backend
network for
SR-IOV VF 1
-netdev tap,id=vfnet2,vhost=on # backend
network for
SR-IOV VF 2
-device
virtio-net-pci,netdev=hostnet0,sriov_max_vfs=2,sriov_netdev=vfnet1:vfnet2,...
In this example, we can specify multiple backend networks to the VFs
by adding "sriov_netdev" and separating them with ":".
This seems what is in my mind as well, more below
Additionally, when passing properties like "rx_queue_size" to VFs, we
can utilize new properties,
such as "sriov_rx_queue_size_per_vfs," to ensure that the same value is
passed to all VFs.
Or we can introduce new device like:
-netdev tap,id=hn0 \
-device virtio-net-pci,netdev=hn0,id=vnet_pf \
-netdev tap,netdev=hn1 \
-device
virtio-net-pci-vf,netdev=hn1,id=vf0,pf=vnet_pf,rx_queue_size=XYZ ... \
This allows us to reuse the codes for configuring vf parameters. But
note that rx_queue_size doesn't make too much sense to vhost-vDPA, as
qemu can perform nothing more than a simple sanity test.
Thanks
Thanks for proposing this new way.
I have considered how to implement this.
As virtio-net-pci-vf device should show up
on the guest only when the guest OS creates a VF,
the guest must not be able to see the VF device on PCI bus when qemu
starts.
However, it's hard to realize this without overcomplicating
relevant code due to current qemu implementation.
It's because qdev_device_add_from_qdict,
a function which is called when devices are specified
with "-device" option of qemu startup command,
always create devices by qdev_new and qdev_realize.
It might be possible that we fix it
so that qdev_new/qdev_realize aren't triggered for virtio-net-pci-vf
devices,
but It seems that we need to special case the device in very generic code
like qdev_device_add_from_qdict(), qdev_device_add(),
device_init_func() or their caller function.
Given my current ideas,
it seems like this PATCH could become complex.
Woule you have any suggestions
for achieving this in more simple way possible ?