Rock 5B 開箱後,已經替換 Rock pi 4B 成為我的主力 home server,但還是用 eMMC 作系統碟。看網友們紛紛直上 SSD 秀速度讓我心癢癢,於是開始尋覓適合的 SSD 來升級!

購買 SSD

Rock 5B 僅支援 PCIe Gen3,現在(2023)主流普遍是 PCIe Gen4,插上去反而降速,便宜的大多又是 QLC。

為了提高 C/P 值,我開始尋找 PCIe Gen3 的 SSD,最後找到 Kingston A2000 250G,Gen3 外且是 TLC,蝦皮普遍賣 700~900,俗!

可能是上一代產品的關係,量已不多,最後以 888 入手!

Rock 5B SSD 效能實測與資料搬移

寫入 bootloader

要從 SSD 開機,必須將官方提供的 bootloader 寫入 SPI,文件中提供二種方式

  1. Rock 5B 開機進 linux 下 dd 指令
  2. 用 USB 連接電腦進 Maskrom mode
    1. Linux / Mac 用 rkdeveloptool 工具寫入
    2. Windows 用視窗版的 RKDevTool.exe 寫入

因我已將系統裝到 eMMC 中,以下以法一來實作。

  1. Rock 5B 進入 linux 後,下載官方 bootloader image。版本可能更新,以文件為準
$ wget https://dl.radxa.com/rock5/sw/images/loader/rock-5b/release/rock-5b-spi-image-g49da44e116d.img
  1. 下載空白 image zero.img,在正式寫入 bootloader 前清空 SPI 使用
$ wget https://dl.radxa.com/rock5/sw/images/others/zero.img.gz
  1. dd 清空 SPI,約需等三分鐘
$ sudo dd if=zero.img of=/dev/mtdblock0

32768+0 records in
32768+0 records out
16777216 bytes (17 MB, 16 MiB) copied, 189.637 s, 88.5 kB/s
  1. dd 正式寫入 bootloader,也需等三分鐘
$ sudo dd if=rock-5b-spi-image-g49da44e116d.img of=/dev/mtdblock0

32768+0 records in
32768+0 records out
16777216 bytes (17 MB, 16 MiB) copied, 188.711 s, 88.9 kB/s
  1. sync 一下,強制所有資料都正確寫入,沒有 cache 在記憶體中
$ sync

這樣就完成了!寫入 bootloader 後還是可以從 eMMC 開機。但當 eMMC、SSD 都存在時,會優先從 eMMC 開機,這點需要注意一下!

搬移 eMMC 的資料至 SSD

因 eMMC 已經設置好系統,直接映像搬移比較省時。如果想要重新寫入系統映像至 SSD ,需要用 SSD 轉 USB 插入電腦,把他當 eMMC 一樣寫入即可,詳細參考文件

搬移 eMMC 資料實作步驟如下:

  1. 製作 eMMC 映像檔,將 eMMC 從 Rock 5B 拔下,透過轉接卡連接電腦(Mac)
  2. 透過 dd 指令製作 img 檔。注意,eMMC 裝置代號因人而異,可先透過 diskutil list 查詢
$ sudo dd if=/dev/rdisk4 of=rock5.img bs=1M
  1. 將映像 rock5.img 放入隨身碟(因檔案超過 4g,需使用 exFAT 格式)
  2. 將 eMMC 和 SSD 裝上 Rock 5B,上電開機,此時 boot 入 eMMC 中的 Debian
Rock 5B SSD 效能實測與資料搬移
  1. 官方的 Debian 尚未內建支援 exFAT,由以下指令自行安裝
$ sudo apt install exfat-fuse exfat-utils
  1. lsblk 確認一下隨身碟裝置代號,假設是 /dev/sda1
  2. 掛載隨身碟到資料夾
$ sudo mkdir /media/usb
$ sudo mount.exfat-fuse /dev/sda1 /media/usb
  1. dd 到 SSD,用 lsblk 確認 SSD 裝置代號,假設是 /dev/nvme0n1
$ sudo dd if=/media/usb/rock5.img of=/dev/nvme0n1 bs=1M

從 SSD 開機並擴展磁區

  1. 斷電後將 eMMC 拔掉,並重新上電開機
  2. 因從 32G eMMC 作映像寫入 250G SSD,需要作分區擴展,否則只能使用 32G 的容量
Rock 5B SSD 效能實測與資料搬移
  1. 此問題在 EC2 上直接用內建 growpart + resize2fs 就能搞定,我們也用一樣的解決方案比較簡易。因一般 linux 沒有內建,需要先安裝
$ sudo apt install cloud-guest-utils 
  1. lsblk 一下,確認我們要調的系統分區是 nvme0n1p2 第 2 分區
