首页 > 数据库 >SSD, Redis多线程与云服务器架构,PC处理器

SSD, Redis多线程与云服务器架构,PC处理器

时间:2022-09-20 05:44:06浏览次数:102  
标签:threads Redis PC client 线程 pthread mutex 多线程

SSD, Redis多线程与云服务器架构,PC处理器

参考文献链接

https://mp.weixin.qq.com/s/T-ZTn4_oGwhXSpPNg0_wOw

https://mp.weixin.qq.com/s/qqTgnG3ndeUiZXdnmzQUfQ

https://mp.weixin.qq.com/s/1ex9MVhpKE5GPX4-bY-fdg

https://mp.weixin.qq.com/s/qwzdeVK4ILAwpFrd0I5M9Q

企业级SSD创新技术分析

内容涵盖了企业级 SSD 存储总体情况,企业级 SSD 创新技术分析,企业级 SSD 测试技术分析和主控厂商分析。

1. 主控

(1) ARM 架构

ARM 架构采用 ARM 指令集系统,根据适用范围的不同,开发差异化处理器体系结构。ARM 架构采用精简指令集(RISC)设计,通过高时钟频率、短周期执行指令集,能够有效降低芯片复杂度。Load/Store 指令架构使处理器可以根据 Load 和 Store 指令存取内存数据,RISC 架构处理器中均包含多种存放指令和数据的寄存器,ARM 架构亦是如此,ARM 处理器虽然没有采用单周期指令,但是为了便于指令解码,绝大多数指令采用定长设计,在进行运算时,CPU 只处理寄存器内数据。除了 ARM 指令集,ARM 架构还可以支持 32 位或者 16 位 Thumb指令集,它能够提供更强的代码密度,与 ARM 指令集交互工作,进一步增强处理器性能。与 x86 架构的复杂指令集(CISC)相比,ARM 架构有效提升了常用操作的运行效率。

Armv9 架构重点关注人工智能、安全性和专用处理,极大提升整体性能,支撑机器学习、数字信号处理、图像和语音识别等任务需求。Armv9 支持 Aarch32和 Aarch64 指令、NEON、加密扩展、信任区等,在 Armv8 的基础上,新增了可缩放矢量扩展 2.0(SVE2)、Arm 机密计算架构(CCA)、跟踪和调试、事务内存扩展(TME)等功能[14]。SVE2 在部分 Arm 超级计算机内核中增加定点运算,向量长度为 128bit,最高可达 2048bit,面向专用 DSP 和 XR(增强和虚拟现实)工作负载,应用于 5G、基因学、计算机视觉等多个领域[15];Arm 机密计算架构(CCA)包括领域管理扩展(RME)和 Arm 机密计算固件架构两个部分,建起全新的安全硬件环境,同时简化硬件设计,增强机密计算的可扩展性、再利用性和可移植性;跟踪和调试的分支记录缓冲区扩展(BRBE)提供信息分析能力,可用于调试和优化,嵌入式跟踪扩展(ETE)和跟踪缓冲区扩展(TRBE)改进了 Armv9的跟踪功能;事务性内存扩展(TME)支持 Arm 架构的硬件事务性内存(HTM),解决高并发写入、多线程编程问题,并通过减少锁争用导致的序列化,使得粗粒度、线程级的并行性可以随着 CPU 数量的增加而扩展。

 

 

 (2) Cortex 处理器

