NVMe中的Copy命令你知道吗?

前段时间做过copy的相关工作,今天抽出时间来总结一下,共勉

什么是Copy命令

顾名思义,简单理解就是复制,我们可以看看官方文档是如何定义的:

The Copy command is used by the host to copy data from one or more source logical block ranges to a single consecutive destination logical block range.

其实就是将一个或者多个逻辑块中的数据复制到一个连续的逻辑块内。虽然这个功能谈起来简单,但是对于SSD来说,其实还是相对麻烦的,对于一个功能来说,它实现的方式可以有很多种,但是如何简单实现才是最重要的,花最小的代价,实现其功能。

在之前,如果需要复制数据,需要host先读出数据,然后再写入数据,这个流程相当麻烦,如下图:

现在直接就是host发送一个copy命令,SSD自己就进行复制了,然后返回done即可,如下图所示:

上文两幅图即可简单描述copy的过程。

Copy详细配置

关于配置,我们首先看下面的结构体(自己定义):

typedef struct nvme_copy_src_range_0_s
{
    /* [07:00] Reserved field 0 */
    u64 rsvd_0;
    /* [15:08] Starting LBA */
    u64 start_lba;
    /* [17:16] Number of logical blocks to be copied */
    u32 number : 16;
    /* [19:18] Reserved field 1 */
    u32 rsvd_1 : 16;
    /* [23:20] Reserved field 2 */
    u32 rsvd_2;
    /* [27:24] Variable sized Expected Logical Block Storage Tag (ELBST)
               and Expected Initial Logical Block Reference Tag (EILBRT) */
    u32 elbst_eilbrt;
    /* [29:28] Expected Logical Block Application Tag */
    u16 elbat;
    /* [31:30] Expected Logical Block Application Tag Mask */
    u16 elbatm;
} __attribute__((packed)) nvme_copy_src_range_0_t;

copy命令中共有两种source range的格式,本文只简述一种,一个source range 32个字节,看结构体定义能够快速了解其所需的数据,copy命令也是支持End-to-end Data Protection,当然本文不作重点,最重要的就是`start_lba`和`number`。

配置好了一个或多个src range,你会想是不是也有一个dst range,不好意思还真没有,在nvme cmd中,只需要配置Dword 10 和 Dword 11 即可,也就是Starting Destination LBA。

配置好src range,接下来再配置 nvme cmd,主要用到 cmd 中的Dword2,3,40,11,12,13,14字段

首先来看Dword2、Dword3和Dword14,指定了可变长度的Logical Block Storage Tag (LBST)以及Initial Logical Block Reference Tag (ILBRT)

Dword10和Dword11在上文提到过,一个64位的Starting Destination LBA

Dword12和Dword15是涉及数据校验的一些内容,诸如prinfo,还有配置src 是选择format0还是format1等

Dword13是指定与指令类型字段相关联的指令特定值

请注意,协议规定了copy 命令可以从一个或者多个不连续的数据逻辑地址拷贝数据,但是目标地址必须是一个连续的逻辑地址范围,并且每个源数据必须按照顺序,复制到目标的LBA。

今天就到这吧,copy原理很简单,最近要做的事情比较多,卷起来!

原文链接:NVMe中的Copy命令你知道吗?icon-default.png?t=N7T8https://mp.weixin.qq.com/s/Bo5psuf92rOXzC-iRRibLw


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

艾恩凝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值