NVMe multi-stream

15 篇文章 2 订阅

Multi-stream write(多流写)技术是什么?

在企业级存储中经常提到一个关键性的词语"冷热数据分区"。把相同生命周期的数据打上标签,告诉SSD盘,SSD盘放置数据的时候,就可以分区存放,会大大减少垃圾回收的工作量。要实现这个功能,阵列软件必须有接口和SSD控制器通讯。除了自研SSD之外,还有一个办法,采用支持Multi-stream write(多流写)技术的SSD。

Multi-stream write(多流写)技术可以使SSD根据主机端提供的Stream ID,将具有相同或相似生命周期的数据写入到相同的擦除单元中去,大大提高了GC时的效率,减少了写放大,使得SSD的性能和寿命都有了较大的提升

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内部的使用方式

 

 如下图,采用多流写技术后,在不同workload情况下,SSD的写放大都会降低到接近1,效果非常理想。

(注:数据来自三星官网公布内容)

我们知道写入放大数值越小,越能提升固态使用寿命。多流写技术让NVMe SSD的寿命得到了2倍的提升,如下图。

 (注:数据来自三星官网公布内容)

同时,多流写技术对NVMe SSD的IOPS有显著的提升,如下图。最大IOPS是传统SSD IOPS的9倍,这真的是飞一般的感觉~~~

(注:数据来自三星官网公布内容)

NVMe Directive 应用:

  从 SSD firmware 架构来看,Directive streams 会增加不小冲击,原因是host会给不同的数据打上不同的 stream id,hot ? cold?large?small?,而且会贯穿 Firmware 前中后 partition,并且给 FTL 的处理增加巨大难度;那么如何设计 NVMe Directive streams 才合理呢?

首先要支持 streams,最后 host 与 device 达成一致,即 stream id 定义一致,stream id count一致,不宜复杂。

       比如只支持2个stream,id = 1表示 small data,id = 2表示 large data,那么后端可以开辟两个super block 去分别存储 small data or large data。

       再比如只支持2个stream,id = 1表示 hot data,id = 2 表示 cold data,那么后端可以把 super block 分成两类分别用来存储 hot data or cold data。

NVMe Directive 协议相关:

       首先 Directive 分为 Directive Receive command 和 Directive Send command, 顾名思义Directive Send command 用于从 host trans data 到 device,Directive Receive command 反之。

NVMe 2.0 只支持两种 Directive Type 即 00h Identify01h Streams在使用 Streams 特性前,需要先通过 Identify Directives 使能 Streams,其中 00h Identify 是默认必须支持的。

Directive 传送的数据主要分两种类型,Identify 和 Streams。

Identify Directive  Directive 相关信息(包含Streams Directive support相关,Directive/Streams enable之类的)。


 Host 可以通过 Return Parameters 操作读取 SSD 支持的 Directive Type (NVMe2.0 只支持Streams 01h)和当前的 Enable 状态,也可以通过 Enable Directive 操作使能某个 Directive Type(例如 Stream)。

Streams类型

  1. Directive Receive command,  包含Return Parameters、Get Status、Allocate Resources。
    1. Return Parameters: 操作可以获取 SSD 支持的Streams能力, 包括 Stream Write Size,Stream Granularity Size,Stream resources,Max Streams Limit,NVM Subsystem Streams Available、NVM Subsystem Streams Open 等等。 
    2. Get Status:操作可以获取 Hos t当前的 Streams 状态,包括哪些 stream 是 open 的, Open Stream Count, open stream id 等。
    3. Allocate Resources:操作申请 Streams 并返回当前可以分配的 Streams 数量。指定host 分配给 namespace 独占 stream numbers,及共享 stream numbers。
  2. Directive Send command,包含 Release Identifier、Release Resources。
    1. Release Identifier 允许 Host 释放某个 Streams。

    2. Release Resources 允许 Host 释放所有申请的 Streams。

使用Multi-Streams

Write 命令通过在命令参数中设置 Directive Type 字段为 01h,Directive Specific 字段为对应Stream Id 使用 Multi-Streams。

Write命令参数如下图:

浅谈SSD之SRIOV、NAMESPACE、NVM SET ingram14 2022-04-06 20:31 阅读:946 评论:0 推荐:0 编辑   

NVMe冷知识之Directive(NVMe stream) ingram14 2022-01-22 22:08 阅读:995 评论:0 推荐:0 编辑   

SSD FTL---浅谈GC选块策略 ingram14 2022-01-08 17:51 阅读:276 评论:0 推荐:0 编辑   

NVMe冷知识之CFS ingram14 2022-01-08 17:36 阅读:211 评论:0 推荐:0 编辑   

FTL 算法之Arbiter ingram14 2021-07-06 18:10 阅读:146 评论:0 推荐:0 编辑   

SSD NVMe核心之PRP算法 ingram14 2021-07-06 11:52 阅读:349 评论:0 推荐:0 编辑   

SSD Internal Flow Control设计 ingram14 2021-07-05 18:12 阅读:71 评论:0 推荐:0 编辑   

透过协议看PCIe ASPM L1.2 ingram14 2021-01-02 20:56 阅读:312 评论:0 推荐:0 编辑   

PCIe设备Link Training调试心得----之PERST是否使用 ingram14 2021-01-01 08:56 阅读:125 评论:0 推荐:0 编辑   

浅谈NAND FLASH的两种编程方式 ingram14 2020-11-25 21:46 阅读:117 评论:0 推荐:0 编辑   

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值