![我的 SAS HDD 阵列可以使用多少 PCI-E 带宽?](https://linux22.com/image/754709/%E6%88%91%E7%9A%84%20SAS%20HDD%20%E9%98%B5%E5%88%97%E5%8F%AF%E4%BB%A5%E4%BD%BF%E7%94%A8%E5%A4%9A%E5%B0%91%20PCI-E%20%E5%B8%A6%E5%AE%BD%EF%BC%9F.png)
注意:这个问题是现实世界的,但是为了分析它,请注意我从设备和总线能力的“理论”起点开始,我承认这通常根本不能代表使用中的带宽利用率。
我有一个由 18 个 SAS3 混合 8TB 和 10TB 企业级硬盘组成的阵列,配置为 ZFS (FreeBSD) 下的 6 组三向镜像。目前它们都挂在单个 24 端口 HBA (9305-24i) 上。
很难知道有多少个驱动器在峰值时一起工作,但假设它们都用于读取,我得到以下计算最坏情况(可能不现实?):
SAS3 单工带宽:(12 gbits/秒)x(8/10 编码)= 1.2 GB/秒原始数据最大值
=> 18 x SAS3 峰值最大值:(1.2 x 18)=21.6 GB/秒
但PCI-E 3.0 x 8单工带宽:7.9 GB/秒
乍一看,似乎阵列在需求下可能会受到严重限制,因为链接将阵列 IO 从 21.6 GB/秒限制到 7.9 GB/秒:HDD I/O 能力损失 64%。
另一方面,文件服务器主要由 2 个最终用户使用:文件服务器本身需要以最高速度进行读写,这是其文件处理的一部分;以及通过 10 GbE 连接的任何其他设备,因此即使使用 2 个链路聚合,单工消耗的速度也不能超过 2 GB/秒。因此,无论如何,它都不能使用超过 PCI-E 链路速度的一小部分。
(即使我通过 SSH 在服务器本身上进行一些文件管理,2 GB/秒的速度仍然相当不错,我可能不会抱怨。)
此外,无论 SAS 3 在理论上能提供什么,12 gbit = 1.2 GB/秒,即使从其内部缓存进行最大读取,企业级 HDD 似乎也不太可能利用 SAS 带宽。SSD 可以,但 HDD 呢?可能性较小?数据表中的最大读取速度通常为 200 - 300 GB/秒左右。
因此我的问题是鉴于 HBA 可以在 PCI-E 上提供高达近 8 GB/秒的带宽,而最终用户最多只能使用 2 GB/秒,那么实际上是否会产生限制效应?
换句话说,如果最终用户的聚合连接速度为 2 GB/秒,那么理论上磁盘阵列在 PCIE 插槽上从 22 GB/秒降到 8 GB/秒是否重要?或者 PCI-E 插槽限制是否仍会成为问题,因为本地系统有时需要比终端设备带宽建议的更快的 I/O?
如果存在限制,我可以将磁盘分成 2 个 HBA,但在牺牲第二个 PCIE 插槽来提高原始磁盘 IO 的标准之前,我想知道如何评估是否存在真正的问题。
答案1
啊,你有没有想过摆脱理论数字?你说得真好……
峰值时最大 18 x SAS3: (1.2 x 18) = 21.6 GB/秒
是的。现在给我看一个硬盘(你说的是 HDD),它可以提供足够的数据来真正饱和它的 SAS3 链路。提示:缓存不是磁盘。
当您看到硬盘可以处理的实际数据数量时,您的论证就站不住脚了。
因此,一个 SAS 10K HDD 约有 140 IOPS。如果使用 8KB 块,吞吐量仅为 8 * 140 = 1120 KB/s。
将其放大 18 倍,最终会得到惊人的 20160kb/秒。四舍五入为 20MB。这占带宽的 0.1%。
SAS 足以处理数百张光盘是有原因的。
现在,当您将 SSD 添加到组合中时,这种情况确实会发生变化,是的,那么您很可能会用完 SAS。使用一个 SSD。这就是为什么 U.2 外形尺寸实际上每个 SSD 使用 PCIe 通道,并且有些情况可以处理其中的 24 个。
但是只要您不谈论 SSD,您基本上就忽略了协议层(标准化)的吞吐量绝对不相关的事实,因为您的终端设备根本无法接近开始饱和这一点。
您不会因为带宽限制而产生节流效应 - 您之所以产生节流效应,是因为您基本上为一些孤独的卡车提供了一条高速公路。