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:
parent
5b6f5aef10
commit
d3c8c08e75
|
@ -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:
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Reference in New Issue