SSD基础架构与NAND IO并发问题探讨

news2024/11/28 0:48:46

图片

在我们的日常生活中,我们经常会遇到一些“快如闪电”的事物:比如那场突如其来的雨、那个突然出现在你眼前的前任、还有就是今天我们要聊的——固态硬盘(SSD)。

如果你是一个技术宅,或者对速度有着近乎偏执的追求,那么恭喜你,你找到了一个新朋友。这个朋友不仅快,而且非常稳定。他可以让你的游戏加载瞬间完成,让你的工作效率翻倍,甚至让你的电脑启动时间从“泡一杯咖啡”缩短到“打个哈欠”。

但你知道吗?这种神奇的速度背后,隐藏着一个复杂的结构和原理。这就是我们今天要探索的主题——SSD架构原理。我们将深入到它的内部,看看那些小小的闪存颗粒是如何变成我们手中的高速存储设备的。这就像是一次奇妙的探险,我们将一起揭开SSD神秘面纱,一探究竟!

先来看一张完整架构:SSD主要包括了与Host接口协议、控制器芯片SOC,NAND闪存,DRAM缓存。

图片

Host下发IO,到SSD内部的处理逻辑如下图。这里面核心点,IO逻辑地址LSA(或者叫LBA),到真正最后落入NAND,还有一层FTL转化为了NAND的物理地址PPN(或者叫做PBA)。

图片

FTL管理着逻辑地址和物理地址的映射关系。有时候,逻辑地址不变,对应的物理地址在不断变化。

图片

IO最后写入NAND的过程也有很多关卡:

  • 与SSD控制交互的NAND Channel,每个Channel通道有独立的NAND控制芯片。

  • 每个Channel也有多个NAND芯片,不同芯片之间又有Way的概念。

  • 每个NAND芯片,又包括了多个NAND die。

  • 每个Die再细分还有不同Plane

  • 每个Plane有很多个数据块Block

  • 每个Block再细分就有了Page,每个block会有上千个page数据页。

图片

为了提升固态硬盘(SSD)的性能,NAND相关的并发访问优化是关键因素之一,涉及NAND并发访问主要有以下几个方面:

  1. 多通道设计:现代SSD通常使用多通道架构,每个通道连接一组NAND闪存芯片。这样可以同时处理多个并行读写操作,从而提高I/O吞吐量和响应时间。

图片

  1. Way Pipeline设计:因为共享同一个channel通道,并不能完全并发执行。但NAND有erase/program/read多种操作,不同的操作响应时间也不一样,可以通过way pipeline的方式尽可能优化响应时间。这部分主要是在NAND package内部交叉执行(interleaving)

图片

  1. die间并发:当一个NAND芯片封装包含多个die时,可以在不同die之间并行地执行读写操作。这可以通过先进的控制器算法来实现,以充分利用所有可用资源。

图片

  1. Plane间并发:在NAND闪存中,一个die(晶片)通常由多个plane组成。每个plane都包含独立的地址线、数据线和控制信号,能够并行地执行读写操作。不同plane之间的共享可以提高SSD的性能和效率。目前NAND都支持multi-plane的操作。

图片

在进行数据写入数据页page时,不同的分配规则(比如Way优先、CH优先、Die优先),对性能有很大的影响。

图片

如果以Channel优先进行Page页的分配策略,结合Way、Die、Plane的组合排列,数据分布的可能组合如下:

图片

如果以Way优先进行Page页的分配策略,结合Channel、Die、Plane的组合排列,数据分布的可能组合如下:

图片

如果以Die优先进行Page页的分配策略,结合Channel、Way、Plane的组合排列,数据分布的可能组合如下:

图片

如果以Plane优先进行Page页的分配策略,结合Channel、Way、Die的组合排列,数据分布的可能组合如下:

图片

不同的page分配策略中,整体的有效利用率在43%。

图片

不同的page分配策略,在读写过程中,有80%的时间处于idle状态。

图片

SSD整体优化策略就是要低延迟,高带宽,增加NAND的并发度。

图片

声明:本文内容参考 Yonsei University Myoungsoo Jung教授团队研究比较早期成果,如果有不当之处,恭请留言指正,感谢!

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

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

相关文章

程序的机器代码表示--函数调用

call和ret指令 如何访问栈帧、如何切换栈帧、如何传递参数和返回值 call、ret指令作用: call:1)将IP(即PC)旧值压栈保存(保存在函数的栈帧顶部);2)设置IP新值&#xff0…

Module build failed : Error : Vue packages version mismatch:

Vue packages version mismatch: - vue2.7.15 (E:\Workspace_ce\erp\erp-web\node_modules\vue\dist\vue.runtime.common.js) - vue-template-compiler2.6.11 (E:\Workspace_ce\erp\erp-web\node_modules\vue-template-compiler\package.json) 【问题解决了,我很不…

MyBatis 四大核心组件之 ParameterHandler 源码解析

🚀 作者主页: 有来技术 🔥 开源项目: youlai-mall 🍃 vue3-element-admin 🍃 youlai-boot 🌺 仓库主页: Gitee 💫 Github 💫 GitCode 💖 欢迎点赞…

55.手写实现grpc连接池以及gin和grpc交互

文章目录 一、简介前置说明 二、敏感词过滤服务1、定义sensitive.proto文件2、protoc生成pb.go文件3、sensitive服务端实现 三、关键词匹配服务1、编写keywords.proto文件2、生成pb.go文件3、keywords服务端实现 四、gin web 路由服务1、新建grpcpool服务作为gin web服务2、根据…

.net core提示The xx field is required,One or more validation errors occurred

