Skip to content

Commit 70d79cd

Browse files
authored
build perf with support for bpf (#117)
* build perf with support for bpf * put perf build in its own Dockerfile stage
1 parent 8d60a47 commit 70d79cd

File tree

2 files changed

+30
-9
lines changed

2 files changed

+30
-9
lines changed

tools/Makefile

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
default: tools
88
.PHONY: default tools async-profiler avx-turbo cpuid dmidecode ethtool flamegraph ipmitool lshw lspci msr-tools pcm perf spectre-meltdown-checker sshpass stress-ng sysstat tsc turbostat
99

10-
tools: async-profiler avx-turbo cpuid dmidecode ethtool flamegraph ipmitool lshw lspci msr-tools pcm perf spectre-meltdown-checker sshpass stress-ng sysstat tsc turbostat
10+
tools: async-profiler avx-turbo cpuid dmidecode ethtool flamegraph ipmitool lshw lspci msr-tools pcm spectre-meltdown-checker sshpass stress-ng sysstat tsc turbostat
1111
mkdir -p bin
1212
cp -R async-profiler bin/
1313
cp avx-turbo/avx-turbo bin/
@@ -23,7 +23,6 @@ tools: async-profiler avx-turbo cpuid dmidecode ethtool flamegraph ipmitool lshw
2323
cp msr-tools/wrmsr bin/
2424
cp pcm/build/bin/pcm-tpmi bin/
2525
cp pcm/scripts/bhs-power-mode.sh bin/
26-
cp linux_perf/tools/perf/perf bin/
2726
cp spectre-meltdown-checker/spectre-meltdown-checker.sh bin/
2827
cp sshpass/sshpass bin/
2928
cp stress-ng/stress-ng bin/
@@ -146,7 +145,10 @@ PERF_LINUX_VERSION := 6.1.52
146145
perf:
147146
wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-$(PERF_LINUX_VERSION).tar.xz
148147
tar -xf linux-$(PERF_LINUX_VERSION).tar.xz && mv linux-$(PERF_LINUX_VERSION)/ linux_perf/
149-
cd linux_perf/tools/perf && make LDFLAGS="-static --static"
148+
cd linux_perf/tools/perf && make LDFLAGS="-static --static" BUILD_BPF_SKEL=1 NO_JVMTI=1
149+
mkdir -p bin
150+
cp linux_perf/tools/perf/perf bin/
151+
strip --strip-unneeded bin/perf
150152

151153
spectre-meltdown-checker:
152154
ifeq ("$(wildcard spectre-meltdown-checker)","")
@@ -208,7 +210,6 @@ reset:
208210
cd lspci && git clean -fdx && git reset --hard
209211
cd pcm && git clean -fdx && git reset --hard
210212
cd msr-tools && git clean -fdx && git reset --hard
211-
cd linux_perf/tools/perf && make clean
212213
cd spectre-meltdown-checker
213214
cd sshpass && make clean
214215
cd stress-ng && git clean -fdx && git reset --hard
@@ -226,5 +227,5 @@ libcrypt.tar.gz:
226227
libs: glibc-2.19.tar.bz2 zlib.tar.gz libcrypt.tar.gz
227228

228229
oss-source: reset libs
229-
tar --exclude-vcs -czf oss_source.tgz async-profiler/ cpuid/ dmidecode/ ethtool/ flamegraph/ ipmitool/ lshw/ lspci/ msr-tools/ pcm/ linux_perf/tools/perf spectre-meltdown-checker/ sshpass/ stress-ng/ sysstat/ linux_turbostat/tools/power/x86/turbostat glibc-2.19.tar.bz2 zlib.tar.gz libcrypt.tar.gz
230+
tar --exclude-vcs -czf oss_source.tgz async-profiler/ cpuid/ dmidecode/ ethtool/ flamegraph/ ipmitool/ lshw/ lspci/ msr-tools/ pcm/ spectre-meltdown-checker/ sshpass/ stress-ng/ sysstat/ linux_turbostat/tools/power/x86/turbostat glibc-2.19.tar.bz2 zlib.tar.gz libcrypt.tar.gz
230231
md5sum oss_source.tgz > oss_source.tgz.md5

tools/build.Dockerfile

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
# build output oss_source* will be in workdir
77
# build image (from project root directory):
88
# $ docker build -f tools/build.Dockerfile --tag perfspect-tools:$TAG ./tools
9+
910
FROM ubuntu:18.04 AS builder
1011
ENV http_proxy=${http_proxy}
1112
ENV https_proxy=${https_proxy}
@@ -17,23 +18,42 @@ RUN add-apt-repository ppa:git-core/ppa -y
1718
RUN apt-get update && apt-get install -y git build-essential autotools-dev automake \
1819
gawk zlib1g-dev libtool libaio-dev libaio1 pandoc pkgconf libcap-dev docbook-utils \
1920
libreadline-dev default-jre default-jdk cmake flex bison libssl-dev
20-
2121
ENV JAVA_HOME=/usr/lib/jvm/java-1.11.0-openjdk-amd64
22-
2322
# need golang to build go tools
2423
RUN rm -rf /usr/local/go && wget -qO- https://go.dev/dl/go1.23.0.linux-amd64.tar.gz | tar -C /usr/local -xz
2524
ENV PATH="${PATH}:/usr/local/go/bin"
26-
2725
# need up-to-date zlib (used by stress-ng static build) to fix security vulnerabilities
2826
RUN git clone https://github.com/madler/zlib.git && cd zlib && ./configure && make install
2927
RUN cp /usr/local/lib/libz.a /usr/lib/x86_64-linux-gnu/libz.a
30-
3128
# Build third-party components
3229
RUN mkdir workdir
3330
ADD . /workdir
3431
WORKDIR /workdir
3532
RUN make tools && make oss-source
3633

34+
FROM ubuntu:22.04 AS perf-builder
35+
ENV http_proxy=${http_proxy}
36+
ENV https_proxy=${https_proxy}
37+
ENV LANG=en_US.UTF-8
38+
ARG DEBIAN_FRONTEND=noninteractive
39+
RUN apt-get update && apt-get install -y apt-utils locales wget curl git netcat-openbsd software-properties-common jq zip unzip
40+
RUN locale-gen en_US.UTF-8 && echo "LANG=en_US.UTF-8" > /etc/default/locale
41+
RUN add-apt-repository ppa:git-core/ppa -y
42+
RUN apt-get update && apt-get install -y \
43+
automake autotools-dev binutils-dev bison build-essential clang cmake debuginfod \
44+
default-jdk default-jre docbook-utils flex gawk git libaio-dev libaio1 \
45+
libbabeltrace-dev libbpf-dev libc6 libcap-dev libdw-dev libdwarf-dev libelf-dev \
46+
libiberty-dev liblzma-dev libnuma-dev libperl-dev libpfm4-dev libreadline-dev \
47+
libslang2-dev libssl-dev libtool libtraceevent-dev libunwind-dev libzstd-dev \
48+
libzstd1 llvm-13 pandoc pkgconf python-setuptools python2-dev python3 python3-dev \
49+
python3-pip systemtap-sdt-dev zlib1g-dev
50+
ENV PATH="${PATH}:/usr/lib/llvm-13/bin"
51+
RUN mkdir workdir
52+
ADD . /workdir
53+
WORKDIR /workdir
54+
RUN make perf
55+
3756
FROM scratch AS output
3857
COPY --from=builder workdir/bin /bin
3958
COPY --from=builder workdir/oss_source* /
59+
COPY --from=perf-builder workdir/bin/ /bin

0 commit comments

Comments
 (0)