Raspberry Pi CM4上的硬件SAS突袭

2021-02-28 12:37:42

几个月前,我在Raspberry Pi上发布了一个名为Enterprise SAS RAID的视频……但我从未真正在其中显示SAS驱动器。不久之后,我在Raspberry Pi上发布了另一个视频,“最快的SATA RAID”。

好了,现在我已经在Raspberry Pi的硬件​​RAID控制器上运行了实际的企业SAS驱动器,它比最快的还快。我在其他视频中设置的SATA RAID阵列。

一位名叫Josh的Broadcom工程师观看了我以前的视频,并意识到我正在测试的古老LSI卡不太可能与Pi中的ARM处理器配合使用,因此他能够以两种方式发送两个套件:

经过漫长而艰苦的旅程,其中涉及在卡上进行多个驱动程序修订和UART调试,然后我能够在Pi上启动多个硬件RAID阵列。

但是,什么是SAS RAID?什么使硬件RAID优于我在SATA视频中使用的软件RAID?

您今天在NAS或服务器中可能使用的驱动器通常分为三类:

所有这三种类型都可以使用固态存储(SSD),以实现较高的IOPS和快速的传输速度。

SATA和SAS驱动器也可能使用旋转存储,该存储可以以较低的价格提供更高的容量,尽管此类驱动器在延迟方面存在严重的权衡。

RAID代表独立磁盘冗余阵列,是一种将两个或多个驱动器放在一起并放入一个卷的方法,您的操作系统可以将其视为一个驱动器。

冗余:硬盘驱动器(或多个驱动器,具体取决于RAID类型)可能会发生故障,并且您不会立即失去对数据的访问权限。

性能:可以对多个驱动器进行条带化。以提高读取或写入吞吐量(再次取决于RAID类型)。

额外的缓存配置(用于分离RAM或什至专用于更快的高速缓存驱动器)可以加快速度,其速度甚至超过了主驱动器本身,并且硬件RAID可以通过单独的闪存存储提供更好的数据保护如果断电,则缓存写入数据。

注意:如果您可以将所有数据放在一个硬盘上,并且已经有一个好的备份系统,并且不需要最大的可用性,则可能不需要RAID。

我在Raspberry Pi SATA RAID NAS视频中对RAID本身进行了更详细的介绍,请查看该内容以了解更多信息。

所有这三个描述了用于存储设备的接口。而像9460-16i这样的现代存储控制器最好的一点是,您可以通过一个HBA(主机-总线适配器)连接到所有三个控制器。

如果您可以在具有大量RAM的快速PC上花费数千美元,则ZFS或BTRFS之类的软件RAID解决方案将提供许多出色的功能,并且相当可靠。

但是在像我的Raspberry Pi这样的系统上,基于软件的RAID占用了Pi的CPU和RAM的大部分,并且性能也不佳。 (请参阅有关/ u / rigg77的ZFS实验的出色文章)。

使用基于mdadm的软件进行RAID可获得的最快磁盘速度约为325 MB /秒,而使用RAID 10可以达到。

使用硬件RAID使我获得了超过400 MB /秒的速度。这将使性能提高20%,并使Pi CPU可以自由执行其他操作。

稍后我们将进一步提高性能,但是首先,我必须解决房间里的大象问题。

人们总是在问为什么我要在低功率的Raspberry Pis上测试所有这些卡(在这种情况下,这是一张花费600美元的存储卡)。我的办公室里甚至有第10代Intel台式机,为什么不使用它呢?

好吧,首先,这很有趣,我喜欢挑战,而且我从中学到了很多东西,因为失败不仅教会了我成功的秘诀。

在办公桌的一个小角落,我可以放置8个驱动器,一个企业RAID控制器,我的Pi以及其他一些用于测试的设备。当我在台式机上做同样的事情时,我很快就用光了空间。必须转到我的另一台"台式机"的负担进行测试意味着我不太可能一时兴起地尝试一些新想法。

Pi具有快速专用的RAID芯片和额外的4 GB DDR4缓存用于存储,从而为Pi提供了可靠的快速磁盘IO。

