Thomas Lamprecht писал 2019-12-12 08:54:
On 12/11/19 6:03 PM, Paul Shepel wrote:
This patch adds support of QEMU host_mtu virtio-net parameter
thats expose host MTU to guest
Looks OK, a nit (which I can fixup locally) and a question out of
interest
inline.
Signed-off-by: Paul Shepel <ta...@tacid.kiev.ua>
---
PVE/QemuServer.pm | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm
index 865a89b..3168dde 100644
--- a/PVE/QemuServer.pm
+++ b/PVE/QemuServer.pm
@@ -892,6 +892,12 @@ my $net_fmt = {
description => "Rate limit in mbps (megabytes per second) as
floating point number.",
optional => 1,
},
+ mtu => {
+ type => 'number',
+ minimum => 576, maximum=> 65536,
nit: space missing between maximum and =>
Do you know what the default is? Is it always 1500, or does QEMU adapt
this
to the host, if the interface it's plugged to has a smaller MTU - for
example.
As far as I can see, the guest sets the MTU to 1500 on the virtio
interface, unless qemu explicitly sets host_mtu for the adapter being
created, regardless of the MTU of the tap interface on the host.
This is essentially the normal behavior of the operating system and the
virtio driver if no additional information about the host system is
passed on.
Thus, I think in the future it would be logical to add a patch that
would install host_mtu explicitly if the tap interface on the host
system is set to MTU different from 1500. The tap interface itself
inherits the MTU from the bridge interface in which it is "connected".
The problem, as far as I understand, is that TSO is implemented and
enabled by default in the virtio driver, so if the MTU is not configured
correctly (larger then can be fit in ethernet frame), some packages will
simply not reach the destination.
+ description => "MTU (virtio-net only)",
+ optional => 1,
+ },
tag => {
type => 'integer',
minimum => 1, maximum => 4094,
@@ -2060,6 +2066,7 @@ sub print_netdevice_full {
$tmpstr .= ",vectors=$vectors,mq=on";
}
$tmpstr .= ",bootindex=$net->{bootindex}" if $net->{bootindex} ;
+ $tmpstr .= ",host_mtu=$net->{mtu}" if $net->{mtu} && $device eq
'virtio-net-pci';
if ($use_old_bios_files) {
my $romfile;
@@ -5052,6 +5059,7 @@ sub vmconfig_update_net {
if (&$safe_string_ne($oldnet->{model}, $newnet->{model}) ||
&$safe_string_ne($oldnet->{macaddr}, $newnet->{macaddr}) ||
&$safe_num_ne($oldnet->{queues}, $newnet->{queues}) ||
+ &$safe_num_ne($oldnet->{mtu}, $newnet->{mtu}) ||
!($newnet->{bridge} && $oldnet->{bridge})) { # bridge/nat mode
change
# for non online change, we try to hot-unplug
_______________________________________________
pve-devel mailing list
pve-devel@pve.proxmox.com
https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel