​如何解决SSD NAND Path冲突导致的性能问题?

news2024/11/24 3:25:55

1.引言

最近看到一篇关于SSD的NAND并发瓶颈相关的论文,思路非常好,这里分享给大家。本篇论文的解读,也是小编上周末在高铁上完成的。存储随笔的论文解读,不是直接翻译,是小编先研读一遍后,再结合自己的理解再解读分享,可能讲述顺序与原始论文架构可能会有差异,如果不当之处,还望见谅。想直接阅读原文的朋友也可以后台私信关键词【Venice】获取论文。也欢迎各位朋友给小编推荐更多有趣的论文!

2.论文解读

固态硬盘(SSD)的性能和容量正在持续提升,以满足现代数据密集型应用的不断增长的需求。然而,SSD控制器和内存芯片(如2D/3D NAND闪存芯片)之间的通信是许多应用的关键性能瓶颈。

现有的SSD使用的是多通道共享总线架构,其中多个内存芯片连接到相同的通道上,只能通过一条路径与SSD控制器通信,这经常导致路径冲突,严重限制了SSD的并行性。因此,处理好路径冲突,以提高SSD并行性和性能至关重要。

我们常见的SSD架构示意图如下:这个示意图包括了SSD架构组成,SSD控制、DRAM、NAND芯片,以及控制器Flash Controller与NAND架构交互的解释。同时,也简单解释了NAND die/Plane/Block/Page/Cell的逐级概念与解释。这张图,基本代表了SSD经典架构。

现代SSD(固态硬盘)中存在的路径冲突问题。这种问题通常在处理多个I/O请求时发生,会显著限制SSD的并行性。

  • 在同一个NAND Channel通道中,如果有多个IO读,就会需要等前面一笔读完成后,才能继续下一笔。
  • 在不同的NAND Channel通道中,这部分不会有path路径冲突的问题,不会相互影响。

现代SSD通常采用多通道共享总线架构进行SSD控制器和NAND闪存芯片之间的通信。SSD控制器通过多个共享通道(通常是4到16个)与多个闪存芯片(通常是4到32个)连接。然而,当有多个I/O请求同时发送到同一通道上的不同闪存芯片时,就会发生路径冲突。

通常解决方法以减轻路径冲突问题有两种:

  • 第一种方法是增加Flash通道带宽,这种方法主要通过Packetized SSD(pSSD)技术实现,其将Flash通道的带宽提高到基准SSD的两倍。然而,这种方法存在一些限制,例如需要额外的硬件支持,增加了成本和复杂性。

  • 第二种方法是增加路径数量。在多通道共享总线SSD架构中,通过增加从SSD控制器到内存芯片的路径数量,可以显著提高SSD的并行性。然而,这种方法也面临一些挑战,例如需要更多的芯片封装空间和更复杂的控制逻辑。

文章提到,之前也有一些论文对NAND路径冲突的问题进行了解决与优化,如上图提到的pSSD、pnSSD和NoSSD。论文作者通过使用先进的SSD模拟器MQSim对19个实际的数据密集型工作负载进行测试,文章比较了这些方法和基准SSD的性能。

上图中,针对没有Path冲突的SSD是基线SSD的4-11.7倍,这也是理想情况,现实并不存在。其次,pSSD、pnSSD和NoSSD分别对性能提升约27%、30%、35%。论文认为这些先前的方法并没有有效地缓解路径冲突问题,而且带来了显著的面积和成本开销。因此,论文得出结论,需要从根本上解决SSD中的路径冲突问题,即在提供路径多样性的同时,还要考虑降低成本。


本文提出了一种名为“Venice”的新机制,通过增加SSD控制器和内存芯片之间的路径多样性,从根本上解决路径冲突问题。Venice基于使用互连网络的思想,增加了路径多样性。它采用了三个关键技术:

1)在每个内存芯片旁边添加一个简单的路由芯片,无需修改内存芯片设计;

