Multi-Streams多流
多流是企业级SSD的一个新特性,通过使用多流特性,可以显著提高SSD的垃圾回收效率,从而提高性能和延长寿命。
在SSD的应用场景中,可能有多个不同的应用在对SSD进行写操作,包括热数据和冷数据,包括随机写数据和顺序写数据,包括大块写数据和小块写数据,如果把这些数据都混在同一个NAND块里面,显然不利于垃圾回收处理,一个很自然的想法是把这些数据进行分类。NVMe协议里面有两种方法可以对数据进行分类,其中一个是通过Dataset Management,另一个就是Multi-Streams。
Dataset Management把SSD的逻辑容量分成不同的Range,不同的Range有不同的属性,包括Sequential Write,Sequential Read,Access Latency,Access Frequency等,如何利用这些属性来优化数据写入NAND的方式,由SSD内部决定。而Multi-Streams则是由Host明确告诉SSD,当前的数据属于哪个Stream ID,SSD会把对应不同Stream ID的数据写入不同的NAND块。
下图是Multi-Streams在SSD内部的使用方式
Directives
NVMe 2.0只支持两种Directive Type即00h Identify和01h Streams,在使用Streams特性前,需要先通过Identify Directives使能Streams,其中00h Identify是默认必须支持的。
Identify Directive
Host可以通过Return Parameters读取SSD支持的Directive Type (NVMe2.0只支持Streams 01h)和当前的Enable状态,也可以通过Enable Directive使能某个Directive Type(例如Stream)。
Streams Directive
Host可以通过Return Parameters读取SSD支持的Streams能力,包括Stream Write Size,Stream Granularity Size和Stream resources等。
Get Status操作可以返回Host当前的Streams状态,包括哪些stream是open的。
Host通过Allocate Resources操作申请Streams并返回当前可以分配的Streams数量。
Release Identifier允许Host释放某个Streams。
Release Resources允许Host释放所有申请的Streams。
使用Multi-Streams
Write命令通过在命令参数中设置Directive Type字段为01h,Directive Specific字段为对应Stream Id使用Multi-Streams。
Write命令参数如下图:
参考:
1. NVM Express Base Specification 2.0b