### はじめに ghost-kernel は Ubuntu20.04 を想定して作られている。そのため Virtual Box 上に Ubuntu20.04 をインストールし、その Ubuntu20.04 に対して ghost-kernel をインストールする、といった流れで行う。 実機にUbuntu20.04の環境を構築できる場合はSTEP 5.まで飛ばしてよい。 ### STEP 1. Ubuntuのisoイメージをダウンロードしてくる Ubuntu20.04LTS をダウンロードする。 ### STEP 2. VirtualBoxの「新規」からゲストOSを作成する * CPUは多めに割り当て。 * メモリは8GBはほしい。 * ストレージは100GBくらい確保(※50GBあればビルドまでできるが、他のパッケージ等を使おうとすると一気に容量がパンクしてしまうので、多めに確保するべし)。 ### STEP 3. 起動&インストール ### STEP 4. VBox Guest Addition をインストール ホストOS ⇄ ゲストOS間でのコピペができるようにする。 まずゲストOS内で必要なパッケージをインストールする。これは手動で入力する。 ```bash sudo apt update sudo apt upgrade sudo apt install build-essential dkms linux-headers-$(uname -r) ``` その後、VBoxの「デバイス」というタグから**Virtual Box Guest Addition**という部分を指定してダウンロードを指定。後は流れに沿って進めて行く。 インストールが完了したら、VBox側でクリップボードの共有設定を行い、ゲストOSを再起動する。 ### STEP 5. 必要なツールのインストール カーネルのビルドなどに必要なツール等をインストールする。 ```bash sudo apt install git fakeroot build-essential \ tar libncurses5-dev tar xz-utils libssl-dev \ bc stress python3-distutils libelf-dev \ linux-headers-$(uname -r) bison flex \ libncurses5-dev util-linux net-tools \ linux-tools-$(uname -r) exuberant-ctags \ cscope sysfsutils gnome-system-monitor curl \ perf-tools-unstable gnuplot rt-tests indent \ tree psmisc smem libnuma-dev numactl hwloc \ bpfcc-tools sparse flawfinder cppcheck htop \ bsdmainutils openjdk-17-jdk trace-cmd virt-what \ dwarves ``` ### STEP 6. ghost-kernelのダウンロード ``` git clone https://github.com/google/ghost-kernel.git ``` ### STEP 7. カーネルのコンフィギュレーション&ビルド コンフィギュレーションには、Ubuntu のビルドに使われていたものを流用する。ghost-kernel は v5.11 のバニラカーネルを元に作成しているため、できる限り v5.11 に近いバージョンの .config を利用したほうがいい。 Ubuntu公式が出しているカーネルイメージのパッケージでバージョンが最も近かったものは 5.11.0-22-generic であったので、以下のようにカーネルイメージをインストールする。 ```bash sudo apt install linux-image-5.11.0-22-generic ``` :::info このカーネルで起動してみると、使われていたバニラカーネルのバージョンは `5.11.21` であった。 ```bash $ cat /proc/version_signature Ubuntu 5.11.0-22.23~20.04.1-generic 5.11.21 ``` ::: このパッケージをインストールしておくと、/boot/config-5.11.0-22-generic というファイルが置かれているので、これをカーネルのディレクトリツリーにもコピーしてくる。ビルドの時間を短縮するために、以下のようにしてコンフィギュレーションを行っていく。 ※ localmodconfig で ghOSt の設定などが聞かれるが、全てyを選択しておいた。 ```bash cd ghost-kernel cp /boot/config-5.11.0-22-generic .config make localmodconfig make menuconfig # Kernel hacking # ---> Compile-time checks and compiler options # ---> Produce split debuginfo in .dwo files (=n) # ---> Generate BTF typeinfo (=y) ``` :::info もし ghost 関連のエントリが有効になっていなければ、make menuconfig 時に手動で有効にしておく必要がある。 ``` ghOSt scheduling class = y Extra debug checks for ghOSt. = y ``` ::: ここでカーネルの名前を変えておくと、起動時にどのカーネルを起動すべきかが明確になる。Makefileの最初の記述を以下のようにすると、カーネルのバージョンが `5.11.0-ghOSt+` といった感じに設定される。 ```make # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 11 SUBLEVEL = 0 EXTRAVERSION = -ghOSt # new !! [ ... ] ``` 最後に `make -j $(nproc)` を実行して全体をビルド。 ### STEP 8. カーネルのインストール ``` sudo make modules_install sudo make install sudo make headers_install INSTALL_HDR_PATH=/usr ``` :::warning ghOStのユーザー空間側のアプリをビルドするときにカーネルのヘッダは必要になってくるので忘れずに実行しておく。 `make headers_install` というコマンドを実行するだけでは、ヘッダファイルは `$KERNEL_SRC_TREE/usr` 配下に作られてしまうので注意。 ::: ### STEP 9. grubの設定を変更し、ビルドしたカーネルで起動する ### STEP 10. ghost-userspaceのダウンロード&インストール 基本的には[公式リポジトリ](https://github.com/google/ghost-userspace)のREADME.mdに書かれている方法でやっていけばよい。注意点として、ビルド内部でpython2が要求されるので、あらかじめインストールしておく。 ```bash sudo apt install python2 ``` これまでの処理をすべて行っていれば、ビルド中のエラーは発生しないと思う、、。 リポジトリを手元にクローンする。 ```bash git clone https://github.com/google/ghost-userspace.git ``` ビルドに必要なbazelのインストール。 ```bash sudo apt install apt-transport-https curl gnupg -y curl -fsSL https://bazel.build/bazel-release.pub.gpg | gpg --dearmor >bazel-archive-keyring.gpg sudo mv bazel-archive-keyring.gpg /usr/share/keyrings echo "deb [arch=amd64 signed-by=/usr/share/keyrings/bazel-archive-keyring.gpg] https://storage.googleapis.com/bazel-apt stable jdk1.8" | sudo tee /etc/apt/sources.list.d/bazel.list sudo apt update sudo apt install bazel ``` ビルドに必要なその他のパッケージのインストール。 ```bash sudo apt install libnuma-dev libcap-dev libelf-dev \ libbfd-dev gcc clang-12 llvm zlib1g-dev \ python-is-python3 ``` ビルド。 ```bash bazel build -c opt ... ``` ### STEP 11. テストの実行 テストのビルドは以下の通り行う。 ``` bazel query 'tests(//...)' bazel build -c opt agent_test ``` テストの実行にはroot権限が必要である。 ``` sudo bazel-bin/agent_test ``` ### STEP 12. 実際に動かしてみる FIFOスケジューラのビルド。 ``` bazel build -c opt fifo_per_cpu_agent bazel build -c opt simple_exp ``` ``` sudo bazel-bin/fifo_per_cpu_agent --ghost_cpus 0-1 ```
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up