mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-07-23 23:32:14 +00:00
perf record: Implement COMPRESSED event record and its attributes
Implemented PERF_RECORD_COMPRESSED event, related data types, header feature and functions to write, read and print feature attributes from the trace header section. comp_mmap_len preserves the size of mmaped kernel buffer that was used during collection. comp_mmap_len size is used on loading stage as the size of decomp buffer for decompression of COMPRESSED events content. Committer notes: Fixed up conflict with BPF_PROG_INFO and BTF_BTF header features. Signed-off-by: Alexey Budankov <alexey.budankov@linux.intel.com> Reviewed-by: Jiri Olsa <jolsa@kernel.org> Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com> Cc: Andi Kleen <ak@linux.intel.com> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Peter Zijlstra <peterz@infradead.org> Link: http://lkml.kernel.org/r/ebbaf031-8dda-3864-ebc6-7922d43ee515@linux.intel.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
d3c8c08e75
commit
42e1fd80a5
8 changed files with 105 additions and 0 deletions
|
@ -1344,6 +1344,30 @@ out:
|
|||
return ret;
|
||||
}
|
||||
|
||||
static int write_compressed(struct feat_fd *ff __maybe_unused,
|
||||
struct perf_evlist *evlist __maybe_unused)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = do_write(ff, &(ff->ph->env.comp_ver), sizeof(ff->ph->env.comp_ver));
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
ret = do_write(ff, &(ff->ph->env.comp_type), sizeof(ff->ph->env.comp_type));
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
ret = do_write(ff, &(ff->ph->env.comp_level), sizeof(ff->ph->env.comp_level));
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
ret = do_write(ff, &(ff->ph->env.comp_ratio), sizeof(ff->ph->env.comp_ratio));
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
return do_write(ff, &(ff->ph->env.comp_mmap_len), sizeof(ff->ph->env.comp_mmap_len));
|
||||
}
|
||||
|
||||
static void print_hostname(struct feat_fd *ff, FILE *fp)
|
||||
{
|
||||
fprintf(fp, "# hostname : %s\n", ff->ph->env.hostname);
|
||||
|
@ -1688,6 +1712,13 @@ static void print_cache(struct feat_fd *ff, FILE *fp __maybe_unused)
|
|||
}
|
||||
}
|
||||
|
||||
static void print_compressed(struct feat_fd *ff, FILE *fp)
|
||||
{
|
||||
fprintf(fp, "# compressed : %s, level = %d, ratio = %d\n",
|
||||
ff->ph->env.comp_type == PERF_COMP_ZSTD ? "Zstd" : "Unknown",
|
||||
ff->ph->env.comp_level, ff->ph->env.comp_ratio);
|
||||
}
|
||||
|
||||
static void print_pmu_mappings(struct feat_fd *ff, FILE *fp)
|
||||
{
|
||||
const char *delimiter = "# pmu mappings: ";
|
||||
|
@ -2667,6 +2698,27 @@ out:
|
|||
return err;
|
||||
}
|
||||
|
||||
static int process_compressed(struct feat_fd *ff,
|
||||
void *data __maybe_unused)
|
||||
{
|
||||
if (do_read_u32(ff, &(ff->ph->env.comp_ver)))
|
||||
return -1;
|
||||
|
||||
if (do_read_u32(ff, &(ff->ph->env.comp_type)))
|
||||
return -1;
|
||||
|
||||
if (do_read_u32(ff, &(ff->ph->env.comp_level)))
|
||||
return -1;
|
||||
|
||||
if (do_read_u32(ff, &(ff->ph->env.comp_ratio)))
|
||||
return -1;
|
||||
|
||||
if (do_read_u32(ff, &(ff->ph->env.comp_mmap_len)))
|
||||
return -1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
struct feature_ops {
|
||||
int (*write)(struct feat_fd *ff, struct perf_evlist *evlist);
|
||||
void (*print)(struct feat_fd *ff, FILE *fp);
|
||||
|
@ -2730,6 +2782,7 @@ static const struct feature_ops feat_ops[HEADER_LAST_FEATURE] = {
|
|||
FEAT_OPN(DIR_FORMAT, dir_format, false),
|
||||
FEAT_OPR(BPF_PROG_INFO, bpf_prog_info, false),
|
||||
FEAT_OPR(BPF_BTF, bpf_btf, false),
|
||||
FEAT_OPR(COMPRESSED, compressed, false),
|
||||
};
|
||||
|
||||
struct header_print_data {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue