【FLASH存储器系列二十一】如何评估固态硬盘的性能?

news2025/7/11 2:27:03

        我们以三星消费级SSD 990 PRO为例进行介绍,下图为其产品配置:

        简单说明一下产品配置:990 pro容量有1T和2T两种规格,固态硬盘容量计算一般是1T=1000GB=1000000MB,与操作系统容量计算1T=1024GB不一样,使用M.2外形结构,SSD与主机的接口为x4的PCIE 4.0,协议支持NVMe 2.0,有时候大家会把M.2、PCIE、NVMe这几个概念搞混,这里明确一下M.2是外形名称,PCIE是硬件接口名称,NVMe是应用协议规范,不是说一个外形为M.2的SSD一定是NVMe盘,SATA盘也可以做成M.2的形状(key不同),大家一定要搞清楚每个名词的含义。这款SSD内部nand flash为三星自家的3D nand颗粒,存储单元为TLC,控制器为三星自研控制器,缓存颗粒1TB硬盘容量的为1GB缓存,2TB容量的为2GB缓存(容量越大,FTL映射表越大)。关于3D nand和控制器相关的内容,后面有机会再细讲。

        平时我们使用硬盘就是读和写,所以一款SSD的性能主要指的就是其读写速度,下图为990 PRO性能参数:

        在介绍性能参数前,先普及一下性能测试方面的基础知识:线程、队列深度、同步异步。

线程(逻辑线程)指的是同时有多少个读或写任务在并行执行,一般来说,CPU里面的一个核心同一时间只能运行一个线程。如果只有一个核心,要想运行多线程,只能使用时间切片,每个线程跑一段时间片,所有线程轮流使用这个核心。Linux使用Jiffies来代表一秒钟被划分成了多少个时间片,一般来说Jiffies是1000或100,所以时间片就是1毫秒或10毫秒。

        一般电脑发送一个读写命令到SSD只需要几微秒,但是SSD要花几百微秒甚至几毫秒才能执行完这个命令。如果发一个读写命令,然后线程一直休眠,等待结果回来才唤醒处理结果,这叫作同步模式。可以想象,同步模式是很浪费SSD性能的,因为SSD里面有很多并行单元,比如一般企业级SSD内部有8~16个数据通道,每个通道内部有4~16个并行逻辑单元(LUN、plane都支持交错操作),所以同一时间可以执行32~256个读写命令。同步模式就意味着,只有其中一个并行单元在工作,暴殄天物。

        为了提高并行性,大部分情况下SSD读写采用的是异步模式。就是用几微秒发送命令,发完线程不会傻傻地在那里等,而是继续发后面的命令。如果前面的命令执行完了,SSD通知会通过中断或者轮询等方式告诉CPU,由CPU来调用该命令的回调函数来处理结果。这样的好处是,SSD里面几十上百个并行单元都能分到活干,效率暴增。

        不过,在异步模式下,CPU不能一直无限地发命令到SSD。比如SSD执行读写如果发生了卡顿,那有可能系统会一直不停地发命令,几千个,甚至几万个,这样一方面SSD扛不住,另一方面这么多命令会很占内存,系统也要挂掉了。这样,就带来一个参数叫作队列深度。举个例子,队列深度64就是说,系统发的命令都发到一个大小为64的队列,如果填满了就不能再发。等前面的读写命令执行完了,队列里面空出位置来,才能继续填命令。

        一般衡量一款SSD的性能最直接的指标就是读写速度,通常用MB/S或IOPS来表示。MB/S指的是每秒的读写数据量是多少MB,可以简单理解为带宽;IOPS是指固态硬盘每秒进行读写(I/O接口)操作的次数,有同学可能有疑问了,这两种单位有没有换算关系,这与读写测试的文件大小有关系,举个例子,假设读取10000个1KB文件,用时10秒,那这个操作的带宽就是10000*1KB/10S=1MB/S,而IOPS=10000/10=1000,如果10000个2KB文件,用时10秒,那么带宽就是10000*2KB/10S=2MB/S,而此时IOPS仍为1000。所以硬盘随机读写性能指标如果用IOPS为单位,则需要指定测试文件的大小,由于NTFS文件系统对文件存取都是按簇分配的,一簇一般为4KB,所以SSD测试也用4KB的文件进行测试。

        硬盘的读写速度测试分为大文件顺序读写和零散小文件随机读写,随机读写又包括单线程随机读写,和多线程(这个指的是逻辑线程,不是物理线程)(或多队列)随机读写。一般用Q或者QD来代表队列深度如上图中的QD1表示队列深度是1,也就是单线程读写,一次只发起一个读写操作,QD32表示队列深度是32,不需要等SSD的反馈,一次连续发起32个读写操作。我们日常使用SSD的一般就是大文件的顺序读写,和操作软件时的单队列QD1到多队列QD8的随机读写(关于队列和线程的关系我目前还没理解得很清晰,大家有兴趣可以自行研究),我们可以看到三星这款SSD列出来了QD32和QD1的4KB随机读写速度和顺序读写速度,通过这几个指标就可以基本了解此款SSD的读写性能。

        不知道大家有没有发现,顺序读取速度比顺序写入速度要快,而随机读取速度比随机写入速度要慢,这个原因给大家3秒钟时间思考。

        OK,顺序读写都不需要闪存控制器去反复查找物理地址,一般只要给一个首地址就可以顺序读写下去,效率比较高,而nand flash的写入需要往浮栅中充入电子,这个需要消耗一定时间,而读不需要,所以读速度比写速度快。随机读的时候,控制器需要花大量时间去查FTL找到对应的物理的地址,而随机写的时候,控制器只需要往空闲block写即可,不需要反复去找写的物理地址,除非这是一块已经存满文件的脏盘来做这个测试,所以一般随机写速度比随机读要快。

        以上厂家贴出来的读写速度指标都是缓内速度。前面我们分享过固态硬盘的SLC cache,将TLC模拟成SLC来用,所谓缓内速度指的就是读写操作都在SLC cache范围内的读写速度,读取速度不受SLC cache机制影响,主要影响的是写入速度,使用HD tune pro软件测试可以看到,在SLC cache空间用完后,写入速度会显著降低。控制器会在后台将SLC cache中的数据搬运到MLC单元,腾出缓存空间,SLC cache一般是动态分配的,高端控制器会力求做到即使是极限脏盘情况下也不影响到写入性能。

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

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

