From mboxrd@z Thu Jan 1 00:00:00 1970 From: Yonghong Song Subject: [PATCH bpf-next v3 0/9] bpf: add bpf_get_stack helper Date: Fri, 20 Apr 2018 15:18:33 -0700 Message-ID: <20180420221842.742330-1-yhs@fb.com> Mime-Version: 1.0 Content-Type: text/plain Cc: To: , , Return-path: Received: from mx0b-00082601.pphosted.com ([67.231.153.30]:48918 "EHLO mx0b-00082601.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751860AbeDTWSp (ORCPT ); Fri, 20 Apr 2018 18:18:45 -0400 Received: from pps.filterd (m0109331.ppops.net [127.0.0.1]) by mx0a-00082601.pphosted.com (8.16.0.22/8.16.0.22) with SMTP id w3KMDDVs021350 for ; Fri, 20 Apr 2018 15:18:44 -0700 Received: from mail.thefacebook.com ([199.201.64.23]) by mx0a-00082601.pphosted.com with ESMTP id 2hfrg9r32g-2 (version=TLSv1 cipher=ECDHE-RSA-AES256-SHA bits=256 verify=NOT) for ; Fri, 20 Apr 2018 15:18:44 -0700 Sender: netdev-owner@vger.kernel.org List-ID: Currently, stackmap and bpf_get_stackid helper are provided for bpf program to get the stack trace. This approach has a limitation though. If two stack traces have the same hash, only one will get stored in the stackmap table regardless of whether BPF_F_REUSE_STACKID is specified or not, so some stack traces may be missing from user perspective. This patch implements a new helper, bpf_get_stack, will send stack traces directly to bpf program. The bpf program is able to see all stack traces, and then can do in-kernel processing or send stack traces to user space through shared map or bpf_perf_event_output. Patches #1 and #2 implemented the core kernel support. Patches #3 and #4 are two verifier improves to make bpf programming easier. Patch #5 synced the new helper to tools headers. Patch #6 moved perf_event polling code and ksym lookup code from samples/bpf to tools/testing/selftests/bpf. Patch #7 added a verifier test in tools/bpf for new verifier change. Patches #8 and #9 added tests for raw tracepoint prog and tracepoint prog respectively. Changelogs: v2 -> v3: . use meta to track helper memory size argument . implement range checking for ARSH in verifier . move perf event polling and ksym related functions from samples/bpf to tools/bpf . added test to compare build id's between bpf_get_stackid and bpf_get_stack v1 -> v2: . fix compilation error when CONFIG_PERF_EVENTS is not enabled Yonghong Song (9): bpf: change prototype for stack_map_get_build_id_offset bpf: add bpf_get_stack helper bpf/verifier: refine retval R0 state for bpf_get_stack helper bpf/verifier: improve register value range tracking with ARSH tools/bpf: add bpf_get_stack helper to tools headers samples/bpf: move common-purpose trace functions to selftests tools/bpf: add a verifier test case for bpf_get_stack helper and ARSH tools/bpf: add a test for bpf_get_stack with raw tracepoint prog tools/bpf: add a test for bpf_get_stack with tracepoint prog include/linux/bpf.h | 1 + include/linux/filter.h | 3 +- include/uapi/linux/bpf.h | 19 ++- kernel/bpf/core.c | 5 + kernel/bpf/stackmap.c | 80 ++++++++- kernel/bpf/syscall.c | 10 ++ kernel/bpf/verifier.c | 56 +++++++ kernel/trace/bpf_trace.c | 50 +++++- samples/bpf/Makefile | 11 +- samples/bpf/bpf_load.c | 63 ------- samples/bpf/bpf_load.h | 7 - samples/bpf/offwaketime_user.c | 1 + samples/bpf/sampleip_user.c | 1 + samples/bpf/spintest_user.c | 1 + samples/bpf/trace_event_user.c | 1 + samples/bpf/trace_output_user.c | 125 ++------------ tools/include/uapi/linux/bpf.h | 19 ++- tools/testing/selftests/bpf/Makefile | 3 +- tools/testing/selftests/bpf/bpf_helpers.h | 3 +- tools/testing/selftests/bpf/test_get_stack_rawtp.c | 102 +++++++++++ tools/testing/selftests/bpf/test_progs.c | 178 +++++++++++++++++++- .../selftests/bpf/test_stacktrace_build_id.c | 20 ++- tools/testing/selftests/bpf/test_stacktrace_map.c | 20 ++- tools/testing/selftests/bpf/test_verifier.c | 45 +++++ tools/testing/selftests/bpf/trace_helpers.c | 186 +++++++++++++++++++++ tools/testing/selftests/bpf/trace_helpers.h | 24 +++ 26 files changed, 825 insertions(+), 209 deletions(-) create mode 100644 tools/testing/selftests/bpf/test_get_stack_rawtp.c create mode 100644 tools/testing/selftests/bpf/trace_helpers.c create mode 100644 tools/testing/selftests/bpf/trace_helpers.h -- 2.9.5