この記事について
RasPi 5でLinux PerfをDocker Composeを用いて実行出来る環境構築資材をGitHub Copilotの力を借りつつ作成してみました。今後RasPi 5で性能測定を行う場合、perfコマンドが利用出来ると何かと便利との思いから始めました、一筋縄には行かず。。。
作成した資材
Dockerfileとcompose.yamlを作成します。RasPiには専用のLinuxカーネルが存在します。通常のLinuxカーネルを用いるとビルドエラーになります。これはハードウェア仕様やエコシステムなどに起因してだと思います。
FROM ubuntu:24.04
ENV DEBIAN_FRONTEND=noninteractive
# ビルドに必要なパッケージをインストール
RUN apt-get update && apt-get install -y --no-install-recommends \
build-essential git ca-certificates pkg-config \
libelf-dev libdw-dev libaudit-dev libunwind-dev libnuma-dev binutils-dev \
flex bison libssl-dev bc wget curl python3 python3-dev python-is-python3 gnupg \
&& rm -rf /var/lib/apt/lists/*
# カーネルツール(perf)を取得してビルド
RUN git clone --depth 1 --branch stable_20250916 https://github.com/raspberrypi/linux.git /tmp/linux && \
make -C /tmp/linux ARCH=arm64 defconfig && \
make -C /tmp/linux ARCH=arm64 prepare modules_prepare && \
make -C /tmp/linux ARCH=arm64 NO_JEVENTS=1 NO_LIBTRACEEVENT=1 NO_BPF=1 tools/perf -j$(nproc) && \
install -m0755 /tmp/linux/tools/perf/perf /usr/local/bin/perf && \
rm -rf /tmp/linux
services:
rpi-compose-perf:
build:
context: .
dockerfile: Dockerfile
image: rpi-perf:latest
privileged: true
security_opt:
- seccomp:unconfined
network_mode: host
tty: true
restart: "no"
volumes:
- /sys:/sys:ro
- /proc:/proc:ro
- /lib/modules:/lib/modules:ro
Dockerのコンテナ上でperfコマンドを用いて測定を行おうとすると--privilegedオプションの付与が必要になりますが、Docker Composeで同じことをしようとすると、上記のcompose.yamlの様に記載します。この辺はGitHub Copilot君に指示を出して実装して貰いました。
サクサク進む部分が有る一方で、間違いの無限ループに入ってしまって出られなかったのは、カーネルのソースをGitHubからクローンする部分。ここは通常のLinuxカーネルをクローンするコードを書いてビルドに失敗するを繰り返していました。加えて、現状Stable 20250916版のカーネルまではperfをビルド出来ますが、なぜか最新版のカーネルでのビルドは失敗します。よって、Stable 20250916を明に指定してビルドしています。
まとめ
GitHub Copilot君のお陰で資材作成は結構スムーズに完了しました。ただ、カーネルを通常のLinuxのバージョンのをビルドに失敗しても繰り返し取りに行こうとし、そしてビルドに失敗するを繰り返していました。RasPi用カーネルのURLは筆者が指定してやっと正しく資材を完成させることが出来ました。矢張り低レイヤー部分のGitHub Copilotが学習済の知識は少なく、不足しているのかもしれないですね。