近日,树莓派基金会宣布了树莓派的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。
出处:头条号 @虫虫安全