From: Arnaldo Carvalho de Melo <acme@infradead.org>
To: Ingo Molnar <mingo@kernel.org>
Cc: linux-kernel@vger.kernel.org,
Arnaldo Carvalho de Melo <acme@redhat.com>,
Adrian Hunter <adrian.hunter@intel.com>,
David Ahern <dsahern@gmail.com>,
Frederic Weisbecker <fweisbec@gmail.com>,
Jiri Olsa <jolsa@redhat.com>, Mike Galbraith <efault@gmx.de>,
Paul Mackerras <paulus@samba.org>,
Peter Zijlstra <peterz@infradead.org>,
Stephane Eranian <eranian@google.com>
Subject: [PATCH 109/161] perf trace: Show path associated with fd in live sessions
Date: Mon, 14 Oct 2013 17:01:38 -0300 [thread overview]
Message-ID: <1381780950-25642-110-git-send-email-acme@infradead.org> (raw)
In-Reply-To: <1381780950-25642-1-git-send-email-acme@infradead.org>
From: Arnaldo Carvalho de Melo <acme@redhat.com>
For live sessions we can just access /proc to map an fd to its path, on
a best effort way, i.e. sometimes the fd will have gone away when we try
to do the mapping, as it is done in a lazy way, only when a reference to
such fd is made then the path will be looked up in /proc.
This is disabled when processing perf.data files, where we will have to
have a way to get getname events, be it via an on-the-fly 'perf probe'
event or after a vfs_getname tracepoint is added to the kernel.
A first step will be to synthesize such event for the use cases where
the threads in the monitored workload exist already.
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Mike Galbraith <efault@gmx.de>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/n/tip-1r1ti33ye1666jezu2d8q1c3@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
tools/perf/builtin-trace.c | 253 ++++++++++++++++++++++++++++++++++++++++++---
1 file changed, 237 insertions(+), 16 deletions(-)
diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c
index 12a275d02ada..fcc157fce6c6 100644
--- a/tools/perf/builtin-trace.c
+++ b/tools/perf/builtin-trace.c
@@ -36,6 +36,8 @@
struct syscall_arg {
unsigned long val;
+ struct thread *thread;
+ struct trace *trace;
void *parm;
u8 idx;
u8 mask;
@@ -65,6 +67,29 @@ static size_t syscall_arg__scnprintf_strarray(char *bf, size_t size,
#define SCA_STRARRAY syscall_arg__scnprintf_strarray
+static size_t syscall_arg__scnprintf_fd(char *bf, size_t size,
+ struct syscall_arg *arg);
+
+#define SCA_FD syscall_arg__scnprintf_fd
+
+static size_t syscall_arg__scnprintf_fd_at(char *bf, size_t size,
+ struct syscall_arg *arg)
+{
+ int fd = arg->val;
+
+ if (fd == AT_FDCWD)
+ return scnprintf(bf, size, "CWD");
+
+ return syscall_arg__scnprintf_fd(bf, size, arg);
+}
+
+#define SCA_FDAT syscall_arg__scnprintf_fd_at
+
+static size_t syscall_arg__scnprintf_close_fd(char *bf, size_t size,
+ struct syscall_arg *arg);
+
+#define SCA_CLOSE_FD syscall_arg__scnprintf_close_fd
+
static size_t syscall_arg__scnprintf_hex(char *bf, size_t size,
struct syscall_arg *arg)
{
@@ -613,28 +638,84 @@ static struct syscall_fmt {
{ .name = "brk", .hexret = true,
.arg_scnprintf = { [0] = SCA_HEX, /* brk */ }, },
{ .name = "clock_gettime", .errmsg = true, STRARRAY(0, clk_id, clockid), },
+ { .name = "close", .errmsg = true,
+ .arg_scnprintf = { [0] = SCA_CLOSE_FD, /* fd */ }, },
{ .name = "connect", .errmsg = true, },
+ { .name = "dup", .errmsg = true,
+ .arg_scnprintf = { [0] = SCA_FD, /* fd */ }, },
+ { .name = "dup2", .errmsg = true,
+ .arg_scnprintf = { [0] = SCA_FD, /* fd */ }, },
+ { .name = "dup3", .errmsg = true,
+ .arg_scnprintf = { [0] = SCA_FD, /* fd */ }, },
{ .name = "epoll_ctl", .errmsg = true, STRARRAY(1, op, epoll_ctl_ops), },
{ .name = "eventfd2", .errmsg = true,
.arg_scnprintf = { [1] = SCA_EFD_FLAGS, /* flags */ }, },
- { .name = "fcntl", .errmsg = true, STRARRAY(1, cmd, fcntl_cmds), },
+ { .name = "faccessat", .errmsg = true,
+ .arg_scnprintf = { [0] = SCA_FDAT, /* dfd */ }, },
+ { .name = "fadvise64", .errmsg = true,
+ .arg_scnprintf = { [0] = SCA_FD, /* fd */ }, },
+ { .name = "fallocate", .errmsg = true,
+ .arg_scnprintf = { [0] = SCA_FD, /* fd */ }, },
+ { .name = "fchdir", .errmsg = true,
+ .arg_scnprintf = { [0] = SCA_FD, /* fd */ }, },
+ { .name = "fchmod", .errmsg = true,
+ .arg_scnprintf = { [0] = SCA_FD, /* fd */ }, },
+ { .name = "fchmodat", .errmsg = true,
+ .arg_scnprintf = { [0] = SCA_FDAT, /* fd */ }, },
+ { .name = "fchown", .errmsg = true,
+ .arg_scnprintf = { [0] = SCA_FD, /* fd */ }, },
+ { .name = "fchownat", .errmsg = true,
+ .arg_scnprintf = { [0] = SCA_FDAT, /* fd */ }, },
+ { .name = "fcntl", .errmsg = true,
+ .arg_scnprintf = { [0] = SCA_FD, /* fd */
+ [1] = SCA_STRARRAY, /* cmd */ },
+ .arg_parm = { [1] = &strarray__fcntl_cmds, /* cmd */ }, },
+ { .name = "fdatasync", .errmsg = true,
+ .arg_scnprintf = { [0] = SCA_FD, /* fd */ }, },
{ .name = "flock", .errmsg = true,
- .arg_scnprintf = { [1] = SCA_FLOCK, /* cmd */ }, },
- { .name = "fstat", .errmsg = true, .alias = "newfstat", },
- { .name = "fstatat", .errmsg = true, .alias = "newfstatat", },
+ .arg_scnprintf = { [0] = SCA_FD, /* fd */
+ [1] = SCA_FLOCK, /* cmd */ }, },
+ { .name = "fsetxattr", .errmsg = true,
+ .arg_scnprintf = { [0] = SCA_FD, /* fd */ }, },
+ { .name = "fstat", .errmsg = true, .alias = "newfstat",
+ .arg_scnprintf = { [0] = SCA_FD, /* fd */ }, },
+ { .name = "fstatat", .errmsg = true, .alias = "newfstatat",
+ .arg_scnprintf = { [0] = SCA_FDAT, /* dfd */ }, },
+ { .name = "fstatfs", .errmsg = true,
+ .arg_scnprintf = { [0] = SCA_FD, /* fd */ }, },
+ { .name = "fsync", .errmsg = true,
+ .arg_scnprintf = { [0] = SCA_FD, /* fd */ }, },
+ { .name = "ftruncate", .errmsg = true,
+ .arg_scnprintf = { [0] = SCA_FD, /* fd */ }, },
{ .name = "futex", .errmsg = true,
.arg_scnprintf = { [1] = SCA_FUTEX_OP, /* op */ }, },
+ { .name = "futimesat", .errmsg = true,
+ .arg_scnprintf = { [0] = SCA_FDAT, /* fd */ }, },
+ { .name = "getdents", .errmsg = true,
+ .arg_scnprintf = { [0] = SCA_FD, /* fd */ }, },
+ { .name = "getdents64", .errmsg = true,
+ .arg_scnprintf = { [0] = SCA_FD, /* fd */ }, },
{ .name = "getitimer", .errmsg = true, STRARRAY(0, which, itimers), },
{ .name = "getrlimit", .errmsg = true, STRARRAY(0, resource, rlimit_resources), },
{ .name = "ioctl", .errmsg = true,
- .arg_scnprintf = { [2] = SCA_HEX, /* arg */ }, },
+ .arg_scnprintf = { [0] = SCA_FD, /* fd */
+ [2] = SCA_HEX, /* arg */ }, },
{ .name = "kill", .errmsg = true,
.arg_scnprintf = { [1] = SCA_SIGNUM, /* sig */ }, },
- { .name = "lseek", .errmsg = true, STRARRAY(2, whence, whences), },
+ { .name = "linkat", .errmsg = true,
+ .arg_scnprintf = { [0] = SCA_FDAT, /* fd */ }, },
+ { .name = "lseek", .errmsg = true,
+ .arg_scnprintf = { [0] = SCA_FD, /* fd */
+ [2] = SCA_STRARRAY, /* whence */ },
+ .arg_parm = { [2] = &strarray__whences, /* whence */ }, },
{ .name = "lstat", .errmsg = true, .alias = "newlstat", },
{ .name = "madvise", .errmsg = true,
.arg_scnprintf = { [0] = SCA_HEX, /* start */
[2] = SCA_MADV_BHV, /* behavior */ }, },
+ { .name = "mkdirat", .errmsg = true,
+ .arg_scnprintf = { [0] = SCA_FDAT, /* fd */ }, },
+ { .name = "mknodat", .errmsg = true,
+ .arg_scnprintf = { [0] = SCA_FDAT, /* fd */ }, },
{ .name = "mlock", .errmsg = true,
.arg_scnprintf = { [0] = SCA_HEX, /* addr */ }, },
{ .name = "mlockall", .errmsg = true,
@@ -653,26 +734,45 @@ static struct syscall_fmt {
.arg_scnprintf = { [0] = SCA_HEX, /* addr */ }, },
{ .name = "munmap", .errmsg = true,
.arg_scnprintf = { [0] = SCA_HEX, /* addr */ }, },
+ { .name = "name_to_handle_at", .errmsg = true,
+ .arg_scnprintf = { [0] = SCA_FDAT, /* dfd */ }, },
+ { .name = "newfstatat", .errmsg = true,
+ .arg_scnprintf = { [0] = SCA_FDAT, /* dfd */ }, },
{ .name = "open", .errmsg = true,
.arg_scnprintf = { [1] = SCA_OPEN_FLAGS, /* flags */ }, },
{ .name = "open_by_handle_at", .errmsg = true,
- .arg_scnprintf = { [2] = SCA_OPEN_FLAGS, /* flags */ }, },
+ .arg_scnprintf = { [0] = SCA_FDAT, /* dfd */
+ [2] = SCA_OPEN_FLAGS, /* flags */ }, },
{ .name = "openat", .errmsg = true,
- .arg_scnprintf = { [2] = SCA_OPEN_FLAGS, /* flags */ }, },
+ .arg_scnprintf = { [0] = SCA_FDAT, /* dfd */
+ [2] = SCA_OPEN_FLAGS, /* flags */ }, },
{ .name = "pipe2", .errmsg = true,
.arg_scnprintf = { [1] = SCA_PIPE_FLAGS, /* flags */ }, },
{ .name = "poll", .errmsg = true, .timeout = true, },
{ .name = "ppoll", .errmsg = true, .timeout = true, },
- { .name = "pread", .errmsg = true, .alias = "pread64", },
+ { .name = "pread", .errmsg = true, .alias = "pread64",
+ .arg_scnprintf = { [0] = SCA_FD, /* fd */ }, },
+ { .name = "preadv", .errmsg = true, .alias = "pread",
+ .arg_scnprintf = { [0] = SCA_FD, /* fd */ }, },
{ .name = "prlimit64", .errmsg = true, STRARRAY(1, resource, rlimit_resources), },
- { .name = "pwrite", .errmsg = true, .alias = "pwrite64", },
- { .name = "read", .errmsg = true, },
+ { .name = "pwrite", .errmsg = true, .alias = "pwrite64",
+ .arg_scnprintf = { [0] = SCA_FD, /* fd */ }, },
+ { .name = "pwritev", .errmsg = true,
+ .arg_scnprintf = { [0] = SCA_FD, /* fd */ }, },
+ { .name = "read", .errmsg = true,
+ .arg_scnprintf = { [0] = SCA_FD, /* fd */ }, },
+ { .name = "readlinkat", .errmsg = true,
+ .arg_scnprintf = { [0] = SCA_FDAT, /* dfd */ }, },
+ { .name = "readv", .errmsg = true,
+ .arg_scnprintf = { [0] = SCA_FD, /* fd */ }, },
{ .name = "recvfrom", .errmsg = true,
.arg_scnprintf = { [3] = SCA_MSG_FLAGS, /* flags */ }, },
{ .name = "recvmmsg", .errmsg = true,
.arg_scnprintf = { [3] = SCA_MSG_FLAGS, /* flags */ }, },
{ .name = "recvmsg", .errmsg = true,
.arg_scnprintf = { [2] = SCA_MSG_FLAGS, /* flags */ }, },
+ { .name = "renameat", .errmsg = true,
+ .arg_scnprintf = { [0] = SCA_FDAT, /* dfd */ }, },
{ .name = "rt_sigaction", .errmsg = true,
.arg_scnprintf = { [0] = SCA_SIGNUM, /* sig */ }, },
{ .name = "rt_sigprocmask", .errmsg = true, STRARRAY(0, how, sighow), },
@@ -689,6 +789,8 @@ static struct syscall_fmt {
.arg_scnprintf = { [3] = SCA_MSG_FLAGS, /* flags */ }, },
{ .name = "setitimer", .errmsg = true, STRARRAY(0, which, itimers), },
{ .name = "setrlimit", .errmsg = true, STRARRAY(0, resource, rlimit_resources), },
+ { .name = "shutdown", .errmsg = true,
+ .arg_scnprintf = { [0] = SCA_FD, /* fd */ }, },
{ .name = "socket", .errmsg = true,
.arg_scnprintf = { [0] = SCA_STRARRAY, /* family */
[1] = SCA_SK_TYPE, /* type */ },
@@ -698,11 +800,21 @@ static struct syscall_fmt {
[1] = SCA_SK_TYPE, /* type */ },
.arg_parm = { [0] = &strarray__socket_families, /* family */ }, },
{ .name = "stat", .errmsg = true, .alias = "newstat", },
+ { .name = "symlinkat", .errmsg = true,
+ .arg_scnprintf = { [0] = SCA_FDAT, /* dfd */ }, },
{ .name = "tgkill", .errmsg = true,
.arg_scnprintf = { [2] = SCA_SIGNUM, /* sig */ }, },
{ .name = "tkill", .errmsg = true,
.arg_scnprintf = { [1] = SCA_SIGNUM, /* sig */ }, },
{ .name = "uname", .errmsg = true, .alias = "newuname", },
+ { .name = "unlinkat", .errmsg = true,
+ .arg_scnprintf = { [0] = SCA_FDAT, /* dfd */ }, },
+ { .name = "utimensat", .errmsg = true,
+ .arg_scnprintf = { [0] = SCA_FDAT, /* dirfd */ }, },
+ { .name = "write", .errmsg = true,
+ .arg_scnprintf = { [0] = SCA_FD, /* fd */ }, },
+ { .name = "writev", .errmsg = true,
+ .arg_scnprintf = { [0] = SCA_FD, /* fd */ }, },
};
static int syscall_fmt__cmp(const void *name, const void *fmtp)
@@ -747,11 +859,20 @@ struct thread_trace {
unsigned long nr_events;
char *entry_str;
double runtime_ms;
+ struct {
+ int max;
+ char **table;
+ } paths;
};
static struct thread_trace *thread_trace__new(void)
{
- return zalloc(sizeof(struct thread_trace));
+ struct thread_trace *ttrace = zalloc(sizeof(struct thread_trace));
+
+ if (ttrace)
+ ttrace->paths.max = -1;
+
+ return ttrace;
}
static struct thread_trace *thread__trace(struct thread *thread, FILE *fp)
@@ -792,6 +913,7 @@ struct trace {
unsigned long nr_events;
struct strlist *ev_qualifier;
bool not_ev_qualifier;
+ bool live;
struct intlist *tid_list;
struct intlist *pid_list;
bool sched;
@@ -801,6 +923,98 @@ struct trace {
double runtime_ms;
};
+static int thread__read_fd_path(struct thread *thread, int fd)
+{
+ struct thread_trace *ttrace = thread->priv;
+ char linkname[PATH_MAX], pathname[PATH_MAX];
+ struct stat st;
+ int ret;
+
+ if (thread->pid_ == thread->tid) {
+ scnprintf(linkname, sizeof(linkname),
+ "/proc/%d/fd/%d", thread->pid_, fd);
+ } else {
+ scnprintf(linkname, sizeof(linkname),
+ "/proc/%d/task/%d/fd/%d", thread->pid_, thread->tid, fd);
+ }
+
+ if (lstat(linkname, &st) < 0 || st.st_size + 1 > (off_t)sizeof(pathname))
+ return -1;
+
+ ret = readlink(linkname, pathname, sizeof(pathname));
+
+ if (ret < 0 || ret > st.st_size)
+ return -1;
+
+ pathname[ret] = '\0';
+
+ if (fd > ttrace->paths.max) {
+ char **npath = realloc(ttrace->paths.table, (fd + 1) * sizeof(char *));
+
+ if (npath == NULL)
+ return -1;
+
+ if (ttrace->paths.max != -1) {
+ memset(npath + ttrace->paths.max + 1, 0,
+ (fd - ttrace->paths.max) * sizeof(char *));
+ } else {
+ memset(npath, 0, (fd + 1) * sizeof(char *));
+ }
+
+ ttrace->paths.table = npath;
+ ttrace->paths.max = fd;
+ }
+
+ ttrace->paths.table[fd] = strdup(pathname);
+
+ return ttrace->paths.table[fd] != NULL ? 0 : -1;
+}
+
+static const char *thread__fd_path(struct thread *thread, int fd, bool live)
+{
+ struct thread_trace *ttrace = thread->priv;
+
+ if (ttrace == NULL)
+ return NULL;
+
+ if (fd < 0)
+ return NULL;
+
+ if ((fd > ttrace->paths.max || ttrace->paths.table[fd] == NULL) &&
+ (!live || thread__read_fd_path(thread, fd)))
+ return NULL;
+
+ return ttrace->paths.table[fd];
+}
+
+static size_t syscall_arg__scnprintf_fd(char *bf, size_t size,
+ struct syscall_arg *arg)
+{
+ int fd = arg->val;
+ size_t printed = scnprintf(bf, size, "%d", fd);
+ const char *path = thread__fd_path(arg->thread, fd, arg->trace->live);
+
+ if (path)
+ printed += scnprintf(bf + printed, size - printed, "<%s>", path);
+
+ return printed;
+}
+
+static size_t syscall_arg__scnprintf_close_fd(char *bf, size_t size,
+ struct syscall_arg *arg)
+{
+ int fd = arg->val;
+ size_t printed = syscall_arg__scnprintf_fd(bf, size, arg);
+ struct thread_trace *ttrace = arg->thread->priv;
+
+ if (ttrace && fd >= 0 && fd <= ttrace->paths.max) {
+ free(ttrace->paths.table[fd]);
+ ttrace->paths.table[fd] = NULL;
+ }
+
+ return printed;
+}
+
static bool trace__filter_duration(struct trace *trace, double t)
{
return t < (trace->duration_filter * NSEC_PER_MSEC);
@@ -969,7 +1183,8 @@ static int trace__read_syscall_info(struct trace *trace, int id)
}
static size_t syscall__scnprintf_args(struct syscall *sc, char *bf, size_t size,
- unsigned long *args)
+ unsigned long *args, struct trace *trace,
+ struct thread *thread)
{
size_t printed = 0;
@@ -977,8 +1192,10 @@ static size_t syscall__scnprintf_args(struct syscall *sc, char *bf, size_t size,
struct format_field *field;
u8 bit = 1;
struct syscall_arg arg = {
- .idx = 0,
- .mask = 0,
+ .idx = 0,
+ .mask = 0,
+ .trace = trace,
+ .thread = thread,
};
for (field = sc->tp_format->format.fields->next; field;
@@ -1111,7 +1328,8 @@ static int trace__sys_enter(struct trace *trace, struct perf_evsel *evsel,
msg = ttrace->entry_str;
printed += scnprintf(msg + printed, 1024 - printed, "%s(", sc->name);
- printed += syscall__scnprintf_args(sc, msg + printed, 1024 - printed, args);
+ printed += syscall__scnprintf_args(sc, msg + printed, 1024 - printed,
+ args, trace, thread);
if (!strcmp(sc->name, "exit_group") || !strcmp(sc->name, "exit")) {
if (!trace->duration_filter) {
@@ -1292,6 +1510,8 @@ static int trace__run(struct trace *trace, int argc, const char **argv)
unsigned long before;
const bool forks = argc > 0;
+ trace->live = true;
+
if (evlist == NULL) {
fprintf(trace->output, "Not enough memory to run!\n");
goto out;
@@ -1423,6 +1643,7 @@ out_delete_maps:
out_delete_evlist:
perf_evlist__delete(evlist);
out:
+ trace->live = false;
return err;
}
--
1.8.1.4
next prev parent reply other threads:[~2013-10-14 20:12 UTC|newest]
Thread overview: 163+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-10-14 19:59 [GIT PULL 000/161] perf/core improvements and fixes Arnaldo Carvalho de Melo
2013-10-14 19:59 ` [PATCH 001/161] tools/perf: Standardize feature support define names to: HAVE_{FEATURE}_SUPPORT Arnaldo Carvalho de Melo
2013-10-14 19:59 ` [PATCH 002/161] tools/perf/build: Add feature check core code Arnaldo Carvalho de Melo
2013-10-14 19:59 ` [PATCH 003/161] tools/perf/build: Add 'autodep' functionality, generate feature test dependencies automatically Arnaldo Carvalho de Melo
2013-10-14 19:59 ` [PATCH 004/161] tools/perf/build: Split out feature check: 'libnuma' Arnaldo Carvalho de Melo
2013-10-14 19:59 ` [PATCH 005/161] tools/perf/build: Split out feature check: 'stackprotector-all' Arnaldo Carvalho de Melo
2013-10-14 19:59 ` [PATCH 006/161] tools/perf/build: Split out feature check: 'stackprotector' Arnaldo Carvalho de Melo
2013-10-14 19:59 ` [PATCH 007/161] tools/perf/build: Split out feature check: 'volatile-register-var' Arnaldo Carvalho de Melo
2013-10-14 19:59 ` [PATCH 008/161] tools/perf/build: Split out feature check: 'fortify-source' Arnaldo Carvalho de Melo
2013-10-14 19:59 ` [PATCH 009/161] tools/perf/build: Split out feature check: 'bionic' Arnaldo Carvalho de Melo
2013-10-14 19:59 ` [PATCH 010/161] tools/perf/build: Clean up the libelf logic in config/Makefile Arnaldo Carvalho de Melo
2013-10-14 20:00 ` [PATCH 011/161] tools/perf/build: Split out feature check: 'libelf' Arnaldo Carvalho de Melo
2013-10-14 20:00 ` [PATCH 012/161] tools/perf/build: Split out feature check: 'glibc' Arnaldo Carvalho de Melo
2013-10-14 20:00 ` [PATCH 013/161] tools/perf/build: Split out feature check: 'dwarf' Arnaldo Carvalho de Melo
2013-10-14 20:00 ` [PATCH 014/161] tools/perf/build: Clean up the mmap logic in config/Makefile Arnaldo Carvalho de Melo
2013-10-14 20:00 ` [PATCH 015/161] tools/perf/build: Split out feature check: 'libelf-mmap' Arnaldo Carvalho de Melo
2013-10-14 20:00 ` [PATCH 016/161] tools/perf/build: Split out feature check: 'libelf-getphdrnum' Arnaldo Carvalho de Melo
2013-10-14 20:00 ` [PATCH 017/161] tools/perf/build: Clean up the libunwind logic in config/Makefile Arnaldo Carvalho de Melo
2013-10-14 20:00 ` [PATCH 018/161] tools/perf/build: Split out feature check: 'libunwind' Arnaldo Carvalho de Melo
2013-10-14 20:00 ` [PATCH 019/161] tools/perf/build: Split out feature check: 'libaudit' Arnaldo Carvalho de Melo
2013-10-14 20:00 ` [PATCH 020/161] tools/perf/build: Split out feature check: 'libslang' Arnaldo Carvalho de Melo
2013-10-14 20:00 ` [PATCH 021/161] tools/perf/build: Split out feature check: 'gtk2' Arnaldo Carvalho de Melo
2013-10-14 20:00 ` [PATCH 022/161] tools/perf/build: Split out feature check: 'gtk2-infobar' Arnaldo Carvalho de Melo
2013-10-14 20:00 ` [PATCH 023/161] tools/perf/build: Split out feature check: 'libperl' Arnaldo Carvalho de Melo
2013-10-14 20:00 ` [PATCH 024/161] tools/perf/build: Split out feature check: 'libpython' Arnaldo Carvalho de Melo
2013-10-14 20:00 ` [PATCH 025/161] tools/perf/build: Split out feature check: 'libpython-version' Arnaldo Carvalho de Melo
2013-10-14 20:00 ` [PATCH 026/161] tools/perf/build: Split out feature check: 'libbfd' Arnaldo Carvalho de Melo
2013-10-14 20:00 ` [PATCH 027/161] tools/perf/build: Split out feature check: 'strlcpy' Arnaldo Carvalho de Melo
2013-10-14 20:00 ` [PATCH 028/161] tools/perf/build: Split out feature check: 'on-exit' Arnaldo Carvalho de Melo
2013-10-14 20:00 ` [PATCH 029/161] tools/perf/build: Split out feature check: 'backtrace' Arnaldo Carvalho de Melo
2013-10-14 20:00 ` [PATCH 030/161] tools/perf: Clean up util/include/linux/compiler.h Arnaldo Carvalho de Melo
2013-10-14 20:00 ` [PATCH 031/161] tools/perf: Turn strlcpy() into a __weak function Arnaldo Carvalho de Melo
2013-10-14 20:00 ` [PATCH 032/161] tools/perf/build: Speed up auto-detection of features by adding a 'test-all' target Arnaldo Carvalho de Melo
2013-10-14 20:00 ` [PATCH 033/161] tools/perf/build: Speed up git-version test on re-make Arnaldo Carvalho de Melo
2013-10-14 20:00 ` [PATCH 034/161] tools/perf/build: Speed up the final link Arnaldo Carvalho de Melo
2013-10-14 20:00 ` [PATCH 035/161] tools/perf: Fix double/triple-build of the feature detection logic during 'make install' et al Arnaldo Carvalho de Melo
2013-10-14 20:00 ` [PATCH 036/161] tools/perf/build: Invoke feature-checks 'clean' target from the main Makefile Arnaldo Carvalho de Melo
2013-10-14 20:00 ` [PATCH 037/161] tools/perf/build: Speed up auto-detection Arnaldo Carvalho de Melo
2013-10-14 20:00 ` [PATCH 038/161] tools/perf/build: Improve printout-of auto-detected features Arnaldo Carvalho de Melo
2013-10-14 20:00 ` [PATCH 039/161] tools/perf/build: Automatically build in parallel, based on number of CPUs in the system Arnaldo Carvalho de Melo
2013-10-14 20:00 ` [PATCH 040/161] tools/perf/build: Flip Makefile.parallel and Makefile.perf Arnaldo Carvalho de Melo
2013-10-14 20:00 ` [PATCH 041/161] tools/perf/build: Standardize the various messages output by parallel make Arnaldo Carvalho de Melo
2013-10-14 20:00 ` [PATCH 042/161] tools/perf/build: Split out feature checks: 'liberty', 'liberty-z', 'cplus-demangle' Arnaldo Carvalho de Melo
2013-10-14 20:00 ` [PATCH 043/161] tools/perf/build: Remove unused config/feature-tests.mak Arnaldo Carvalho de Melo
2013-10-14 20:00 ` [PATCH 044/161] tools/perf/build: Clean up various testcases Arnaldo Carvalho de Melo
2013-10-14 20:00 ` [PATCH 045/161] tools/perf/build: Collapse the test-all.c testcase Arnaldo Carvalho de Melo
2013-10-14 20:00 ` [PATCH 046/161] tools/perf/build: Pass through all targets to Makefile.perf Arnaldo Carvalho de Melo
2013-10-14 20:00 ` [PATCH 047/161] tools/perf/build: Make sure autodep feature binaries honor the O= setting Arnaldo Carvalho de Melo
2013-10-14 20:00 ` [PATCH 048/161] tools/perf/build: Exclude MAKEFLAGS from nested invocation Arnaldo Carvalho de Melo
2013-10-14 20:00 ` [PATCH 049/161] tools/perf/build: Fix non-canonical directory names in O= Arnaldo Carvalho de Melo
2013-10-14 20:00 ` [PATCH 050/161] tools/perf/build: Fix O=/some/dir perf.o type of targets Arnaldo Carvalho de Melo
2013-10-14 20:00 ` [PATCH 051/161] tools/perf/build: Harmonize the style of the feature testcases Arnaldo Carvalho de Melo
2013-10-14 20:00 ` [PATCH 052/161] tools/perf/build: Pass through LDFLAGS to feature tests Arnaldo Carvalho de Melo
2013-10-14 20:00 ` [PATCH 053/161] tools/perf/build: Clean up feature_print_code() Arnaldo Carvalho de Melo
2013-10-14 20:00 ` [PATCH 054/161] perf trace: Put syscall formatter parms into struct Arnaldo Carvalho de Melo
2013-10-14 20:00 ` [PATCH 055/161] perf trace: Allow passing parms to arg formatters Arnaldo Carvalho de Melo
2013-10-14 20:00 ` [PATCH 056/161] perf trace: Use strarray for ltrace's whence arg Arnaldo Carvalho de Melo
2013-10-14 20:00 ` [PATCH 057/161] perf trace: Beautify fcntl 'cmd' arg Arnaldo Carvalho de Melo
2013-10-14 20:00 ` [PATCH 058/161] perf trace: Beautify rt_sigprocmask 'how' arg Arnaldo Carvalho de Melo
2013-10-14 20:00 ` [PATCH 059/161] perf trace: Beautify signal number arg in several syscalls Arnaldo Carvalho de Melo
2013-10-14 20:00 ` [PATCH 060/161] perf trace: Beautify socket 'family' arg Arnaldo Carvalho de Melo
2013-10-14 20:00 ` [PATCH 061/161] perf trace: Beautify socket 'type' arg Arnaldo Carvalho de Melo
2013-10-14 20:00 ` [PATCH 062/161] perf trace: Beautify access 'mode' arg Arnaldo Carvalho de Melo
2013-10-14 20:00 ` [PATCH 063/161] perf trace: Beautify rlmimit resources Arnaldo Carvalho de Melo
2013-10-14 20:00 ` [PATCH 064/161] perf trace: Add option to show full timestamp Arnaldo Carvalho de Melo
2013-10-14 20:00 ` [PATCH 065/161] perf trace: Remove duplicate mmap entry in syscall_fmts array Arnaldo Carvalho de Melo
2013-10-14 20:00 ` [PATCH 066/161] perf trace: Don't print zeroed args Arnaldo Carvalho de Melo
2013-10-14 20:00 ` [PATCH 067/161] perf trace: Beautify send/recv syscall 'flags' arg Arnaldo Carvalho de Melo
2013-10-14 20:00 ` [PATCH 068/161] perf trace: Beautify eventfd2 " Arnaldo Carvalho de Melo
2013-10-14 20:00 ` [PATCH 069/161] perf trace: Add option to show process COMM Arnaldo Carvalho de Melo
2013-10-14 20:00 ` [PATCH 070/161] perf completion: Don't dictate perf install location Arnaldo Carvalho de Melo
2013-10-14 20:01 ` [PATCH 071/161] perf completion: Update __ltrim_colon_completions Arnaldo Carvalho de Melo
2013-10-14 20:01 ` [PATCH 072/161] perf completion: Strip dependency on _filedir Arnaldo Carvalho de Melo
2013-10-14 20:01 ` [PATCH 073/161] perf completion: Strip function_exists () Arnaldo Carvalho de Melo
2013-10-14 20:01 ` [PATCH 074/161] perf completion: Strip dependency on bash-completion Arnaldo Carvalho de Melo
2013-10-14 20:01 ` [PATCH 075/161] perf completion: Use more comp words Arnaldo Carvalho de Melo
2013-10-14 20:01 ` [PATCH 076/161] perf symbols: Support for Openembedded/Yocto -dbg packages Arnaldo Carvalho de Melo
2013-10-14 20:01 ` [PATCH 077/161] perf tools: Remove unused trace-event-* code Arnaldo Carvalho de Melo
2013-10-14 20:01 ` [PATCH 078/161] perf tools: Unify page_size usage Arnaldo Carvalho de Melo
2013-10-14 20:01 ` [PATCH 079/161] perf lock: Remove dead code Arnaldo Carvalho de Melo
2013-10-14 20:01 ` [PATCH 080/161] perf lock: Return proper code in report_lock_*_event Arnaldo Carvalho de Melo
2013-10-14 20:01 ` [PATCH 081/161] perf lock: Plug some memleaks Arnaldo Carvalho de Melo
2013-10-14 20:01 ` [PATCH 082/161] perf lock: Redo __cmd_report Arnaldo Carvalho de Melo
2013-10-14 20:01 ` [PATCH 083/161] perf lock: Limit bad rate precision Arnaldo Carvalho de Melo
2013-10-14 20:01 ` [PATCH 084/161] perf lock: Account for lock average wait time Arnaldo Carvalho de Melo
2013-10-14 20:01 ` [PATCH 085/161] perf tools: Check mmap pages value early Arnaldo Carvalho de Melo
2013-10-14 20:01 ` [PATCH 086/161] perf tools: Add possibility to specify mmap size Arnaldo Carvalho de Melo
2013-10-14 20:01 ` [PATCH 087/161] perf evlist: Introduce perf_evlist__new_default function Arnaldo Carvalho de Melo
2013-10-14 20:01 ` [PATCH 088/161] perf tools: Adding throttle event data struct support Arnaldo Carvalho de Melo
2013-10-14 20:01 ` [PATCH 089/161] perf symbols: Add new option --ignore-vmlinux for perf top Arnaldo Carvalho de Melo
2013-10-14 20:01 ` [PATCH 090/161] perf tools: Separate out GTK codes to libperf-gtk.so Arnaldo Carvalho de Melo
2013-10-14 20:01 ` [PATCH 091/161] perf sort: Fix a memory leak on srcline Arnaldo Carvalho de Melo
2013-10-14 20:01 ` [PATCH 092/161] perf annotate: Reuse path from the result of addr2line Arnaldo Carvalho de Melo
2013-10-14 20:01 ` [PATCH 093/161] perf hists: Free srcline when freeing hist_entry Arnaldo Carvalho de Melo
2013-10-14 20:01 ` [PATCH 094/161] perf annotate: Factor out get/free_srcline() Arnaldo Carvalho de Melo
2013-10-14 20:01 ` [PATCH 095/161] perf tools: Do not try to call addr2line on non-binary files Arnaldo Carvalho de Melo
2013-10-14 20:01 ` [PATCH 096/161] perf annotate: Pass dso instead of dso_name to get_srcline() Arnaldo Carvalho de Melo
2013-10-14 20:01 ` [PATCH 097/161] perf tools: Save failed result of get_srcline() Arnaldo Carvalho de Melo
2013-10-14 20:01 ` [PATCH 098/161] perf tools: Implement addr2line directly using libbfd Arnaldo Carvalho de Melo
2013-10-14 20:01 ` [PATCH 099/161] perf tools: Fix srcline sort key behavior Arnaldo Carvalho de Melo
2013-10-14 20:01 ` [PATCH 100/161] perf trace: Beautify epoll_ctl 'op' arg Arnaldo Carvalho de Melo
2013-10-14 20:01 ` [PATCH 101/161] perf trace: Beautify flock 'cmd' arg Arnaldo Carvalho de Melo
2013-10-14 20:01 ` [PATCH 102/161] perf trace: Add helper for syscalls with a single strarray arg Arnaldo Carvalho de Melo
2013-10-14 20:01 ` [PATCH 103/161] perf trace: Don't supress zeroed args when there is an strarray entry for it Arnaldo Carvalho de Melo
2013-10-14 20:01 ` [PATCH 104/161] perf trace: Use socket's beautifiers in socketpair Arnaldo Carvalho de Melo
2013-10-14 20:01 ` [PATCH 105/161] perf trace: Beautify pipe2 'flags' arg Arnaldo Carvalho de Melo
2013-10-14 20:01 ` [PATCH 106/161] perf trace: Add beautifier for clock_gettime's clk_id argument Arnaldo Carvalho de Melo
2013-10-14 20:01 ` [PATCH 107/161] perf trace: Handle MSG_WAITFORONE not defined Arnaldo Carvalho de Melo
2013-10-14 20:01 ` [PATCH 108/161] perf trace: Beautify mlock & friends 'addr' arg Arnaldo Carvalho de Melo
2013-10-14 20:01 ` Arnaldo Carvalho de Melo [this message]
2013-10-14 20:01 ` [PATCH 110/161] perf trace: Add 'trace' alias to 'perf trace' Arnaldo Carvalho de Melo
2013-10-14 20:01 ` [PATCH 111/161] perf bench sched: Add --threaded option Arnaldo Carvalho de Melo
2013-10-14 20:01 ` [PATCH 112/161] perf machine: Use snprintf instead of sprintf Arnaldo Carvalho de Melo
2013-10-14 20:01 ` [PATCH 113/161] perf tools: Add missing -ldl for gtk build Arnaldo Carvalho de Melo
2013-10-14 20:01 ` [PATCH 114/161] perf tools: Move start conditions to start of the flex file Arnaldo Carvalho de Melo
2013-10-14 20:01 ` [PATCH 115/161] perf stat: Don't print bogus data on -e cycles Arnaldo Carvalho de Melo
2013-10-14 20:01 ` [PATCH 116/161] perf stat: Don't print bogus data on -e instructions Arnaldo Carvalho de Melo
2013-10-14 20:01 ` [PATCH 117/161] perf tools: Ignore 'perf timechart' output file Arnaldo Carvalho de Melo
2013-10-14 20:01 ` [PATCH 118/161] perf bench: Fix failing assertions in numa bench Arnaldo Carvalho de Melo
2013-10-14 20:01 ` [PATCH 119/161] perf evlist: Fix perf_evlist__mmap_read event overflow Arnaldo Carvalho de Melo
2013-10-14 20:01 ` [PATCH 120/161] perf stat: Fix misleading message when specifying cpu list or system wide Arnaldo Carvalho de Melo
2013-10-14 20:01 ` [PATCH 121/161] perf stat: Don't require a workload when using system wide or CPU options Arnaldo Carvalho de Melo
2013-10-14 20:01 ` [PATCH 122/161] perf stat: Add units to nanosec-based counters Arnaldo Carvalho de Melo
2013-10-14 20:01 ` [PATCH 123/161] perf trace: Fix comm resolution when reading events from file Arnaldo Carvalho de Melo
2013-10-14 20:01 ` [PATCH 124/161] perf trace: Add record option Arnaldo Carvalho de Melo
2013-10-14 20:01 ` [PATCH 125/161] perf machine: Add method to loop over threads and invoke handler Arnaldo Carvalho de Melo
2013-10-14 20:01 ` [PATCH 126/161] perf trace: Use new machine method to loop over threads Arnaldo Carvalho de Melo
2013-10-14 20:01 ` [PATCH 127/161] perf intlist: Add priv member Arnaldo Carvalho de Melo
2013-10-14 20:01 ` [PATCH 128/161] perf symbols: Make a separate function to parse /proc/modules Arnaldo Carvalho de Melo
2013-10-14 20:01 ` [PATCH 129/161] perf trace: Allow specifying index offset in strarrays Arnaldo Carvalho de Melo
2013-10-14 20:01 ` [PATCH 130/161] perf trace: Prepare the strarray scnprintf method for reuse Arnaldo Carvalho de Melo
2013-10-14 20:02 ` [PATCH 131/161] perf trace: Initial beautifier for ioctl's 'cmd' arg Arnaldo Carvalho de Melo
2013-10-14 20:02 ` [PATCH 132/161] perf tools: Fix redirection printouts Arnaldo Carvalho de Melo
2013-10-14 20:02 ` [PATCH 133/161] perf tools: Implement summary output for 'make clean' Arnaldo Carvalho de Melo
2013-10-14 20:02 ` [PATCH 134/161] tools: Harmonize the various build messages in perf, lib-traceevent, lib-lk Arnaldo Carvalho de Melo
2013-10-14 20:02 ` [PATCH 135/161] perf tools: Align perf version output to other build messages Arnaldo Carvalho de Melo
2013-10-14 20:02 ` [PATCH 136/161] perf tools: Implement summary output for 'make install' Arnaldo Carvalho de Melo
2013-10-14 20:02 ` [PATCH 137/161] perf timechart: Add example in the documentation Arnaldo Carvalho de Melo
2013-10-14 20:02 ` [PATCH 138/161] perf trace: Improve the error messages Arnaldo Carvalho de Melo
2013-10-14 20:02 ` [PATCH 139/161] perf util: Add findnew method to intlist Arnaldo Carvalho de Melo
2013-10-14 20:02 ` [PATCH 140/161] perf trace: Add summary option to dump syscall statistics Arnaldo Carvalho de Melo
2013-10-14 20:02 ` [PATCH 141/161] perf tools: Fix old GCC build error in 'get_srcline' Arnaldo Carvalho de Melo
2013-10-14 20:02 ` [PATCH 142/161] perf tests: Fix memory leak in dso-data.c Arnaldo Carvalho de Melo
2013-10-14 20:02 ` [PATCH 143/161] perf tools: Separate lbfd check out of NO_DEMANGLE condition Arnaldo Carvalho de Melo
2013-10-14 20:02 ` [PATCH 144/161] perf symbols: Validate kcore module addresses Arnaldo Carvalho de Melo
2013-10-14 20:02 ` [PATCH 145/161] perf symbols: Workaround objdump difficulties with kcore Arnaldo Carvalho de Melo
2013-10-14 20:02 ` [PATCH 146/161] perf symbols: Add map_groups__find_ams() Arnaldo Carvalho de Melo
2013-10-14 20:02 ` [PATCH 147/161] tools/perf/build: Fix non-existent build directory handling Arnaldo Carvalho de Melo
2013-10-14 20:02 ` [PATCH 148/161] tools/perf/build: Pass through DEBUG parameter Arnaldo Carvalho de Melo
2013-10-14 20:02 ` [PATCH 149/161] tools/perf/build: Fix DPACKAGE definitions for the libbfd et al testcases Arnaldo Carvalho de Melo
2013-10-14 20:02 ` [PATCH 150/161] tools/perf/build: Simplify the libelf logic Arnaldo Carvalho de Melo
2013-10-14 20:02 ` [PATCH 151/161] tools/perf/build: Remove the volatile-register-var feature check Arnaldo Carvalho de Melo
2013-10-14 20:02 ` [PATCH 152/161] tools/perf/build: Improve the 'stackprotector' feature test Arnaldo Carvalho de Melo
2013-10-14 20:02 ` [PATCH 153/161] tools/perf/build: Simplify the autodep inclusion rule Arnaldo Carvalho de Melo
2013-10-14 20:02 ` [PATCH 154/161] perf annotate: Find kcore symbols on other maps Arnaldo Carvalho de Melo
2013-10-14 20:02 ` [PATCH 155/161] perf tools: Add copyfile_mode() Arnaldo Carvalho de Melo
2013-10-14 20:02 ` [PATCH 156/161] perf symbols: Add ability to find kcore in build-id cache Arnaldo Carvalho de Melo
2013-10-14 20:02 ` [PATCH 157/161] perf annotate: Fix annotate_browser__callq() Arnaldo Carvalho de Melo
2013-10-14 20:02 ` [PATCH 158/161] perf buildid-cache: Add ability to add kcore to the cache Arnaldo Carvalho de Melo
2013-10-14 20:02 ` [PATCH 159/161] perf annotate: Another fix for annotate_browser__callq() Arnaldo Carvalho de Melo
2013-10-14 20:02 ` [PATCH 160/161] perf symbols: Fix a memory leak due to symbol__delete not being used Arnaldo Carvalho de Melo
2013-10-14 20:02 ` [PATCH 161/161] perf symbols: Fix a mmap and munmap mismatched bug Arnaldo Carvalho de Melo
2013-10-15 5:08 ` [GIT PULL 000/161] perf/core improvements and fixes Ingo Molnar
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=1381780950-25642-110-git-send-email-acme@infradead.org \
--to=acme@infradead.org \
--cc=acme@redhat.com \
--cc=adrian.hunter@intel.com \
--cc=dsahern@gmail.com \
--cc=efault@gmx.de \
--cc=eranian@google.com \
--cc=fweisbec@gmail.com \
--cc=jolsa@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=paulus@samba.org \
--cc=peterz@infradead.org \
/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
all inboxes | Powered by JetHome®