Raspberry Pi3用Debianイメージを色々なアーキテクチャに対応させて作成する

#はじめに
Debian公式サポートにあるようにDebianは公式でarmel,armhf,arm64のアーキテクチャをサポートしている。
https://www.debian.org/ports/#portlist-released

2019年夏にリリース予定のDebian BusterではDebian公式として、ラズパイ3をサポートするらしい。(どうもarm64版として)
http://gihyo.jp/admin/clip/01/linux_dt/201709/07
そのラズパイ3用arm64版BusterのPREVIEW版はすでに2版目がリリースされている。
https://wiki.debian.org/RaspberryPi3
WindowsとWin32 Disk Imagerを使ってもブート用SDカードが作れることを確認できた。

Busterまでは待てないので、Stretchのarm64やarmhfが欲しいという人は、rpi23-gen-imageを使えとDebian Wikiに書いてあるため、実際に作ってパフォーマンスをテストしてみた。

#結果
最初に結論を書いてしまうと面白くないのだが、arm64版Debianと公式Raspbianを比べてみたが、Unixbenchの総合評価であるSystem Benchmarks Index Scoreではほとんど差が出なかった。
それだけRaspbianとCPUの最適化が完璧に近いと考察できるが、rpi23-gen-imageがもう少し頑張れるはずと考察もできる。
なお、先に紹介したraspberry-pi-3-buster-PREVIEWはパフォーマンスが出なく、完成にはもう少し時間がかかりそうな結果となった。

#イメージ作成方法
結果は残念ではあるが、イメージの作成方法だけ記載しておく。
rpi23-gen-imageがアップデートすればRaspbianと十分差がつく可能性もあるため、それを期待しておく。

##ラズパイ3用arm64版Stretch
WSLでは失敗します。VMなどをお使いください。

```
$ sudo apt update
$ sudo apt install -y debootstrap debian-archive-keyring qemu-user-static binfmt-support dosfstools rsync bmap-tools whois git bc psmisc dbus sudo git crossbuild-essential-arm64
$ git clone https://github.com/drtyhlpr/rpi23-gen-image.git
$ cd rpi23-gen-image
$ sudo su

# CONFIG_TEMPLATE=rpi3-stretch-arm64-4.11.y ./rpi23-gen-image.sh
# exit
```

rpi23-gen-image/images/stretch/2018-\*\*-\*\*-arm64-rpi-4.11.y-rpi3-stretch-arm64.imgが作成される(2018-\*\*-\*\*は作成日の日付)

これをSDカードに書き込みます。

```
$ cd images/stretch/
$ umount /dev/mmcblk0p1
$ umount /dev/mmcblk0p2
$ sudo dd bs=4M if=2018-**-**-arm64-rpi-4.11.y-rpi3-stretch-arm64.img of=/dev/mmcblk0 conv=fsync
$ sync
```

##ラズパイ3用armhf版Stretch
WSLでは失敗します。VMなどをお使いください。

```
$ sudo apt update
$ sudo apt install -y debootstrap debian-archive-keyring qemu-user-static binfmt-support dosfstools rsync bmap-tools whois git bc psmisc dbus sudo git crossbuild-essential-armhf
$ git clone https://github.com/drtyhlpr/rpi23-gen-image.git
$ cd rpi23-gen-image
$ sudo su

# CONFIG_TEMPLATE=rpi3stretch ./rpi23-gen-image.sh
# exit
```

rpi23-gen-image/images/stretch/2018-\*\*-\*\*-debian-rpi3stretch.imgが作成される(2018-\*\*-\*\*は作成日の日付)

これをSDカードに書き込みます。

```
$ cd images/stretch/
$ umount /dev/mmcblk0p1
$ umount /dev/mmcblk0p2
$ sudo dd bs=4M if=2018-**-**-debian-rpi3stretch.img of=/dev/mmcblk0 conv=fsync
$ sync
```