2)在启动传输之前,预留从SSD控制器到目标内存芯片的路径;

3)利用路径多样性,采用完全自适应路由算法有效地解决路径冲突。

预留路径(Path Reservation)是一种机制,旨在确保输入/输出(I/O)请求在数据传输时不会遇到路径冲突的问题。在预留路径的过程中,Venice会为每个I/O请求预先保留一条无冲突的路径,从而确保在数据传输期间不会发生路径冲突。这种技术避免了在互联网络中的每个路由处需要使用缓冲区来存储每个遇到路径冲突的I/O请求的数据。

在实现路径保留的过程中,Venice通过发送一个特殊的探测包(scout packet)来识别和预留路径。如果探测包在路由处无法找到空闲的链路,该路由器将启用取消模式(cancel mode),这将通过删除路由预留表中对应的条目来取消预留。然后,探测包将沿着其路径回溯到一个之前访问过的路由(即上游路由)。根据路由算法的自适应性,探测包可以尝试在上游路由器中选择不同的空闲输出链路,或者进一步回溯。这里面的回溯,也可以有效的规避死锁的问题。

此外,Venice机制尽可能寻找无冲突的最小路径(minimal path)。最小路径是连接两个节点的链路数量最少的路径。如果使用最小路径而不是非最小路径,可以减少链路的占用,从而有可能增加互联网络中其他正在进行的请求的传输效率。

在努力了这么多,有什么效果吗?实验结果表明,Venice平均提高了2.65×/1.67×的性能,优于性能优化/成本优化SSD设计的基线,减少了能量消耗。与最先进的互连设计相比,Venice在成本和性能方面都有显著的优势。这些结果表明,通过增加路径多样性和利用自适应路由算法来解决路径冲突,可以在不增加硬件复杂性的情况下提高SSD的性能和能效。因此,Venice为现代数据密集型应用提供了更高效、更节能的SSD设计。


同时,在长尾延迟(99% QoS)对比中,Venice机制表现也非常优秀。

在Path路径冲突解决有效性对比中,Venice机制的无冲突IO比例超过99.98%。 对比Baseline SSD/pSSD/pnSSD/NoSSD无冲突IO比例分别76.40%/78.47%/77.88%/80.65%。这个数据也佐证了Venice对路径冲突的超高有效性。

小编每日撰文不易,如果您看完有所受益,欢迎点击文章底部左下角“关注”并点击“分享”、“在看”,非常感谢!

精彩推荐:

  • 大容量疯了!居然想把磁带放到硬盘,100TB+是否可以实现?

  • NAND Vpass对读干扰和IO性能有什么影响?

  • HDD与QLC SSD深度对比:功耗与存储密度的终极较量

  • 小米14魔改存储芯片多出8GB空间背后的秘诀

  • SSD IO性能优化是一项复杂但很有趣的工程

  • 双11即将来临,挑选SSD硬盘最全避坑指南

  • 性能领域:你知道的越多,不知道的也就越多

  • NVMe SSD:ZNS与FDP对决,你选谁?

  • 如何通过优化Read-Retry机制降低SSD读延迟?

  • 关于硬盘质量大数据分析的思考

  • 存储系统性能优化中IOMMU的作用是什么?

  • 全景解析SSD IO QoS性能优化

  • NVMe IO数据传输如何选择PRP or SGL?

  • 浅析nvme原子写的应用场景

  • 多维度深入剖析QLC SSD硬件延迟的来源

  • 浅析PCIe链路LTSSM状态机

  • 浅析Relaxed Ordering对PCIe系统稳定性的影响

  • 实战篇|浅析MPS对PCIe系统稳定性的影响

  • 浅析PCI配置空间

  • 浅析PCIe系统性能

  • 存储随笔《NVMe专题》大合集及PDF版正式发布!

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

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

相关文章

