将电脑的虚拟内存拆分为由若干个固态硬盘承担,是否比单个固态硬盘承担的速度要更快?

除非你用若干块SSD组成RAID0或者RAID5,否则基本没卵用——唯一的作用就是当你的每个SSD都快满了、SLC缓存小的可怜时,分散的虚拟内存不容易击穿你的SLC cache。


虚拟内存要起作用,系统需要满足如下假设:

1、内存不足,需要磁盘替代

否则,正常情况下,虚拟内存永远都不会被动用。

2、程序的内存使用满足“局部性原理”,且“工作集”大小小于物理内存

比如,大模型推理时,内存使用就不太满足“局部性原则”,虚拟内存作用很小。

再比如,有些应用需要在海量内存中随机读写,这个“短期内会被访问到的、长期来说较为稳定的内存占用”叫“工作集”;如果工作集大于物理内存,那么暂时换入外存的信息马上就要重新读入内存、同时内存中另一部分区域就必须立即置入外存——最终,整个系统的计算时间几乎都消耗在“数据在内存和外存的来回搬运中”,这个情况叫“颠簸”,此时系统性能接近“直接用外存当内存”的状态,几乎完全不可用。


然后,现代操作系统非常聪明。

比如,Linux下,当内存占用略高(但还不满)时,就会有一个专门的“偷页”进程把“最近最少使用”的页面预先存进外存。

同样的,当一个应用被激活时,OS也可以把和它相关的内存页面在后台读入内存,也就是“前台应用的工作集优先保障”……

通过种种措施,除非系统已经陷入或者即将陷入颠簸,否则用不用虚拟内存你都不会有什么感觉;而一旦陷入颠簸,那耗时任务基本就没法做了——机械硬盘还好,SSD……你舍得它这么磨吗?

更何况就是磨了也没用,1分钟的任务可能“颠簸”十几分钟甚至半小时、几小时都做不完。


然后,假设我们不管这些,我们就是想要优化虚拟内存在后台读写磁盘的速度……所以我们把虚拟内存文件分成5份,放进5个SSD……


那么,前面提到的“局部访问原理”恰恰就成了拦路虎:数据总是被“局部访问”的,这意味着淘汰一些页面或者换入一些页面时,这些页面往往是连续的!

这意味着,这些页面只会存储到固定的一个SSD上,并不会自动分散到5个SSD[1]


想要分散,你就必须组raid0或者raid5,当然raid0+1之类也可以[2]

此时,数据是“条带式存储”的;比如要换出1M数据,这是256个页面;没有raid,这1M数据当然是写同一个SSD上;但有了raid,就是5个RAID各自同时写入200K左右数据。此时是有加速效果的。


不过,这个raid最好得是硬件raid卡、且总线速度/宽度要足以容纳5个SSD同时传输——普通家用机不行,但高端家用机/服务器没问题。

而且,还是那句话:程序工作集必须小于物理内存;一旦工作集大于物理内存,则整个系统不可用(颠簸)——虚拟内存的作用是腾出物理内存给前台/活跃应用。


总之,这是一个投入很大、收效几乎没有的东西。

编辑于 2026-05-18 · 著作权归作者所有