From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754240AbbDHAfO (ORCPT ); Tue, 7 Apr 2015 20:35:14 -0400 Received: from e9.ny.us.ibm.com ([32.97.182.139]:52477 "EHLO e9.ny.us.ibm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754076AbbDHAfK (ORCPT ); Tue, 7 Apr 2015 20:35:10 -0400 From: Sukadev Bhattiprolu To: Paul Mackerras , Arnaldo Carvalho de Melo , mingo@redhat.com, peterz@infradead.org, Michael Ellerman Cc: dev@codyps.com, , linuxppc-dev@lists.ozlabs.org Subject: [PATCH v2 0/5] perf: Implement event group read using txn interface Date: Tue, 7 Apr 2015 17:34:54 -0700 Message-Id: <1428453299-19121-1-git-send-email-sukadev@linux.vnet.ibm.com> X-Mailer: git-send-email 1.7.9.5 X-TM-AS-MML: disable X-Content-Scanned: Fidelis XPS MAILER x-cbid: 15040800-0033-0000-0000-00000239E03C Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Unlike normal hardware PMCs, the 24x7 counters[1] in Power8 are stored in memory and accessed via a hypervisor call (HCALL). A major aspect of the HCALL is that it allows retireving _SEVERAL_ counters at once (unlike regular PMCs, which are read one at a time). By reading several counters at once, we can get a more consistent snapshot of the system. This patchset extends the transaction interface to accomplish submitting several events to the PMU and have the PMU read them all at once. User is expected to submit the set of events they want to read as an "event group". In the kernel, we submit each event to the PMU using the following logic (from Peter Zijlstra). pmu->start_txn(pmu, PMU_TXN_READ); leader->read(); for_each_sibling() sibling->read(); pmu->commit_txn(); where: - the ->read()s queue events to be submitted to the hypervisor, and, - the ->commit_txn() issues the HCALL, retrieves the result and updates the event count. Architectures/PMUs that don't need/implement PMU_TXN_READ type of transactions, simply ignore the ->start_txn() and ->commit_txn() and continue to read the counters one at a time in the ->read() call. Compile/touch tested on x86. Need help testing on s390 and Sparc. Thanks to Peter Zijlstra for his input. Changelog [v2] - Use the transaction interface unconditionally to avoid special-case code. Architectures/PMUs that don't need the READ transaction types simply ignore the ->start_txn() and ->commit_txn() calls. Sukadev Bhattiprolu (5): perf: Add a flags parameter to pmu txn interfaces perf: Split perf_event_read() and perf_event_count() perf: Rename perf_event_read_value to perf_event_compute_values perf: Define PMU_TXN_READ interface powerpc/perf/hv-24x7: Use PMU_TXN_READ interface arch/powerpc/perf/core-book3s.c | 16 +++- arch/powerpc/perf/hv-24x7.c | 165 ++++++++++++++++++++++++++++++++++++++ arch/s390/kernel/perf_cpum_cf.c | 15 +++- arch/sparc/kernel/perf_event.c | 15 +++- arch/x86/kernel/cpu/perf_event.c | 15 +++- arch/x86/kvm/pmu.c | 6 +- include/linux/perf_event.h | 17 +++- kernel/events/core.c | 83 ++++++++++++++----- 8 files changed, 292 insertions(+), 40 deletions(-) -- 1.7.9.5