linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Ingo Molnar <mingo@elte.hu>
To: Lin Ming <ming.m.lin@intel.com>
Cc: Johannes Berg <johannes@sipsolutions.net>,
	Peter Zijlstra <peterz@infradead.org>, Greg KH <greg@kroah.com>,
	Corey Ashford <cjashfor@linux.vnet.ibm.com>,
	Frederic Weisbecker <fweisbec@gmail.com>,
	Paul Mundt <lethal@linux-sh.org>,
	"eranian@gmail.com" <eranian@gmail.com>,
	"Gary.Mohr@Bull.com" <Gary.Mohr@bull.com>,
	"arjan@linux.intel.com" <arjan@linux.intel.com>,
	"Zhang, Yanmin" <yanmin_zhang@linux.intel.com>,
	Paul Mackerras <paulus@samba.org>,
	"David S. Miller" <davem@davemloft.net>,
	Russell King <rmk+kernel@arm.linux.org.uk>,
	Arnaldo Carvalho de Melo <acme@redhat.com>,
	Will Deacon <will.deacon@arm.com>,
	Maynard Johnson <mpjohn@us.ibm.com>, Carl Love <carll@us.ibm.com>,
	Kay Sievers <kay.sievers@vrfy.org>,
	lkml <linux-kernel@vger.kernel.org>,
	Thomas Gleixner <tglx@linutronix.de>,
	Steven Rostedt <rostedt@goodmis.org>
Subject: Re: [rfc] Describe events in a structured way via sysfs
Date: Tue, 29 Jun 2010 10:55:32 +0200	[thread overview]
Message-ID: <20100629085532.GE22344@elte.hu> (raw)
In-Reply-To: <1277792114.5400.5.camel@minggr.sh.intel.com>


* Lin Ming <ming.m.lin@intel.com> wrote:

