Commit d3c8c08e authored by Alexey Budankov's avatar Alexey Budankov Committed by Arnaldo Carvalho de Melo
Browse files

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: default avatarAlexey Budankov <alexey.budankov@linux.intel.com>
Reviewed-by: default avatarJiri 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: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent 5b6f5aef
Loading
Loading
Loading
Loading
+13 −1
Original line number Original line Diff line number Diff line
@@ -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:
+1 −0
Original line number Original line Diff line number Diff line
@@ -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;
+2 −0
Original line number Original line Diff line number Diff line
@@ -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;