Cortex 处理器由 Cortex-A 系列、Cortex-R 系列和 Cortex-M 系列组成,面向不同的任务要求,提供差异化功能。Cortex-A 系列处理器面向承担复杂计算任务的设备,多用于企业级和数据中心 IT 设备,要想使 Cortex-A 处理器保持均衡的性能、功耗和尺寸,需要安装前端处理器,即在 Cortex-R 处理器上增加性能;Cortex-R 系列处理器针对高性能进行了优化,满足实时处理和低时延要求,是企业级 SSD、消费级 SSD 和数据中心中的常用处理器;Cortex-M 系列用于离散处理和微控制器,可以通过数据快速移动实现低时延和实时性,极低功耗的消费级控制器通常会选择此类型号,但 Cortex-M55、Cortex-M33 和 Cortex-M0+等处理器可以为 SSD 提供辅助。Cortex 处理器系列如表3所示。

 

 

 Cortex-A55 是 Arm 最强大、最高效的中端系列处理器,以 DynamIQ 技术为基础,适用于企业级 SSD 和数据中心设备等复杂计算任务。Arm Cortex-A55处理器采用 DynamIQ 技术、Armv8-A 扩展架构和专用机器学习指令,是第一代CPU 应用的组成部分。Cortex-A55 使用经过重新设计的微架构系统,显著提高处理器性能,在规格和能效方面形成较强竞争力。与的 Cortex-A53 相比,它的性能提高了 18%,功率效率提高了 15%。作为可扩展的 CPU,Cortex-A55 可用于解决从边缘到云计算的各种应用场景。Cortex-A55 既可以在独立应用中实现,也可以作为 Cortex-A7x 系列的“缩小版”CPU。

Cortex-R 系列处理器能够为企业级 SSD 主控提供有效支撑,满足实时性高、复杂性强的任务要求。Cortex-R5 处理器为实时应用程序提供了扩展的故障遏制。Cortex-R5 处理器在 Cortex-R4 的基础上,增强了错误管理、扩展功能安全和 SoC集成等方面的性能,可用于深度嵌入式实时系统和关键安全系统。Cortex-R8 是该系列产品中性能最强实时处理器,使用 Armv7-R 架构的 32 位指令集内核、11级流水线和超标量无序执行,可以从单核配置扩展到四核配置,充分释放工作负载并行性,单核 Cortex-R8 也可以根据工作负载进行断电[17]。Cortex-R82 实现 64位 Armv8-R AArch64 架构的处理器,通过 Arm Neon 技术实现机器学习负载加速,同时采用可选内存管理单元(MMU)来支持复杂操作系统(OS),适用于数据中心、企业级 SSD 和计算存储驱动器(CSD)。

2、固件

(1) 固件算法

固件是增强企业级 SSD 性能的重要组成,高效高质的固件算法可以提升固件性能,实现闪存和主控的完美兼容,增强 SSD 整体性能。固件算法由垃圾回收、损耗均衡、坏块管理、数据保持、断电恢复等多种算法组成。由于同一个物理块不能无限次擦除[18 ],因此需要通过垃圾回收将现有物理块的有效数据迁移到空闲块,通过算法回收已写入或被标记删除的无效数据,进而擦除整个块数据,使其变为可用状态;损耗均衡包括动态损耗均衡和静态损耗均衡两种,动态算法是指写入新数据时,优先选择损耗少的物理块,静态算法是把冷数据迁移到损耗多的物理块上,从而释放可写空间;在坏块管理方面,坏块作为读写擦异常的物理块,需要进行管理和标记,坏块管理算法通常采用略过策略或替换策略;在数据保持方面,数据存放时间太久会出现电荷泄露,物理页多次读取会对周围页数据产生干扰,需要通过数据保持算法监测物理块数据,将超过 ECC 设定阈值或物理页读取次数阈值的块数据迁移到其他物理块上;断电恢复针对物理页在未写完时发生的断电,断电恢复算法采用将映射表写入闪存的方法,在发生断电时可以找回之前的映射表,实现断电恢复。

(2) 纠错算法

纠错算法技术能力是提升企业级 SSD 整体水平的关键,增强算法研发设计能力至关重要。LDPC(Low-Density Parity-check Codes,低密度奇偶校验码)编码是一种企业级 SSD 常用的软信息编码技术,能够延长使用寿命,保存更长时间数据;用户数据与校验数据比例会不同以往;与信噪比和 UBER 有关,并不是简单的固定 bit 数纠错。在 LDPC 纠错码方面,为了优化纠错性能和编解码算法效果,需要关注 LDPC 校验矩阵[19]。在设计时需要将错误平层(Error Floor)降低到不影响系统性能的水平,减弱编解码算法复杂性,同时控制芯片功耗、系统性能和制造成本。在编解码算法方面,由于闪存颗粒读写次数增加会导致较高的错误率,可以通过升级 LDPC 编解码模块对应的接口协议延长使用周期,并建立解码算法流程自适应调整机制,在保证功耗最少、时延最低的情况下完成解码任务。