相关文章

Editor工具开发基础三:自定义组件菜单拓展 CustomEditor

一.创建脚本路径 创建脚本路径不再限制 一般写在自定义组件类的下边二.特性CustomEditor 定义主设计图面由自定义代码实现数组的编辑器。两个构造函数1.public CustomEditor(Type inspectedType);2.public CustomEditor(Type inspectedType, bool editorForChildClasses);参数意…

[架构之路-118]-《软考-系统架构设计师》-软架构设计-11-可靠性相关设计

第11节 可靠性相关设计11.1 可靠性基本概念可靠性工程是研究产品生命周期中故障的发生、发展规律,达到预防故障,消灭故障,提高产品可用性的工程技术。信息系统的可靠性是指系统在满足一定条件的应用环境中能够正常工作的能力,可以…

如何理解「数据驱动业务」?

“数据驱动”描述了一种业务状态,在这种状态中,数据被用于实时有效地推动决策和其他相关活动。对于企业来说,达到数据驱动的状态就像是开车和骑马旅行的区别。数据驱动的业务能够更快、更高效地达到目标。 数据驱动特征包括质量良好的数据整…

高品质运动耳机哪款更好用、运动耳机最好的牌子推荐

在运动的时候大家都会选择戴上耳机,用音乐来”调味“,让跑步的过程不那么枯燥乏味。说到运动耳机,除了老生常谈的音质以外,耳机的材质、耳机的工艺,耳机的佩戴稳固性等,也都在影响着用户的体验,…

181、【动态规划】leetcode ——72. 编辑距离(C++版本)

题目描述 原题链接:72. 编辑距离 解题思路 动态规划五步曲: (1)dp[i][j]含义: 以word1[i - 1]和word2[j - 1]结尾子串,经过最少次增删改后,可让word1变为word2的步数。dp中的i对应word1中的i…

命令执行漏洞多种写入webshell方式总结

命令行写shell注意事项:1.注意单引号和双引号的区别:单引号用单引号 ’ 括起来的字符会保留引号内每个字符的字面值简而言之,shell 将逐字解释单引号内的封闭文本,并且不会插入任何内容,包括变量、反引号、某些 \ 转义…

内存管理框架---Slab(二)

站在Arnold Lu南京大佬的肩膀,俯瞰内存管理之slab 文章目录slab层的由来slab/slub/slobslab层的设计思想slab相关数据结构创建slab描述符分配slab对象释放slab对象销毁缓存在内核栈上的静态分配高端内存的映射永久映射临时映射每个CPU的分配新的每个CPU接口编译时的…

