From patchwork Tue Mar 12 08:41:53 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ophir Munk X-Patchwork-Id: 1055153 X-Patchwork-Delegate: ian.stokes@intel.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=openvswitch.org (client-ip=140.211.169.12; helo=mail.linuxfoundation.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=mellanox.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=Mellanox.com header.i=@Mellanox.com header.b="XMYhI6Il"; dkim-atps=neutral Received: from mail.linuxfoundation.org (mail.linuxfoundation.org [140.211.169.12]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 44JT3x3S24z9s47 for ; Tue, 12 Mar 2019 19:42:04 +1100 (AEDT) Received: from mail.linux-foundation.org (localhost [127.0.0.1]) by mail.linuxfoundation.org (Postfix) with ESMTP id 33B94D49; Tue, 12 Mar 2019 08:41:59 +0000 (UTC) X-Original-To: ovs-dev@openvswitch.org Delivered-To: ovs-dev@mail.linuxfoundation.org Received: from smtp1.linuxfoundation.org (smtp1.linux-foundation.org [172.17.192.35]) by mail.linuxfoundation.org (Postfix) with ESMTPS id 6D58DD39 for ; Tue, 12 Mar 2019 08:41:58 +0000 (UTC) X-Greylist: whitelisted by SQLgrey-1.7.6 Received: from EUR01-VE1-obe.outbound.protection.outlook.com (mail-eopbgr140080.outbound.protection.outlook.com [40.107.14.80]) by smtp1.linuxfoundation.org (Postfix) with ESMTPS id 677252D5 for ; Tue, 12 Mar 2019 08:41:57 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=TACQtTztVg+w83FPRZ+wFf7pY0qFvW2i8L/rezNgdH8=; b=XMYhI6IlkE19j47vegqkIco1JHoHS546IlNK5hw79sYmi5uhOdAKmnSeqvJiR8LS/Xdzybo90/nX33YlvpAO/GE8F19Lo1ESh1dJONPEVjs2hlX4Xa6wqhwIRmQvE6QPA+9QdhJVrHsTl96eala8SC3lm8xRHnLzo4Cpppl4I0w= Received: from AM0PR05MB4209.eurprd05.prod.outlook.com (52.134.95.150) by AM0PR05MB4642.eurprd05.prod.outlook.com (52.133.57.141) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1686.18; Tue, 12 Mar 2019 08:41:53 +0000 Received: from AM0PR05MB4209.eurprd05.prod.outlook.com ([fe80::4ca6:af92:c6a6:94a7]) by AM0PR05MB4209.eurprd05.prod.outlook.com ([fe80::4ca6:af92:c6a6:94a7%4]) with mapi id 15.20.1686.021; Tue, 12 Mar 2019 08:41:53 +0000 From: Ophir Munk To: "ovs-dev@openvswitch.org" Thread-Topic: [PATCH v1] dpif: Add marked packets stats Thread-Index: AQHU2K9xCg4uq9J+5USUwh04vF8IWg== Date: Tue, 12 Mar 2019 08:41:53 +0000 Message-ID: <1552380103-32599-1-git-send-email-ophirmu@mellanox.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: LO2P265CA0124.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:9f::16) To AM0PR05MB4209.eurprd05.prod.outlook.com (2603:10a6:208:61::22) authentication-results: spf=none (sender IP is ) smtp.mailfrom=ophirmu@mellanox.com; x-ms-exchange-messagesentrepresentingtype: 1 x-mailer: git-send-email 1.8.3.1 x-originating-ip: [37.142.13.130] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 999bf42e-3b2e-4f68-6ccd-08d6a6c693da x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(5600127)(711020)(4605104)(4618075)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7153060)(7193020); SRVR:AM0PR05MB4642; x-ms-traffictypediagnostic: AM0PR05MB4642: x-microsoft-exchange-diagnostics: =?iso-8859-1?Q?1; AM0PR05MB4642; 23:M8mH9qWGu/JESVFh7KVfbxJVIsyANCgqEdTbjIX?= =?iso-8859-1?q?+uHElE7br2T3z1kNl/LL9O7CS?= =?iso-8859-1?q?4F4KszuhHKQZbtW5WWYDXjDaJwoTdScuVuAhEXxk5HrnQbXajGa?= =?iso-8859-1?q?CU9mhKsvxEwc8JeewjUhZ9Ej9EpWXFJm+0B345opgDcQRF+hIYO?= =?iso-8859-1?q?1Viw+e3Aij5YsCUVx4235PJxWXFvzkBiLk0eAHc7hgDQRQkmROr?= =?iso-8859-1?q?u9ptDyrwdaGefH31HOgUaGJhtGOd36F6qoiRANpJXrK31Vthv1B?= =?iso-8859-1?q?29DrW0/eJImugK4txjIXh+lxA7CNp1h/WCqwfDeDVU8msiugtB5?= =?iso-8859-1?q?q8y09tzfI1g5IuCoQSO/SBQibj8GjaOJ2/3MzzrxsMxrlM/1e9b?= =?iso-8859-1?q?BNgPROFDgx79EFYPFB+QnSXwhtKJmQrxL3r5547WLod5vws+fwV?= =?iso-8859-1?q?V9/MMelh3Ll4TTNc0M2LYIOcxgm42Q111F1EYonfn6jWrqADDb9?= =?iso-8859-1?q?O8sA1DocK93Ajzbd8BSmpq8pEzP+XuHF+uFvqVeKcDBGi4jsbbo?= =?iso-8859-1?q?vZeSm9aKsfnih3WpT2c/Uokh2N25iBqzehXYXUPqnmcCAs72Z2c?= =?iso-8859-1?q?iBz2kK4ShzDQVrRREjn9LAbGNlbDU3UWGdmMxQXLD0WDe0B1jjE?= =?iso-8859-1?q?1f4bGydi+vy7dWW3N73kwaiabZUCCKIbihaXTu4x7xsrIWzoPNF?= =?iso-8859-1?q?73YuguZrpQnb2hW8x9w3mKyLo+LpglTLjdHWbfumb9LeMnUO5SA?= =?iso-8859-1?q?O4QL9CK5WSAIZoH2AZgQj9JKiasHPGEggulRkzeRxnq70vKnVNj?= =?iso-8859-1?q?NFU1eaxy89xyXci40aLLR9GSmXYpqrOHpBfBE7DtETGN1gLy6H3?= =?iso-8859-1?q?IADzhXW0jutiIBDu7eBLswcQG6Q71/Fh7F+vjnWhMFwGlAAWlDN?= =?iso-8859-1?q?2j345Qj7cbSKfKmXjFM6qRbkukTxVD5x/fIi1dhkePdnEVvInBm?= =?iso-8859-1?q?9FpFqfNYiReCxHfaRg9QtT29KeXn34wFoSnb/EBPORhXr5QcZJG?= =?iso-8859-1?q?lATVARCvtZ73PQkNTK1CTm7q/Rl2uYVxZD7wrIOUCjj7vPt9h3M?= =?iso-8859-1?q?fZ2jBeDn4i3YXGxAv+FR5ILCGlDPlbbArItGKvMIrIhRcOghIHR?= =?iso-8859-1?q?l9nhNah1BKkC2JsJHdbyce7x+s2eqqXDhXDYSGBMyIjU5kf73V5?= =?iso-8859-1?q?kZmghA+xyB/nYIbWxHcB2xu/HUjvyZXr4TC1NdZiDNV7Ell/ChV?= =?iso-8859-1?q?UyVO8S15g/4qvaukUZ5TyOKC/kR6+g/leMVzIRi84U4lRsCHACk?= =?iso-8859-1?q?2plcKp10PNFZCC4MSTj0MU=3D?= x-microsoft-antispam-prvs: x-forefront-prvs: 09749A275C x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(136003)(39860400002)(366004)(376002)(396003)(346002)(189003)(199004)(102836004)(97736004)(71190400001)(71200400001)(86362001)(256004)(6506007)(6486002)(5660300002)(66066001)(36756003)(105586002)(106356001)(2351001)(14454004)(4720700003)(305945005)(2501003)(386003)(8936002)(50226002)(6916009)(54906003)(8676002)(81166006)(81156014)(316002)(68736007)(7736002)(478600001)(2616005)(476003)(486006)(107886003)(5640700003)(6512007)(52116002)(6436002)(99286004)(53936002)(2906002)(25786009)(3846002)(26005)(6116002)(4326008)(186003); DIR:OUT; SFP:1101; SCL:1; SRVR:AM0PR05MB4642; H:AM0PR05MB4209.eurprd05.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; received-spf: None (protection.outlook.com: mellanox.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: k8iPJLT05srXY30rx+17MT/mnc4/tjuzVMnfJDOS081f43sev/WPGXb1jyun5MMQfJStLAPlQwC6Y1dX+bzYUoCwLdW1aKVdjShqUZy8YbN8gksE5P6SumLi3cjEKUAQdG8LLccIaJ5Ts50GdKKhBcmUy6+o0yr+Q2euMe1ihl9MEk7tJmQQL3vSNicb/27LOmxkJS+ntdh899SFr4tRZDrkQNfb7rYzr+67tzaC+gYu1uqwJDkPEbttC6gEWT6Z6cTJVx/0/+OcAESUptypGAHEhHm4wevqYc8NsTNgaRQ52qsmB3K65AOEJOkp0abOqIresGGyviIMbbgBT0QLpAW+iW/GgoOhu91QBh/LyHdsEHkPRT7ZHyjsUi9ikW63FZ/dcqlisuniuFk87UPl1bSz0/jafWifMiWc4J8wopQ= MIME-Version: 1.0 X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-Network-Message-Id: 999bf42e-3b2e-4f68-6ccd-08d6a6c693da X-MS-Exchange-CrossTenant-originalarrivaltime: 12 Mar 2019 08:41:53.6686 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR05MB4642 X-Spam-Status: No, score=-2.0 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on smtp1.linux-foundation.org Cc: Shahaf Shuler , Roni Bar Yanai , Ilya Maximets Subject: [ovs-dev] [PATCH v1] dpif: Add marked packets stats X-BeenThere: ovs-dev@openvswitch.org X-Mailman-Version: 2.1.12 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: ovs-dev-bounces@openvswitch.org Errors-To: ovs-dev-bounces@openvswitch.org This commit adds marked packets statistics. Following commit [1], received packets can be marked with a mark id which is associated with the flow on which the packets were recieved. This commits counts the marked packets per flow and displays the result when executing datapath dump-flow command with a "-m" (more verbosity) option, as shown in [2]. Packets are marked only when hw-offload option is enabled and only on some netdev classes such as netdev-dpdk. In all other cases marked packets are not counted and are not displayed when executing the command in [2]. [1] Commit 241bad15d9 ("dpif-netdev: associate flow with a mark id") [2] ovs-appctl dpif/dump-flows -m Signed-off-by: Ophir Munk --- lib/dpif-netdev.c | 16 ++++++++++++++++ lib/dpif.c | 9 +++++++++ lib/dpif.h | 3 +++ ofproto/ofproto-dpif.c | 4 ++++ 4 files changed, 32 insertions(+) diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c index 4d6d0c3..ef2f8f1 100644 --- a/lib/dpif-netdev.c +++ b/lib/dpif-netdev.c @@ -486,6 +486,8 @@ struct dp_netdev_flow_stats { atomic_ullong packet_count; /* Number of packets matched. */ atomic_ullong byte_count; /* Number of bytes matched. */ atomic_uint16_t tcp_flags; /* Bitwise-OR of seen tcp_flags values. */ + /* Offload stats. */ + atomic_ullong mark_count; /* Number of marked packets matched. */ }; /* A flow in 'dp_netdev_pmd_thread's 'flow_table'. @@ -3008,6 +3010,9 @@ get_dpif_flow_stats(const struct dp_netdev_flow *netdev_flow_, stats->used = used; atomic_read_relaxed(&netdev_flow->stats.tcp_flags, &flags); stats->tcp_flags = flags; + /* Offload stats. */ + atomic_read_relaxed(&netdev_flow->stats.mark_count, &n); + stats->n_marked = n; } /* Converts to the dpif_flow format, using 'key_buf' and 'mask_buf' for @@ -6124,6 +6129,15 @@ dp_netdev_flow_used(struct dp_netdev_flow *netdev_flow, int cnt, int size, atomic_store_relaxed(&netdev_flow->stats.tcp_flags, flags); } +static void +dp_netdev_flow_marked(struct dp_netdev_flow *netdev_flow, uint32_t mark, + int count) +{ + if (mark != INVALID_FLOW_MARK) { + non_atomic_ullong_add(&netdev_flow->stats.mark_count, count); + } +} + static int dp_netdev_upcall(struct dp_netdev_pmd_thread *pmd, struct dp_packet *packet_, struct flow *flow, struct flow_wildcards *wc, ovs_u128 *ufid, @@ -6244,6 +6258,8 @@ packet_batch_per_flow_execute(struct packet_batch_per_flow *batch, dp_netdev_flow_used(flow, batch->array.count, batch->byte_count, batch->tcp_flags, pmd->ctx.now / 1000); + dp_netdev_flow_marked(flow, batch->flow->mark, batch->array.count); + actions = dp_netdev_flow_get_actions(flow); dp_netdev_execute_actions(pmd, &batch->array, true, &flow->flow, diff --git a/lib/dpif.c b/lib/dpif.c index 457c9bf..bb077a5 100644 --- a/lib/dpif.c +++ b/lib/dpif.c @@ -880,9 +880,18 @@ dpif_flow_stats_extract(const struct flow *flow, const struct dp_packet *packet, stats->tcp_flags = ntohs(flow->tcp_flags); stats->n_bytes = dp_packet_size(packet); stats->n_packets = 1; + stats->n_marked = 0; stats->used = used; } +void +dpif_offload_stats_format(const struct dpif_flow_stats *stats, struct ds *s) +{ + if (stats->n_marked) { + ds_put_format(s, "marked:%"PRIu64", ", stats->n_marked); + } +} + /* Appends a human-readable representation of 'stats' to 's'. */ void dpif_flow_stats_format(const struct dpif_flow_stats *stats, struct ds *s) diff --git a/lib/dpif.h b/lib/dpif.h index 475d5a6..7c22afd 100644 --- a/lib/dpif.h +++ b/lib/dpif.h @@ -492,6 +492,8 @@ struct dpif_flow_stats { uint64_t n_bytes; long long int used; uint16_t tcp_flags; + /* Offload stats. */ + uint64_t n_marked; }; struct dpif_flow_attrs { @@ -507,6 +509,7 @@ struct dpif_flow_dump_types { void dpif_flow_stats_extract(const struct flow *, const struct dp_packet *packet, long long int used, struct dpif_flow_stats *); void dpif_flow_stats_format(const struct dpif_flow_stats *, struct ds *); +void dpif_offload_stats_format(const struct dpif_flow_stats *, struct ds *); enum dpif_flow_put_flags { DPIF_FP_CREATE = 1 << 0, /* Allow creating a new flow. */ diff --git a/ofproto/ofproto-dpif.c b/ofproto/ofproto-dpif.c index 21dd54b..af37ecb 100644 --- a/ofproto/ofproto-dpif.c +++ b/ofproto/ofproto-dpif.c @@ -4416,6 +4416,7 @@ rule_construct(struct rule *rule_) rule->stats.n_packets = 0; rule->stats.n_bytes = 0; rule->stats.used = rule->up.modified; + rule->stats.n_marked = 0; rule->recirc_id = 0; rule->new_rule = NULL; rule->forward_counts = false; @@ -5709,6 +5710,9 @@ ofproto_unixctl_dpif_dump_flows(struct unixctl_conn *conn, odp_flow_format(f.key, f.key_len, f.mask, f.mask_len, portno_names, &ds, verbosity); ds_put_cstr(&ds, ", "); + if (verbosity) { + dpif_offload_stats_format(&f.stats, &ds); + } dpif_flow_stats_format(&f.stats, &ds); ds_put_cstr(&ds, ", actions:"); format_odp_actions(&ds, f.actions, f.actions_len, portno_names);