linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "Wangnan (F)" <wangnan0@huawei.com>
To: Arnaldo Carvalho de Melo <acme@kernel.org>
Cc: <linux-kernel@vger.kernel.org>, <pi3orama@163.com>,
	He Kuang <hekuang@huawei.com>, Jiri Olsa <jolsa@kernel.org>,
	Masami Hiramatsu <mhiramat@kernel.org>,
	Namhyung Kim <namhyung@kernel.org>, Zefan Li <lizefan@huawei.com>
Subject: Re: [PATCH v8 2/8] perf evlist: Introduce aux evlist
Date: Tue, 21 Jun 2016 09:31:12 +0800	[thread overview]
Message-ID: <576898E0.2060101@huawei.com> (raw)
In-Reply-To: <20160620203622.GB8411@kernel.org>



On 2016/6/21 4:36, Arnaldo Carvalho de Melo wrote:
> Em Mon, Jun 20, 2016 at 10:47:19AM +0000, Wang Nan escreveu:
>> An auxiliary evlist is created by perf_evlist__new_aux() using an
>> existing evlist as its parent. An auxiliary evlist can have its own
>> 'struct perf_mmap', but can't have any other data. User should use its
>> parent instead when accessing other data.
>>
>> Auxiliary evlists are containers of 'struct perf_mmap'. It is introduced
>> to allow its parent evlist to map different events into separated mmaps.
>>
>> Following commits create an auxiliary evlist for overwritable
>> events, because overwritable events need a read only and backwards ring
>> buffer, which is different from normal events.
>>
>> To achieve this goal, this patch carefully changes 'evlist' to
>> 'evlist->parent' in all functions in the path of 'perf_evlist__mmap_ex',
>> except 'evlist->mmap' related operations, to make sure all evlist
>> modifications (like pollfd and event id hash tables) goes to original
>> evlist.
>>
>> A 'evlist->parent' pointer is added to 'struct perf_evlist' and points to
>> the evlist itself for normal evlists.
>>
>> Children of one evlist are linked into it so one can find all children
>> from its parent.
>> To avoid potential complexity, forbid creating aux evlist from another
>> aux evlist.
>>
>> Improve perf_evlist__munmap_filtered(), so when recording, if an event
>> is terminated, unmap mmaps, from parent and children.
>   
>> Signed-off-by: Wang Nan <wangnan0@huawei.com>
>> Cc: He Kuang <hekuang@huawei.com>
>> Cc: Jiri Olsa <jolsa@kernel.org>
>> Cc: Masami Hiramatsu <mhiramat@kernel.org>
>> Cc: Namhyung Kim <namhyung@kernel.org>
>> Cc: Zefan Li <lizefan@huawei.com>
>> Cc: pi3orama@163.com
>> ---
>>   tools/perf/util/evlist.c | 49 +++++++++++++++++++++++++++++++++++++-----------
>>   tools/perf/util/evlist.h | 12 ++++++++++++
>>   2 files changed, 50 insertions(+), 11 deletions(-)

[SNIP]

