Received: by 2002:a25:4158:0:0:0:0:0 with SMTP id o85csp2820605yba; Sat, 18 May 2019 03:47:05 -0700 (PDT) X-Google-Smtp-Source: APXvYqxqN+HaFSyjOeke51tUGCzscYDAEhTZHvRZmuXd5kYyu7nqTlhc87TFJQucK4csMV3b+IC9 X-Received: by 2002:aa7:942f:: with SMTP id y15mr7190939pfo.121.1558176425101; Sat, 18 May 2019 03:47:05 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1558176425; cv=none; d=google.com; s=arc-20160816; b=E59/eCvnGf5+upPMImnuKzxNtMDOoBGVnn1mnTD7/VH36P6IIYbXJ5pG5MblNIUPTI +ttZruPb2CxHbu15RiK5oYbE6uNj4LS3uDcMyrkizaO6Bh9W96pTrY0fg54aZPruLU+O LJrohF/jfANpna94SlFTCAKNB5PjOf2nSn6uxKhAbVqECKaogZygkqEBZVawhP4htsZh lUObvtE6USOYI5K63H3tx0mTomljRmJP7VHqAkMyNIBRPW7Xl85ATbCtXp9E2dCOPdPy tlkLo+NdQ0t+eynDxy/8Rjy4WYxpTra7vJyDPq3DU2ebWdJV7jF/Qw+w8wGLKfptXCXf MmhA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-disposition :content-transfer-encoding:mime-version:robot-unsubscribe:robot-id :git-commit-id:subject:to:references:in-reply-to:reply-to:cc :message-id:from:date:dkim-signature:dkim-filter; bh=DhX8Cons+GYwuL0E/v8TFiKoaAjHnYSJeCxOW+hCG+s=; b=PwQpFnK7bkRRfrcgNlnBddPFbJVbSpnMUGpc05GNvyejF3kt7imOg3e9jeeIsmpm5x 2MxM7zh4aDdp7wgB6AMvetg66RauSt0wrJAnSsh6/idGYEwLyeFCPEcbm/EuTKEUXV2a KTOtnqCusBgXT/KbzViVF4xQqZvUAXVx9kWUdr9Rcj5FcNhKSBCCr9uIszP0yEutiLDW HEWuhDxjP5i0wYeAH1Nx96vBNU01YpkS+OMVUl5g0ZrL42HuqWvMYebu6ub7Y5XF3spE w3YeFjF7s9xbRidWZ/5i8QnQFZ1T9cpSAQo2u7zrxeNKJxGRaARb6FDRS9QC1OXhfIyl xahQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@zytor.com header.s=2019041745 header.b=v0oUO2pl; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=zytor.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 21si11762603pfc.98.2019.05.18.03.46.50; Sat, 18 May 2019 03:47:05 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@zytor.com header.s=2019041745 header.b=v0oUO2pl; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=zytor.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729818AbfERJVR (ORCPT + 99 others); Sat, 18 May 2019 05:21:17 -0400 Received: from terminus.zytor.com ([198.137.202.136]:50571 "EHLO terminus.zytor.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725468AbfERJVR (ORCPT ); Sat, 18 May 2019 05:21:17 -0400 Received: from terminus.zytor.com (localhost [127.0.0.1]) by terminus.zytor.com (8.15.2/8.15.2) with ESMTPS id x4I9L2Ht1738836 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NO); Sat, 18 May 2019 02:21:02 -0700 DKIM-Filter: OpenDKIM Filter v2.11.0 terminus.zytor.com x4I9L2Ht1738836 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=zytor.com; s=2019041745; t=1558171263; bh=DhX8Cons+GYwuL0E/v8TFiKoaAjHnYSJeCxOW+hCG+s=; h=Date:From:Cc:Reply-To:In-Reply-To:References:To:Subject:From; b=v0oUO2pl4aBh8/MjyKJszr9+6SpjJbX8agMMmrkPpkQiNxjKesacRzNvHyrJSvN9q WPg0f8M6evOoB/r7Iz/FANWgSGgy8AOjA4FPGx5IXHzbjQuc7LP1NHwjxo6vmZBr2o VLfl0ieyl1Z9PdZ0e8RooLphaREYvX0xd4c7ygx/Dy42xgnxcYjEQN6Mu7Bq9ZWy57 beA7HQIyfni56b9jtCpP6o3w4EofaMx2fhKql7bchOjH99DtTCb1ZgPX2UQpETkSAt XjCrCtrCMgjeOxnSZ45y1kgJM6pfO4xkbWOhdpZU4wvTv8QPi3Kal9WdMRkDZMM47O JZFkB4AULhRfw== Received: (from tipbot@localhost) by terminus.zytor.com (8.15.2/8.15.2/Submit) id x4I9L1kW1738787; Sat, 18 May 2019 02:21:01 -0700 Date: Sat, 18 May 2019 02:21:01 -0700 X-Authentication-Warning: terminus.zytor.com: tipbot set sender to tipbot@zytor.com using -f From: tip-bot for Alexey Budankov Message-ID: Cc: peterz@infradead.org, namhyung@kernel.org, ak@linux.intel.com, jolsa@kernel.org, alexey.budankov@linux.intel.com, linux-kernel@vger.kernel.org, tglx@linutronix.de, hpa@zytor.com, alexander.shishkin@linux.intel.com, acme@redhat.com, mingo@kernel.org Reply-To: alexander.shishkin@linux.intel.com, mingo@kernel.org, acme@redhat.com, hpa@zytor.com, tglx@linutronix.de, alexey.budankov@linux.intel.com, linux-kernel@vger.kernel.org, namhyung@kernel.org, jolsa@kernel.org, ak@linux.intel.com, peterz@infradead.org In-Reply-To: <49b31321-0f70-392b-9a4f-649d3affe090@linux.intel.com> References: <49b31321-0f70-392b-9a4f-649d3affe090@linux.intel.com> To: linux-tip-commits@vger.kernel.org Subject: [tip:perf/core] perf mmap: Implement dedicated memory buffer for data compression Git-Commit-ID: 51255a8af7c41c876c2d715a35ab03c13302a607 X-Mailer: tip-git-log-daemon Robot-ID: Robot-Unsubscribe: Contact to get blacklisted from these emails MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=UTF-8 Content-Disposition: inline X-Spam-Status: No, score=-3.1 required=5.0 tests=ALL_TRUSTED,BAYES_00, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF, T_DATE_IN_FUTURE_96_Q autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on terminus.zytor.com Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Commit-ID: 51255a8af7c41c876c2d715a35ab03c13302a607 Gitweb: https://git.kernel.org/tip/51255a8af7c41c876c2d715a35ab03c13302a607 Author: Alexey Budankov AuthorDate: Mon, 18 Mar 2019 20:42:19 +0300 Committer: Arnaldo Carvalho de Melo CommitDate: Wed, 15 May 2019 16:36:49 -0300 perf mmap: Implement dedicated memory buffer for data compression Implemented mmap data buffer that is used as the memory to operate on when compressing data in case of serial trace streaming. Signed-off-by: Alexey Budankov Reviewed-by: Jiri Olsa Cc: Alexander Shishkin Cc: Andi Kleen Cc: Namhyung Kim Cc: Peter Zijlstra Link: http://lkml.kernel.org/r/49b31321-0f70-392b-9a4f-649d3affe090@linux.intel.com Signed-off-by: Arnaldo Carvalho de Melo --- tools/perf/builtin-record.c | 8 +++++++- tools/perf/util/evlist.c | 8 +++++--- tools/perf/util/evlist.h | 2 +- tools/perf/util/mmap.c | 30 ++++++++++++++++++++++++++++-- tools/perf/util/mmap.h | 4 +++- 5 files changed, 44 insertions(+), 8 deletions(-) diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c index 45a80b3584ad..ca6d7488e34b 100644 --- a/tools/perf/builtin-record.c +++ b/tools/perf/builtin-record.c @@ -372,6 +372,8 @@ static int record__mmap_flush_parse(const struct option *opt, return 0; } +static unsigned int comp_level_max = 22; + static int record__comp_enabled(struct record *rec) { return rec->opts.comp_level > 0; @@ -587,7 +589,7 @@ static int record__mmap_evlist(struct record *rec, opts->auxtrace_mmap_pages, opts->auxtrace_snapshot_mode, opts->nr_cblocks, opts->affinity, - opts->mmap_flush) < 0) { + opts->mmap_flush, opts->comp_level) < 0) { if (errno == EPERM) { pr_err("Permission error mapping pages.\n" "Consider increasing " @@ -2298,6 +2300,10 @@ int cmd_record(int argc, const char **argv) pr_debug("affinity: %s\n", affinity_tags[rec->opts.affinity]); pr_debug("mmap flush: %d\n", rec->opts.mmap_flush); + if (rec->opts.comp_level > comp_level_max) + rec->opts.comp_level = comp_level_max; + pr_debug("comp level: %d\n", rec->opts.comp_level); + err = __cmd_record(&record, argc, argv); out: perf_evlist__delete(rec->evlist); diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c index 4b6783ff5813..69d0fa8ab16f 100644 --- a/tools/perf/util/evlist.c +++ b/tools/perf/util/evlist.c @@ -1009,7 +1009,8 @@ int perf_evlist__parse_mmap_pages(const struct option *opt, const char *str, */ int perf_evlist__mmap_ex(struct perf_evlist *evlist, unsigned int pages, unsigned int auxtrace_pages, - bool auxtrace_overwrite, int nr_cblocks, int affinity, int flush) + bool auxtrace_overwrite, int nr_cblocks, int affinity, int flush, + int comp_level) { struct perf_evsel *evsel; const struct cpu_map *cpus = evlist->cpus; @@ -1019,7 +1020,8 @@ int perf_evlist__mmap_ex(struct perf_evlist *evlist, unsigned int pages, * Its value is decided by evsel's write_backward. * So &mp should not be passed through const pointer. */ - struct mmap_params mp = { .nr_cblocks = nr_cblocks, .affinity = affinity, .flush = flush }; + struct mmap_params mp = { .nr_cblocks = nr_cblocks, .affinity = affinity, .flush = flush, + .comp_level = comp_level }; if (!evlist->mmap) evlist->mmap = perf_evlist__alloc_mmap(evlist, false); @@ -1051,7 +1053,7 @@ int perf_evlist__mmap_ex(struct perf_evlist *evlist, unsigned int pages, int perf_evlist__mmap(struct perf_evlist *evlist, unsigned int pages) { - return perf_evlist__mmap_ex(evlist, pages, 0, false, 0, PERF_AFFINITY_SYS, 1); + return perf_evlist__mmap_ex(evlist, pages, 0, false, 0, PERF_AFFINITY_SYS, 1, 0); } int perf_evlist__create_maps(struct perf_evlist *evlist, struct target *target) diff --git a/tools/perf/util/evlist.h b/tools/perf/util/evlist.h index c9a0f72677fd..49354fe24d5f 100644 --- a/tools/perf/util/evlist.h +++ b/tools/perf/util/evlist.h @@ -178,7 +178,7 @@ unsigned long perf_event_mlock_kb_in_pages(void); int perf_evlist__mmap_ex(struct perf_evlist *evlist, unsigned int pages, unsigned int auxtrace_pages, bool auxtrace_overwrite, int nr_cblocks, - int affinity, int flush); + int affinity, int flush, int comp_level); int perf_evlist__mmap(struct perf_evlist *evlist, unsigned int pages); void perf_evlist__munmap(struct perf_evlist *evlist); diff --git a/tools/perf/util/mmap.c b/tools/perf/util/mmap.c index ef3d79b2c90b..d85e73fc82e2 100644 --- a/tools/perf/util/mmap.c +++ b/tools/perf/util/mmap.c @@ -157,6 +157,10 @@ void __weak auxtrace_mmap_params__set_idx(struct auxtrace_mmap_params *mp __mayb } #ifdef HAVE_AIO_SUPPORT +static int perf_mmap__aio_enabled(struct perf_mmap *map) +{ + return map->aio.nr_cblocks > 0; +} #ifdef HAVE_LIBNUMA_SUPPORT static int perf_mmap__aio_alloc(struct perf_mmap *map, int idx) @@ -198,7 +202,7 @@ static int perf_mmap__aio_bind(struct perf_mmap *map, int idx, int cpu, int affi return 0; } -#else +#else /* !HAVE_LIBNUMA_SUPPORT */ static int perf_mmap__aio_alloc(struct perf_mmap *map, int idx) { map->aio.data[idx] = malloc(perf_mmap__mmap_len(map)); @@ -359,7 +363,12 @@ int perf_mmap__aio_push(struct perf_mmap *md, void *to, int idx, return rc; } -#else +#else /* !HAVE_AIO_SUPPORT */ +static int perf_mmap__aio_enabled(struct perf_mmap *map __maybe_unused) +{ + return 0; +} + static int perf_mmap__aio_mmap(struct perf_mmap *map __maybe_unused, struct mmap_params *mp __maybe_unused) { @@ -374,6 +383,10 @@ static void perf_mmap__aio_munmap(struct perf_mmap *map __maybe_unused) void perf_mmap__munmap(struct perf_mmap *map) { perf_mmap__aio_munmap(map); + if (map->data != NULL) { + munmap(map->data, perf_mmap__mmap_len(map)); + map->data = NULL; + } if (map->base != NULL) { munmap(map->base, perf_mmap__mmap_len(map)); map->base = NULL; @@ -442,6 +455,19 @@ int perf_mmap__mmap(struct perf_mmap *map, struct mmap_params *mp, int fd, int c map->flush = mp->flush; + map->comp_level = mp->comp_level; + + if (map->comp_level && !perf_mmap__aio_enabled(map)) { + map->data = mmap(NULL, perf_mmap__mmap_len(map), PROT_READ|PROT_WRITE, + MAP_PRIVATE|MAP_ANONYMOUS, 0, 0); + if (map->data == MAP_FAILED) { + pr_debug2("failed to mmap data buffer, error %d\n", + errno); + map->data = NULL; + return -1; + } + } + if (auxtrace_mmap__mmap(&map->auxtrace_mmap, &mp->auxtrace_mp, map->base, fd)) return -1; diff --git a/tools/perf/util/mmap.h b/tools/perf/util/mmap.h index b82f8c2d55c4..4e2f58d95c1f 100644 --- a/tools/perf/util/mmap.h +++ b/tools/perf/util/mmap.h @@ -40,6 +40,8 @@ struct perf_mmap { #endif cpu_set_t affinity_mask; u64 flush; + void *data; + int comp_level; }; /* @@ -71,7 +73,7 @@ enum bkw_mmap_state { }; struct mmap_params { - int prot, mask, nr_cblocks, affinity, flush; + int prot, mask, nr_cblocks, affinity, flush, comp_level; struct auxtrace_mmap_params auxtrace_mp; };