如果您不需要每秒处理数GB的数据,那么与在更快的CPU上运行软件RAID相比,Pi和MegaRAID的能源效率更高。该设置使用了10-20W的功率。

我自己的没有安装RAID卡或未连接存储设备的Intel i3台式机在25W时空闲,但通常徘徊在40W左右,这是未安装存储卡时功耗的两倍。

不过,基于Pi的RAID解决方案不会接管亚马逊的数据中心。 Pi并不是为此而建造的。但这是一个引人注目的存储设置,直到Compute Module 4出现之前,这是不可能的。

Josh发送的MegaRAID卡是PCIe Gen 3.1,并支持x8通道的PCIe带宽。

不幸的是,Pi只能以Gen 2速度处理x1通道,这意味着您无法获得最高6+ GB /秒的存储吞吐量,只有后者的1/12。但是Pi可以使用四个花哨的技巧来使该卡具有我之前测试的SATA卡不具备的功能:

SAS RAID-on-Chip(计算机自主RAID),负责所有RAID存储操作。无需管理RAID操作,从而节省了Pi的CPU速度。

4 GB DDR4 SDRAM缓存,加快了速度较慢的驱动器上的IO,并节省了Pi宝贵的1/2/4/8 GB RAM。

可选的CacheVault闪存备份:插入超级电容器,如果断电,它将卡写入缓存中的所有内存转储到内置闪存存储芯片中。

三模式端口使您可以将任何类型的驱动器插入卡(SATA,SAS或NVMe),并且可以使用该驱动器。

它还可以完成片上RAID的内部所有操作,因此,即使您插入多个NVMe驱动器,也不会成为Pi可怜的小CPU的瓶颈(它的IO带宽受到严重限制) )。使用多个NVMe驱动器时,甚至更快的处理器也会遇到带宽问题。

哦,我是否提到过它可以将多达24个NVMe驱动器或多达240个SAS或SATA驱动器连接到Pi?

Josh随卡发送了一个驱动程序,一些有用的编译建议以及一些实用程序。

一开始我在编译驱动程序时遇到了一些麻烦,然后立即遇到了几个问题:

对于64位Pi OS测试版(此后已创建),raspberrypi-kernel-headers软件包不存在,因此我必须为64位内核编译自己的标头。

Raspberry Pi OS不支持MSI-X,但幸运的是,Phil Elwell对Pi OS进行了内核调整,使其至少在基本级别上启用了它,以回应有关使Google Coral TPU通过PCIe工作的论坛主题。 。

解决了这两个问题后,我再次交叉编译了Pi OS内核,然后展开另一个问题:驱动程序假定它具有用于IRQ轮询功能的CONFIG_IRQ_POLL = y,但是默认情况下未为Pi内核设置,因此我不得不重新编译才能使该选项正常工作。

最后,以为我很清楚,我发现交叉编译内核的内核头文件和源代码不是像内核本身那样为ARM64构建的,而不是继续调试我的交叉编译环境,而是项目符号,并在Raspberry Pi本身上进行了整整1小时的编译。

我兴奋地运行了sudo insmod megaraid_sas.ko,然后...挂起,五分钟后,在dmesg中打印了以下内容:

