Raspberry Pi 4をSSDからブートしてベンチマークしてみた
はじめに
Raspberry Pi 4 Model Bの8GB版を入手したので、以前からやってみたかったSSDからのブートについて試してみました。
・・・あっさり成功しました。
特段に記事にする内容はありませんでしたが、手順を整理し、ストレージのI/Oについてベンチマークテストの結果を記します。
Raspberry Pi 4をUSB接続のSSDからブートする
Raspberry Pi 4のUSBマスストレージデバイスからのブートは、当初はいろいろと大変だったみたいですが、現時点(2021年5月4日)ではブートローダも正式版になり、誰でも手軽に試すことができます。
以下の記事が参考になりました。
- Raspberry Pi4のUSB(HDD)起動設定 - Qiita
- How to Boot Raspberry Pi 4 From a USB SSD or Flash Drive | Tom's Hardware
環境
OSには、Raspberry Pi OS Lite 64ビット版(2021-04-09版)を使用しました。イメージのファイルサイズとSHA-1ハッシュ値は以下の通りです。
$ ls -l 2021-03-04-raspios-buster-arm64-lite.*
-rw-r--r--@ 1 yuya  staff  1807745024 Mar  5 09:14 2021-03-04-raspios-buster-arm64-lite.img
-rw-r--r--@ 1 yuya  staff   403415352 Apr 27 16:43 2021-03-04-raspios-buster-arm64-lite.zip
$ shasum 2021-03-04-raspios-buster-arm64-lite.*
496813e17c51d863ee22aea449e45798fbd077c8  2021-03-04-raspios-buster-arm64-lite.img
1bf60e17074decf585cf1ba1736c7fcc575eb39d  2021-03-04-raspios-buster-arm64-lite.zip
microSDカードからのブート
まずは動作確認と設定のために、microSDカードにOSイメージを書き込んでブートしました。ブート後の環境は以下の通りです。メモリに余裕があって良いですね。
$ cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 10 (buster)"
NAME="Debian GNU/Linux"
VERSION_ID="10"
VERSION="10 (buster)"
VERSION_CODENAME=buster
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
$ uname -a
Linux raspi4b8g-1 5.10.17-v8+ #1403 SMP PREEMPT Mon Feb 22 11:37:54 GMT 2021 aarch64 GNU/Linux
$ grep Model /proc/cpuinfo
Model		: Raspberry Pi 4 Model B Rev 1.4
$ free
              total        used        free      shared  buff/cache   available
Mem:        8000844       70332     7565916       16844      364596     7798872
Swap:        102396           0      102396
ブートローダの更新
OSのアップデート後、raspi-configコマンドを使って最新のブートローダに変更します。
$ sudo apt update
$ sudo apt upgrade
$ sudo rpi-eeprom-update
*** UPDATE AVAILABLE ***
BOOTLOADER: update available
   CURRENT: Thu Mar 19 14:27:25 UTC 2020 (1584628045)
    LATEST: Thu Sep  3 12:11:43 UTC 2020 (1599135103)
   RELEASE: default (/lib/firmware/raspberrypi/bootloader/default)
            Use raspi-config to change the release.
  VL805_FW: Using bootloader EEPROM
     VL805: up-to-date
   CURRENT: 000137ad
    LATEST: 000137ad
$ sudo raspi-config
# 6 Advanced Options
# A7 Bootloader Version
# E1 Latest  Use the latest version boot ROM software
# 再起動
$ sudo rpi-eeprom-update
BOOTLOADER: up-to-date
   CURRENT: Thu Mar 18 08:54:11 UTC 2021 (1616057651)
    LATEST: Thu Mar 18 08:54:11 UTC 2021 (1616057651)
   RELEASE: stable (/lib/firmware/raspberrypi/bootloader/stable)
            Use raspi-config to change the release.
  VL805_FW: Using bootloader EEPROM
     VL805: up-to-date
   CURRENT: 000138a1
    LATEST: 000138a1
microSDカードからSSDへのコピー
USB接続のSSD「BUFFALO SSD-PGM480U3-B/N」をRaspberry Pi 4のUSB 3.0ポート(青い方)に接続し、ddコマンドを使ってmicroSDカードの内容をSSDにコピーしました。64GBのコピーに約25分掛かりました。
念のため、lsusbで接続速度を確認しました。5000Mとなっているので、USB 3.0で接続されていることが分かります。
$ lsusb -t
/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 5000M
    |__ Port 1: Dev 2, If 0, Class=Mass Storage, Driver=uas, 5000M
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/1p, 480M
    |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/4p, 480M
