From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) by lore.proxmox.com (Postfix) with ESMTPS id E618B1FF137 for ; Tue, 17 Mar 2026 12:14:44 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id E0AC5A871; Tue, 17 Mar 2026 12:14:52 +0100 (CET) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773746052; x=1774350852; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=1nWWtRIE/XfuH3mpqMDU0fN9tUZMdjNRqT4KQk0J54A=; b=caGXkp8XjXeVzPNB3txb2zY0AVxiYA0OlFjzKv8wwgIZ9eWnaPGN03jKJLW8pRqAEh PCR5KDyW8FELBnLJ4MjsKlbs8d0OMlnJP56G0LKHZEXqhTJflGsTgON29dl1IRPGZa/a XkjF5+eQ/yonsAF2wwyBTpt2yWKTDEXC4qAC0ELh5RTOZaY5LjboOFA6AIBXsP3C633+ l2HFAsZQELE891tUWX2tn/+SU2p0NNNv//rxnnkrEtuW9rPEC/zDMMf0CEUrExc18DYL R5fbNL9WEg3XfiCOm+GSMegjQBKcNdjyzrX+vv4ovFkuWuf7sT4GOOXizN2ICMiSd/2e Yi/w== X-Gm-Message-State: AOJu0Yx4p4w/z1MmRNggUVDp0DWbX9+XBRJTRVoekfgcpEzrPrrHUtlV aCMQZ5oaWKzjdXJkg9/VsMUByPdp05GgXctp/lmqofrbc9qVigtZETIXN8wZ2IZmba+A X-Gm-Gg: ATEYQzxqFzJFykWQIZVCM0BD8ZTYIL8QWbItXdPrJnhvfIKODALw7izCLRk9JPeoHdG d7imJqDym7OadamZNLmQTtvwHATi9Vxc80stX5dfsx8hH+ZWAoKjpPt+zVa2Nlqa2XhwCCKHkLO ugV9Itx6UaOdXcajDXEssYkoBqeaJwQHJp6SXaVOzZvq2Gk1IqegeNeq2erntZ3wiiAhiX7ughy GsT4ffUSCvAjKdVTOmU2xvUNWoWKJIKkCgCT6eFlV+IIihsI6zNLTYGeh1hMFTdmw7v3QEadcT5 kekUFs4pY10pw8LYEWIcqANWFhgnqP16WkCBWfkxfdllH60aww2GxTBteYKqzScsS5Qr+h8YWLM YyzvhP6ZfylmS2+1rljV8NCDiym1HjqgsgqqNH6rvpIkWU74QlQ+sGfiCdBKwCUkhtjKllBp0sC RnVPLH7MXAo6ase5jHQFa99PevRGIqbRR70Xzu1x77QIpdN8TgbbzOk9pBfASEzAHG9NMAuLO3m 4xjjE4vHQ954qqGt6Dy/JZKou/rwchgfBdW0gOct5cMHqazEQ== X-Received: by 2002:a17:90b:3c89:b0:35a:18b1:c245 with SMTP id 98e67ed59e1d1-35a21e38ebdmr13543987a91.3.1773746051749; Tue, 17 Mar 2026 04:14:11 -0700 (PDT) From: Ryosuke Nakayama To: pve-devel@lists.proxmox.com Subject: [RFC PATCH qemu-server 2/2] qemu: VPP: clean up vhost-user interfaces on stop, fix tx_queue_size Date: Tue, 17 Mar 2026 20:14:03 +0900 Message-ID: <20260317111404.37254-3-ryosuke.nakayama@ryskn.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260317111404.37254-1-ryosuke.nakayama@ryskn.com> References: <20260317111404.37254-1-ryosuke.nakayama@ryskn.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 0 AWL 1.065 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy FREEMAIL_ENVFROM_END_DIGIT 1 Envelope-from freemail username ends in digit FREEMAIL_FORGED_FROMDOMAIN 0.249 2nd level domains in From and EnvelopeFrom freemail headers are different FREEMAIL_FROM 0.001 Sender email is commonly abused enduser mail provider HEADER_FROM_DIFFERENT_DOMAINS 0.25 From and EnvelopeFrom 2nd level mail domains are different KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment RCVD_IN_DNSWL_NONE -0.0001 Sender listed at https://www.dnswl.org/, no trust RCVD_IN_MSPIKE_H3 0.001 Good reputation (+3) RCVD_IN_MSPIKE_WL 0.001 Mailspike good senders SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Message-ID-Hash: TWJ36YERSJQDQWJICXRQ3QRXZ5HUAUSZ X-Message-ID-Hash: TWJ36YERSJQDQWJICXRQ3QRXZ5HUAUSZ X-MailFrom: koyakiu666@gmail.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header CC: unixtech X-Mailman-Version: 3.3.10 Precedence: list List-Id: Proxmox VE development discussion List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: From: unixtech - add vpp_cleanup_vhost_nets() to delete VirtualEthernet interfaces when VM stops - set tx_queue_size=1024 for VPP bridge interfaces (was 256, causing RX bottleneck) Signed-off-by: Ryosuke Nakayama Signed-off-by: unixtech --- src/PVE/QemuServer.pm | 38 +++++++++++++++++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/src/PVE/QemuServer.pm b/src/PVE/QemuServer.pm index cf1c9e9f..e946e0f8 100644 --- a/src/PVE/QemuServer.pm +++ b/src/PVE/QemuServer.pm @@ -1351,7 +1351,8 @@ sub print_netdevice_full { } if (min_version($machine_version, 7, 1) && $net->{model} eq 'virtio') { - $tmpstr .= ",rx_queue_size=1024,tx_queue_size=256"; + my $tx_queue_size = ($net->{bridge} && $net->{bridge} =~ /^vppbr\d+$/) ? 1024 : 256; + $tmpstr .= ",rx_queue_size=1024,tx_queue_size=$tx_queue_size"; } $tmpstr .= ",bootindex=$net->{bootindex}" if $net->{bootindex}; @@ -5215,6 +5216,39 @@ sub vpp_connect_vhost_nets { } } +sub vpp_cleanup_vhost_nets { + my ($conf, $vmid) = @_; + + return if !-x '/usr/bin/vppctl'; + + foreach my $opt (keys %$conf) { + next if $opt !~ m/^net\d+$/; + my $net = PVE::QemuServer::Network::parse_net($conf->{$opt}); + next if !$net || !$net->{bridge} || $net->{bridge} !~ /^vppbr\d+$/; + + my $socket = "/var/run/vpp/qemu-${vmid}-${opt}.sock"; + + eval { + my $ifaces = ''; + PVE::Tools::run_command( + ['/usr/bin/vppctl', 'show', 'vhost-user'], + outfunc => sub { $ifaces .= $_[0] . "\n"; }, + timeout => 5, + ); + while ($ifaces =~ /^Interface:\s+(\S+).*socket filename\s+\Q$socket\E/ms) { + my $iface = $1; + PVE::Tools::run_command( + ['/usr/bin/vppctl', 'delete', 'vhost-user', $iface], + timeout => 5, + ); + print "VPP: deleted vhost-user interface $iface for $opt\n"; + last; + } + }; + warn "VPP vhost-user cleanup failed for $opt: $@" if $@; + } +} + sub vmconfig_update_agent { my ($conf, $opt, $value) = @_; @@ -6233,6 +6267,8 @@ sub vm_stop_cleanup { cleanup_pci_devices($vmid, $conf); + vpp_cleanup_vhost_nets($conf, $vmid); + vmconfig_apply_pending($vmid, $conf, $storecfg) if $apply_pending_changes; }; if (my $err = $@) { -- 2.50.1 (Apple Git-155)