From patchwork Mon Apr 15 09:16:24 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Kondratiev X-Patchwork-Id: 236539 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id E771F2C00D3 for ; Mon, 15 Apr 2013 19:16:32 +1000 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S934769Ab3DOJQ3 (ORCPT ); Mon, 15 Apr 2013 05:16:29 -0400 Received: from sabertooth01.qualcomm.com ([65.197.215.72]:55910 "EHLO sabertooth01.qualcomm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S934370Ab3DOJQ2 (ORCPT ); Mon, 15 Apr 2013 05:16:28 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=qca.qualcomm.com; i=@qca.qualcomm.com; q=dns/txt; s=qcdkim; t=1366017388; x=1397553388; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=W116dg+maBcQWTRKj3or34mjkykJUqj9Dd1brCWzHQM=; b=ZUGqtUhyQjqz1y/YowdU1KNCOor/rmVmRUvRW7peKYYFxvr/+xMt3+as k0xIsDLd5FtaGai/5tSOBFwEpaefPIFzgadHuNcKA68TsgIAYRsWy3Sqe 9fanInkcCbXggz5BmK/PRTkZ2a0w/i0D5oBj9PRCNOICojsJTW5Agfesa 4=; X-IronPort-AV: E=Sophos;i="4.87,474,1363158000"; d="scan'208";a="35007912" Received: from ironmsg02-lv.qualcomm.com ([10.47.202.183]) by sabertooth01.qualcomm.com with ESMTP; 15 Apr 2013 02:16:27 -0700 Received: from nasanexhc08.na.qualcomm.com ([172.30.39.7]) by ironmsg02-lv.qualcomm.com with ESMTP/TLS/RC4-SHA; 15 Apr 2013 02:16:27 -0700 Received: from lx-vladimir.localnet (172.30.39.5) by qcmail1.qualcomm.com (172.30.39.7) with Microsoft SMTP Server (TLS) id 14.2.318.4; Mon, 15 Apr 2013 02:16:27 -0700 From: Vladimir Kondratiev To: "David S. Miller" CC: Subject: [PATCH] networking: enhance NAPI tracing Date: Mon, 15 Apr 2013 12:16:24 +0300 Message-ID: <1820981.mWzDT3QAhR@lx-vladimir> Organization: Qualcomm Atheros User-Agent: KMail/4.9.5 (Linux/3.5.0-25-generic; KDE/4.9.5; x86_64; ; ) MIME-Version: 1.0 X-Originating-IP: [172.30.39.5] Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Hi, I faced with lack of tracing when debugging NAPI, patch below adds missing bits. There are warnings from checkpatch, because of commonly used style for the traces. From 12f3171f1346a2b89121f941208111711fab1097 Mon Sep 17 00:00:00 2001 From: Vladimir Kondratiev Date: Mon, 15 Apr 2013 12:00:08 +0300 Subject: [PATCH] networking: enhance NAPI tracing NAPI cycle includes napi_schedule(), poll() and napi_complete() functions. Add trace for napi_schedule()/napi_complete() - for internal functions with '__', when actual actions performed. For poll(), add printing of 'weight' and 'work' Signed-off-by: Vladimir Kondratiev --- include/trace/events/napi.h | 39 +++++++++++++++++++++++++++++++++++++-- net/core/dev.c | 4 +++- net/core/netpoll.c | 2 +- 3 files changed, 41 insertions(+), 4 deletions(-) diff --git a/include/trace/events/napi.h b/include/trace/events/napi.h index 8fe1e93..26fdb75 100644 --- a/include/trace/events/napi.h +++ b/include/trace/events/napi.h @@ -12,6 +12,31 @@ TRACE_EVENT(napi_poll, + TP_PROTO(struct napi_struct *napi, int weight, int work), + + TP_ARGS(napi, weight, work), + + TP_STRUCT__entry( + __field( struct napi_struct *, napi) + __string( dev_name, napi->dev ? napi->dev->name : NO_DEV) + __field( int, weight) + __field( int, work) + ), + + TP_fast_assign( + __entry->napi = napi; + __assign_str(dev_name, napi->dev ? napi->dev->name : NO_DEV); + __entry->weight = weight; + __entry->work = work; + ), + + TP_printk("napi poll on napi struct %p for device %s" + " weight %d work %d", + __entry->napi, __get_str(dev_name), __entry->weight, + __entry->work) +); + +DECLARE_EVENT_CLASS(napi_state, TP_PROTO(struct napi_struct *napi), TP_ARGS(napi), @@ -26,8 +51,18 @@ TRACE_EVENT(napi_poll, __assign_str(dev_name, napi->dev ? napi->dev->name : NO_DEV); ), - TP_printk("napi poll on napi struct %p for device %s", - __entry->napi, __get_str(dev_name)) + TP_printk("napi struct %p for device %s", + __entry->napi, __get_str(dev_name)) +); + +DEFINE_EVENT(napi_state, napi_schedule, + TP_PROTO(struct napi_struct *napi), + TP_ARGS(napi) +); + +DEFINE_EVENT(napi_state, napi_complete, + TP_PROTO(struct napi_struct *napi), + TP_ARGS(napi) ); #undef NO_DEV diff --git a/net/core/dev.c b/net/core/dev.c index e7d68ed..2537253 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -4023,6 +4023,7 @@ void __napi_schedule(struct napi_struct *n) local_irq_save(flags); ____napi_schedule(&__get_cpu_var(softnet_data), n); local_irq_restore(flags); + trace_napi_schedule(n); } EXPORT_SYMBOL(__napi_schedule); @@ -4034,6 +4035,7 @@ void __napi_complete(struct napi_struct *n) list_del(&n->poll_list); smp_mb__before_clear_bit(); clear_bit(NAPI_STATE_SCHED, &n->state); + trace_napi_complete(n); } EXPORT_SYMBOL(__napi_complete); @@ -4134,7 +4136,7 @@ static void net_rx_action(struct softirq_action *h) work = 0; if (test_bit(NAPI_STATE_SCHED, &n->state)) { work = n->poll(n, weight); - trace_napi_poll(n); + trace_napi_poll(n, weight, work); } WARN_ON_ONCE(work > weight); diff --git a/net/core/netpoll.c b/net/core/netpoll.c index fa32899..75f8c32 100644 --- a/net/core/netpoll.c +++ b/net/core/netpoll.c @@ -160,7 +160,7 @@ static int poll_one_napi(struct netpoll_info *npinfo, set_bit(NAPI_STATE_NPSVC, &napi->state); work = napi->poll(napi, budget); - trace_napi_poll(napi); + trace_napi_poll(napi, budget, work); clear_bit(NAPI_STATE_NPSVC, &napi->state); atomic_dec(&trapped);