From patchwork Mon Jul 23 14:36:09 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Toshiaki Makita X-Patchwork-Id: 947811 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="cvKUcn8C"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 41Z3wN5C2Vz9s3Z for ; Tue, 24 Jul 2018 00:36:52 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388531AbeGWPiX (ORCPT ); Mon, 23 Jul 2018 11:38:23 -0400 Received: from mail-pl0-f66.google.com ([209.85.160.66]:46692 "EHLO mail-pl0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2387877AbeGWPiX (ORCPT ); Mon, 23 Jul 2018 11:38:23 -0400 Received: by mail-pl0-f66.google.com with SMTP id t17-v6so304385ply.13 for ; Mon, 23 Jul 2018 07:36:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=Mg2fwnWTHqGG+q1SQ2O7WF68+U33V6ndSsZS3OCztEg=; b=cvKUcn8CWYiQZDnPYA/Y36qON1KGvpUZnk72rtNxb81xGvHmTgcuT01xjlWXTsK3kf 3gDq52MDKjVZFIaTx1BPGh+dDek3E5kyhAT3ahldBM6RRp3iCdPCwLwgkNUJKAWKhUfp H/ebaCJ8GbS1GEMsdTKQZJnUKzJn3qfWziE2o6xtzPtcpKHFqtn0zdhIWKT5kI/IWijs WEOUI265mnP4snGL7hPTIZHv6KlPf3emXf6ccQD5RMgev/vAsoYvgzMdqtuoNfWZsSAv Suh99jvS0XpCJZK5PzwT4sxJC7pCMwrreLZRQVbOdgo4hFGvg6THOipCXgLGGJuJht0e KIgw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=Mg2fwnWTHqGG+q1SQ2O7WF68+U33V6ndSsZS3OCztEg=; b=VE/ugI3QkNVZ7jTve17sRGgvhH2p2y0Rs7t9g11SakyJa0gaAuRCQjtzYc28bAu5BW sQmupsfkJu51Tzy+05z+b3C+KU3JK9aqj9CfHNx1bMLXXTPRYC71hQ03/gELU/z1usBI UtNTkZzPsnNj50TUudUwR56g9GoJakLOV0kIqNIo67Gbm8OavRhppw/oMUAA6GFtg4V9 CKridYDug2Zb6uqtgoNBC3ScT0h6YFozvlNuqNp+tRyxe6kPq6sFi4qugc+VSobOSplY Vtfqpg06r4i1WI6cnjDI9mUOtlTus+WF/NNopBAIHz8T5hUPkfrbIEJH1/sUXCH1dXVX encA== X-Gm-Message-State: AOUpUlFqybYcrWbV1zJK8nzN09HKCn7zeeMB6+TdvHmKRYXHqVKNhFii NIO2Slr2rjgGR5MYjlmDTuI= X-Google-Smtp-Source: AAOMgpceq0xFEq3iT4EYjRGf2dx+0IOUkq39lpcZyE7iM/1extTytyC9Pti6jUaY9ww7SXhdTu8jSA== X-Received: by 2002:a17:902:b7c6:: with SMTP id v6-v6mr12796750plz.49.1532356610535; Mon, 23 Jul 2018 07:36:50 -0700 (PDT) Received: from localhost.localdomain (i153-145-22-9.s42.a013.ap.plala.or.jp. [153.145.22.9]) by smtp.gmail.com with ESMTPSA id 65-v6sm14415503pfq.81.2018.07.23.07.36.48 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 23 Jul 2018 07:36:49 -0700 (PDT) From: Toshiaki Makita To: "Michael S. Tsirkin" , Jason Wang , "David S. Miller" Cc: Toshiaki Makita , netdev@vger.kernel.org, virtualization@lists.linux-foundation.org Subject: [PATCH net-next 6/6] virtio_net: Add kick stats Date: Mon, 23 Jul 2018 23:36:09 +0900 Message-Id: <20180723143609.2242-7-toshiaki.makita1@gmail.com> X-Mailer: git-send-email 2.14.3 In-Reply-To: <20180723143609.2242-1-toshiaki.makita1@gmail.com> References: <20180723143609.2242-1-toshiaki.makita1@gmail.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Toshiaki Makita So we can infer the number of VM-Exits. Signed-off-by: Toshiaki Makita --- drivers/net/virtio_net.c | 34 ++++++++++++++++++++++++++++------ 1 file changed, 28 insertions(+), 6 deletions(-) diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c index cb4ef331567c..1880c86e84b4 100644 --- a/drivers/net/virtio_net.c +++ b/drivers/net/virtio_net.c @@ -84,6 +84,7 @@ struct virtnet_sq_stats { u64 bytes; u64 xdp_tx; u64 xdp_tx_drops; + u64 kicks; }; struct virtnet_rq_stat_items { @@ -94,6 +95,7 @@ struct virtnet_rq_stat_items { u64 xdp_tx; u64 xdp_redirects; u64 xdp_drops; + u64 kicks; }; struct virtnet_rq_stats { @@ -117,6 +119,7 @@ static const struct virtnet_stat_desc virtnet_sq_stats_desc[] = { { "bytes", VIRTNET_SQ_STAT(bytes) }, { "xdp_tx", VIRTNET_SQ_STAT(xdp_tx) }, { "xdp_tx_drops", VIRTNET_SQ_STAT(xdp_tx_drops) }, + { "kicks", VIRTNET_SQ_STAT(kicks) }, }; static const struct virtnet_stat_desc virtnet_rq_stats_desc[] = { @@ -127,6 +130,7 @@ static const struct virtnet_stat_desc virtnet_rq_stats_desc[] = { { "xdp_tx", VIRTNET_RQ_STAT(xdp_tx) }, { "xdp_redirects", VIRTNET_RQ_STAT(xdp_redirects) }, { "xdp_drops", VIRTNET_RQ_STAT(xdp_drops) }, + { "kicks", VIRTNET_RQ_STAT(kicks) }, }; #define VIRTNET_SQ_STATS_LEN ARRAY_SIZE(virtnet_sq_stats_desc) @@ -507,6 +511,7 @@ static int virtnet_xdp_xmit(struct net_device *dev, struct send_queue *sq; unsigned int len; int drops = 0; + int kicks = 0; int ret, err; int i; @@ -543,12 +548,15 @@ static int virtnet_xdp_xmit(struct net_device *dev, } ret = n - drops; - if (flags & XDP_XMIT_FLUSH) - virtqueue_kick(sq->vq); + if (flags & XDP_XMIT_FLUSH) { + if (virtqueue_kick_prepare(sq->vq) && virtqueue_notify(sq->vq)) + kicks = 1; + } out: u64_stats_update_begin(&sq->stats.syncp); sq->stats.xdp_tx += n; sq->stats.xdp_tx_drops += drops; + sq->stats.kicks += kicks; u64_stats_update_end(&sq->stats.syncp); return ret; @@ -1226,7 +1234,12 @@ static bool try_fill_recv(struct virtnet_info *vi, struct receive_queue *rq, if (err) break; } while (rq->vq->num_free); - virtqueue_kick(rq->vq); + if (virtqueue_kick_prepare(rq->vq) && virtqueue_notify(rq->vq)) { + u64_stats_update_begin(&rq->stats.syncp); + rq->stats.items.kicks++; + u64_stats_update_end(&rq->stats.syncp); + } + return !oom; } @@ -1416,7 +1429,11 @@ static int virtnet_poll(struct napi_struct *napi, int budget) if (xdp_xmit & VIRTIO_XDP_TX) { sq = virtnet_xdp_sq(vi); - virtqueue_kick(sq->vq); + if (virtqueue_kick_prepare(sq->vq) && virtqueue_notify(sq->vq)) { + u64_stats_update_begin(&sq->stats.syncp); + sq->stats.kicks++; + u64_stats_update_end(&sq->stats.syncp); + } } return received; @@ -1578,8 +1595,13 @@ static netdev_tx_t start_xmit(struct sk_buff *skb, struct net_device *dev) } } - if (kick || netif_xmit_stopped(txq)) - virtqueue_kick(sq->vq); + if (kick || netif_xmit_stopped(txq)) { + if (virtqueue_kick_prepare(sq->vq) && virtqueue_notify(sq->vq)) { + u64_stats_update_begin(&sq->stats.syncp); + sq->stats.kicks++; + u64_stats_update_end(&sq->stats.syncp); + } + } return NETDEV_TX_OK; }