#ベンチマーク下準備
|         |設定値     |
|:--------|:----------|
|User Name|pi         |
|Password |raspberry  |
|Host Name|pi3-stretch|

SSHまたはローカルでログインし、以下のコマンドを実行する。

```
$ sudo apt update
$ sudo apt install -y git build-essential cpufrequtils
$ grep "" /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
```

scaling_governor:ondemandと表示されれば、CPUは負荷に応じてフルパワーで駆動する設定になっています。

次にベンチマークソフトのUnixBenchをインストール、実行します。ベンチマーク中はヒートシンクをつけていてもヒートアラートが出ます。筆者はアイスノンで冷やしました。

```
$ git clone https://github.com/kdlucas/byte-unixbench.git
$ cd byte-unixbench/UnixBench/
$ make
$ ./Run -c 4
```

#結果詳細

|Image File|2018-04-18-raspbian-stretch-lite.img|2018-05-14-arm64-rpi-4.11.y-rpi3-stretch-arm64|2018-01-08-raspberry-pi-3-buster-PREVIEW.img|
|:--------|:---------------------|:---------------|:---------------|
|Link     |[Download Raspbian for Raspberry Pi](https://downloads.raspberrypi.org/raspbian_lite/images/raspbian_lite-2018-04-19/2018-04-18-raspbian-stretch-lite.zip)||[RaspberryPi3 - Debian Wiki](https://people.debian.org/~stapelberg/raspberrypi3/2018-01-08/2018-01-08-raspberry-pi-3-buster-PREVIEW.img.xz)|
|System:  |raspberrypi: GNU/Linux|rpi3-stretch: GNU/Linux|rpi3: GNU/Linux |
|OS:      |GNU/Linux -- 4.14.34-v7+ -- #1110 SMP Mon Apr 16 15:18:51 BST 2018|GNU/Linux -- 4.11.12-v8 -- #1 SMP PREEMPT Mon May 14 23:29:46 JST 2018|GNU/Linux -- 4.16.0-1-arm64 -- #1 SMP Debian 4.16.5-1 (2018-04-29)|
|Machine: |armv7l: unknown|aarch64: unknown|aarch64: unknown|
|Language:|en_US.utf8 (charmap="ANSI_X3.4-1968", collate="ANSI_X3.4-1968")|en_US.utf8 (charmap="ANSI_X3.4-1968", collate="ANSI_X3.4-1968")|en_US.utf8 (charmap="ANSI_X3.4-1968", collate="ANSI_X3.4-1968")|

Benchmark Run: 4 CPUs; 4 parallel processes

|Image File|2018-04-18-raspbian-stretch-lite.img|2018-05-14-arm64-rpi-4.11.y-rpi3-stretch-arm64|2018-01-08-raspberry-pi-3-buster-PREVIEW.img|
|:------------------------------------|-----:|-----:|-----:|
|Dhrystone 2 using register variables |1485.5|2023.5|1102.3|
|Double-Precision Whetstone           |770.1 |810.8 |398.0 |
|Execl Throughput                     |506.8 |603.9 |365.9 |
|File Copy 1024 bufsize 2000 maxblocks|553.5 |471.1 |327.7 |
|File Copy 256 bufsize 500 maxblocks  |372.8 |309.8 |211.1 |
|File Copy 4096 bufsize 8000 maxblocks|921.8 |930.6 |646.2 |
|Pipe Throughput                      |946.8 |921.2 |517.5 |
|Pipe-based Context Switching         |605.0 |436.2 |270.4 |
|Process Creation                     |374.4 |483.8 |269.3 |
|Shell Scripts (1 concurrent)         |1061.5|1277.4|738.5 |
|Shell Scripts (8 concurrent)         |1024.8|1131.8|670.7 |
|System Call Overhead                 |1478.2|1067.2|713.1 |
|System Benchmarks Index Score:       |761.5 |765.3 |462.4 |