访问接口时缺少model中的参数时,会提示: The xx field is required One or more validation errors occurred原因是.net core webapi默认参数为不可空,因此会验证并报错。 解决方案: 在项目的.csproj中,修改Nullable…

2023团体程序设计天梯赛——模拟赛和总决赛题

M-L1-1 嫑废话上代码 Linux 之父 Linus Torvalds 的名言是:“Talk is cheap. Show me the code.”(嫑废话,上代码)。本题就请你直接在屏幕上输出这句话。 输入格式: 本题没有输入。 输出格式: 在一行中输出…

华为新款笔记本搭载5nm麒麟芯片,来源成谜,可能让大家失望了~

近日,华为公司悄悄推出了一款基于国产技术打造的全新商用笔记本——华为擎云L540。目前,华为擎云L540在京东平台悄然上线的,尚未在华为官方渠道公开售卖。华为擎云L540搭载了麒麟9006C处理器,采用先进的5nm制程工艺,8 …

大数据HCIE成神之路之数据预处理(1)——缺失值处理

缺失值处理 1.1 删除1.1.1 实验任务1.1.1.1 实验背景1.1.1.2 实验目标1.1.1.3 实验数据解析 1.1.2 实验思路1.1.3 实验操作步骤1.1.4 结果验证 1.2 填充1.2.1 实验任务1.2.1.1 实验背景1.2.1.2 实验目标1.2.1.3 实验数据解析 1.2.2 实验思路1.2.3 实验操作步骤1.2.4 结果验证 1…

JAVA高级(后端需深入移步)

单元测试:使用Junit单元测试框架 使用Junit单元测试: 通过左侧的对❌来进行提示 Junit框架的常见注解: 反射(用于框架,也是最重要):展示框架的成员信息 由于是用于对象,即使在获取…

PHP基础 - 类型比较

在 PHP 中,作为一种弱类型语言,它提供了松散比较和严格比较两种方式来比较变量的值和类型。 松散比较: 使用两个等号(==)进行比较,只会比较变量的值,而不会考虑它们的数据类型。例如: $a = 5; // 整数 $b = 5; // 字符串if ($a == $b) {echo "相等"; // 输…

Go性能分析工具

前言 作为后端研发,性能分析是我们在研发过程中必然会会遇到的环节,接口耗时、堆栈溢出、内存泄露等等。所谓工欲善其事必先利其器,之前在java中我们是使用arthas这一大神器,不得不说确实好用,想了解arthas的可以看下…

Zookeeper单机模式搭建

1、下载 ​wget https://dlcdn.apache.org/zookeeper/zookeeper-3.6.3/apache-zookeeper-3.6.3-bin.tar.gz 2、解压 tar -zxvf apache-zookeeper-3.6.3-bin.tar.gz 3、进入 apache-zookeeper-3.6.3-bin目录下,创建data cd apache-zookeeper-3.6.3-bin mkdir da…

面试官:性能测试瓶颈调优你是真的会吗?

引言:性能瓶颈调优 在实际的性能测试中,会遇到各种各样的问题,比如 TPS 压不上去等,导致这种现象的原因有很多,测试人员应配合开发人员进行分析,尽快找出瓶颈所在。 理想的性能测试指标结果可能不是很高&…

CGAL的2D符合规定的三角剖分和网格

1、符合规定的三角剖分 1.1、定义 如果三角形的任何面的外接圆在其内部不包含顶点,则该三角形是 Delaunay 三角形。 约束 Delaunay 三角形是一种尽可能接近 Delaunay 的约束三角形。 约束 Delaunay 三角形的任何面的外接圆在其内部不包含从该面可见的数据点。 如果…

Leetcode—1768.交替合并字符串【简单】

2023每日刷题&#xff08;五十五&#xff09; Leetcode—1768.交替合并字符串 实现代码 class Solution { public:string mergeAlternately(string word1, string word2) {int len1 word1.size(), len2 word2.size();string ans;for(int i 0; i < len1 || i < len2;…

编译Android14 AOSP原生代码并运行X86模拟器镜像过程记录

最近在研究Android Entreprise部分的特性&#xff0c;需要在Android手机上分析WorkProfile相关的源码&#xff0c;因为新买的Pixel样机还未到货&#xff0c;看了几天Android源码&#xff0c;迫切需要上真机对比分析。 又听说最近几年Android模拟器已经有些进步&#xff0c;至少…

IDEA远程调试与JDWP调试端口RCE漏洞

文章目录 前言Docker远程调试Java调试原理远程调试实践 JDWP端口RCE调试端口探测调试端口利用 总结 前言 在对一些 Java CVE 漏洞的调试分析过程中&#xff0c;少不了需要搭建漏洞环境的场景&#xff0c;但是本地 IDEA 搭建的话既麻烦&#xff08;通过 pom.xml 导入各种漏洞组…

散列卡片悬停变为整齐列表

效果展示 CSS 知识点 transform 属性运用 页面整体布局 <ul><li><div class"box"><img src"./user1.jpg" /><div class"content"><h4>Hamidah</h4><p>commented on your photo.<br />…

每日OJ题_算法_双指针④_力扣11. 盛最多水的容器

目录 力扣11. 盛最多水的容器 解析代码 力扣11. 盛最多水的容器 11. 盛最多水的容器 - 力扣&#xff08;LeetCode&#xff09; 难度 中等 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两…

APP备案(Android) - 获取签名证书公钥、MD5

因为近期刚针对各应用平台对APP备案时间节点要求进行了统一整理&#xff0c;然后隔天就被要求提供一下app相关的的公钥和MD5&#xff0c;虽然很快就解决了这个事情&#xff0c;但忍不住又稍微衍生了一下&#xff0c;但行小步&#xff0c;莫问远方吧 关联Blog APP备案(Android)…