From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932330AbZFIMIf (ORCPT ); Tue, 9 Jun 2009 08:08:35 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S932315AbZFIMIT (ORCPT ); Tue, 9 Jun 2009 08:08:19 -0400 Received: from mx2.mail.elte.hu ([157.181.151.9]:34037 "EHLO mx2.mail.elte.hu" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932293AbZFIMIS (ORCPT ); Tue, 9 Jun 2009 08:08:18 -0400 Date: Tue, 9 Jun 2009 14:07:29 +0200 From: Ingo Molnar To: Steven Rostedt Cc: linux-kernel@vger.kernel.org, Andrew Morton , Minchan Kim , Mel Gorman , Christoph Hellwig , Rik van Riel , Pekka Enberg , Peter Zijlstra , Frederic Weisbecker , Theodore Tso , Mathieu Desnoyers , Lai Jiangshan , Zhaolei , KOSAKI Motohiro , Jason Baron , Jiaying Zhang Subject: Re: [RFC PATCH 0/5] simplify the print fmt in the event format files Message-ID: <20090609120729.GB25586@elte.hu> References: <20090609014534.790466803@goodmis.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20090609014534.790466803@goodmis.org> User-Agent: Mutt/1.5.18 (2008-05-17) X-ELTE-SpamScore: -1.5 X-ELTE-SpamLevel: X-ELTE-SpamCheck: no X-ELTE-SpamVersion: ELTE 2.0 X-ELTE-SpamCheck-Details: score=-1.5 required=5.9 tests=BAYES_00 autolearn=no SpamAssassin version=3.2.5 -1.5 BAYES_00 BODY: Bayesian spam probability is 0 to 1% [score: 0.0000] Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org * Steven Rostedt wrote: > > This is a request for comments on the new print format style to show > in the format file. > > As more and more users of ftrace are retrieving their data through > the binary interface, it has become more important to be able to > parse the format of these binary records. > > Since the output may also be used in dumps of the kernel, it is still > important that ftrace has a way within the kernel to display the > data records in a human readable format. > > The current method is with TP_printk, in the TRACE_EVENT. This acts > just like a printk and lets the developer print out their format > anyway they would like to. But the problem with this is that the > readers of the binary data would either have to have a C parser to understand > the output, or would have to have a custom made parser to match the > contents, and hope that the contents would not change. > > This patch series creates a new marco called TP_FORMAT that can be > used in place of the TP_printk inside the TRACE_EVENT macro. > > This format has the current following language: > > * FMT := constant string FMT | COMMAND FMT | empty > * COMMAND := | | | > * > * TYPE := int | hex | ptr | string | strarray > * FIELD := defined by the event structure > * MASKS := MASK=NAME,MASKS | MASK=NAME > * MASK := the bit mask to match > * DELIM := delimiter to separate the fields. None and ':' are both allowed > * SYMBOLS := SYM=NAME,SYMBOLS | SYM=NAME > * SYM := the symbol value to test against > * TRUE := print when field is non zero > * FALSE := print when field is zero or NULL > * NAME := the name to write when a match is found > * > * A '\<' would print '<' > > We can extend this langange when we need to. A user app could just > ignore a type it does not understand. > > This is an RFC patch set. I basically just got it working but it lacks > some clean ups on errors. And I need to investigate the use of the > fields structures to make sure they are adquately protected. It uses > the fields that are pased by the filter code. > > This makes the output of the format much cleaner. Agreed, it's clearly cleaner. > > We go from this: > > print fmt: "irq=%d handler=%s", REC->irq, (char *)((void *)REC + REC->__data_loc_name) > > to this: > > format: irq= handler= > > and this: > > print fmt: "softirq=%d action=%s", REC->vec, ({ static const struct trace_print_flags symbols[] = { { HI_SOFTIRQ, "HI" }, { TIMER_SOFTIRQ, "TIMER" }, { NET_TX_SOFTIRQ, "NET_TX" }, { NET_RX_SOFTIRQ, "NET_RX" }, { BLOCK_SOFTIRQ, "BLOCK" }, { TASKLET_SOFTIRQ, "TASKLET" }, { SCHED_SOFTIRQ, "SCHED" }, { HRTIMER_SOFTIRQ, "HRTIMER" }, { RCU_SOFTIRQ, "RCU" }, { -1, ((void *)0) }}; ftrace_print_symbols_seq (p, REC->vec, symbols); }) > > To this: > > format: softirq= action=