[372.867846] megaraid_sas 0000:01:00.0:SCSI主机0的初始化cmd返回状态失败[[373.054122] megaraid_sas 0000:01:00.0:从megasas_init_fw 6747失败

事情变得越来越严重,因为另外两名Broadcom工程师与Josh和我一起参加了电话会议,他们让我从卡上拉出串行UART输出来调试PCIe内存寻址问题!

我们发现该驱动程序可以在32位Pi OS上运行,但不能在64位Beta上运行。真奇怪,因为根据我的经验,驱动程序通常在64位操作系统下工作得更好。

几天后,Broadcom驱动程序工程师发送了补丁程序,该补丁程序解决了该问题,该问题与使用writeq函数有关,该功能显然在Pi上没有得到很好的支持。 Josh向Pi内核发布队列提交了一个错误报告:64位上的writeq()不会发出PCIe周期,切换到两个writel()即可。

无论如何,驱动程序终于可以工作了,我可以在dmesg输出中看到连接的存储机柜!

StorCLI是用于管理MegaRAID卡上RAID卷的实用程序,Broadcom在其网站上提供了全面的StorCLI参考。

我用来设置4驱动器SAS RAID 5阵列的命令如下所示:

我将条带大小设置为256 KB(这是HDD的典型值-64 KB对于SSD更为常见)。 我创建了两个RAID 5卷:一个带有四个Kingston SA400 SATA SSD,另一个带有四个HP ProLiant 10K SAS驱动器。 我使用lsblk -S来确保新设备sda和sdb在我的系统上可见。 然后,我对它们进行了分区和格式化: 此时,我有一个333 GB的SSD阵列和一个836 GB的SAS阵列。 我安装了它们,并确保可以读写。 我还想确保存储阵列在系统启动时可用,因此我可以通过NFS自动共享它们,因此我将编译的驱动程序模块安装到了内核中: 我将模块复制到了已编译内核的内核驱动程序目录中:sudo cp megaraid_sas.ko / lib / modules / $(uname -r)/ kernel / drivers / 我将模块名称' megaraid_sas'添加到/ etc / modules文件的末尾:echo' megaraid_sas'。 | sudo tee -a / etc /模块

需要注意的一件事是,像这样的RAID卡可能需要一两分钟才能初始化,因为它有自己的初始化过程。因此,如果您要先等待存储卡上线,则Pi的启动时间会更长一些。

关于电源的注意事项:在测试HBA时,我使用了几个不同的电源。我发现如果使用低功率的12V 2A电源,该卡似乎无法获得足够的功率,并且会不断地自我重启。我切换到12V 5A电源,该卡运行良好。 (我没有尝试使用外部供电的GPU提升板,因为我对它们有混合的经验。)

首先,即使便宜的SSD仍然比旋转SAS驱动器更快。没有真正的惊喜。

其次,SSD速度的限制是Pi的PCIe总线。我能够获得3.35 Gbps的带宽,实际上比我可以通过ASUS 10G网络适配器获得的带宽更好,后者最多只能达到3.27吉比特。

我可以做很多其他的测试,但是我想看看驱动器在网络存储方面的表现如何,所以我安装了Samba和NFS并运行了更多的基准测试。

令我惊讶的是,Samba和NFS的读取速度几乎都达到了线速,这意味着Pi能够以千兆位接口可以通过的速度向Mac传输数据。

如果您还记得我的SATA RAID视频,使用NFS可以获得的最快速度为106 MB /秒,而当Pi忙于整理软件RAID时,当数据包排队时,该速度就会波动。

在存储控制器处理RAID的情况下,Pi在10GB以上的文件复制期间连续保持117 MB /秒的稳定速度。

2.5 GbE网络怎么样?我实际上有两个PCIe交换机,并且已经成功与Pi一起使用了几个不同的2.5 Gbps NIC。因此,我尝试同时使用交换机和一些NIC,但是不幸的是,我无法通过交换机为NIC和耗电的存储控制器获得足够的电力。

我什至拔出了600W PC PSU,但在尝试将PS_ON引脚短路以加电时不小心炸了它。哎呀。

因此,不幸的是,必须等到获得新的电源后才能达到2.5 Gbps的性能。

最后,我在Raspberry Pi上运行了真正的硬件SAS RAID。不过,Josh实际上是第一个在32位Pi OS上这样做的人。

不过,我们正在测试的驱动程序仍然是预发布的。如果您今天用完并购买了MegaRAID控制器,在将其更改为公共驱动程序之前,要在Pi上运行它会遇到一些麻烦。

我是否会建议您为自制的基于Pi的NAS购买此$ 1000 HBA?也许不吧。但是,您可以获得一个较低端的版本9440-8i。仍然具有所有高端功能,并且在eBay上使用的价格不到200美元(主要是Dell服务器的拉动)。

但是,如果您只想构建便宜的NAS并且仅使用SATA驱动器,那么即使这样做可能也太过分了。 我将很快涵盖更便宜的NAS选项,因此请订阅此博客的RSS feed,或订阅我的YouTube频道以继续学习!