mirror of
https://github.com/torvalds/linux.git
synced 2025-01-01 15:51:46 +00:00
7f4eb0a6d5
Pull perf updates from Ingo Molnar: "On the kernel side the main changes in this cycle were: - Add Intel Kaby Lake CPU support (Srinivas Pandruvada) - AMD uncore driver updates for fam17 (Janakarajan Natarajan) - Intel/PT updates and core events optimizations and cleanups (Alexander Shishkin) - cgroups events fixes (David Carrillo-Cisneros) - kprobes improvements (Masami Hiramatsu) - ... plus misc fixes and updates. On the tooling side the main changes were: - Support clang build in tools/{perf,lib/{bpf,traceevent,api}} with CC=clang, to, for instance, take advantage of better warnings (Arnaldo Carvalho de Melo): - Introduce the 'delta-abs' 'perf diff' compute method, that orders the histogram entries by the absolute value of the percentage delta for a function in two perf.data files, i.e. the functions that changed the most (increase or decrease in samples) comes first (Namhyung Kim) - Add support for parsing Intel uncore vendor event files and add uncore vendor events for the Intel server processors (Haswell, Broadwell, IvyBridge), Xeon Phi (Knights Landing) and Broadwell DE (Andi Kleen) - Introduce 'perf ftrace' a perf front end to the kernel's ftrace function and function_graph tracer, defaulting to the "function_graph" tracer, more work will be done in reviving this effort, forward porting it from its initial patch submission (Namhyung Kim) - Add 'e' and 'c' hotkeys to expand/collapse call chains for a single hist entry in the 'perf report' and 'perf top' TUI (Jiri Olsa) - Account thread wait time (off CPU time) separately: sleep, iowait and preempt, based on the prev_state of the last event, show the breakdown when using "perf sched timehist --state" (Namhyumg Kim) - Add more triggers to switch the output file (perf.data.TIMESTAMP). Now, in addition to switching to a different output file when receiving a SIGUSR2, one can also specify file size and time based triggers: perf record -a --switch-output=signal is equivalent to what we had before: perf record -a --switch-output While we can also ask for the file to be "sliced" by size, taking into account that that will happen only when we get woken up by the kernel, i.e. one has to take into account the --mmap-pages (the size of the perf mmap ring buffer): perf record -a --switch-output=2G will break the perf.data output into multiple files limited to 2GB of samples, right when generating the output. For time based samples, alert() will be used, so to have 1 minute limited perf.data output files: perf record -a --switch-output=1m (Jiri Olsa) - Improve 'perf trace' (Arnaldo Carvalho de Melo) - 'perf kallsyms' toy tool to look for extended symbol information on the running kernel and demonstrate the machine/thread/symbol APIs for use in other tools, such as 'perf probe' (Arnaldo Carvalho de Melo) - ... plus tons of other changes, see the shortlog and Git log for details" * 'perf-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (131 commits) perf tools: Add missing parse_events_error() prototype perf pmu: Fix check for unset alias->unit array perf tools: Be consistent on the type of map->symbols[] interator perf intel pt decoder: clang has no -Wno-override-init perf evsel: Do not put a variable sized type not at the end of a struct perf probe: Avoid accessing uninitialized 'map' variable perf tools: Do not put a variable sized type not at the end of a struct perf record: Do not put a variable sized type not at the end of a struct perf tests: Synthesize struct instead of using field after variable sized type perf bench numa: Make sure dprintf() is not defined Revert "perf bench futex: Sanitize numeric parameters" tools lib subcmd: Make it an error to pass a signed value to OPTION_UINTEGER tools: Set the maximum optimization level according to the compiler being used tools: Suppress request for warning options not existent in clang samples/bpf: Reset global variables samples/bpf: Ignore already processed ELF sections samples/bpf: Add missing header perf symbols: dso->name is an array, no need to check it against NULL perf tests record: No need to test an array against NULL perf symbols: No need to check if sym->name is NULL ... |
||
---|---|---|
.. | ||
bpf_helpers.h | ||
bpf_load.c | ||
bpf_load.h | ||
cgroup_helpers.c | ||
cgroup_helpers.h | ||
fds_example.c | ||
lathist_kern.c | ||
lathist_user.c | ||
libbpf.h | ||
lwt_len_hist_kern.c | ||
lwt_len_hist_user.c | ||
lwt_len_hist.sh | ||
Makefile | ||
map_perf_test_kern.c | ||
map_perf_test_user.c | ||
offwaketime_kern.c | ||
offwaketime_user.c | ||
parse_ldabs.c | ||
parse_simple.c | ||
parse_varlen.c | ||
README.rst | ||
sampleip_kern.c | ||
sampleip_user.c | ||
sock_example.c | ||
sock_example.h | ||
sock_flags_kern.c | ||
sockex1_kern.c | ||
sockex1_user.c | ||
sockex2_kern.c | ||
sockex2_user.c | ||
sockex3_kern.c | ||
sockex3_user.c | ||
spintest_kern.c | ||
spintest_user.c | ||
tc_l2_redirect_kern.c | ||
tc_l2_redirect_user.c | ||
tc_l2_redirect.sh | ||
tcbpf1_kern.c | ||
tcbpf2_kern.c | ||
test_cgrp2_array_pin.c | ||
test_cgrp2_attach2.c | ||
test_cgrp2_attach.c | ||
test_cgrp2_sock2.c | ||
test_cgrp2_sock2.sh | ||
test_cgrp2_sock.c | ||
test_cgrp2_sock.sh | ||
test_cgrp2_tc_kern.c | ||
test_cgrp2_tc.sh | ||
test_cls_bpf.sh | ||
test_current_task_under_cgroup_kern.c | ||
test_current_task_under_cgroup_user.c | ||
test_ipip.sh | ||
test_lru_dist.c | ||
test_lwt_bpf.c | ||
test_lwt_bpf.sh | ||
test_overhead_kprobe_kern.c | ||
test_overhead_tp_kern.c | ||
test_overhead_user.c | ||
test_probe_write_user_kern.c | ||
test_probe_write_user_user.c | ||
test_tunnel_bpf.sh | ||
trace_event_kern.c | ||
trace_event_user.c | ||
trace_output_kern.c | ||
trace_output_user.c | ||
tracex1_kern.c | ||
tracex1_user.c | ||
tracex2_kern.c | ||
tracex2_user.c | ||
tracex3_kern.c | ||
tracex3_user.c | ||
tracex4_kern.c | ||
tracex4_user.c | ||
tracex5_kern.c | ||
tracex5_user.c | ||
tracex6_kern.c | ||
tracex6_user.c | ||
xdp1_kern.c | ||
xdp1_user.c | ||
xdp2_kern.c | ||
xdp_tx_iptunnel_common.h | ||
xdp_tx_iptunnel_kern.c | ||
xdp_tx_iptunnel_user.c |
eBPF sample programs ==================== This directory contains a test stubs, verifier test-suite and examples for using eBPF. The examples use libbpf from tools/lib/bpf. Build dependencies ================== Compiling requires having installed: * clang >= version 3.4.0 * llvm >= version 3.7.1 Note that LLVM's tool 'llc' must support target 'bpf', list version and supported targets with command: ``llc --version`` Kernel headers -------------- There are usually dependencies to header files of the current kernel. To avoid installing devel kernel headers system wide, as a normal user, simply call:: make headers_install This will creates a local "usr/include" directory in the git/build top level directory, that the make system automatically pickup first. Compiling ========= For building the BPF samples, issue the below command from the kernel top level directory:: make samples/bpf/ Do notice the "/" slash after the directory name. It is also possible to call make from this directory. This will just hide the the invocation of make as above with the appended "/". Manually compiling LLVM with 'bpf' support ------------------------------------------ Since version 3.7.0, LLVM adds a proper LLVM backend target for the BPF bytecode architecture. By default llvm will build all non-experimental backends including bpf. To generate a smaller llc binary one can use:: -DLLVM_TARGETS_TO_BUILD="BPF" Quick sniplet for manually compiling LLVM and clang (build dependencies are cmake and gcc-c++):: $ git clone http://llvm.org/git/llvm.git $ cd llvm/tools $ git clone --depth 1 http://llvm.org/git/clang.git $ cd ..; mkdir build; cd build $ cmake .. -DLLVM_TARGETS_TO_BUILD="BPF;X86" $ make -j $(getconf _NPROCESSORS_ONLN) It is also possible to point make to the newly compiled 'llc' or 'clang' command via redefining LLC or CLANG on the make command line:: make samples/bpf/ LLC=~/git/llvm/build/bin/llc CLANG=~/git/llvm/build/bin/clang