上限肯定有的,走SATA的,最高不超过6Gbps的总线速度(实际速度600MB/s),走PCIE的,要看PCIE的接口的情况,PCIE 4.0 x 1的速度是1969 MB/s,然后根据带宽乘一下就可以了。
也不是说可以无限叠加PCIE带宽。闪存类(NAND)的存储介质,访问速度其实很慢的,对外表现的高速度,其实是因为它的闪存访问通道多(可以实现并发),并且缓存大(一般都是用DDR内存),所以,固态存储的随机读有时候比随机写要慢(发生cache miss)。
那么读写速度的上限,肯定不会超过控制器内的cache的读写上限,也就是DDR内存的访问速度上限,按照DDR4的规范来看,上限应该是12-25GB/s左右。
硬件会随着规范升级而跟着升级,所以理论上限也会跟着DDR内存的速度变化而变化。
消费级的设备永远都不会达到这个速度,因为成本太高。工业级的Intel企业级系列的产品,速度已经能达到7.2GB/s,比较接近于DDR内存的速度了。
一般的用户态程序读取硬盘数据理论上最高可以达到host主内存实际读写速度的一半略低一些的速度,例如双通道DDR4-3200平台大约上限是24GB/s。这是理论上无论有多快的硬盘、再多的PCIe通道和硬盘数量都无法突破的上限,除非使用PCIe P2P直接送到其它设备(例如网卡、显卡或者FPGA加速器等等)
简化的SSD读取流程:
可以看出,在第三步、第四步分别有一次主机内存的写入与读取操作,会占用两倍于IO速度的内存带宽。
一般用户的硬盘数量较少所以通常不会遇到这个瓶颈,但是对于一些特殊的设备(例如NVMe NAS)很可能遇到。
以AM4桌面平台为例,如果将所有PCIe通道都插满NVMe硬盘,可以获得20条直连CPU的PCIe 4.0通道和4条X570的PCIe 4.0通道,能同时连接6个三星980 pro SSD,理论总读取速度约为40GB/s (单盘6.7GB/s)。但是实测所有硬盘同时读取时,在内存不极限超频的情况下无论如何都很难超过24GB/s,内存超频后则可以达到26GB/s或更高。大量SSD读写的场景在DDR5平台会有更好的表现(目前ADL搭配DDR5内存已经可以轻松超越这个数值)。
桌面平台给双通道3200内存仅仅搭配了24条PCIe通道,但同样的架构在服务器上每两个通道都配备了32条PCIe通道,DRAM带来的带宽瓶颈会更明显一些。
事实上也不仅仅是内存可能造成瓶颈,还有处理器内部总线也有可能造成类似问题。如上图所示,sIOD内部的拓扑相比于cIOD非常复杂,并且带宽非常有限,每一个位置都可能成为瓶颈。所以别看128条PCIe 4.0通道提供了512GB/s的双向合计带宽,实际可用的数值会远远低于通过PCIe版本和通道数量计算出来的理论数值。
在这样的环境下需要具体分析硬件IO拓扑,针对性的进行优化,才能达到理想的性能。例如Netflix有一个97页的presentation,专门讲他们如何在不同硬件平台解决大量IO场景下的瓶颈问题。
里面提到了减少CPU对内存的读写,使得内存带宽需求减半的优化。
综上所述,内存和CPU内部总线的速率决定了固态硬盘读写速度的理论绝对上限。