$ lsblk
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda           8:0    0 447.1G  0 disk
mmcblk0     179:0    0  59.7G  0 disk
|-mmcblk0p1 179:1    0   256M  0 part /boot
`-mmcblk0p2 179:2    0  59.4G  0 part /
# 注意: デバイス名を間違えると、データの消失などの回復不能な問題が生じますので注意してください。
$ sudo dd if=/dev/mmcblk0 of=/dev/sda bs=16M status=progress
64088965120 bytes (64 GB, 60 GiB) copied, 1455 s, 44.0 MB/s
3820+0 records in
3820+0 records out
64088965120 bytes (64 GB, 60 GiB) copied, 1465.68 s, 43.7 MB/s
$ lsblk
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda           8:0    0 447.1G  0 disk
|-sda1        8:1    0   256M  0 part
`-sda2        8:2    0  59.4G  0 part
mmcblk0     179:0    0  59.7G  0 disk
|-mmcblk0p1 179:1    0   256M  0 part /boot
`-mmcblk0p2 179:2    0  59.4G  0 part /
ブート順序の変更
raspi-configコマンドを使って、USBデバイスから優先的にブートするように設定します。
$ sudo raspi-config
# 6 Advanced Options
# A6 Boot Order
# B2 USB Boot     Boot from USB if available, otherwise boot from SD Card
再起動すれば、USBデバイスからブートします。楽チンですね。
ストレージのベンチマーク
microSDカードからブートした場合と、SSDからブートした場合のそれぞれについて、ストレージのベンチマークテストを実施しました。
以下の記事を参考に、fioコマンドを使い、以下の設定で測定を実施しました。
LinuxでもCrystalDiskMarkぽいディスクベンチマークしたい - 動かざることバグの如し
$ sudo apt update
$ sudo apt install fio
$ cat <<EOS > fio.config
[global]
ioengine=libaio
iodepth=1
size=1g
direct=1
runtime=60
directory=/tmp
stonewall
[Seq-Read]
bs=1m
rw=read
[Seq-Write]
bs=1m
rw=write
[Rand-Read-512K]
bs=512k
rw=randread
[Rand-Write-512K]
bs=512k
rw=randwrite
[Rand-Read-4K]
bs=4k
rw=randread
[Rand-Write-4K]
bs=4k
rw=randwrite
[Rand-Read-4K-QD32]
iodepth=32
bs=4k
rw=randread
[Rand-Write-4K-QD32]
iodepth=32
bs=4k
rw=randwrite
EOS
microSDカードの測定結果
microSDカードからブートした場合の測定結果は以下の通りです。
$ lsblk
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
mmcblk0     179:0    0  59.7G  0 disk
|-mmcblk0p1 179:1    0   256M  0 part /boot
`-mmcblk0p2 179:2    0  59.4G  0 part /
$ fio -f fio.config
| 項目 | 速度 | IOPS | 
|---|---|---|
| Seq-Read | 43.9MB/s | 41 | 
| Seq-Write | 22.5MB/s | 21 | 
| Rand-Read-512K | 42.3MB/s | 80 | 
| Rand-Write-512K | 19.0MB/s | 36 | 
| Rand-Read-4K | 10.6MB/s | 2575 | 
| Rand-Write-4K | 3849kB/s | 939 | 
| Rand-Read-4K-QD32 | 14.3MB/s | 3493 | 
| Rand-Write-4K-QD32 | 4559kB/s | 1113 | 
SSDの測定結果
$ lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0 447.1G  0 disk
|-sda1   8:1    0   256M  0 part /boot
`-sda2   8:2    0  59.4G  0 part /
$ fio -f fio.config
| 項目 | 速度 | IOPS | 
|---|---|---|
| Seq-Read | 295MB/s | 281 | 
| Seq-Write | 244MB/s | 232 | 
| Rand-Read-512K | 213MB/s | 405 | 
| Rand-Write-512K | 203MB/s | 386 | 
| Rand-Read-4K | 20.6MB/s | 5040 | 
| Rand-Write-4K | 24.0MB/s | 5862 | 
| Rand-Read-4K-QD32 | 69.4MB/s | 16.9k | 
| Rand-Write-4K-QD32 | 42.5MB/s | 10.4k | 
最後に
今回はRaspberry Pi 4のSSDからのブートを試しました。
当たり前ですが、microSDカードよりSSDの方がだいぶ高速ですね。
また、耐久性もSSDの方が高いと思われることから、より安定した運用が期待できそうです。


Discussion