perf lock contention: Add lock_data.h for common data
Accessing BPF maps should use the same data types. Add bpf_skel/lock_data.h to define the common data structures. No functional changes. Committer notes: Fixed contention_key.stack_id missing rename to contention_key.stack_or_task_id. Signed-off-by: Namhyung Kim <namhyung@kernel.org> Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: Blake Jones <blakejones@google.com> Cc: Ian Rogers <irogers@google.com> Cc: Ingo Molnar <mingo@kernel.org> Cc: Jiri Olsa <jolsa@kernel.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Song Liu <song@kernel.org> Cc: bpf@vger.kernel.org Link: https://lore.kernel.org/r/20221209190727.759804-2-namhyung@kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
3cad53a6f9
commit
fd507d3e35
|
@ -12,17 +12,10 @@
|
|||
#include <bpf/bpf.h>
|
||||
|
||||
#include "bpf_skel/lock_contention.skel.h"
|
||||
#include "bpf_skel/lock_data.h"
|
||||
|
||||
static struct lock_contention_bpf *skel;
|
||||
|
||||
struct lock_contention_data {
|
||||
u64 total_time;
|
||||
u64 min_time;
|
||||
u64 max_time;
|
||||
u32 count;
|
||||
u32 flags;
|
||||
};
|
||||
|
||||
int lock_contention_prepare(struct lock_contention *con)
|
||||
{
|
||||
int i, fd;
|
||||
|
@ -110,8 +103,8 @@ int lock_contention_stop(void)
|
|||
int lock_contention_read(struct lock_contention *con)
|
||||
{
|
||||
int fd, stack, err = 0;
|
||||
s32 prev_key, key;
|
||||
struct lock_contention_data data = {};
|
||||
struct contention_key *prev_key, key;
|
||||
struct contention_data data = {};
|
||||
struct lock_stat *st = NULL;
|
||||
struct machine *machine = con->machine;
|
||||
u64 *stack_trace;
|
||||
|
@ -126,8 +119,8 @@ int lock_contention_read(struct lock_contention *con)
|
|||
if (stack_trace == NULL)
|
||||
return -1;
|
||||
|
||||
prev_key = 0;
|
||||
while (!bpf_map_get_next_key(fd, &prev_key, &key)) {
|
||||
prev_key = NULL;
|
||||
while (!bpf_map_get_next_key(fd, prev_key, &key)) {
|
||||
struct map *kmap;
|
||||
struct symbol *sym;
|
||||
int idx = 0;
|
||||
|
@ -184,7 +177,7 @@ int lock_contention_read(struct lock_contention *con)
|
|||
}
|
||||
|
||||
hlist_add_head(&st->hash_entry, con->result);
|
||||
prev_key = key;
|
||||
prev_key = &key;
|
||||
|
||||
/* we're fine now, reset the values */
|
||||
st = NULL;
|
||||
|
|
|
@ -5,24 +5,11 @@
|
|||
#include <bpf/bpf_tracing.h>
|
||||
#include <bpf/bpf_core_read.h>
|
||||
|
||||
/* maximum stack trace depth */
|
||||
#define MAX_STACKS 8
|
||||
#include "lock_data.h"
|
||||
|
||||
/* default buffer size */
|
||||
#define MAX_ENTRIES 10240
|
||||
|
||||
struct contention_key {
|
||||
__s32 stack_id;
|
||||
};
|
||||
|
||||
struct contention_data {
|
||||
__u64 total_time;
|
||||
__u64 min_time;
|
||||
__u64 max_time;
|
||||
__u32 count;
|
||||
__u32 flags;
|
||||
};
|
||||
|
||||
struct tstamp_data {
|
||||
__u64 timestamp;
|
||||
__u64 lock;
|
||||
|
@ -34,7 +21,7 @@ struct tstamp_data {
|
|||
struct {
|
||||
__uint(type, BPF_MAP_TYPE_STACK_TRACE);
|
||||
__uint(key_size, sizeof(__u32));
|
||||
__uint(value_size, MAX_STACKS * sizeof(__u64));
|
||||
__uint(value_size, sizeof(__u64));
|
||||
__uint(max_entries, MAX_ENTRIES);
|
||||
} stacks SEC(".maps");
|
||||
|
||||
|
@ -154,7 +141,7 @@ int contention_end(u64 *ctx)
|
|||
|
||||
duration = bpf_ktime_get_ns() - pelem->timestamp;
|
||||
|
||||
key.stack_id = pelem->stack_id;
|
||||
key.stack_or_task_id = pelem->stack_id;
|
||||
data = bpf_map_lookup_elem(&lock_stat, &key);
|
||||
if (!data) {
|
||||
struct contention_data first = {
|
||||
|
|
|
@ -0,0 +1,30 @@
|
|||
// SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
|
||||
/* Data structures shared between BPF and tools. */
|
||||
#ifndef UTIL_BPF_SKEL_LOCK_DATA_H
|
||||
#define UTIL_BPF_SKEL_LOCK_DATA_H
|
||||
|
||||
struct contention_key {
|
||||
s32 stack_or_task_id;
|
||||
};
|
||||
|
||||
#define TASK_COMM_LEN 16
|
||||
|
||||
struct contention_task_data {
|
||||
char comm[TASK_COMM_LEN];
|
||||
};
|
||||
|
||||
struct contention_data {
|
||||
u64 total_time;
|
||||
u64 min_time;
|
||||
u64 max_time;
|
||||
u32 count;
|
||||
u32 flags;
|
||||
};
|
||||
|
||||
enum lock_aggr_mode {
|
||||
LOCK_AGGR_ADDR = 0,
|
||||
LOCK_AGGR_TASK,
|
||||
LOCK_AGGR_CALLER,
|
||||
};
|
||||
|
||||
#endif /* UTIL_BPF_SKEL_LOCK_DATA_H */
|
Loading…
Reference in New Issue