ECC 技术逐渐成为提升企业级 SSD 核心竞争力的有效方式和性能保障。随着 NAND 技术的不断迭代和单元内比特数量的不断增多,使得数据错误率随之增长,提升 SSD 纠错能力和纠错算法技术能力,成为 SSD 性能提升的重要方向。

(3) Telemetry

Telemetry 是一种可以远程的从物理设备或虚拟设备实时采集数据的技术。Telemetry 实现对设备、网络、协议、Overlay、业务进行多层网络健康度全面监控并评估生成可视化结果,从而实现网络故障快速定位,帮助运维人员解决网络运维问题。这种技术相比传统的网络监控方式,不仅快速,而且直观,为智能化以及精细化网络运维提供了重要的技术支撑和整体的解决方案。

SSD 产品中引入 Telemetry 属性,通过定制的 Extend SMART 日志涵盖了磨损、失败操作计数和内部异常状态相关的三大类属性。在磨损相关属性方面,磨损相关属性包含 NAND 级别的读写量,SSD 内部块的磨损程度等信息,可用于检测由磨损导致的 SSD 故障;在失败操作计数属性方面,失败操作计数属性包含 SSD 内部读写以及擦除失败等相关计数,能反映出 SSD 内部 NAND 数据存储的可靠性;在内部异常相关属性方面,内部异常相关属性包含内部温度过高,缓冲溢出等由负载量和外部环境导致的内部状态的异常,很好地反映了 SSD 内部工作状态的稳定性。

通过多个维度上对 SSD 内部状态进行监控,全面了解 SSD 内部组件的健康状况。监控更全面,对于 SSD 的各个硬件组件都有记录;记录更详细,对于温度等有更详细的记录,故障日志更详细;更贴近应用层,对于各种工作负载记录更详细。通过引入 Telemetry,能够进一步提升故障盘的预测准确度,也能大大提高数据中心云存储系统的智能运维效率。

3. 闪存

(1) QLC 技术

QLC SSD 大容量、低成本的特性,能够增强存储密度和服务器集成度。QLC SSD 与 HDD 相比,具有更明显的随机读性能优势,为服务器和数据中心带来更低的读延迟。QLC SSD 大容量技术难度低于 HDD,发热少于 HDD,随机速度更快,抗震性能更强,单位体积容量密度更高。QLC SSD 适用于实时性要求更高的数据读取密集型应用,如 AI 计算、机器学习、金融数据实时分析和各种在线大数据信息挖掘等。与此同时,QLC 与 SLC、MLC、TLC 等闪存芯片相比,具有明显的成本优势。在海量数据的应用场景中,QLC SSD 的成本竞争力为其在数据中心领域赢得更大的应用场景。存储需求的快速增长带动 QLC SSD 等大容量、高密度的新型闪存芯片不断扩大应用范围,极大地节省数据中心面积,降低运营成本。

QLC 可以为 3D NAND 提供更大的存储空间,适用于读取量大的工作负载,而 TLC 的写入性能更强,出错率更低。相较于 2D NAND,3D NAND 具有更高密度,可以实现更高的写入和擦除次数。由于 QLC NAND SSD 每个单元可以存储 4 位数据,有 16 个电压状态,但 TLC NAND SSD 只能存储 3 位数据,拥有 8个电压状态。

在读取性能方面,与 QLC NAND 相比,由于 TLC 每单元的写入位数少,因此需要更长的擦除周期和程序时长,而 QLC NAND SSD 的顺序读取速度与 TLC SSD 一样快,更适用于读取量大的工作负载。

而在 3D NAND 写入性能方面,TLC SSD 要优于 QLC SSD,尽管这两种技术都采用纠错算法来保证数据的完整性,但该过程在基于 QLC 的驱动器上会花费更多的处理周期,严重影响写入性能。TLC 和 QLC 将呈现相辅相成、协同发展趋势。未来,50%的 NAND闪存将是 3D QLC,剩下的部分中绝大多数将由 3D TLC 完成。此外,QLC NAND将逐渐取代部分 TLC NAND,这两项技术将一起向前发展。