Rock 5B SSD 效能實測與資料搬移
  1. growpart 先讓分區長大(注意:是 /dev/nvme0n1
$ sudo growpart /dev/nvme0n1 2
Rock 5B SSD 效能實測與資料搬移
  1. 最後用 resize2fs 調整檔案系統(注意:是 /dev/nvme0n1p2
$ sudo resize2fs /dev/nvme0n1p2
Rock 5B SSD 效能實測與資料搬移
  1. 確認一下是否成功
$ df -h
Rock 5B SSD 效能實測與資料搬移

測試效能

系統搬家完畢,立刻跑一下測試,看看效果如何!

參考此篇文章使用 fio 進行測試,測項如下:

  • Sequential READ speed with big blocks QD32  (this should be near the number you see in the specifications for your drive):
fio --name TEST --eta-newline=5s --filename=fio-tempfile.dat --rw=read --size=500m --io_size=10g --blocksize=1024k --ioengine=libaio --fsync=10000 --iodepth=32 --direct=1 --numjobs=1 --runtime=60 --group_reporting
  • Sequential WRITE speed with big blocks QD32  (this should be near the number you see in the specifications for your drive):
fio --name TEST --eta-newline=5s --filename=fio-tempfile.dat --rw=write --size=500m --io_size=10g --blocksize=1024k --ioengine=libaio --fsync=10000 --iodepth=32 --direct=1 --numjobs=1 --runtime=60 --group_reporting
  • Random 4K read QD1  (this is the number that really matters for real world performance unless you know better for sure):
fio --name TEST --eta-newline=5s --filename=fio-tempfile.dat --rw=randread --size=500m --io_size=10g --blocksize=4k --ioengine=libaio --fsync=1 --iodepth=1 --direct=1 --numjobs=1 --runtime=60 --group_reporting
  • Mixed random 4K read and write QD1 with sync  (this is worst case performance you should ever expect from your drive, usually less than 1% of the numbers listed in the spec sheet):
fio --name TEST --eta-newline=5s --filename=fio-tempfile.dat --rw=randrw --size=500m --io_size=10g --blocksize=4k --ioengine=libaio --fsync=1 --iodepth=1 --direct=1 --numjobs=1 --runtime=60 --group_reporting

結果如下:

MB/sSequential READSequential WRITERandom 4K read QD1Mixed random 4K read and write QD1 with sync
rock 5b nvme kingston A2000 250G1942103241.4R / W = 2.868 / 2.852
Rock 5B eMMC32219011.3R / W = 1.441 / 1.44
Rock pi 4B eMMC16491.519.8R / W = 3.744 / 3.727
Oracle VM51.1527.769R / W = 2.081 / 2.084

同時還拉了 Rock pi 4B 和 Oracle VM 來參一腳,看起來 sequential 屌打 eMMC 啊!另外同一顆 eMMC 在 Rock 5B 循序表現也比 Rock pi 4B 好兩倍,看起來在 4B 時 SoC 餵不飽 eMMC

測了一下部落格 wordpress 頁面的 Waiting for server response,關掉 Cloudflare cache,原本 eMMC 大約要 1 ~ 1.5 秒,現在平均能降到 0.8 ~ 1 秒!改進幅度不錯!

其中 800 毫秒的延遲還包含跨國傳輸(免費版 Cloudflare 台灣沒有 CDN,資料要先過美國 server 再回來)

Rock 5B SSD 效能實測與資料搬移

加裝散熱片

我的 Rock 5B 使用被動散熱,上面簡單蓋一個挖透氣孔的紙盒防塵,尚未裝 SSD 時 SoC 待機溫度約莫 40 多,裝了 SSD 後兩者紛紛飆到 50 多快 60,室溫還是在 20 度附近!這樣夏天怎麼辦?趕緊多挖幾個散熱孔,最後降到 45、46

# 查 SoC 溫度
$ sensors

# 查 SSD 溫度與資訊
$ sudo nvme smart-log /dev/nvme0n1
Rock 5B SSD 效能實測與資料搬移

覺得溫度還是有點高,於是上網隨便買了個 49 元便宜 SSD 散熱片給他裝上去,SSD 從 46 降到 40,SoC 從 45.3 小降至 43.5,土砲的效果還不錯!

Rock 5B SSD 效能實測與資料搬移
Rock 5B SSD 效能實測與資料搬移

這次的 Rock 5B 便宜 SSD 加裝效果蠻滿意的,能以 1000 塊有找的價格裝 250G PCIe Gen3 SSD 真是俗勾大碗,完全適合 便宜的小平台!

延伸閱讀

Rock 5B RK3588 開箱測試!
Rock 5B RK3588 終於開放預購!$79 美金起!

J
Written by J
雖然大學唸的是生物,但持著興趣與熱情自學,畢業後轉戰硬體工程師,與宅宅工程師們一起過著沒日沒夜的生活,做著台灣最薄的 intel 筆電,要與 macbook air 比拼。離開後,憑著一股傻勁與朋友創業,再度轉戰軟體工程師,一手扛起前後端、雙平台 app 開發,過程中雖跌跌撞撞,卻也累計不少經驗。可惜不是那 1% 的成功人士,於是加入其他成功人士的新創公司,專職開發後端。沒想到卻在採前人坑的過程中,拓寬了眼界,得到了深層的領悟。