字节跳动ZNS SSD应用案例分析

news2024/11/25 18:40:43

图片

字节给出未来数据中心的发展趋势,包括计算、网络、存储三大组件。

图片

字节目前遇到云存储的痛点主要包括:性能、成本、稳定性、定制化。性能方面,SSD的垃圾回收在传统SSD并不可控。成本方面,传统SSD需要预留一定的OP预留空间。稳定性方面,出现异常后,传统SSD的定位周期很大程度依赖SSD厂商。定制化方面,目前主要有SGL、CMB、PMR、ZNS等。

图片

在使用ZNS SSD的场景中,字节采用了软硬结合的方式整体优化。软件方面,负责GC,WL,NAND数据存放位置优化以及QoS优化。硬件方面,主要负责是底层NAND异常和NAND管理,以及CMB、PMR特性

图片

软件架构如下:NAND相关等盘体异常可以通过AER进行错误上报。

图片

软件针对数据管理的架构:

图片

利用分布式存储chunk管理,与Zone SSD映射关系如下:

图片

通过分布式存储完成Host侧的垃圾回收GC:

图片

Host在对ZNS SSD写数据过程中,有一个很重要的特性就是要支持写入数据最后一个LBA overwrite覆盖写,优化NAND存储空间,最终降低写放大。LBA覆盖写在ZNS标准协议是不支持的,需要定制化设计。

图片

同时,对于有硬件,有两个重要的定制功能,是需要支持CMB和PMR

图片

CMB(Controller Memory Buffer),即控制器内存缓冲区,是SSD控制器内部用于缓存数据的动态随机访问存储器(DRAM)。它的主要目的是加速数据处理,减少读写操作的延迟。通过使用CMB,SSD可以预先将一部分数据缓存在高速的DRAM中,然后根据需要快速地从CMB中提供数据给主机系统,或者临时存储等待写入闪存的数据。

CMB的工作原理包括:

  • 预取(Prefetching):当控制器预测到即将需要的数据时,会提前将其加载到CMB中,从而减少了实际从闪存读取数据的时间。

  • 写回(Write-back):如果主机发出一个写入请求,而目标地址已经存在于CMB中,那么控制器可以选择先更新CMB中的数据,稍后再将修改后的数据写入闪存。这允许更快地响应写入操作,并且有助于提高整体性能。

图片

在 NVME 1.4 SPEC引入了类似CMB的PMR(Persistent Memory Region),PMR的作用是提供一种内存级读写速度、断电后数据不会丢失的存储区域。它使用此功能创建并控制一个称为持久性内存区域(PMR)的存储区域,该存储区可以映射到PCI Express总线上的地址空间上面,并且可被主机和其他设备访问。PMR的主要特点是,在电源断电(power cycle),控制器复位以及PMR启用/禁用切换之后,写入PMR的数据也会保留。此功能使SSD除了提供通过逻辑块地址(LBA)访问的存储区域外,还提供了另一个非易失性存储区域,并且这块存储区域假定的访问方法是内存访问而不是块访问。

图片

Zero Copy通过消除这些不必要的数据复制来提高效率它允许数据直接从源缓冲区传输到目标设备,而不需要经过中间缓冲区。这样可以减少CPU的参与,释放更多的计算资源,并加快数据传输的速度。

SGL(Scatter-Gather List)是实现Zero Copy的一种方法。在这种机制下,应用将一系列分散的数据块(称为scatter-gather list)提交给设备驱动程序,而不是一个连续的内存区域。驱动程序则可以直接将这些分散的数据块传输到目标设备上,从而避免了在传输过程中对数据进行复制。

结合Zero Copy技术和SGL,可以显著提升存储系统的性能,尤其是对于需要处理大量小规模I/O操作的应用场景,如数据库、虚拟化环境和大数据分析等。

针对云数据中心对ZNS SSD的特别定制需求,字节跳动总结如下:

图片

基于字节跳动公布的ZNS SSD的应用效果显示:可用容量提升30%,带宽提升3倍,成本下降20%。

图片

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

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

相关文章

【Marp】基于Markdown-Marp快速制作PPT

【Marp】基于Markdown-Marp快速制作PPT 文章目录 【Marp】基于Markdown-Marp快速制作PPT零、参考资料一、Marp基本语法(创建分页,排版图片,更换主题,Marp扩展指令修改样式)1、创建新的PPT页面2、插入图片 & 排版图…

Python学习笔记-类

1 定义类 类是函数的集合,class来定义类 pass并没有实际含义,只是为了代码能执行通过,不报错而已,相当于在代码种占一个位置,后续完善 类是对象的加工厂 2.创建对象 carCar()即是创建对象的过程 3、类的成员 3.1 实例…

【CiteSpace】引文可视化分析软件CiteSpace下载与安装

CiteSpace 译“引文空间”,是一款着眼于分析科学分析中蕴含的潜在知识,是在科学计量学、数据可视化背景下逐渐发展起来的引文可视化分析软件。由于是通过可视化的手段来呈现科学知识的结构、规律和分布情况,因此也将通过此类方法分析得到的可…

Unity中C#如何访问并修改Shader材质

文章目录 前言一、我们用点击按钮来改变Shader传入的颜色值1、在渲染GUI时,绘制一个按钮2、我们使用一个公共的成员变量存储需要进行修改的游戏对象3、最后给绘制的按钮点击增加逻辑即可 二、测试使用的代码1、Shader代码:2、C#脚本 前言 我们写好Shade…

MFC CLXHHandleEngine动态库-自定义设置对话框使用

