近日,樹莓派基金會宣布了樹莓派的8G內存版本,並發布了一個支持USB引導的固件版本。藉此來解決長期以來令人詬病的磁碟IO問題。此前硬體版本樹莓派最大外部磁碟速度受到限制,尤其是 USB 2.0 總線與網絡適配器共享,進一步限制了其帶寬,即使 USB 啟動也快不到哪去。
樹莓派 Pi 4 架構中不僅將網絡適配器與USB總線分離,而且開始支持USB 3.0,其理論上可以比USB 2.0快10倍。所以此次USB引導測試版的新固件為提高樹莓派的性能帶來了曙光。日前一個小哥Jeff Geerling就分享了他的對新版本體驗,並且做了基準測試,本文我們就一起來學習下小哥的實踐過程。
用USB 引導樹莓Pi 4
首先,用一個32GB SanDisk Pro microSD製作了最新的64位測試版樹莓派作業系統。該測試版本系統可以從樹莓派論壇下載:
要製作引導盤,需要使用使用dd。實踐中使用了一臺老的Mac,當然也可以直接使用樹莓派官方鏡像。
然後,按照USB 引導測試版設置說明,進行以下操作:
1、啟動SD卡引導的樹莓派系統。
2、在樹莓派作業系統中打開終端,也可以通過SSH 從另一臺計算機執行。
3、運行以下命令,升級系統
sudo apt update
sudo apt full-upgrade
4、修改/etc/default/rpi-eeprom-update文件,將其值由"CRITICAL"修改為"BETA"。
5、 運行下面命令,更新EEPROM :
sudo rpi-eeprom-update -d -f /lib/firmware/raspberrypi/bootloader/beta/pieeprom-2020-06-03.bin
6、 重新啟動,並通過打開終端並運行檢查引導加載程序版本:
vcgencmd bootloader_version
應該輸出類似下面的信息:
Jun 3 2020 13:53:47
version b5de8c32f4f45a12a1fdfe107254df82965f9d56 (release)
timestamp 1591188827
這樣表示引導成功,接下來還需要將 Pi OS flash到外部 USB SSD 或 HDD。首先,最好在啟動驅動器時將需要加載的設備插入並確保系統已經識別了它(應該出現在桌面上或者使用lusb找的到)。注意:不是任何外部驅動器和 USB SATA 適配器支持開箱即用。
該試驗中使用的是金士頓A400 240GB SSD,硬碟盒使用的是Inateck USB 3.0 SATA enclosure。
將USB驅動器插入主計算機(之前製作microSD卡的電腦),並將樹莓派操作系系統燒錄到它,和microSD 操作一樣。
在引導boot卷之前,需要將卷上的一些文件替換為 GitHub 的最新版本
在樹莓派固件GitHub 存儲庫(github.com/raspberrypi/firmware),下載發布的zip壓縮包或者git clone整個倉庫。
在boot目錄中,複製所有以.elf和.dat的結尾的文件到boot卷(替換已存在的同名文件)。
彈出boot卷,然後拔下 USB 驅動器。
重啟當前以microSD 卡運行的系統,拔下microSD卡,然後插入USB驅動器。
請確保將驅動器插入到了USB 3.0埠(藍色埠)。
打開樹莓派電源,大約一分鐘後,如果正常就可以應該可以啟動,引導界面如下:
注意:上圖有個錯誤提示,主要是引導加載程序不能啟動通過USB-HDD後系統重新啟動的問題,不影響使用。目前解決方案拔下引導usb設備樹莓派完全關閉電源, 然後插入它回來。
基準測試
為了了解其microSD卡啟動時磁碟和USB SSD啟動的性能差距,小哥進行了一系列的基準測試。
第一個基準測試是對大文件寫入及小文件(4K)隨機訪問讀取/寫入。這兩者都很重要,但在許多方面,當使用像樹莓派這樣的通用計算機時,後者的差異會更有意義,因為計算機不不會整天讀取和寫入大型文件(大量順序訪問),例如攝像機或無人機(這是大多數microSD卡都會優化的用例)。
如果要自行運行此基準測試。記錄在Pi Dramble維基的磁碟訪問基準頁。注意,對於 USB SSD,測試中修改了hdparm路徑由/dev/mmcblk0改成了/dev/sda1。結果如下圖:
結果確實可以說明問題。對於順序操作,使用 USB SSD 比使用 microSD 卡快 3-4 倍。對於隨機訪問,隨機讀取速度稍快一些,但寫入速度約為8倍。這在很多活動中有所不同,例如啟動應用、運行具有許多選項卡的 Web 瀏覽器。順序性能意味著可以輕鬆流式傳輸和錄製4K高清視頻,樹莓派也有足夠的帶寬用於其他內容。
為了了解磁碟訪問如何影響熟悉的真實應用程式的性能(並且能夠以高度準確的結果徹底進行基準測試),還測試運行多年的Pi Dramble Drupal 基準,運行了一組Drupal基準。測試會運行Docker容器化的Drupal系統和MariaDB資料庫,然後通過Nginx訪問。結果如下:
和前面一樣,也運行了所有測試 4x,在同一配置上,所有結果都相差不到 0.5%,因此很明顯,SSD 在許多操作中產生了巨大的不同:Drupal 的安裝和第一頁加載導致數百個文件被訪問和/或寫入磁碟,因此在 SSD 上更快。因此,它有意義。
另外還測試了另一個方案:在 Drupal 中加載和重新加載頁面:
這些基準測試顯示,對於某些操作,磁碟IO性能差異並不明顯。在 Drupal的案例中,處理和返回每個頁面時會將所需的數據將緩存(opcache 或者memcache,redis等資料庫的緩存中),可以保持讀取和寫入最小化。
總結
本文中嘗試了在樹莓派中運行USB SSD的嘗試。根據基準測試使用USB3.0和SSD硬碟可以極大提高樹莓派的IO性能。在這種方案下,可以一定程度上擴充樹莓派的存儲和訪問性能,可以讓樹莓派的通用性加大,而不僅僅是個玩具。當然我們的呼聲是樹莓派能提供真正的磁碟接口,而不僅僅是USB。