衝撃のわからなさ

わかってません

2024/01/09日報

rosettaを使ったapple silicon上でのビルド計測

Desktop Parallels上のUbuntuでの設定

Desktop Parallels を使っているので下記に従って設定した。
既存イメージを流用する方を試した。

KB Parallels: Using Rosetta to run x86-64 Docker Containers and Binaries in Linux virtual machines with Parallels Desktop

qemuが実行されてないか確認。

$ ls /proc/sys/fs/binfmt_misc/
llvm-15-runtime.binfmt  python3.10  register  RosettaLinux  status
$ cat /proc/sys/fs/binfmt_misc/RosettaLinux
enabled
interpreter /media/psf/RosettaLinux/rosetta
flags: OCF
offset 0
magic 7f454c4602010100000000000000000002003e00
mask fffffffffffefe00fffffffffffffffffeffffff

実測

mimic-crossのexampleにおいているbinutilsのビルドを実行してみた。
nativeビルド33.6sに対して217.6s。2回目は272.6sだった。
qemu-x86_64も試してみたがこちらは頻繁にエラーで止まってしまって諦めた。
割りとx86_64でqemu-aarch64使ったケースと同じぐらいのスケールだった。
mimic-crossを使う価値は十分にありそう。

$ docker buildx build -f binutils.dockerfile .
...
 => [2/7] RUN apt-get update &&     apt-get install -y --no-install-recommends         wget ca-certificates         binutils  26.6s
 => [3/7] RUN wget https://ftp.gnu.org/gnu/binutils/binutils-2.36.tar.gz                                                       5.8s
 => [4/7] RUN tar xf ./binutils-2.36.tar.gz                                                                                    2.1s
 => [5/7] WORKDIR /binutils-2.36                                                                                               0.1s
 => [6/7] RUN ./configure                                                                                                      1.3s
 => [7/7] RUN make -j `nproc`                                                                                                 33.6s
...
$ docker buildx build --platform=linux/amd64 -f binutils.dockerfile .
...
 => [2/7] RUN apt-get update &&     apt-get install -y --no-install-recommends         wget ca-certificates         binutils gcc make libc6-dev &&     apt-get clean   61.8s
 => [3/7] RUN wget https://ftp.gnu.org/gnu/binutils/binutils-2.36.tar.gz                                                                                               27.1s
 => [4/7] RUN tar xf ./binutils-2.36.tar.gz                                                                                                                             2.3s
 => [5/7] WORKDIR /binutils-2.36                                                                                                                                        0.1s
 => [6/7] RUN ./configure                                                                                                                                              10.1s
 => [7/7] RUN make -j `nproc`                                                                                                                                         217.6s
...

mimic-cross実装

自動deployの探索対象をtargetからhostに修正

dpkg -lをtargetに対してかけてしまっていた。
これだとhostにしかinstallされていないpackageをdeployできないので修正した。
ただしファイルすべてをdeployするわけではないので実行ファイルが他のファイルを必要とすると target側にもapt-get installしないと現状は動作しないケースが多々ある。
commit: Let deploy-packages search /host

deploy-packageが複数引数取れるように

修正した。
commit: Support deploy-packages multi arguments

mimicx chroot

mimicx chroot apt-get update

などやりたかったので、 すでに内部実装で使っているhostへのchrootcliにも出した。
commit: mimicx chroot