(2) SLC Cache 技术

SLC Cache 规避了高密度存储的减速问题,为 TLC SSD 或者 QLC SSD 提供写入性能、存储容量和成本优势。SLC Cache 本质是用 TLC、QLC 等颗粒模拟 SLC 的工作模式,将 TLC、QLC 等多个工作状态按照 SLC 的两个状态进行标记,只判断最高位状态,简化控制难度的同时,提高速度和耐久性。SLC Cache的加速策略包括动态容量和固定容量两个类型。动态容量的 SLC Cache 是指根据剩余容量来规划 SLC Cache,对于大容量 SSD 可以实现大缓存冗余,但是随着硬盘占用率提高,整体性能随之下降,这对主控智能化提出更高要求,但是随着 SSD 容量增长,动态掉速问题得到极大缓解。

(3) Xtacking 晶栈

Xtacking 晶栈创新 3D NAND 闪存技术,使得速度更快、密度更高、架构更灵活。Xtacking 晶栈可实现在 CMOS 外围电路晶圆、NAND 存储阵列晶圆两片独立的晶圆上分别加工外围电路和存储单元,当两片晶圆各自完工后,Xtacking技术只需一个处理步骤就可通过数十亿根垂直互联通道(VIA)将两片晶圆键合,合并为牢固的整体,让 NAND 获取更高的 I/O 接口速度及更多的操作功能。在传统 3DNAND 架构中,外围电路约占芯片面积 20%到 30%,Xtacking 晶栈技术将外围电路置于存储单元之上,从而实现比传统 3D NAND 更高的存储密度,芯片面积可减少约25%。模组化的工艺充分利用存储单元和外围电路的独立加工优势,提升研发效率,缩短生产周期,为引入 NAND 外围电路以实现闪存定制化提供可能。

 

 

 Xtacking 晶栈 2.0 将充分利用架构优势,进一步提升 NAND 吞吐速率、提升系统级存储的综合性能、开启定制化 NAND 全新商业模式等。长江存储采用先进的 Xstacking 技术,在一个芯片里面把 NAND 存储单元和 IO 接口分开独立设计与加工,于 2020 年 4 月成功推出 128 层 TLC 和 QLC 两款产品,接口速度达到 1600MT/s。

Redis多线程架构的演进

Redis真的是单线程吗?网上有很多关于这个问题的讨论,得出的结论也几乎是一致的。本文在讨论这个问题之前,先定义好问题中“单线程”的概念边界:

  • 1.单线程指的是“核心网络模型”
  • 2.单线程指的是Redis整个服务端架构的设计

对于边界1,那么答案是肯定的,在Redis v6.0 版本以前,Redis的网络模型一直都是单线程模式的,即使到了v6.0版本,所有客户端命令的执行依然是在主线程上完成的;对于边界2,答案是否定的,Redis从发布之出就有两个BIO(background I/O service)线程来异步处理aof持久化、关闭文件的任务,在Redis v4.0版本中又添加了一个BIO线程,将比较耗时的命令异步化,到了Redis v6.0,Redis核心的网络模型也被改造成了多线程。

 

 

 在概念边界2的限制下,我们可以得出结论:Redis从来都不是单线程工作的!在Redis发布近十年来,在系统架构演进过程中都遇到了哪些问题?作者antirez对这些问题是怎样思考的?采取了什么样的方案来改进?探索这些问题对于开发者的成长很有价值,也是本文的写作目的,笔者会结合相关源码与读者共同解答这些问题。

1. Redis基础架构设计

性能优异的服务离不开好的架构设计,Redis使用 I/O multiplexing 实现了单线程接收海量客户端请求;通过单线程Reactor模型实现了高性能的事件处理;基于条件变量实现的生产者消费者模型构建了自己的BIO系统。本节先简单介绍一下这些从Redis诞生以来就一直使用的基础架构设计。

1.1 Redis对 I/O multiplexing 的封装

I/O multiplexing 指的是多个网络socket I/O 复用同一个线程,它解决了C10K的问题。Redis将不同的 I/O 多路复用函数封装成相同的 API 提供给上层使用,仅仅以单线程处理网络I/O,就可以为成千上万的客户端提供服务。

 

 

 Redis的I/O多路复用模块提供的API:

