Received: by 2002:a25:d7c1:0:0:0:0:0 with SMTP id o184csp4092547ybg; Fri, 25 Oct 2019 13:12:39 -0700 (PDT) X-Google-Smtp-Source: APXvYqydNOx2jsBApx3fIklHLYRrs84X+wOEwFGLPM2Ega0lScTeMjpnQk4AGBOr1Q4q0rJvSxld X-Received: by 2002:aa7:d714:: with SMTP id t20mr6094746edq.129.1572034359558; Fri, 25 Oct 2019 13:12:39 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1572034359; cv=none; d=google.com; s=arc-20160816; b=qVKjOoAoUK03sQPUp2FVM2VyWcJulifXbOV0UiM9fy7Krd4A7bkSTCOpeBzagN/syq Vy4KQiQq6IOvlUupJnoUERgoeTtBGm9GQKlbyWOWZkcSykiXigiu5IOvmWJYxiRJpIKS PZpcVPeo72B+++NXYAc9fPSTOnZCusIkgMMJnVN4CTRQXK5aJRUGN8uInX4rYlprgtyh iBGZUvD/hSviRuXmXpt9Ndd5SCby/vHvIRHubu6hj6YbZyyeQAXi0TvAc+xYbvYuDOKK o9K2BZ9Hx3w3YnoD5mA6fUujPNaCQX1MUA+9UBOD6AWxOgliw2CO/zVldtQp3hOfwE3y s4tA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:organization:message-id:date:subject:cc :to:from; bh=lYmRHfqP7evhBcJdN0+jOJnOLuzG40VeufcNFzz1jWQ=; b=uNsHj44SDGWoFgVurYMfq9RmtA0NiOtyphCd+9zgLby+J3K/E4VRjlnbP5e0up3XQ7 av1s02P3e0YxkOJsa1PZog6G3jBDfEiR+E2bi7gBILtPrCPjmFTxOLZSQRnkFuy1tCOV P1awuq34YRw36YRAjRSMpP+UJpXqoE1qqWPpSNtAJ7nFTGCXsvDg+jq1iHb5+EeDatnh Y7AqgpP6ead8R21s3k6banOcgQLeCGuzVR6rsf4JDLDWC3xTH2jsafS5IYvf+IoxMBuO k+D5/y5hsmjE4e3f8hw3RdM5xUy0W3rigpcjr9tO7964Eg8vldRDBbpmncxY8I6XrqIb tNAQ== ARC-Authentication-Results: i=1; mx.google.com; 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=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id g4si1991945edb.41.2019.10.25.13.12.16; Fri, 25 Oct 2019 13:12:39 -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; 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=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2439619AbfJYNBI (ORCPT + 99 others); Fri, 25 Oct 2019 09:01:08 -0400 Received: from mga09.intel.com ([134.134.136.24]:41239 "EHLO mga09.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2439477AbfJYNBI (ORCPT ); Fri, 25 Oct 2019 09:01:08 -0400 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga003.jf.intel.com ([10.7.209.27]) by orsmga102.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 25 Oct 2019 06:01:07 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.68,228,1569308400"; d="scan'208";a="201802246" Received: from ahunter-desktop.fi.intel.com ([10.237.72.55]) by orsmga003.jf.intel.com with ESMTP; 25 Oct 2019 06:01:03 -0700 From: Adrian Hunter To: Peter Zijlstra Cc: Ingo Molnar , Borislav Petkov , "H . Peter Anvin" , x86@kernel.org, Mark Rutland , Alexander Shishkin , Mathieu Poirier , Leo Yan , Arnaldo Carvalho de Melo , Jiri Olsa , linux-kernel@vger.kernel.org Subject: [PATCH RFC 0/6] perf/x86: Add perf text poke event Date: Fri, 25 Oct 2019 15:59:54 +0300 Message-Id: <20191025130000.13032-1-adrian.hunter@intel.com> X-Mailer: git-send-email 2.17.1 Organization: Intel Finland Oy, Registered Address: PL 281, 00181 Helsinki, Business Identity Code: 0357606 - 4, Domiciled in Helsinki Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Here are patches to add a text poke event to record changes to kernel text (i.e. self-modifying code) in order to support tracers like Intel PT decoding through jump labels. One question is whether this approach can be of use to other architectures, particularly ARM-CS. The first patch makes the kernel change and the subsequent patches are tools changes. The first 3 tools patches add support for updating perf tools' data cache with the changed bytes. The last 2 patches are Intel PT specific tools changes. The patches are based on Arnaldo's tree perf/core branch. Example: For jump labels, the kernel needs CONFIG_JUMP_LABEL=y and also an easy to flip jump label is in sysctl_schedstats() which needs CONFIG_SCHEDSTATS=y CONFIG_PROC_SYSCTL=y Also note the 'sudo perf record' is put into the background which, as written, needs sudo credential caching (otherwise the background task will stop awaiting the sudo password), hence the 'sudo echo' to start. Before: $ sudo echo $ sudo perf record -o perf.data.before --kcore -a -e intel_pt//k -m,64M & [1] 1640 $ cat /proc/sys/kernel/sched_schedstats 0 $ sudo bash -c 'echo 1 > /proc/sys/kernel/sched_schedstats' $ cat /proc/sys/kernel/sched_schedstats 1 $ sudo bash -c 'echo 0 > /proc/sys/kernel/sched_schedstats' $ cat /proc/sys/kernel/sched_schedstats 0 $ sudo kill 1640 [ perf record: Woken up 1 times to write data ] [ perf record: Captured and wrote 16.635 MB perf.data.before ] $ perf script -i perf.data.before --itrace=e >/dev/null Warning: 1946 instruction trace errors After: $ sudo echo $ sudo perf record -o perf.data.after --kcore -a -e intel_pt//k -m,64M & [1] 1882 $ cat /proc/sys/kernel/sched_schedstats 0 $ sudo bash -c 'echo 1 > /proc/sys/kernel/sched_schedstats' $ cat /proc/sys/kernel/sched_schedstats 1 $ sudo bash -c 'echo 0 > /proc/sys/kernel/sched_schedstats' $ cat /proc/sys/kernel/sched_schedstats 0 $ sudo kill 1882 [ perf record: Woken up 1 times to write data ] [ perf record: Captured and wrote 10.893 MB perf.data.after ] $ perf script -i perf.data.after --itrace=e $ Adrian Hunter (6): perf/x86: Add perf text poke event perf dso: Refactor dso_cache__read() perf dso: Add dso__data_write_cache_addr() perf tools: Add support for PERF_RECORD_TEXT_POKE perf auxtrace: Add auxtrace_cache__remove() perf intel-pt: Add support for text poke events arch/x86/include/asm/text-patching.h | 1 + arch/x86/kernel/alternative.c | 39 ++++++++- include/linux/perf_event.h | 6 ++ include/uapi/linux/perf_event.h | 28 ++++++- kernel/events/core.c | 90 +++++++++++++++++++- tools/include/uapi/linux/perf_event.h | 28 ++++++- tools/perf/arch/x86/util/intel-pt.c | 5 ++ tools/perf/builtin-record.c | 45 ++++++++++ tools/perf/lib/include/perf/event.h | 9 ++ tools/perf/util/auxtrace.c | 28 +++++++ tools/perf/util/auxtrace.h | 1 + tools/perf/util/dso.c | 135 +++++++++++++++++++++--------- tools/perf/util/dso.h | 7 ++ tools/perf/util/event.c | 39 +++++++++ tools/perf/util/event.h | 5 ++ tools/perf/util/evlist.h | 1 + tools/perf/util/intel-pt.c | 71 ++++++++++++++++ tools/perf/util/machine.c | 38 +++++++++ tools/perf/util/machine.h | 3 + tools/perf/util/perf_event_attr_fprintf.c | 1 + tools/perf/util/record.c | 10 +++ tools/perf/util/record.h | 1 + tools/perf/util/session.c | 22 +++++ tools/perf/util/tool.h | 3 +- 24 files changed, 570 insertions(+), 46 deletions(-) Regards Adrian