Received: by 2002:a25:c593:0:0:0:0:0 with SMTP id v141csp1034758ybe; Wed, 4 Sep 2019 11:29:28 -0700 (PDT) X-Google-Smtp-Source: APXvYqzZYLHagg7TgYKpizp4xk3OGY3/SFYY0TSEgdNayLU03eIBphjpyPpWcddY3R9DHEgOqrFy X-Received: by 2002:a17:90a:9105:: with SMTP id k5mr6623615pjo.9.1567621767911; Wed, 04 Sep 2019 11:29:27 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1567621767; cv=none; d=google.com; s=arc-20160816; b=QJCSuhO0dnJflxn7pbHcEw58c/eek+3kEsi2sRVUusOuSsLTyVn/NAG6O1vEGwDvM4 nL7en7liTqX4uEMEm9WR4KQollRj/1na8PeohcfJlw8FsIn/nWISvwQ27BOUCoY4qoeB n0iLSIaMPD3mxBYJip4/tbQEwhblBL6mU7i4rYWjfCJLbC3o77WglECAU1hmhvUMMCu3 Or7FuotJBJ/8eey5j13fvwxUH3e1zY9HeeaAx18hy2FEhkY6tbi+fRw59wcew0Lh6cCf lidVpEM95753gH2Tun9wacxxFtQ19nOCF8y8Gq84AYgOjNqsrczu4TAH6pIIh00QdOEY hkeg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=XOzngfarBICBsfn4U+/Lsmrngbj5wsFDVKq3tocfJpw=; b=YbeYfs6RABoBlMhg/wScQm2BhxOIuwtniTrauB/EyuJTsLZg5gxRgb2xkXs6EFtz9V xJ/SjcB7UohtO542qFqGNIkVq6stimSyALhVCKiABqEepKPvJaS+b9KIEGwn9egWDI3v XRLZV21/f7hosJrbT1ovdyWuz/4r9BOybQ0JEp7FVX6Y+T9ho2bDCO66q7+Lyf1AIcs0 /Ko21DSdqBh7bzyPHKB0xgUEq8jW9Uh16vNIM/1OuNDURpuLVReNkYgwNIWtpsrX7VRa VA8lG5IkENAnJSqAtUXiq7HUkMJCMePbOHQgndXEBOyUy8FMNplwksYygDYfS3UWI6vO FaZg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=U7WV3lS0; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id b6si11936156pfr.225.2019.09.04.11.29.12; Wed, 04 Sep 2019 11:29:27 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=U7WV3lS0; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387649AbfIDR4l (ORCPT + 99 others); Wed, 4 Sep 2019 13:56:41 -0400 Received: from mail.kernel.org ([198.145.29.99]:34018 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2387619AbfIDR4h (ORCPT ); Wed, 4 Sep 2019 13:56:37 -0400 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id D197122CF7; Wed, 4 Sep 2019 17:56:35 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1567619796; bh=Wf0yReSvmLtQN3TZjus7kyYzHe+ulnlqZnDfcwXGxiw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=U7WV3lS0KQ0oOeHE+tqz3p3XBlLfdXdEcaCrH9Gcv+PGhIKi+la1K1Oj1Df0j6tKX IzKRj5rvEoaCh2a1wOxxN6THlYITIwHecIyDsIupKdh34bVwQP+auYWvqQ8XF+8T6K 9TUOl4Vr32EBwhA0kAUYt6U9zE71AHKMJV7PTqgY= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Paolo Abeni , Jason Wang , "David S. Miller" , Ben Hutchings , Sasha Levin Subject: [PATCH 4.4 37/77] vhost_net: use packet weight for rx handler, too Date: Wed, 4 Sep 2019 19:53:24 +0200 Message-Id: <20190904175307.104169907@linuxfoundation.org> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20190904175303.317468926@linuxfoundation.org> References: <20190904175303.317468926@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org commit db688c24eada63b1efe6d0d7d835e5c3bdd71fd3 upstream. Similar to commit a2ac99905f1e ("vhost-net: set packet weight of tx polling to 2 * vq size"), we need a packet-based limit for handler_rx, too - elsewhere, under rx flood with small packets, tx can be delayed for a very long time, even without busypolling. The pkt limit applied to handle_rx must be the same applied by handle_tx, or we will get unfair scheduling between rx and tx. Tying such limit to the queue length makes it less effective for large queue length values and can introduce large process scheduler latencies, so a constant valued is used - likewise the existing bytes limit. The selected limit has been validated with PVP[1] performance test with different queue sizes: queue size 256 512 1024 baseline 366 354 362 weight 128 715 723 670 weight 256 740 745 733 weight 512 600 460 583 weight 1024 423 427 418 A packet weight of 256 gives peek performances in under all the tested scenarios. No measurable regression in unidirectional performance tests has been detected. [1] https://developers.redhat.com/blog/2017/06/05/measuring-and-comparing-open-vswitch-performance/ Signed-off-by: Paolo Abeni Acked-by: Jason Wang Signed-off-by: David S. Miller Signed-off-by: Ben Hutchings Signed-off-by: Sasha Levin --- drivers/vhost/net.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/drivers/vhost/net.c b/drivers/vhost/net.c index b8496f713bc62..c1b5bccab293f 100644 --- a/drivers/vhost/net.c +++ b/drivers/vhost/net.c @@ -40,8 +40,10 @@ MODULE_PARM_DESC(experimental_zcopytx, "Enable Zero Copy TX;" #define VHOST_NET_WEIGHT 0x80000 /* Max number of packets transferred before requeueing the job. - * Using this limit prevents one virtqueue from starving rx. */ -#define VHOST_NET_PKT_WEIGHT(vq) ((vq)->num * 2) + * Using this limit prevents one virtqueue from starving others with small + * pkts. + */ +#define VHOST_NET_PKT_WEIGHT 256 /* MAX number of TX used buffers for outstanding zerocopy */ #define VHOST_MAX_PEND 128 @@ -414,7 +416,7 @@ static void handle_tx(struct vhost_net *net) total_len += len; vhost_net_tx_packet(net); if (unlikely(total_len >= VHOST_NET_WEIGHT) || - unlikely(++sent_pkts >= VHOST_NET_PKT_WEIGHT(vq))) { + unlikely(++sent_pkts >= VHOST_NET_PKT_WEIGHT)) { vhost_poll_queue(&vq->poll); break; } @@ -545,6 +547,7 @@ static void handle_rx(struct vhost_net *net) struct socket *sock; struct iov_iter fixup; __virtio16 num_buffers; + int recv_pkts = 0; mutex_lock(&vq->mutex); sock = vq->private_data; @@ -637,7 +640,8 @@ static void handle_rx(struct vhost_net *net) if (unlikely(vq_log)) vhost_log_write(vq, vq_log, log, vhost_len); total_len += vhost_len; - if (unlikely(total_len >= VHOST_NET_WEIGHT)) { + if (unlikely(total_len >= VHOST_NET_WEIGHT) || + unlikely(++recv_pkts >= VHOST_NET_PKT_WEIGHT)) { vhost_poll_queue(&vq->poll); break; } -- 2.20.1