//下面的方法不同版本的redis在src目录下的ae_epoll.c、ae_evport.c、ae_kqueue.c、ae_select.c代码文件中都有实现static int aeApiCreate(aeEventLoop *eventLoop)static int aeApiResize(aeEventLoop *eventLoop, int setsize)static void aeApiFree(aeEventLoop *eventLoop)static int aeApiAddEvent(aeEventLoop *eventLoop, int fd, int mask)static void aeApiDelEvent(aeEventLoop *eventLoop, int fd, int mask)static int aeApiPoll(aeEventLoop *eventLoop, struct timeval *tvp)

 

 Redis可以在多个平台上运行,所以会通过宏定义,根据编译平台的不同,选择不同的I/O多路复用函数作为子模块,提供给上层接口做封装。

/*下面代码在Redis不同版本的ae.c源码文件中均包含 *Include the best multiplexing layer supported by this system. * The following should be ordered by performances, descending. */#ifdef HAVE_EVPORT#include "ae_evport.c"#else    #ifdef HAVE_EPOLL    #include "ae_epoll.c"    #else        #ifdef HAVE_KQUEUE        #include "ae_kqueue.c"        #else        #include "ae_select.c"        #endif    #endif#endif

Redis 会优先选择时间复杂度为

标签:threads,Redis,PC,client,线程,pthread,mutex,多线程
From: https://www.cnblogs.com/wujianming-110117/p/16709738.html

相关文章

  • C#多线程 操作UI问题
    C#多线程操作UI的简单写法:KeledoSuperPlus privateTaskSchedulermpr_ts_UIContext;privatevoidbutton1_Click(objectsender,EventArgse){......
  • Redisson多策略注解限流
    限流:使用Redisson的RRateLimiter进行限流多策略:map+函数式接口优化if判断自定义注解/***aop限流注解*/@Target({ElementType.METHOD,ElementType.TYPE})@Retent......
  • redis集群槽位16384
    单机模式主从模式哨兵模式(sentinel)集群模式(cluster)RedisCluster采用虚拟槽分区,所有的键根据哈希函数映射到0~16383个整数槽内,每个节点负责维护一部分槽以及槽......
  • Redis分布式锁
    Redis分布式锁应用(实现+原理)(biancheng.net)在分布式系统中,当不同进程或线程一起访问共享资源时,会造成资源争抢,如果不加以控制的话,就会引发程序错乱。此时使用分布式锁......
  • Redis集群:Sentinel哨兵模式
    Redis集群:Sentinel哨兵模式(详细图解)(biancheng.net)在Redis主从复制模式中,因为系统不具备自动恢复的功能,所以当主服务器(master)宕机后,需要手动把一台从服务器(slave)切......
  • Redis缓存问题(图解:三种缓存问题)
    原文链接:Redis缓存问题(图解:三种缓存问题)在实际的业务场景中,Redis一般和其他数据库搭配使用,用来减轻后端数据库的压力,比如和关系型数据库MySQL配合使用。Redis会把......
  • Redis 持久化
    原文链接:Redis持久化RedisRDB持久化详解(原理+配置策略)Redis是一款基于内存的非关系型数据库,它会将数据全部存储在内存中。但是如果Redis服务器出现某些意外情况,比......
  • 2022icpc网络赛(I)
    目录A(预处理)C(结论/签到)D(打表)F(min25筛)G(dp+状态优化)H(模拟/签到)J(构造)K(dp+状态优化)L(dp)A(预处理)容易发现对于一段被0隔开的长度为\(n\)的连续的1,可以消去的0的个数为\(\lceil\f......
  • Redis删除指定分组
    删除redis指定分组用法:redis-cli-hredis实例连接地址-n库-a密码keys"要删除的[key]*"|xargsredis-cli-hredis实例连接地址-n库-a密码del如果不确......
  • rem 实现PC端字体适配
    新建rem.js(function(win){ vartid; functionrefreshRem(){ letdesignSize=1080;//设计图尺寸 lethtml=document.documentElemen......