>> diff --git a/tools/perf/util/evlist.h b/tools/perf/util/evlist.h
>> index 68cb136..5b50692 100644
>> --- a/tools/perf/util/evlist.h
>> +++ b/tools/perf/util/evlist.h
>> @@ -37,6 +37,10 @@ struct perf_mmap {
>>   
>>   struct perf_evlist {
>>   	struct list_head entries;
>> +	union {
>> +		struct list_head children;
>> +		struct list_head list;
> This is something new, right, i.e. having a list of evlists from a
> parent evlist, one where there can be at most one level, i.e. no
> grandchildrens...
>
> Is this strictly needed? I.e. the existing code calling
> perf_evlist__munmap_filtered() has just the parent pointer and thus, to
> not change it we need to have a way to go the children?
>
> Also, can you se a parent with more than one child?

If we further restrict aux evlist and parent list, allow only one aux
evlist for a parent, we can avoid the linked list. Simply linking parent
and child using pointers would be enough.

However, I plan to introduce multiple children for a parent. There are
two possible aux evlists:

   1. Trigger aux evlist: we can use BPF script to measure events, and 
do something
      (dumpping, printing, computing, reporting...) when it detect something
      (for example, FPS drop to 10 frames/sec). We can create a bpf-output
      event and put it in a separated aux evlist with buffering turned off,
      so once BPF script generate a event perf receives it immediately.

   2. Non-sampling aux evlist: we can use a dummy event to collect fork, 
comm
      and mmap{,2} events in a separated aux evlist. We can use this 
evlist to
      maintain system state during recording, so we can totally solve 
the problem
      describe in patch 8/8.

Thank you.

  reply	other threads:[~2016-06-21  1:32 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-06-20 10:47 [PATCH v8 0/8] perf tools: Support overwritable ring buffer Wang Nan
2016-06-20 10:47 ` [PATCH v8 1/8] perf tools: Fix write_backwards fallback Wang Nan
2016-06-20 10:47 ` [PATCH v8 2/8] perf evlist: Introduce aux evlist Wang Nan
2016-06-20 20:36   ` Arnaldo Carvalho de Melo
2016-06-21  1:31     ` Wangnan (F) [this message]
2016-06-20 10:47 ` [PATCH v8 3/8] perf tests: Add testcase for auxiliary evlist Wang Nan
2016-06-21 21:05   ` Arnaldo Carvalho de Melo
2016-06-22  4:10     ` Wangnan (F)
2016-06-20 10:47 ` [PATCH v8 4/8] perf record: Introduce rec->overwrite_evlist for overwritable events Wang Nan
2016-06-21 21:30   ` Arnaldo Carvalho de Melo
2016-06-20 10:47 ` [PATCH v8 5/8] perf record: Toggle overwrite ring buffer for reading Wang Nan
2016-06-20 10:47 ` [PATCH v8 6/8] perf tools: Enable overwrite settings Wang Nan
2016-06-21 21:49   ` Arnaldo Carvalho de Melo
2016-06-20 10:47 ` [PATCH v8 7/8] perf tools: Don't warn about out of order event if write_backward is used Wang Nan
2016-06-20 10:47 ` [PATCH v8 8/8] perf tools: Add --tail-synthesize option Wang Nan
  -- strict thread matches above, loose matches on Subject: below --
2016-06-15  2:23 [PATCH v7 0/8] perf tools: Support overwritable ring buffer Wang Nan
2016-06-15  2:23 ` [PATCH v7 1/8] perf evlist: Introduce aux evlist Wang Nan
2016-06-15  2:23 ` [PATCH v7 2/8] perf tests: Add testcase for auxiliary evlist Wang Nan
2016-06-15  2:23 ` [PATCH v7 3/8] perf record: Introduce rec->overwrite_evlist for overwritable events Wang Nan
2016-06-15  2:23 ` [PATCH v7 4/8] perf record: Toggle overwrite ring buffer for reading Wang Nan
2016-06-15  2:23 ` [PATCH v7 5/8] perf tools: Enable overwrite settings Wang Nan
2016-06-15  2:23 ` [PATCH v7 6/8] perf tools: Don't warn about out of order event if write_backward is used Wang Nan
2016-06-15  2:23 ` [PATCH v7 7/8] perf tools: Check write_backward during evlist config Wang Nan
2016-06-16 21:47   ` Arnaldo Carvalho de Melo
2016-06-20  4:09     ` Wangnan (F)
2016-06-22  7:43     ` [tip:perf/core] perf evsel: Fix write_backwards fallback tip-bot for Arnaldo Carvalho de Melo
2016-06-15  2:23 ` [PATCH v7 8/8] perf record: Unmap overwrite evlist when event terminate Wang Nan
2016-06-16 20:59   ` Arnaldo Carvalho de Melo
2016-06-20  8:04     ` Wangnan (F)

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=576898E0.2060101@huawei.com \
    --to=wangnan0@huawei.com \
    --cc=acme@kernel.org \
    --cc=hekuang@huawei.com \
    --cc=jolsa@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=lizefan@huawei.com \
    --cc=mhiramat@kernel.org \
    --cc=namhyung@kernel.org \
    --cc=pi3orama@163.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).