实现的效果如下所示: void CSampleDlg::OnBnClickedButton2() { // TODO: 在此添加控件通知处理程序代码 CSgxMemDialog dlg(180, 100); dlg.SetEnable(true); dlg.SetWindowTitle(_T("自定义对话框")); dlg.AddStatic(1000, //控件资源…

vue构建项目

vue构建项目 全局安装脚手架 npm install -g vue/cli vue -V(版本号查看) 官方介绍:Installation | Vue CLI 一、vue可视化创建项目 vue 可视工具 vue ui 新建项目(可视化) 功能选择 配置 二、VSCode 命令行创建…

D28|买卖股票的最佳时机+跳跃游戏

122.买卖股票的最佳时机 II 初始思路: 这道题解题的时候比较像在找规律,发现只要计算这个过程中的两数之差然后相加即可。 题解复盘: 可以更加清晰的发现如何从题意中获得贪心的思路。 如何贪心:局部最优:收集每天的…

Redis高效恢复策略:内存快照与AOF

第1章:Redis宕机恢复的重要性和挑战 大家好,我是小黑。今天咱们来聊聊Redis宕机后的恢复策略。想象一下,你的网站突然宕机了,所有的数据都飘了,这种情况下,快速恢复数据就显得尤为重要。Redis作为一个高性…

neuq-acm预备队训练week 8 P1144 最短路计数

题目描述 给出一个 N 个顶点 M条边的无向无权图,顶点编号为 1∼N。问从顶点 1 开始,到其他每个点的最短路有几条。 题目限制 输入格式 第一行包含 22 个正整数 N,M,为图的顶点数与边数。 接下来 M 行,每行 2个正整数 x,y&…

江科大 STM32入门教程 P14 定时中断和定时器外部时钟

1 通用定时器中断的初始化(Time2) 1.1 开启RCC的TimxCLK时钟, 由于Time2是由APB1总线的外设控制的 RccAPB1PeriphClockCmd(RCC_APB1PeriPh_TIM2,ENABLE);//使能APB1总线1.2 选择时基单元时钟 选择时基单元内部时钟 TIM_InteralClockConfig(IIM2);//内…

谷歌笔记应用Notebook LM,添加Gemini Pro模型并扩大应用范围;Fine-Tuning预训练模型

🦉 AI新闻 🚀 谷歌更新AI笔记应用Notebook LM,添加Gemini Pro模型并扩大应用范围 摘要:谷歌在今年5月推出的AI笔记应用Notebook LM进行了更新,主要添加了最新的Gemini Pro模型,并扩大了应用使用范围。Not…

【K8S in Action】服务:让客户端发现pod 并与之通信(1)

服务是一种为一组功能相同的 pod 提供单一不变的接入点的资源。当服务存在时,它的 IP 地址和端口不会改变。 客户端通过 IP 地址和端口号建立连接, 这些连接会被路由到提供该服务的任意一个 pod 上。 pod 是短暂,会删除增加,调度…

ffmpeg6.0之ffprobe.c源码分析二-核心功能源码分析

本篇我们继续分析: 1、ffprobe -show_packets 参数的处理流程;2、ffprobe -show_frames 参数的处理流程;3、ffprobe -show_streams 参数的处理流程;4、ffprobe -show_format 参数的处理流程; 因为前面的文章已经回顾了这些命令的使用,以及作用。本文就不在赘述,以免篇幅…

4-SpringMVC

文章目录 项目源码地址回顾-MVC什么是MVC?MVC各部分组成 回顾-ServletMaven创建Web项目1、创建Maven父工程pom,并导入依赖2、用Maven新建一个Web Module3、代码:HelloServlet.java3、代码-hello.jsp3、代码-web.xml4、配置Tomcat5、浏览器测试…

通过生成模拟释放无限数据以实现机器人自动化学习

该工作推出RoboGen,这是一种生成机器人代理,可以通过生成模拟自动大规模学习各种机器人技能。 RoboGen 利用基础模型和生成模型的最新进展。该工作不直接使用或调整这些模型来产生策略或低级动作,而是提倡一种生成方案,该方案使用…

分子生成领域的stable diffusion - GEOLDM

一、关于stable diffusion 很多人都知道stable diffusion,stable diffusion的出现改变了机器生成领域,让AI技术第一次无比的接近正常人。大语言模型,AIGC概念于是兴起。基于stable diffusion 大家开发了lora, hyperwork等微调技术…

React-hooks

1 hooks使命 #逻辑组件复用 逻辑与UI组件分离 React 官方推荐在开发中将逻辑部分与视图部分结耦,便于定位问题和职责清晰 函数组件拥有state 在函数组件中如果要实现类似拥有state的状态,必须要将组件转成class组件 逻辑组件复用 社区一直致力于逻辑…

【数据结构高阶】红黑树

目录 一、红黑树的概念 二、红黑树的性质 2.1 红黑树与AVL树的比较 三、红黑树的实现 3.1 红黑树节点的定义 3.2 数据的插入 3.2.1 红黑树的调整思路 3.2.1.1 cur为红,f为红,g为黑,u存在且为红 3.2.1.2 cur为红,f为红&am…

Seata配置

参考教程 seata 分布式事务的环境搭建与使用 Seata 1.4.0 nacos配置和使用,超详细 Seata 1.4.2 的安装 Nacos的配置和使用 官网下载地址 本文以v1.4.1为例 1.数据库及表的创建 创建seata数据库,创建以下表(右键连接-》新建数据库seata-》…

MVC Gantt Wrapper:RadiantQ jQuery

The RadiantQ jQuery Gantt Package includes fully functional native MVC Wrappers that let you declaratively and seamlessly configure the Gantt component within your aspx or cshtm pages just like any other MVC extensions. 如果您还没有准备好转向完全基于客户端…