自动驾驶仿真测试介绍

作者 | 楼泽如 上海控安可信软件创新研究院研发工程师 来源 | 鉴源实验室 01 引 言 自动驾驶汽车的兴起,正在重新定义汽车行业。随着自动驾驶技术的发展,自动驾驶汽车将会大大提升交通安全、减少事故发生、减少交通拥堵、提高公路容量等等&#xff0…

我这样实现Promise

一、剖析Promise的基础框架 要实现Promise原理,肯定得先明白其原理。Promsie的基础框架如下: // 挂在原型上的方法,实例对象可以访问并且使用 MyPromise.prototype.then function(onResolved, onRejected) {//.then接收两个函数类型的形参…

Elasticsearch7.8.0版本进阶——文档分析 分析器

目录一、文档分析过程二、分析器三、内置分析器3.1、标准分析器3.2、简单分析器3.3、空格分析器3.4、语言分析器四、分析器使用场景五、分析器的测试示例一、文档分析过程 将一块文本分成适合于倒排索引的独立的词条。将这些词条统一化为标准格式以提高它们的“可搜索性”&…

RFID在产线上的作用

RFID在产线上的作用RFID技术应用于产线监控,可以实现产线的自动控制和检测。RFID读写器每识别一个产品标签,就可以将数据传输到电脑程序中,记录每1件产品的原料和来源、生产线位置、生产过程和库存状况等信息,为企业更好地管理生产…

实现基于国密SM3的密钥派生(KDF)功能

实现基于国密SM3的密钥派生(KDF)前言KDF 标准基于SM3的kdf实现前言 密钥派生函数(KDF):密钥派生函数是指从一个共享的秘密比特串中派生密钥数据,在密钥协商过程中,密钥派生函数作用在密钥交换所…

davis2016评估教程

DAVIS 2016是VOS任务中的一个经典的benchmark,但是一些VOT的算法有时候也可以预测mask,所以也会在上面测一测性能,本次就随手记录一下自己评测的过程,有需要的小伙伴可以往下看。 DAVIS 2016数据集官方项目网站:https:…

【微信小程序】-- 常用的基础内容组件介绍 -- text rich-text progress icon(七)

💌 所属专栏:【微信小程序开发教程】 😀 作  者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询! &#…

获取Windows11开发环境及VirtualBox配置指南

今天我们来讲一讲Windows11开发环境的快速搭建,主要是通过Virtualbox虚拟机安装微软官方预先配置好的Windows11环境包,配置简单,开箱即用。 获取虚拟机打包镜像 微软官方提供了多个系统平台的Windows11虚拟机镜打包镜像,只需要导…

维格云社区版APItable

目录 ✨ 快速开始 🔥 功能特性 💥 应用场景 💞 面向 API 💝 嵌入友好 安装 🧑‍💻 贡献 开发环境 Git 工作流基础 工作约定

[零刻] SER5 Pro 迷你主机:从开箱到安装ESXi+虚拟机

开箱先上图: SER5Pro这个小主机采用了AMD580H的处理器,性能相当强悍,用来做All in one主机非常合适,特别是独有的背面散热系统,可以同时给内存和硬盘散热,在长期运行下散热完全不用担心稳定性,放…

揭穿数据分析的六大谎言

目前许多企业在决策时仍沿用以往的个人经验,没有用数据说话,这在实际决策运行时会出现很多问题。在数据分析行业发展成熟的国家,90%的市场决策和经营决策都是通过数据分析研究确定的。用数据说话,重视定量分析,也逐渐成…

十年测试大佬教你如何从零到一落地接口自动化测试?

目录 为什么要做接口测试 理解接口和接口测试 如何落地接口自动化测试 总结 重点:配套学习资料和视频教学 为什么要做接口测试 测试理念的演变 早些时候,软件研发交付流程大多遵循V型或W型的瀑布模式,这种模式下只有开发编码完成才会提测…

学生白嫖阿里服务器

测试答案,直接CtrlF查找即可 WEB2.0时代黑客攻击的主要目标集中在(A) A. 互联网应用 B. 穿透防火墙 C. 破坏操作系统 D. 计算机硬件 以下常见的通讯协议中,不属于应用层协议的有(B) A. FTP B. TCP/IP C. HT…