SSD的trim指令

之前写过一篇文章:http://www.litrin.net/2016/03/01/%E8%AF%BB%E5%86%99ssd%E7%9A%84%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A1%B9/

今天被一个同事提了几个challenge,觉得好像还有东西没有讲完,于是针对这几个challenge,逐一回答。

原文中:当SSD磁盘中所有的page都被占用的时候,SSD就会自动触发垃圾回收机制。
challenge:对于磁盘簇的分配都是由文件系统管理的,SSD作为一个存储设备而言,根本不知道哪个page是可以被删除的。

对于文件的改写来说SSD自然知道哪个簇是失效的,但对于删除操作来说传统的物理磁盘,一个文件被删除只是清除了文件系统索引区的一个索引而已,在数据簇的内容不会做任何操作,仍旧停留在磁盘上等待下一次被新的数据覆盖掉。而对于SSD来说,最初只有收到系统指令去写一个已存在数据的簇(page)的时候,SSD才明白这个簇事实上早已经被删除了。只有这个时候,SSD才会触发GC。

challenge:写入的单位是page,而擦除的最小单位是block,两者的关系是什么?

一个block一般是128~256个page。

challenge:将SSD当作裸设备,用dd命令写满之后,ssd还会认为“每个pege”都是有效的,系统如何gc?

SSD主控都会提供一个buff用作这种极端情况。对于os或者说fs这边簇和page的关系并不是固定的,SSD还会维护一个两者之间的关联关系。

challenge:OS是怎么优化GC的?

Win7/Linux2.6.33/Mac lion之后,对于文件的删除操作,除了对于FS端文件系统索引的修改之外,系统还会主动发送一个trim命令到SSD硬盘,通知SSD这个文件”已经被删除”,SSD将文件所在的page标记为stale,可以通过gc回收此page。是否立即启动gc则可以通过SSD的主控试情况决定。
Huawei NVMe

发表评论

电子邮件地址不会被公开。 必填项已用*标注

请补全下列算式: *

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据