perf session: Define 'bytes_transferred' and 'bytes_compressed' metrics

Define 'bytes_transferred' and 'bytes_compressed' metrics to calculate
ratio in the end of the data collection:

	compression ratio = bytes_transferred / bytes_compressed

The 'bytes_transferred' metric accumulates the amount of bytes that was
extracted from the mmaped kernel buffers for compression, while
'bytes_compressed' accumulates the amount of bytes that was received
after applying compression.

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/1d4bf499-cb03-26dc-6fc6-f14fec7622ce@linux.intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
Alexey Budankov 2019-03-18 20:41:02 +03:00 committed by Arnaldo Carvalho de Melo
parent 5b6f5aef10
commit d3c8c08e75
3 changed files with 16 additions and 1 deletions

View File

@ -1186,6 +1186,7 @@ static int __cmd_record(struct record *rec, int argc, const char **argv)
bool disabled = false, draining = false; bool disabled = false, draining = false;
struct perf_evlist *sb_evlist = NULL; struct perf_evlist *sb_evlist = NULL;
int fd; int fd;
float ratio = 0;
atexit(record__sig_exit); atexit(record__sig_exit);
signal(SIGCHLD, sig_handler); signal(SIGCHLD, sig_handler);
@ -1491,6 +1492,11 @@ out_child:
record__mmap_read_all(rec, true); record__mmap_read_all(rec, true);
record__aio_mmap_read_sync(rec); record__aio_mmap_read_sync(rec);
if (rec->session->bytes_transferred && rec->session->bytes_compressed) {
ratio = (float)rec->session->bytes_transferred/(float)rec->session->bytes_compressed;
session->header.env.comp_ratio = ratio + 0.5;
}
if (forks) { if (forks) {
int exit_status; int exit_status;
@ -1537,9 +1543,15 @@ out_child:
else else
samples[0] = '\0'; samples[0] = '\0';
fprintf(stderr, "[ perf record: Captured and wrote %.3f MB %s%s%s ]\n", fprintf(stderr, "[ perf record: Captured and wrote %.3f MB %s%s%s",
perf_data__size(data) / 1024.0 / 1024.0, perf_data__size(data) / 1024.0 / 1024.0,
data->path, postfix, samples); data->path, postfix, samples);
if (ratio) {
fprintf(stderr, ", compressed (original %.3f MB, ratio is %.3f)",
rec->session->bytes_transferred / 1024.0 / 1024.0,
ratio);
}
fprintf(stderr, " ]\n");
} }
out_delete_session: out_delete_session:

View File

@ -62,6 +62,7 @@ struct perf_env {
struct cpu_topology_map *cpu; struct cpu_topology_map *cpu;
struct cpu_cache_level *caches; struct cpu_cache_level *caches;
int caches_cnt; int caches_cnt;
u32 comp_ratio;
struct numa_node *numa_nodes; struct numa_node *numa_nodes;
struct memory_node *memory_nodes; struct memory_node *memory_nodes;
unsigned long long memory_bsize; unsigned long long memory_bsize;

View File

@ -35,6 +35,8 @@ struct perf_session {
struct ordered_events ordered_events; struct ordered_events ordered_events;
struct perf_data *data; struct perf_data *data;
struct perf_tool *tool; struct perf_tool *tool;
u64 bytes_transferred;
u64 bytes_compressed;
}; };
struct perf_tool; struct perf_tool;