SoftwareTest6 - 用 Selenium 怎么点点点

用 Selenium 来点点点 一 . 什么是自动化 ?1.1 自动化测试的分类接口自动化测试UI 自动化测试 (界面测试) 1.2 实现自动化测试的工具 : selenium环境部署驱动 二 . selenium 的使用2.1 一个简单的示例 : 让谷歌浏览器在百度首页搜索蔡徐坤准备工作编写代码 2.2 打开谷歌浏览器…

世界互联网大会|美创科技新一代 灾备一体化平台(DRCC v3.0)重磅亮相

11月9日,在2023年世界互联网大会“互联网之光”博览会上,美创科技携2023年重磅新品——新一代 灾备一体化平台(DRCC v3.0)亮相! ◼︎ 云计算、国产化浪潮下,各类信息基础设施的运行安全面临全新挑战&#…

性能测试 —— Jmeter分布式测试的注意事项和常见问题

Jmeter是一款开源的性能测试工具,使用Jmeter进行分布式测试时,也需要注意一些细节和问题,否则可能会影响测试结果的准确性和可靠性。 Jmeter分布式测试时需要特别注意的几个方面 1. 参数化文件的位置和内容 如果使用csv文件进行参数化&…

【Java 进阶篇】JQuery 案例:优雅的隔行换色

在前端的设计中,页面的美观性是至关重要的。而其中一个简单而实用的设计技巧就是隔行换色。通过巧妙地使用 JQuery,我们可以轻松地实现这一效果,为网页增添一份优雅。本篇博客将详细解析 JQuery 隔行换色的实现原理和应用场景,让我…

数据结构入门————栈和队列(C语言/零基础/小白/新手+模拟实现+例题讲解)

目录 1.栈的概念 ​编辑 2.栈的作用 1.函数递归 2.表达式求值 3.栈的模拟实现 Stack.h Stack.c 4.队列的概念 5.队列的模拟实现 Queue.h Queue.c 6.例题 1.一个栈的初始状态为空。现将元素1、2、3、4、5、A、B、C、D、E依次入栈,然后再依次出栈,…

如何把小米路由器刷入OpenWRT系统并通过内网穿透工具实现公网远程访问

小米路由器4A千兆版刷入OpenWRT并远程访问 文章目录 小米路由器4A千兆版刷入OpenWRT并远程访问前言1. 安装Python和需要的库2. 使用 OpenWRTInvasion 破解路由器3. 备份当前分区并刷入新的Breed4. 安装cpolar内网穿透4.1 注册账号4.2 下载cpolar客户端4.3 登录cpolar web ui管理…

LeetCode | 225. 用队列实现栈

LeetCode | 225. 用队列实现栈 OJ链接 此题可以用两个队列去实现一个栈,每次始终保持一个队列为空, 入栈操作相当于给非空队列进行入队操作 入数据,把不为空的队列入 出数据,把不为空的队列数据导入为空,直到最后一…

如何将微软 Office 宏转换为 ONLYOFFICE 宏

想要将微软 Office VBA 宏转换为可在 ONLYOFFICE 中无缝使用的宏?嗯,虽然这种需求并没有直接的解决方案,不过我们也会在本文中介绍 VBA 宏的转换步骤——正好我们手上也有一个来自用户的实际案例可供参考。 VBA 宏 以下是原始的 VBA 宏代码&…

vscode+python开发之虚拟环境和解释器切换

需求情景: 现在我们要开发多个项目比如:项目A,项目B、项目C,他们每个项目需要依赖不同的库。每个项目依赖的解释器也不一样怎么办? 项目A:需要在python3.7环境运行 依赖aadd3.2库 项目B、需要在python3.11…

〖大前端 - 基础入门三大核心之JS篇㉟〗- JavaScript 的DOM简介

