Received: by 2002:a25:1506:0:0:0:0:0 with SMTP id 6csp84799ybv; Wed, 5 Feb 2020 01:37:56 -0800 (PST) X-Google-Smtp-Source: APXvYqwiVYDWdzyU8WSzUn2fEilcn4Rfs5Bq+HmwRJ/C7+rm/PKX75VpnE7YQzFxAK2sIsY2zhm4 X-Received: by 2002:a05:6830:50:: with SMTP id d16mr18468876otp.166.1580895476431; Wed, 05 Feb 2020 01:37:56 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1580895476; cv=none; d=google.com; s=arc-20160816; b=c9cLB+rUPUQotRLBlbYHxc9MtMLrTI/OW+aDG5qR2OJga1Mc7bndS7x6lOdzJJyCXO U2m8aFwyfrWahTgMJJQGU4gvnnJ5KjkYzd4rYkhxKtPuS59yLU3YB4jhoxMNGTU8HL4L jIafEkHeJAJOuilqCZHuuXvPIDZ4v3p5P7DElk8brUlb+S5I4G66RXBshyvGsnYakQqJ tY51Cx2dARlBVMXU0VLoLTQHm77xGYjod2fEPQa/UVuAxwFnRJMY/hSll9nqT0B2hNhb v5w8z+SvNEOn/Sa/bwcoYrs3qBhdtvu/ej0NXQD2Hq+OY5st550ymlRjJSiofvybo9Kd qGjg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:in-reply-to:content-disposition :mime-version:references:message-id:subject:cc:to:from:date :dkim-signature; bh=RCaLsUAO+7d0KA8TpszJgVv3F3ye23dHWTe/+8BwPxs=; b=iCTujwrXyuluJTEl3PvzlD+5EQTfWnez5rnaIGDa0fh7nCUgczBcsex/wXgMNKw3Q3 PcCH9QflLMsilAFsWG7yvBF99owHdpUf+bCgcdFrEWuRoLSDu/Z1JPxcTUqWFTzYpn+u 8o9nE97H4miCqQh0w04rB0fObP2KQKUszv7hrSiq6zkYE2BHnQIyTs1JpSeVP/TBHYur Z9YIyeP3umS1B/9tWqzGsR+lk1jDPQC9WoIMWZ2lJAMQg7+FUeHUmKtiHD/7+ARhA8yE XsBK0UQWA943bmCleBXqxkUKR76DmqCrvtIHQ/+ErwZ8J2L+eOTjoavP9KWXT48OGAPc 1k5w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=GVMZpACb; 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 i124si11237702oif.214.2020.02.05.01.37.10; Wed, 05 Feb 2020 01:37:56 -0800 (PST) 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=GVMZpACb; 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 S1728232AbgBEJgQ (ORCPT + 99 others); Wed, 5 Feb 2020 04:36:16 -0500 Received: from mail.kernel.org ([198.145.29.99]:35160 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728035AbgBEJgQ (ORCPT ); Wed, 5 Feb 2020 04:36:16 -0500 Received: from localhost (unknown [212.187.182.163]) (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 0AD5E20661; Wed, 5 Feb 2020 09:36:15 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1580895375; bh=RwByi0XDoyCwQdPe5YV1dEFXavEuBmppr0k662j0vE0=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=GVMZpACbv7YDWH+Ckvp13K/sQxq6HMXMZWFjtjxgZOzZCqv9+3Rz5m7YrNUSRGzRo 8xla3g7gqRFfMK8GwmrjBaSCImKNAg1i5cq0H1VmAJSHqnh8N8ShGFvp+81/Aocfwd zPKKa2l7omXB4nxNHq8JHvMsPIqUAf6bH7AZ+bNg= Date: Wed, 5 Feb 2020 09:36:12 +0000 From: Greg Kroah-Hartman To: Frankie Chang Cc: Todd Kjos , Martijn Coenen , Arve =?iso-8859-1?B?SGr4bm5lduVn?= , Joel Fernandes , Christian Brauner , linux-kernel@vger.kernel.org, linux-mediatek@lists.infradead.org, wsd_upstream@mediatek.com, Jian-Min.Liu@mediatek.com Subject: Re: [PATCH v1 1/1] binder: transaction latency tracking for user build Message-ID: <20200205093612.GA1167956@kroah.com> References: <1580885572-14272-1-git-send-email-Frankie.Chang@mediatek.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1580885572-14272-1-git-send-email-Frankie.Chang@mediatek.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Wed, Feb 05, 2020 at 02:52:52PM +0800, Frankie Chang wrote: > Record start/end timestamp to binder transaction. > When transaction is completed or transaction is free, > it would be checked if transaction latency over threshold (2 sec), > if yes, printing related information for tracing. > > Signed-off-by: Frankie Chang > --- > drivers/android/Kconfig | 8 +++ > drivers/android/binder.c | 107 +++++++++++++++++++++++++++++++++++++ > drivers/android/binder_internal.h | 4 ++ > 3 files changed, 119 insertions(+) > > diff --git a/drivers/android/Kconfig b/drivers/android/Kconfig > index 6fdf2ab..7ba80eb 100644 > --- a/drivers/android/Kconfig > +++ b/drivers/android/Kconfig > @@ -54,6 +54,14 @@ config ANDROID_BINDER_IPC_SELFTEST > exhaustively with combinations of various buffer sizes and > alignments. > > +config BINDER_USER_TRACKING > + bool "Android Binder transaction tracking" > + help > + Used for track abnormal binder transaction which is over 2 seconds, > + when the transaction is done or be free, this transaction would be > + checked whether it executed overtime. > + If yes, printing out the detail info about it. > + > endif # if ANDROID > > endmenu > diff --git a/drivers/android/binder.c b/drivers/android/binder.c > index e9bc9fc..5a352ee 100644 > --- a/drivers/android/binder.c > +++ b/drivers/android/binder.c > @@ -76,6 +76,11 @@ > #include "binder_internal.h" > #include "binder_trace.h" > > +#ifdef CONFIG_BINDER_USER_TRACKING > +#include > +#include > +#endif > + > static HLIST_HEAD(binder_deferred_list); > static DEFINE_MUTEX(binder_deferred_lock); > > @@ -591,8 +596,104 @@ struct binder_transaction { > * during thread teardown > */ > spinlock_t lock; > +#ifdef CONFIG_BINDER_USER_TRACKING > + struct timespec timestamp; > + struct timeval tv; > +#endif > }; > > +#ifdef CONFIG_BINDER_USER_TRACKING > + > +/* > + * binder_print_delay - Output info of a delay transaction > + * @t: pointer to the over-time transaction > + */ > +static void binder_print_delay(struct binder_transaction *t) > +{ > + struct rtc_time tm; > + struct timespec *startime; > + struct timespec cur, sub_t; > + > + ktime_get_ts(&cur); > + startime = &t->timestamp; > + sub_t = timespec_sub(cur, *startime); > + > + /* if transaction time is over than 2 sec, > + * show timeout warning log. > + */ > + if (sub_t.tv_sec < 2) > + return; > + > + rtc_time_to_tm(t->tv.tv_sec, &tm); > + > + spin_lock(&t->lock); > + pr_info_ratelimited("%d: from %d:%d to %d:%d", > + t->debug_id, > + t->from ? t->from->proc->pid : 0, > + t->from ? t->from->pid : 0, > + t->to_proc ? t->to_proc->pid : 0, > + t->to_thread ? t->to_thread->pid : 0); > + spin_unlock(&t->lock); > + > + pr_info_ratelimited(" total %u.%03ld s code %u start %lu.%03ld android %d-%02d-%02d %02d:%02d:%02d.%03lu\n", > + (unsigned int)sub_t.tv_sec, > + (sub_t.tv_nsec / NSEC_PER_MSEC), > + t->code, > + (unsigned long)startime->tv_sec, > + (startime->tv_nsec / NSEC_PER_MSEC), > + (tm.tm_year + 1900), (tm.tm_mon + 1), tm.tm_mday, > + tm.tm_hour, tm.tm_min, tm.tm_sec, > + (unsigned long)(t->tv.tv_usec / USEC_PER_MSEC)); > +} Ick, why not use a tracepoint for this instead? And what is userspace supposed to do with this if they see it? thanks, greg k-h