今天无意间看到一个信息——读写飞快的U盘,只需要给内存条加个永不断开的移动电源!到底能不能实现呢?
1.原理
这个东西实际上走的是SATA总线。没记错的话其实这个东西还有前面一代,真的是用的PCI接口来和主机通信。既然走的是SATA总线,PCI只是用来得到待机供电的,那么完全可以简单地添加一块电池和USB to SATA芯片,把它变成一个移动硬盘。但这毕竟是远古产品,能找到可以正常使用的就非常困难了。那么有没有更加现代的解决方案呢?答案是有的。
2. 使用RAM的方案
大家都知道,有一个东西叫做树莓派。它是一个系列的单板电脑(SBC),比单片机强大的多的同时,还有着并不算高昂的价格,并且容易学习。类似的,其他的厂家也提供了这样的东西。
这些东西一般会有一个支持USB Device模式的USB接口,再通过Linux USB Gadget让Host那边识别成一个USB大容量存储设备,就可以完成了。
只需要稍作修改,不是把iSCSI设备映射到USB Gadget上,而是直接把对应的文件放到RAM中,就可以满足要求。Linux上,使用tmpfs可以将文件放在虚拟内存中,可以满足题目的要求。
但是读写性能受到USB接口本身、Linux USB Gadget的性能开销、SoC和主机的性能等的制约,实际的读写和IOPS应该都不会特别好看
3. 使用NVRAM的方案
在2017年,Intel公司推出了民用的傲腾系列产品。这个网上有很多当时的介绍。主要还是用来加速机械硬盘的。不管宣传文案是如何写的,这个东西实际上可以当作是一个NVMe SSD,只是容量普遍非常小。读写速度并不能达到飞快的水平。而现在,16G的傲腾只需要不到40元。如果是选择题目中的场景中更具有可用性的傲腾SSD,成本也不算特别高。
不管是哪个东西,放在USB3.0 NVMe SSD硬盘盒就可以了。甚至因为断电并不会丢失数据的特性,使用起来和一般的NVMe SSD没有什么不同。性能的话,读写并不算飞快。而且还受到USB接口本身10Gbps的制约以及UASP的协议开销。
可以看到,如果是16G的傲腾的话,写入只有不到200MB/s,甚至比不上一些比较好的u盘。如果换成更大容量的傲腾SSD的话,性能还是会受到USB3.2 Gen2的10Gbps的带宽的限制。
如果把硬盘盒换成雷电3接口的话,则可以得到22Gbps的带宽(雷电3有一部分带宽是视频专用),而且由于走的是PCIe总线,指令上的开销会少很多。但还是不如买一个PCIe4.0的SSD放进去。