说明:该文属于 大前端全栈架构白宝书专栏,目前阶段免费,如需要项目实战或者是体系化资源,文末名片加V!作者:不渴望力量的哈士奇(哈哥),十余年工作经验, 从事过全栈研发、产品经理等工作&#xf…

No207.精选前端面试题,享受每天的挑战和学习

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入…

【Python】爬虫代理IP的使用+建立代理IP池

目录 前言 一、代理IP 1. 代理IP的获取 2. 代理IP的验证 3. 代理IP的使用 二、建立代理IP池 1. 代理IP池的建立 2. 动态维护代理IP池 三、完整代码 总结 前言 在进行网络爬虫开发时,我们很容易遭遇反爬虫机制的阻碍。为了规避反爬虫机制,我们…

R语言爬虫程序自动爬取图片并下载

R语言本身并不适合用来爬取数据,它更适合进行统计分析和数据可视化。而Python的requests,BeautifulSoup,Scrapy等库则更适合用来爬取网页数据。如果你想要在R中获取网页内容,你可以使用rvest包。 以下是一个简单的使用rvest包爬取…

tensorflow 1.15 gpu docker环境搭建;Nvidia Docker容器基于TensorFlow1.15测试GPU;——全流程应用指南

前言: TensorFlow简介 TensorFlow 在新款 NVIDIA Pascal GPU 上的运行速度可提升高达 50%,并且能够顺利跨 GPU 进行扩展。 如今,训练模型的时间可以从几天缩短到几小时 TensorFlow 使用优化的 C 和 NVIDIA CUDA 工具包编写,使模型能够在训练…

20231114在HP笔记本的ubuntu20.04系统下向RealmeQ手机发送PDF文件

20231114在HP笔记本的ubuntu20.04系统下向RealmeQ手机发送PDF文件 2023/11/14 14:11 手机:Realme Q 笔记本电脑:HP https://item.jd.com/100012583174.html 惠普(HP)战66 三代AMD版 14英寸轻薄笔记本电脑(锐龙7nm 六核…

旺店通·企业版对接打通金蝶云星空查询调拨单接口与分布式调入单新增接口

旺店通企业版对接打通金蝶云星空查询调拨单接口与分布式调入单新增接口 源系统:旺店通企业版 旺店通是北京掌上先机网络科技有限公司旗下品牌,国内的零售云服务提供商,基于云计算SaaS服务模式,以体系化解决方案,助力零售企业数字化…

Qt QWebEngine 加载网页及交互,实现C++与JS 相互调用

目录 前言1、QtWebEngine介绍2、安装3、核心类介绍3.1 QWebEngineView3.2 QWebEnginePage3.3 QWebEngineProfile3.4 QWebEngineHistory3.5 QWebEngineSettings 4、加载网页5、C调用JS5.1 无返回值5.2 有返回值 6、JS调用C6.1 新建WebObject 类继承自QObject。6.2 将WebObject对…

前端入门(二)js速成与vue脚手架搭建

文章目录 JS常用API操作对象操作对象增删改查js深拷贝、浅拷贝js实现深拷贝的方式 安全访问 JS常用API操作 对象操作 对象增删改查 创建对象 let obj {}新增属性 obj.a 1 、obj[a] 1修改属性 obj.a ‘a’查询属性 obj.a 、obj[a]删除属性 delete obj.a js深拷贝、浅拷贝…

day08_子网划分与子网掩码

什么是子网划分? 1、概念:借主机位给网络位使用,以此来达到把一个大网段划分为n个儿子网段的目的,2. 为何要进行子网划分?3、子网掩码:就是对ip地址打记号4、 网络地址的计算机方式:ip地址与子网掩码都转换成二进制&a…

如何实现Redisson分布式锁

首先,不要将分布式锁想的太复杂,如果我们只是平时业务中去使用,其实不算难,但是很多人写的文章不能让人快速上手,接下来,一起看下Redisson分布式锁的快速实现 Redisson 是一个在 Redis 的基础上实现的 Java…