当前位置: 首页 > 科技观察

阿里最后的采访:为什么SSD不能当内存用?

时间:2023-03-20 14:32:08 科技观察

在回答这个问题之前,我们先去某个网站购物。输入“SSD”可以找到比较畅销的商品。产品详情页上有这样的描述:注意图片上显示的规格。读取速度高达3.5GB/s,在实际情况下(尤其是随机读写)稍差一些,但也不算离谱。可以看出,这个速度是非常快的,基本上是秒传高清电影的水平。那么问题来了,既然现在的SSD读取速度这么快,那么SSD能当内存用吗?要回答这个问题,我们先来看看内存的速度。速度差异目前内存采用的是第四代DDR技术,其带宽基本可以达到20GB-30GB左右。怎么样,虽然SSD很快,但是和RAM相比还是有一个数量级的差距。也就是说,如果你真的使用SSD作为内存,你的电脑可能会比现在的电脑慢10倍左右。如果你认为从用户的角度看慢一点无所谓,那我们就从计算机和操作系统的角度来看是否可行。创建一个新文件并尝试一下。如果可以在电脑旁边做个小实验,就拿我这台Win10机器来说吧。新建一个文本文件,随便写点东西,然后右击打开属性,你会看到:这个文件本身的大小只有816字节,却占用了4KB的空间。我们给这个文件添加一些内容,再看一下:此时内容的大小是5.73KB,但是占用的空间已经到了8KB。这说明什么?很简单,这说明文件大小是按块分配的,但这能说明什么?访问内存和访问硬盘的区别是要知道内存的寻址粒度是字节级别的,也就是说每个字节都有它的内存地址,CPU可以通过这个直接获取对应的内容地址。但对于SSD而言,情况并非如此。从上面的实验我们也可以看出,SSD实际上是以块为粒度来管理数据的。至于块的大小,有区别,这不是重点。这里的要点是:CPU没有办法直接访问文件中的特定字节。CPU无法直接访问存储在SSD上的任何数据。那么CPU是如何访问文件内容的呢?文件系统帮助一切的概念是文件想必大家都不陌生。在现代操作中,我们使用的是文件形式的SSD,操作系统中的文件系统无法绕过。文件系统以文件的形式呈现SSD上的数据。程序直接操作文件,读写文件时向文件系统发送请求。文件系统将请求路由到SSD。SSD处理完请求后,会将数据复制到对应的进程中。在程序的内存中,以后程序直接操作内存。文件系统的完整过程和实现可以写成一本书的完整章节。啊哈,博主的《深入理解操作系统》第8章对这部分有详细的解释。如果您有兴趣,可以阅读它。从这里我们可以看出,CPU是没有办法像访问内存一样,直接按照字节粒度来寻址SSD的。CPU通常需要使用文件系统来访问SSD(磁盘)。当然我们也有办法绕过文件系统,但是CPU还是不能直接访问SSD(磁盘)中的一个字节。正是因为CPU不能按照字节粒度直接访问SSD,所以CPU不能不离开内存就直接运行你写在SSD中的程序。操作系统使用SSD作为内存。当然,这里有一个题外话。虽然操作系统不能把SSD当内存使用,但实际上操作系统是在间接使用你的SSD当内存使用。现代操作系统会自动在可用内存中缓存SSD(磁盘)数据。当你第一次读取一个文件时,这个读取请求确实需要通过一个慢速的SSD(磁盘)来处理,但是之后,这条数据缓存在内存中,下次就不需要再访问了.SSD(磁盘)不见了。而如果写数据的话,一般都是写到内存中,后面会有任务将内存中的数据写到磁盘中。所以从这里我们可以看出,现代操作系统基本上都是使用SSD作为内存,更不用说磁盘交换空间了,是不是很聪明?关于这部分的详细解释,请参考《深入理解操作系统》的第7章。好了,这个题外话到此结束。让我们回到最初的问题。虚拟内存现代操作系统的内存管理使用虚拟内存,这带来了一个问题。对于32位操作系统,最大可寻址范围只有4G,也就是说,如果你用SSD做内存,即使SSD有1T,那么操作系统也只能使用4G,剩下的就浪费了.所以,现代操作系统的内存管理方式是不允许我们将SSD内部使用的,除非对操作系统进行修改。当然,对于64位操作系统就不存在这个问题,因为64位操作系统的可寻址空间足够大,虽然这个空间足够可观,但你要意识到是有上限的。SSD的制造原理决定了这类存储设备有固定的使用寿命。你会发现SSD就像一辆汽车。当它跑到一定里程时,就会出现问题。SSD中的里程就是所谓的totalwrittenbytes,TBW,全称是MaxTerabytesWritten,最多可以写入多少TB?,以下是某款SSD的TBW规格。一般来说,普通SSD的TBW是几百TB,也就是说,你的SSD写入到几百TB,就很有可能报废了。可能有同学会觉得使用寿命太短,但其实作为普通用户,你的电脑不会那么频繁的写SSD场景,每天的写盘量应该很少,除了经常下载小电影,所以作为普通用户,大可不必关心SSD的使用寿命。不过刚才也说了,SSD毕竟有TBW的限制,内存不存在这个问题。所以,如果你用SSD做内存,相信你的SSD很快就会被CPU写死。展望未来,受限于当代存储设备制造技术,我们还没有办法直接将SSD作为内存使用。我们的各种软件,包括操作系统、文件系统,以及包括CPU在内的各种硬件,都没有准备好使用SSD作为内存。可以使用。但随着技术的进步,这在未来可能会改变。英特尔发布了一种存储设备,它的作用类似于SSD,但支持像内存一样的随机寻址。或许在未来,我们的内存也可以像SSD一样,即使断电,内容也不会丢失。那样的话,你的电脑就不会出现“关机”的操作了。电脑开机后,就没有“开机”的意思了。不是很有趣。如果内存像磁盘一样,断电后内容不丢失,又会带来哪些有趣的新特性呢?总结SSD可以当内存用吗?这绝不是一个简单的问题。它涉及CPU、操作系统、文件系统、存储设备制造原理等方方面面。您需要对计算机系统有透彻的了解才能很好地回答这个问题。