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