From patchwork Fri Jan 24 21:17:02 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Daniel Xu X-Patchwork-Id: 1229058 Return-Path: X-Original-To: incoming-bpf@patchwork.ozlabs.org Delivered-To: patchwork-incoming-bpf@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=bpf-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=dxuuu.xyz Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=dxuuu.xyz header.i=@dxuuu.xyz header.a=rsa-sha256 header.s=fm2 header.b=a/UCmknw; dkim=pass (2048-bit key; unprotected) header.d=messagingengine.com header.i=@messagingengine.com header.a=rsa-sha256 header.s=fm1 header.b=ot3R/rVk; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 484Bmf4qNNz9sR1 for ; Sat, 25 Jan 2020 08:17:22 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727306AbgAXVRV (ORCPT ); Fri, 24 Jan 2020 16:17:21 -0500 Received: from new2-smtp.messagingengine.com ([66.111.4.224]:57303 "EHLO new2-smtp.messagingengine.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725765AbgAXVRV (ORCPT ); Fri, 24 Jan 2020 16:17:21 -0500 Received: from compute4.internal (compute4.nyi.internal [10.202.2.44]) by mailnew.nyi.internal (Postfix) with ESMTP id 2999C6DD5; Fri, 24 Jan 2020 16:17:20 -0500 (EST) Received: from mailfrontend2 ([10.202.2.163]) by compute4.internal (MEProxy); Fri, 24 Jan 2020 16:17:20 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=dxuuu.xyz; h= from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; s=fm2; bh=2yZpLnjkYKiLbhzMXMoZBXj5Eb //kZPHeDc+rQSoN2o=; b=a/UCmknwvjyY2L2/ogiELy5HyeuoT1x8HybshTVHAh I38CeZgO0rrnXyr1eAjaMjZx81imBMzt+gkBW9ft8P6sATiQ3z8ph5sNsTL8l2c3 +zGfZp4KVtdOPOaK+Dn6dijnNHHQLgkUBkMf3iEjSHoNYL6wQS4EJL6Cf6rNJDnn oNv2o6rhYmzLmp4uDfFkH1m2co8KW/Ew5r5j1Frg1LbRHCvz3NGa3+VQ0T/6x+Pt FvPh3Ta8RvOJ4fsGhB3s14D643juYbh5WEzc1iX7VZ2BmFRDu+gQ6njj75myeU4p WPx4obizVC8/l6379ypzqYBgQL2CWjrludHn4SRNw/Mw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:date:from :message-id:mime-version:subject:to:x-me-proxy:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm1; bh=2yZpLnjkYKiLbhzMX MoZBXj5Eb//kZPHeDc+rQSoN2o=; b=ot3R/rVkPCkrwh5YRAxPWSob3b9ADgxaG k9OL9Cj1dEOiiSVcHY9kflUGm38xlLTG0HpEewV9z3c45vc18Gb2HdNN0Xo388Rt BxZ2GkpQzl7juOmEL+p4+CZ+gwSOBtb1Pa/JM8z074Gi8KVbdP/Wc1woXfh8y8tT zQaVquPV0EP6nfroWnAdTTjJpYxWrA7oRRtlG8HXKZpukL08piVDUqYP6y7ckmVN RPnJmJneNrsVHoLZGWxZkS1Om3R5VQhWUU5AALOSXV6eHQYScpK6QO6NpO/jw8rT DGKJ7keQ/YhRYt+CPsWG4bcFqMChh5qywoXBnHYVVOrP0uHB445lg== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedugedrvdehgdduvdcutefuodetggdotefrodftvf curfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfghnecu uegrihhlohhuthemuceftddtnecufghrlhcuvffnffculdejtddmnecujfgurhephffvuf ffkffoggfgsedtkeertdertddtnecuhfhrohhmpeffrghnihgvlhcuighuuceougiguhes ugiguhhuuhdrgiihiieqnecukfhppeduleelrddvtddurdeigedrgeenucevlhhushhtvg hrufhiiigvpedtnecurfgrrhgrmhepmhgrihhlfhhrohhmpegugihusegugihuuhhurdig hiii X-ME-Proxy: Received: from dlxu-fedora-R90QNFJV.thefacebook.com (prnvpn05.thefacebook.com [199.201.64.4]) by mail.messagingengine.com (Postfix) with ESMTPA id EBC583062B10; Fri, 24 Jan 2020 16:17:17 -0500 (EST) From: Daniel Xu To: bpf@vger.kernel.org, ast@kernel.org, daniel@iogearbox.net, songliubraving@fb.com, yhs@fb.com, andriin@fb.com Cc: Daniel Xu , linux-kernel@vger.kernel.org, kernel-team@fb.com, peterz@infradead.org, mingo@redhat.com, acme@kernel.org Subject: [PATCH v4 bpf-next 0/3] Add bpf_perf_prog_read_branches() helper Date: Fri, 24 Jan 2020 13:17:02 -0800 Message-Id: <20200124211705.24759-1-dxu@dxuuu.xyz> X-Mailer: git-send-email 2.21.1 MIME-Version: 1.0 Sender: bpf-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: bpf@vger.kernel.org Branch records are a CPU feature that can be configured to record certain branches that are taken during code execution. This data is particularly interesting for profile guided optimizations. perf has had branch record support for a while but the data collection can be a bit coarse grained. We (Facebook) have seen in experiments that associating metadata with branch records can improve results (after postprocessing). We generally use bpf_probe_read_*() to get metadata out of userspace. That's why bpf support for branch records is useful. Aside from this particular use case, having branch data available to bpf progs can be useful to get stack traces out of userspace applications that omit frame pointers. Changes in v4: - Add BPF_F_GET_BR_SIZE flag - Return -ENOENT on unsupported architectures - Only accept initialized memory in helper - Check buffer size is multiple of sizeof(struct perf_branch_entry) - Use bpf skeleton in selftest - Add commit messages - Spelling and formatting Changes in v3: - Document filling unused buffer with zero - Formatting fixes - Rebase Changes in v2: - Change to a bpf helper instead of context access - Avoid mentioning Intel specific things Daniel Xu (3): bpf: Add bpf_perf_prog_read_branches() helper tools/bpf: Sync uapi header bpf.h selftests/bpf: add bpf_perf_prog_read_branches() selftest include/uapi/linux/bpf.h | 25 +++- kernel/trace/bpf_trace.c | 41 +++++++ tools/include/uapi/linux/bpf.h | 25 +++- .../selftests/bpf/prog_tests/perf_branches.c | 112 ++++++++++++++++++ .../selftests/bpf/progs/test_perf_branches.c | 74 ++++++++++++ 5 files changed, 275 insertions(+), 2 deletions(-) create mode 100644 tools/testing/selftests/bpf/prog_tests/perf_branches.c create mode 100644 tools/testing/selftests/bpf/progs/test_perf_branches.c