> On Fri, 2010-06-25 at 01:33 +0800, Ingo Molnar wrote:
> > * Johannes Berg <johannes@sipsolutions.net> wrote:
> > 
> > > On Thu, 2010-06-24 at 11:36 +0200, Ingo Molnar wrote:
> > > 
> > > > That's probably best achieved via a TRACE_EVENT() variant, by passing in the 
> > > > sysfs location.
> > > > 
> > > > It might even make sense to make this a part of TRACE_EVENT() itself and make 
> > > > 'NULL' the current default, non-sysfs-enumerated behavior. That way we can 
> > > > gradually (and non-intrusively) find all the right sysfs places for events.
> > > 
> > > No, this doesn't work. A lot of events are multi-instance. Say you have an 
> > > event for each USB device. This event would have to show up in many places 
> > > in sysfs, and each trace_foo() invocation needs to get the struct device 
> > > pointer, not just the TRACE_EVENT() definition. Additionally, to 
> > > create/destroy the sysfs pieces we need something like init_trace_foo(dev) 
> > > and destroy_trace_foo(dev) be called when the sysfs points for the device 
> > > should be created/destroyed.
> > 
> > Yes - but even this could be expressed via TRACE_EVENT(): by giving it a 
> > device-specific function pointer and then instantiating individual events from 
> > a single, central place in sysfs.
> > 
> > That is the place where we already know where it ends up in sysfs, and where 
> > the event-specific function can match up whether that particular node belongs 
> > to it and whether an additional event directory should be created for that 
> > particular sysfs node.
> > 
> > > The TRACE_EVENT() just defines the template, but such multi-instance events 
> > > really should be standardised in terms of their struct device (or maybe 
> > > kobject).
> > > 
> > > I think that needs some TRACE_DEVICE_EVENT macro that creates the required 
> > > inlines etc, and including the init/destroy that are called when the event 
> > > should show up in sysfs.
> > > 
> > > There's no way you can have the event show up in sysfs at the right spot 
> > > with _just_ a TRACE_EVENT macro, since at define time in the header file you 
> > > don't even have a valid struct device pointer.
> > 
> > That would be another possible way to do it - to explicitly create the events 
> > directory. It looks a bit simpler as we wouldnt have to touch TRACE_EVENT() 
> > and because it directly expresses the 'this node has an events directory' 
> > property at the place where we create the device node.
> 
> Let me take i915 tracepoints as an example.
> Do you mean something like below?
> 
> diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
> index 423dc90..9e7e4a0 100644
> --- a/drivers/gpu/drm/i915/i915_drv.c
> +++ b/drivers/gpu/drm/i915/i915_drv.c
> @@ -28,6 +28,7 @@
>   */
>  
>  #include <linux/device.h>
> +#include <linux/perf_event.h>
>  #include "drmP.h"
>  #include "drm.h"
>  #include "i915_drm.h"
> @@ -413,7 +414,17 @@ int i965_reset(struct drm_device *dev, u8 flags)
>  static int __devinit
>  i915_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
>  {
> -	return drm_get_dev(pdev, ent, &driver);
> +	struct kobject *kobj;
> +	int ret;
> +
> +	ret = drm_get_dev(pdev, ent, &driver);
> +
> +	if (!ret) {
> +		kobj = &pdev->dev.kobj;
> +		perf_sys_register_tp(kobj, "i915");
> +	}
> +
> +	return ret;

Yeah, something like that - assuming that this means that we'll add the events 
directory to the device directory, to all the 
/sys/bus/pci/drivers/i915/*/events/ driver directories right? (i havent 
checked the DRM code)

Small detail, it could be written a bit more compactly, like:

> +	int ret;
> +
> +	ret = drm_get_dev(pdev, ent, &driver);
> +	if (!ret)
> +		perf_sys_register_tp(&pdev->dev.kobj, "i915");
> +
> +	return ret;

Also, we can (optionally) consider 'generic', subsystem level events to also 
show up under:

   /sys/bus/pci/drivers/i915/events/

This would give a model to non-device-specific events to be listed one level 
higher in the sysfs hierarchy.

This too would be done in the driver, not by generic code. It's generally the 
driver which knows how the events should be categorized.

I'd imagine something similar for wireless drivers as well - most currently 
defined events would show up on a per device basis there.

Can you see practical problems with this scheme?

	Ingo

  reply	other threads:[~2010-06-29  8:56 UTC|newest]

Thread overview: 46+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-05-19  1:46 [RFC][PATCH v2 06/11] perf: core, export pmus via sysfs Lin Ming
2010-05-18 20:05 ` Greg KH
2010-05-19  2:34   ` Lin Ming
2010-05-19  2:48     ` Greg KH
2010-05-19  3:40       ` Lin Ming
2010-05-19  5:00         ` Greg KH
2010-05-19  6:32           ` Lin Ming
2010-05-19  7:14       ` Peter Zijlstra
2010-05-20 18:42         ` Greg KH
2010-05-20 19:52           ` Peter Zijlstra
2010-05-20 20:19             ` Greg KH
2010-05-20 20:14           ` Ingo Molnar
2010-05-20 23:12             ` Greg KH
2010-05-21  8:03               ` Peter Zijlstra
2010-05-21  9:40                 ` [rfc] Describe events in a structured way " Ingo Molnar
     [not found]                   ` <AANLkTinJeYJtCg2aRWhHTcf5E2-dN2-oAfEJ8tAtFjb9@mail.gmail.com>
2010-06-01  2:34                     ` Lin Ming
2010-06-08 18:43                       ` Ingo Molnar
     [not found]                   ` <AANLkTimf1Z0N9cv2Pu2qTTUscn4utC37zOPelCbqQoPv@mail.gmail.com>
2010-06-21  8:55                     ` Lin Ming
     [not found]                       ` <1277112858.3618.16.camel@jlt3.sipsolutions.net>
     [not found]                         ` <1277187920.4467.3.camel@minggr.sh.intel.com>
     [not found]                           ` <1277189971.3637.5.camel@jlt3.sipsolutions.net>
2010-06-22  7:22                             ` Lin Ming
2010-06-22  7:33                               ` Johannes Berg
2010-06-22  7:39                                 ` Johannes Berg
2010-06-22  8:04                                   ` Lin Ming
2010-06-22  8:16                                     ` Johannes Berg
2010-06-22  7:47                                 ` Lin Ming
2010-06-22  7:52                                   ` Johannes Berg
2010-06-24  9:36                                 ` Ingo Molnar
2010-06-24 16:14                                   ` Johannes Berg
2010-06-24 17:33                                     ` Ingo Molnar
2010-06-29  6:15                                       ` Lin Ming
2010-06-29  8:55                                         ` Ingo Molnar [this message]
2010-06-29  9:20                                           ` Lin Ming
2010-06-29 10:26                                             ` Ingo Molnar
2010-07-02  8:06                                               ` Lin Ming
2010-07-03 12:54                                                 ` Ingo Molnar
2010-07-17  0:20                                                 ` Corey Ashford
2010-07-20  5:48                                                   ` Lin Ming
2010-07-20 15:19                                                     ` Robert Richter
2010-07-20 17:50                                                       ` Corey Ashford
2010-07-20 18:30                                                         ` Robert Richter
2010-07-20 21:18                                                           ` Corey Ashford
2010-07-20 17:43                                                     ` Corey Ashford
2010-05-19  7:06     ` [RFC][PATCH v2 06/11] perf: core, export pmus " Borislav Petkov
2010-05-19  7:17       ` Peter Zijlstra
2010-05-19  7:23         ` Ingo Molnar
2010-05-18 20:07 ` Greg KH
2010-05-19  2:37   ` Lin Ming

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20100629085532.GE22344@elte.hu \
    --to=mingo@elte.hu \
    --cc=Gary.Mohr@bull.com \
    --cc=acme@redhat.com \
    --cc=arjan@linux.intel.com \
    --cc=carll@us.ibm.com \
    --cc=cjashfor@linux.vnet.ibm.com \
    --cc=davem@davemloft.net \
    --cc=eranian@gmail.com \
    --cc=fweisbec@gmail.com \
    --cc=greg@kroah.com \
    --cc=johannes@sipsolutions.net \
    --cc=kay.sievers@vrfy.org \
    --cc=lethal@linux-sh.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=ming.m.lin@intel.com \
    --cc=mpjohn@us.ibm.com \
    --cc=paulus@samba.org \
    --cc=peterz@infradead.org \
    --cc=rmk+kernel@arm.linux.org.uk \
    --cc=rostedt@goodmis.org \
    --cc=tglx@linutronix.de \
    --cc=will.deacon@arm.com \
    --cc=yanmin_zhang@linux.intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).