[libvirt PATCH v2] Adds e1000e/vmxnet3 Vnet_hdr suuport
Daniel Henrique Barboza
danielhb413 at gmail.com
Mon Aug 31 17:30:41 UTC 2020
Be mindful of the typo in the commit title: suuport -> support
Just a nit below:
On 8/8/20 10:59 AM, Patrick Magauran wrote:
> Changes from Original:
> Moved Comparison to qemuInterfaceIsVnetCompatModel in qemu_interface.c per the recommendation of Daniel Berrangé
>
> -----
> Libvirt bases its decision about whether to apply the vnet_hdr flag to the tap interface on whether or not the selected model is VirtIO. Originally, VirtIO was the only model to support the vnet_hdr in QEMU; however, the e1000e & vmxnet3 adapters also support it(seemingly from introduction based on commits). This passes the whole packet to the host, reducing emulation overhead and improving performance.
>
> Signed-off-by: Patrick Magauran <patmagauran.j at gmail.com>
> ---
> src/qemu/qemu_interface.c | 15 +++++++++++----
> src/qemu/qemu_interface.h | 1 +
> 2 files changed, 12 insertions(+), 4 deletions(-)
>
> diff --git a/src/qemu/qemu_interface.c b/src/qemu/qemu_interface.c
> index ffec992596..229bb299aa 100644
> --- a/src/qemu/qemu_interface.c
> +++ b/src/qemu/qemu_interface.c
> @@ -230,6 +230,13 @@ qemuInterfaceStopDevices(virDomainDefPtr def)
> return 0;
> }
>
> +bool qemuInterfaceIsVnetCompatModel(const virDomainNetDef *net)
> +{
> + return (virDomainNetIsVirtioModel(net) ||
> + net->model == VIR_DOMAIN_NET_MODEL_E1000E ||
> + net->model == VIR_DOMAIN_NET_MODEL_VMXNET3);
> +}
^ indentation here is misaligned by a few spaces:
return (virDomainNetIsVirtioModel(net) ||
net->model == VIR_DOMAIN_NET_MODEL_E1000E ||
net->model == VIR_DOMAIN_NET_MODEL_VMXNET3);
Rest of the code LGTM. I'm CC'ing Laine because I don't have authority to
decide if what you're doing here is enough or more changes are required,
and network is Laine's turf. As far as I understand:
Reviewed-by: Daniel Henrique Barboza <danielhb413 at gmail.com>
> +
>
> /**
> * qemuInterfaceDirectConnect:
> @@ -255,7 +262,7 @@ qemuInterfaceDirectConnect(virDomainDefPtr def,
> virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
> unsigned int macvlan_create_flags = VIR_NETDEV_MACVLAN_CREATE_WITH_TAP;
>
> - if (virDomainNetIsVirtioModel(net))
> + if (qemuInterfaceIsVnetCompatModel(net))
> macvlan_create_flags |= VIR_NETDEV_MACVLAN_VNET_HDR;
>
> if (virNetDevMacVLanCreateWithVPortProfile(net->ifname,
> @@ -417,7 +424,7 @@ qemuInterfaceEthernetConnect(virDomainDefPtr def,
> }
> }
>
> - if (virDomainNetIsVirtioModel(net))
> + if (qemuInterfaceIsVnetCompatModel(net))
> tap_create_flags |= VIR_NETDEV_TAP_CREATE_VNET_HDR;
>
> if (net->managed_tap == VIR_TRISTATE_BOOL_NO) {
> @@ -436,7 +443,7 @@ qemuInterfaceEthernetConnect(virDomainDefPtr def,
> if (virNetDevMacVLanTapOpen(net->ifname, tapfd, tapfdSize) < 0)
> goto cleanup;
> if (virNetDevMacVLanTapSetup(tapfd, tapfdSize,
> - virDomainNetIsVirtioModel(net)) < 0) {
> + qemuInterfaceIsVnetCompatModel(net)) < 0) {
> goto cleanup;
> }
> } else {
> @@ -559,7 +566,7 @@ qemuInterfaceBridgeConnect(virDomainDefPtr def,
> template_ifname = true;
> }
>
> - if (virDomainNetIsVirtioModel(net))
> + if (qemuInterfaceIsVnetCompatModel(net))
> tap_create_flags |= VIR_NETDEV_TAP_CREATE_VNET_HDR;
>
> if (driver->privileged) {
> diff --git a/src/qemu/qemu_interface.h b/src/qemu/qemu_interface.h
> index 0464b903d7..9e3f61e8e0 100644
> --- a/src/qemu/qemu_interface.h
> +++ b/src/qemu/qemu_interface.h
> @@ -58,3 +58,4 @@ int qemuInterfaceOpenVhostNet(virDomainDefPtr def,
>
> qemuSlirpPtr qemuInterfacePrepareSlirp(virQEMUDriverPtr driver,
> virDomainNetDefPtr net);
> +bool qemuInterfaceIsVnetCompatModel(const virDomainNetDef *net);
>
More information about the libvir-list
mailing list