IEEE SGL与NVMe SGL的区别?
在HBA(Host Bus Adapter)驱动程序中,IEEE SGL(Institute of Electrical and Electronics Engineers Scatter-Gather List)和NVMe SGL(Non-Volatile Memory Express Scatter-Gather List)是两种不同的数据传输机制,它们均用于描述主机内存中分散的物理内存区域,以便在一次I/O操作中传输多个不连续的数据块。虽然它们的基本作用相似,但在原理和应用场景上有所区别:
IEEE SGL
- 原理:IEEE SGL通常是指在PCIe(Peripheral Component Interconnect Express)体系结构中使用的一种数据传输技术,用于传统SCSI(Small Computer System Interface)或者其他存储设备。SGL由一系列描述符组成,每个描述符包含了内存区域的起始物理地址和长度信息,使得控制器可以访问非连续的内存区域。
- 应用场景:IEEE SGL广泛应用在各种支持scatter/gather功能的存储控制器上,例如某些HBA卡在处理SCSI、ATA、SAS等接口的硬盘I/O时,尤其是在处理大数据块传输、文件系统或数据库操作时,可以大大提高效率。
NVMe SGL
- 原理:NVMe SGL是NVMe协议专门针对非易失性内存设备(如NVMe SSD)定义的一种更为优化的数据传输方式。在NVMe协议中,SGL表现为Physical Region Page (PRP) List或SGL Descriptor List。PRP List由一系列物理地址组成,每个地址指向一个4KB对齐的物理内存页,而SGL Descriptor List则除了包含物理地址外,还包含每个内存段的长度信息,因此对于非4KB对齐的数据也能精确描述。
- 应用场景:NVMe SGL主要用于NVMe SSD的高性能读写操作,尤其在处理大量小型、非连续数据块或者需要跨多个内存页面的大数据块时,通过SGL能够减少数据预处理和内存复制,极大地提高了I/O性能和资源利用率。
总结起来,IEEE SGL和NVMe SGL都是为了提高数据传输效率而设计的,但NVMe SGL在NVMe SSD环境中进行了特别优化,能够更好地适应闪存存储设备的特性,并且在硬件层面提供了更多的灵活性和更好的性能。
NVMe(Non-Volatile Memory Express)协议对SGL(Scatter-Gather List)的优化主要体现在以下几个方面,使得它相比传统的IEEE SGL更适合NVMe SSD设备:
- 物理区域页(PRP)列表:
NVMe协议采用了PRP List,这是一种精简版的SGL,专为NVMe SSD设计。PRP List仅包含指向4KB对齐物理页的地址列表,每个条目都是一个64位物理地址,直接指向数据所在的物理内存页。对于连续的物理内存,这种方法极为高效,因为NVMe控制器可以直接通过硬件访问,无需额外的地址解析开销。 - SGL Descriptor List:
NVMe 1.1及更高版本增加了对SGL Descriptor的支持,它比基础的PRP List更灵活,每个SGL Descriptor不仅包含物理地址,还包含数据段的长度信息。这意味着NVMe可以处理非4KB对齐的数据,无需预先调整数据布局,从而适应更广泛的数据分布情况。 - 硬件优化:
NVMe SSD控制器硬件针对PRP和SGL进行了深度优化,能够快速、高效地处理这些列表,最大限度地减少CPU干预,提高I/O操作的性能。而传统的IEEE SGL在非NVMe环境下的实现可能需要更多的软件参与和间接寻址,从而导致性能下降。 - 低延迟和高带宽:
NVMe协议和SSD控制器设计紧密配合,利用PCIe总线的高速特性,加上SGL的优化,能够实现极低的延迟和高带宽的数据传输,这对于数据中心、高性能计算、云计算等场景至关重要,而在这些场景中,IEEE SGL可能无法提供足够的性能优势。
简而言之,NVMe SGL(包括PRP和SGL Descriptor List)是针对NVMe SSD固态存储设备的特性专门优化的数据传输机制,能够在硬件层面提供更强的性能和效率,优于传统的IEEE SGL在其他类型的存储设备上的应用。
相关文章:
IEEE SGL与NVMe SGL的区别?
在HBA(Host Bus Adapter)驱动程序中,IEEE SGL(Institute of Electrical and Electronics Engineers Scatter-Gather List)和NVMe SGL(Non-Volatile Memory Express Scatter-Gather List)是两种不…...
struct内存对齐
5.1.3 struct内存对齐 结构体的对齐规则: (1)第一个成员在与结构体偏移量为0的地址处。 (2)其他成员变量要对齐到对齐数的整数倍的地址处 对齐数 编译器默认的对齐数与该成员大小的较小值。(vs中默认值为8) (3)结构体总大小为最大对齐数…...
探索Redis 6.0的新特性
Redis(Remote Dictionary Server)是一个开源的内存中数据结构存储系统,通常被用作缓存、消息队列和实时数据处理等场景。它的简单性、高性能以及丰富的数据结构支持使其成为了众多开发者和企业的首选。在Redis 6.0版本中,引入了一…...
关于CSS中定位的教程
在CSS中,定位是一种强大的工具,可以帮助我们控制元素在页面上的位置。通过使用定位属性,我们可以精确地放置元素在页面的任何位置,并且可以实现各种复杂的布局效果。在本教程中,我们将深入探讨CSS中的定位属性…...
抽象类、模板方法模式
抽象类概述 在Java中abstract是抽象的意思,如果一个类中的某个方法的具体实现不能确定,就可以申明成abstract修饰的抽象方法(不能写方法体了),这个类必须用abstract修饰,被称为抽象类。 抽象方法定义&…...
消息队列kafka
消息队列解决的问题 1. 解耦,通过消息队列实现应用之间解耦,模块儿之间解耦 2. 跨线程/进程通信,通过消息队列传递数据,实现不同线程/进程间通信 3. 提升系统稳定性,在高并发场景通过消息队列缓冲,可以实…...
复盘成长——2024.2月复盘
复盘的目的和范围 每月一次的精心复盘,不仅是对自身工作成就、学习进步与成长轨迹的深度梳理,更是一种对未来路径的细致规划。通过这一过程,我期望能够更加精准地把握生活的节奏和职场的航向,从中汲取经验、聚焦目标,…...
Kafka安全模式之身份认证
一、简介 Kafka作为一个分布式的发布-订阅消息系统,在日常项目中被频繁使用,通常情况下无论是生产者还是消费者只要订阅Topic后,即可进行消息的发送和接收。而kafka在0.9.0.0版本后添加了身份认证和权限控制两种安全服务,本文主要…...
3、Redis-List【常用】
目录 一、重要特点 二、常用命令 三、Redis中List类型应用场景 一、重要特点 ①Redis中的List,视为双向链表 ②Redis中的List,数据可以重复 二、常用命令 常用命令 格式含义例子rpush key value从右边往key中添加value值rpush hobby java pythonlpu…...
黑马c++ STL部分 笔记(7) list容器
list基本概念 功能:将数据进行链式存储 链表(list)是一种物理存储单元上非连续的存储结构,数据元素的逻辑顺序是通过链表中的指针链接实现的 链表的组成:链表由一系列结点组成结点的组成:一个是存储数据元素…...
关于使用Mxnet GPU版本运行DeepAR报错解决方案
1.引言 我们经常使用GPU来训练和部署神经网络,因为与CPU相比,它提供了更多的计算能力。在本教程中,我们将介绍如何将GPU与MXNet GluonTS一起使用。 首先,确保您的机器中至少有一个Nvidia GPU,并正确安装了CUDA以及CUDN…...
【STM32】江科大STM32学习笔记汇总(50)
00. 目录 文章目录 00. 目录01. STM32学习笔记汇总02. 相关资料下载03. 附录 01. STM32学习笔记汇总 【STM32】STM32学习笔记-课程简介(01) 【STM32】STM32学习笔记-STM32简介(02) 【STM32】STM32学习笔记-软件安装(03) 【STM32】STM32学习笔记-新建工程(04) 【STM32】STM…...
LabVIEW非接触式电阻抗层析成像系统
LabVIEW非接触式电阻抗层析成像系统 非接触式电阻抗层析成像(NEIT)技术以其无辐射、非接触、响应速度快的特点,为实时监测提供了新的解决方案。基于LabVIEW的电阻抗层析成像系统,实现了数据的在线采集及实时成像,提高…...
蓝桥杯备战刷题three(自用)
1.合法日期 #include <iostream> #include <map> #include <string> using namespace std; int main() {map<string,int>mp;int days[13]{0,31,28,31,30,31,30,31,31,30,31,30,31};for(int i1;i<12;i){for(int j1;j<days[i];j){string sto_strin…...
密码学——二次剩余
引言 二次剩余在许多密码学算法和数论问题中具有重要的作用,这个概念涉及到同余方程等概念。 同余 学习二次剩余的概念,首先要了解同余方程的概念,首先默认研究范围为整数,假设 f ( x ) f(x) f(x)是一个整系数多项式,我们讨论是否有整数值x满足同余式 f (...
10.7、华为数通HCIP-DataCom H12-821单选题:121-140
121、关于OSPF特性描述错误的是:D A、OSPF采用链路状态算法。 B、每个路由器通过泛洪 LSA 向外发布本地链路状态信息 C、每台 OSPF 设备都会收集其它路由器发来的LSA 所有的LSA 放在一起便组成了链路状态数据库LSDB, D、OSPF 区域0中所有路由器的 LSDB 都相同。 E、每台…...
多租户篇 | MatrixOne与MySQL全面对比
MySQL 是经典的关系型数据库管理系统,以其简单易用的特性在中小型业务系统中广受开发人员的喜爱。但是MySQL的架构也具有一定的局限性,在需要具备"隔离性"的业务,例如 SaaS 系统或微服务架构等对"数据隔离"及"资源隔…...
python Matplotlib Tkinter-->导出pdf报表
环境 python:python-3.12.0-amd64 包: matplotlib 3.8.2 reportlab 4.0.9 import matplotlib.pyplot as plt from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2Tk import tkinter as tk import tkinter.messagebox as messagebox impor…...
react-组件基础
1.目标 能够使用函数创建组件 能够使用class创建组件 能够给React元素绑定事件 能够使用state和setState() 能够处理事件中的this指向问题 能够使用受控组件方式处理表单 2.目录 React组件介绍 React组件的两种创建方式 React事件处理 有状态组件和无状态组件 组件中的state…...
The authenticity of host ‘github.com (20.205.243.166)‘ can‘t be established.
1、运行git clone报错: The authenticity of host github.com (20.205.243.166) cant be established. ECDSA key fingerprint is SHA256:p2QAC1TJYererOttrVc98/R1BWERWu3/LiyFdHfQM. Are you sure you want to continue connecting (yes/no/[fingerprint])? 这个…...
调用支付宝接口响应40004 SYSTEM_ERROR问题排查
在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...
【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...
08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险
C#入门系列【类的基本概念】:开启编程世界的奇妙冒险 嘿,各位编程小白探险家!欢迎来到 C# 的奇幻大陆!今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类!别害怕,跟着我,保准让你轻松搞…...
宇树科技,改名了!
提到国内具身智能和机器人领域的代表企业,那宇树科技(Unitree)必须名列其榜。 最近,宇树科技的一项新变动消息在业界引发了不少关注和讨论,即: 宇树向其合作伙伴发布了一封公司名称变更函称,因…...
tomcat指定使用的jdk版本
说明 有时候需要对tomcat配置指定的jdk版本号,此时,我们可以通过以下方式进行配置 设置方式 找到tomcat的bin目录中的setclasspath.bat。如果是linux系统则是setclasspath.sh set JAVA_HOMEC:\Program Files\Java\jdk8 set JRE_HOMEC:\Program Files…...
ubuntu22.04 安装docker 和docker-compose
首先你要确保没有docker环境或者使用命令删掉docker sudo apt-get remove docker docker-engine docker.io containerd runc安装docker 更新软件环境 sudo apt update sudo apt upgrade下载docker依赖和GPG 密钥 # 依赖 apt-get install ca-certificates curl gnupg lsb-rel…...
车载诊断架构 --- ZEVonUDS(J1979-3)简介第一篇
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 做到欲望极简,了解自己的真实欲望,不受外在潮流的影响,不盲从,不跟风。把自己的精力全部用在自己。一是去掉多余,凡事找规律,基础是诚信;二是…...
PH热榜 | 2025-06-08
1. Thiings 标语:一套超过1900个免费AI生成的3D图标集合 介绍:Thiings是一个不断扩展的免费AI生成3D图标库,目前已有超过1900个图标。你可以按照主题浏览,生成自己的图标,或者下载整个图标集。所有图标都可以在个人或…...
【java】【服务器】线程上下文丢失 是指什么
目录 ■前言 ■正文开始 线程上下文的核心组成部分 为什么会出现上下文丢失? 直观示例说明 为什么上下文如此重要? 解决上下文丢失的关键 总结 ■如果我想在servlet中使用线程,代码应该如何实现 推荐方案:使用 ManagedE…...
用js实现常见排序算法
以下是几种常见排序算法的 JS实现,包括选择排序、冒泡排序、插入排序、快速排序和归并排序,以及每种算法的特点和复杂度分析 1. 选择排序(Selection Sort) 核心思想:每次从未排序部分选择最小元素,与未排…...
