与电脑系统一样,如今的车载计算系统也有硬盘,重要的数据和训练好的权重模型存在硬盘(即eMMC或UFS)里。UFS4.0版本的接口带宽是23.2Gbps也就是2.9GB/s,远低于DRAM的带宽,连LPDDR3都不如,eMMC就更低了,只有400MB/s。
目前电脑SSD硬盘是M.2接口居多,M.2跑PCIe 4.0的话带宽是64Gb/s。有几个定义需要分清,SSD指固态存储,对应的是以前的机械硬盘存储或磁带存储,无论是车载的NVMe、PCIe还是手机的UFS,都是SSD。M.2是硬盘接口标准,可以对应机械硬盘的SATA,也可以对应固态硬盘的NVMe。NVMe是通讯协议标准,PCIe是物理层标准,SATA是接口类型,机械硬盘的通讯协议是AHCI,手机的UFS使用的是MIPI的M-PHY物理层,SCSI-SAM通讯协议。今天我们说的车规级SSD硬盘指的是PCIe做物理层,NVMe做通讯协议的固态硬盘。
每次运算的时候,CPU发出指令,权重模型从UFS中被取出暂存在DRAM中,如果有显存的话,就放在显存里,通常显存比共享DRAM带宽要高得多,这样每次运算就无需从UFS中取出,这也是DRAM和显存存在的意义,它的速度比UFS快太多了。
存储行业的标准制定者JEDEC在2022年11月通过了JESD312标准,12月14日正式公开发布。JESD312定义了用于汽车和类似应用的SSD封装、协议、环境要求和电气接口。车用SSD将使用BGA形式直接贴装在PCB板上,尺寸不大于28 x 28毫米,使用PCIe 4.0 x4接口提供最高8GB/s的峰值传输速率。
JESD312充分考虑汽车电子架构变化,以软件定义汽车,中央计算架构为目标,允许分割存储阵列。
来源:JEDEC
JESD312将操作系统与应用代码分开,并支持单根输入/输出虚拟化(SR-IOV,全称SingleRoot I/O Virtualization),用于许多处理器共享SSD资源的应用。
为什么要用车规级SSD,UFS不是SSD么?UFS当然也可以算是SSD,但UFS太慢了,而车规级SSD采用的是PCIe标准,PCIe的弹性空间极大,潜力巨大。JESD312确定的是PCIe 4.0标准,实际其包含多个速率,4通道是最低的PCIe 4.0标准,16通道双工可以到64GB/s,而PCIe5.0标准已在2019年发布了,PCIe5.0将信号速率翻倍到了32GT/s,x16双工带宽更是接近128GB/s。极高的信号速率,使得PCIe5.0能够更好支持对吞吐量要求高的高性能设备,如用于AI的GPU、网络设备等。PCIe 6.0标准也已在2022年初发布,单工达到128GB/s的带宽。PCI-SIG的目标是大约每3年将PCIe带宽翻一番。
UFS的速度太慢,特别是UFS标准的升级速度也慢。2018年1月,JEDEC发布UFS3.0标准,2022年8月才有UFS4.0标准。所以UFS的速率是永远追不上PCIe的,差距会越来越大。除了速率带宽UFS太慢外,UFS还需要考虑体积和功耗,因此UFS通常都是单芯片,功耗尽量低。汽车领域体积和功耗都可以放宽些,PCIe SSD通常是多芯片并行,可以满足许多汽车领域的特别需求,UFS就无能为力了。
来源:NVM Express
NVMe支持超长队列,可以大幅缓解并行计算时存储瓶颈问题。
现在汽车Infotainment、T-Box、仪表和ADAS域都有分散存储,数量众多。中央计算时代,存储需要统一到中央计算器上,PCIe是最佳选择,如上图所示,通过PCIe交换机将SSD连接在中央SoC计算单元上。
PCIe完美支持中央计算架构, JESD312还有SR-IOV (Single Root I/O Virtualization)特色,针对虚拟机。在虚拟机中,一切皆虚拟。比如网卡,虚拟机看来好像有一个真实网卡,但这个网卡是宿主机虚拟出来的硬件,也就是一堆软件代码而已,没有真实硬件。车载系统的仪表、T-Box、ADAS域、座舱域不可能都装一个PCIe网卡,为解决这个问题,Intel提出了SR-IOV。SR-IOV最初应用在网卡上。简言之,就是一个物理网卡可以虚拟出来多个轻量化的PCI-e物理设备,从而可以分配给虚拟机使用。
最主要的还是PCIe对汽车功能安全或者说ISO26262支持度很高,不是UFS能比的。
来源:PCI-SIG
PCIe有两个错误检查功能,一个是LCRC,另一个是ECRC。其中LCRC是Link CRC,是用来检测在两个设备之间的链路(Link)上发生的错误,这些错误大多是由于物理层的信号质量问题引起的。
因为仅是针对Link和互联的两个设备,LCRC换个说法也可以叫Local CRC。当TLP报文通过Switch时,在入口(ingress port)被DLL层校验LCRC。而在Switch的出口(egress port)会重新生成LCRC。当接收端检测到TLP报文的LCRC不正确时,将会发送一个NAK报文给发送端,要求重传此TLP。因此,LCRC错误是可修正错误,因为可以通过重传来修正。
ECRC是End-to-End CRC,是检测TLP报文的内容在Requester和Completer之间的路径上是否损坏。例如switch在转发TLP报文时由于某些bug发生了数据不一致。
ECRC是requester/initiator的TL层生成的。如果Completer检测到ECRC错误,会上报通知系统处理。并没有重传机制,因此是不可修正错误。当TLP报文进入Switch时,Switch并不会修改ECRC,并完整把TLP报文发出去。换言之,TLP经过路径上的Switch内容不会发生任何改变,甚至ECRC是错误的,Switch也视而不见继续发出去。TLP的错误,需要软件参与,由上层软件决定是否重发。
来源:PCI-SIG
PCIe还有个更复杂的AER(高级错误报告),这个异常复杂的安全机制牵涉面很广,其中包括了复杂的Linux内核协助,如ACPI PCI驱动和ARCH PCI驱动,还包括物理层。具体的原理无法展开描述。简单地说它可以方便我们准确的定位,纠正和分析错误,增强系统的健壮性和可靠性,轻松达到ASIL-D级。
PCIe总线也能保证整个系统的安全性。
PCIe非常适合车载应用,顺便说一句,PCIe总线是英特尔在1992年发明的,距今已超30年,但活力依旧很旺盛。
除了PCIe的安全性,JESD312还加了SPDM安全协议,采用384bit最小安全协议,保证网络安全万无一失。
JESD312还特别按应用类型做了分类,一类是私家车,另一类是商用车。DWPD是另一个耐久度指标,主要用于企业级SSD。DWPD确定用户在保修期内每天可以重写驱动器的容量,私家车是每天0.31TB,即310GB,商用车是0.24TB,即240GB,还有一个TBW,即在保修期内的最高写入数据量,私家车是200TB,商用车是12.8TB。实际就算是最顶级的智能驾驶加智能座舱,每天写入的数据也不会超过1GB,JESD312留了几百倍的余量。
如果你实在不放心,那么还有选配。
相关文章