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


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/26374.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Shell脚本 if语句

条件测试: $? 返回码 判断命令或者脚本是否执行成功(最近的一条) 0 true 为真就是成功 成立 非0 false 失败或者异常 test命令 可以进行条件测试 然后根据的是返回值来判断条件是否成立。 -e 测试目录或者文件是否存在 exist -d 测试…

如何在Excel中快速找出含有多位小数的数字

在日常工作中,使用Excel处理数据是一项常见任务。然而,有时我们会遇到一些看似简单,却令人头疼的问题。例如,当我们在一个包含大量数据的列中发现某个数字的小数点位数过多时,如何快速找到这个数字?本文将介…

二开版视频CMS完整运营源码/新版漂亮APP手机模板/集成员分销功能等

一个二开的影视CMS,直接上传源码至网站根目录,访问网站域名即可安装。 测试环境:Nginx 1.20.1—MySQL 5.6.50–PHP-7.2(安装拓展/fileinfo) 上传源码,访问域名直接安装 后台地址:域名/MDadmi…

Vue + Asp.NET调试时出现的证书问题 (OpenSSL)

Vue Asp.NET调试时出现的证书问题 1. 证书过期问题步骤一:创建新的私钥步骤 2: 创建新的证书签名请求(CSR)步骤 3: 使用 CSR 和 CA 私钥签署新证书步骤 4: 替换或使用新证书 2. 证书不受信任问题步骤: 3. 安全证书不指定使用者可选名称步骤一: 删除已生…

基于Python + Flask+ Mysq实现简易留言板

使用Python Flask Mysql实现简易留言板,包括网友编辑留言、修改留言,删除留言、分页显示四大功能。 写出留言板建设过程,包括开发使用工具、留言板模块设计、数据库设计、页面设计、关键技术。 留言板建设过程总结 一.开发使用…

群体优化算法----狗群优化算法(注意没写错并不是狼群优化算法是狗群)介绍以及多峰函数最优解求解

介绍 狗群优化算法(Dog Group Optimization, DGO)是一种新兴的群体智能优化算法,其灵感来自于狗群的社会行为和协作方式。DGO算法利用了狗群在搜寻、合作、信息共享等方面的行为特征,以求解复杂的优化问题 主要概念 狗群行为&a…

云手机游戏托管的实现机制

云手机游戏托管的实现首先依赖于强大的云计算基础设施。 数据中心承载着海量的计算资源,通过虚拟化技术构建出一个个独立的云手机环境,为二游的运行提供了坚实的支撑。这些云手机具备与实体手机相当的性能,能够流畅地运行各类二次元游戏。 在…

仪表板展示|DataEase看中国:2024年高考数据前瞻

背景介绍 2024年高考即将来临。根据教育部公布的数据,2024年全国高考报名人数为1342万人,相比2023年增加了51万人。高考报名人数的增加,既体现了我国基础教育的普及范围之广,也反映了社会对高等教育的重视和需求。 随着中央和各…

“JS加密在线”:简单直接的在线JS加密网站

网站名:“JS加密在线”, 功能:JavaScript源代码加密。 UI: http://jsjiami.online/ 非常简洁的JS加密网站,几乎只有两个功能:上传JS文件、下载加密后的JS文件。 JS加密,就应该这样简单直接。…

使用随机数字或计数器在运行时计算百分比

如果我们需要在运行时计算某些项目的百分比,可以使用 Python 中的随机数生成器或者计数器来模拟这个过程。这取决于我们想要模拟的具体情况和场景。今天我将通过文字方式详细记录我实操过程。 1、问题背景 在处理大量交易时,我们需要对一定比例的交易进…

从源码分析 vllm + Ray 的分布式推理流程

一、前言 随着 LLM 模型越来越大,单 GPU 已经无法加载一个模型。以 Qwen-14B-Chat 模型为例,模型权重大概 28GB,但是单个 NVIDIA A10 仅有 24GB 显存。如果想要在 A10 上部署 Qwen-14B-Chat 模型,我们需要将模型切分后部署到 2 个…

Golang免杀-分离式加载器(传参)AES加密

目录 enc.go 生成: dec.go --执行dec.go...--上线 cs生成个c语言的shellcode. enc.go go run .\enc.go shellcode 生成: --key为公钥. --code为AES加密后的数据, ----此脚本每次运行key和code都会变化. package mainimport ("bytes""crypto/aes"&…

【Three.js】知识梳理十五:相机控制器Controls

在 3D 场景中,摄像机的控制尤为重要,因为它决定了用户如何观察和与场景互动。Three.js 提供了多种相机控制器,最常用的有 OrbitControls、TrackballControls、FlyControls 和 FirstPersonControls。OrbitControls 适合用于查看和检查 3D 模型…

LabVIEW进行负载测试

本文介绍了如何使用LabVIEW进行负载测试,通过一个具体案例详细讲解了测试系统的组成、工作原理和实现方法。系统采用先进的硬件和软件架构,结合LabVIEW的强大功能,成功实现了对设备的高效负载测试,确保了系统的可靠性和性能。 项…

车载网络安全指南 概述(一)

返回总目录->返回总目录<- 目录 前言 参考文档 术语 前言 汽车电子系统网络安全指南给出汽车电子系统网络安全活动框架,以及在此框架下的汽车电子系统网络安全活动、组织管理和支持保障等方面的建议。 汽车电子系统网络安全指南适用于指导整车厂、零部件供应商、软…

借助ServiceDesk Plus,更接近ISO 27001变更管理标准

如果实施不当&#xff0c;变更支持可能会中断业务流程并导致停机。许多组织尚未建立不同的阶段来记录整个变更过程。这通常会导致 IT 环境&#xff0c;在这种环境中&#xff0c;实施变更的成功依赖于单个主题专家。这并不高效&#xff0c;并且对 IT 团队来说可能难以管理和压力…

航天科技集团与SPACEX公司的思考与分析

近期&#xff0c;中国航天科技集团正式发文与SPACEX对标的认识结果&#xff0c;包括发展理念上、科研生产模式上、关键核心技术上、质量效率效益上存在明显差距与不足。真诚的态度&#xff0c;赢得了社会上的广泛关注和积极评价。真心为老东家能够保持这份清醒而高兴。 从对标管…

安装台式电脑网卡驱动

安装电脑网卡驱动 1. 概述2. 具体方法2.1 先确定主板型号2.2 详细操作步骤如下2.2.1 方法一2.2.2 方法二2.2 主流主板官网地址 结束语 1. 概述 遇到重装系统后、或者遇到网卡驱动出现问题没有网络时&#xff0c;当不知道怎么办时&#xff0c;以下的方法&#xff0c;可以作为一…

Unity 设置默认字体(支持老版及新版TMP)

普通UI-Text设置 &#xff08;同一unity版本设置一次即可&#xff09; 1.首先工程的Resources目录下创建Fonts文件夹用于存放字体 如下图所示 2.找到Unity的安装目录下的Editor\Data\Resources\PackageManager\BuiltInPackages\com.unity.ugui\Runtime\UI\Core\Text.cs文件 …

常见报错及程序框架图

程序框架图 程序流程图又称程序框图&#xff0c;是用统一规定的标准符号描述程序运行具体步骤的图形表示。程序框图的设计是在处理流程图的基础上&#xff0c;通过对输入输出数据和处理过程的详细分析&#xff0c;将计算机的主要运行步骤和内容标识出来。程序框图是进行程序设…