余晖落尽暮晚霞,黄昏迟暮远山寻
本站
当前位置:网站首页 > 编程知识 > 正文

SSD 编码 – 每个程序员都应该了解的关于固态硬盘的知识

xiyangw 2023-10-08 13:49 17 浏览 0 评论

更多互联网精彩资讯、工作效率提升关注【飞鱼在浪屿】(日更新)


本文分享 SSD 上记录学到的东西,以及如何使代码在 SSD 上表现良好。


基本

1. 闪存单元类型

固态硬盘 (SSD) 是一种基于闪存的数据存储设备。位存储在单元中,分为三种类型:每单元 1 位(单级单元,SLC)、每单元 2 位(多级单元,MLC)、每单元 3 位(三级单元,TLC)。


2. 寿命有限

每个单元都有最大次数的 P/E 循环(编程/擦除),在此之后该单元被视为有缺陷。这意味着 NAND 闪存会磨损并且使用寿命有限。


3. 基准测试很难

测试人员是人,因此并非所有基准测试都不会出错。阅读制造商或第三方的基准时要小心,并在相信任何数字之前使用多个来源。在可能的情况下,使用您系统的特定工作负载以及您想要使用的特定 SSD 型号运行您自己的内部基准测试。最后,确保您查看对手头系统最重要的性能指标。


页和块

4. NAND 闪存页面和块

单元格被分组到一个网格中,称为块,块被分组到平面中。可以读取或写入块的最小单位是页。页不能单独擦除,只能擦除整个块。NAND 闪存页面大小可能会有所不同,大多数驱动器的页面大小为 2 KB、4 KB、8 KB 或 16 KB。大多数 SSD 具有 128 或 256 页的块,这意味着块的大小范围在 256 KB到 4 MB 范围内变化。例如,三星 SSD 840 EVO 的块大小为 2048 KB,每个块包含 256 个页面,每个页面为 8 KB。


5. 读取在页面大小上对齐

一次阅读不到一页是不可能的。一个人当然只能从操作系统请求一个字节,但是将在 SSD 中检索一整页,迫使读取比需要更多的数据。


6. 写入在页面大小上对齐

写入 SSD 时,写入是按页面大小的增量进行的。所以即使一次写操作只影响一个字节,无论如何都会写一整页。写入比所需更多的数据称为写入放大。写入页面也称为“编程”页面。


7.页面不能被覆盖

NAND 闪存页面只有在处于“空闲”状态时才能被写入。当数据改变时,页面的内容被复制到内部寄存器中,数据被更新,新版本存储在“空闲”页面中,这个操作称为“读-修改-写”。数据不会就地更新,因为“空闲”页面与最初包含数据的页面不同。一旦数据被持久化到驱动器,原始页面被标记为“过时”,并将保持原样直到被擦除。


8.擦除在块大小上对齐

页面不能被覆盖,一旦它们变得陈旧,让它们再次自由可用的唯一方法就是擦除它们。但是,无法擦除单个页面,只能一次擦除整个块。


SSD 控制器和内部结构

9. Flash 翻译层

闪存转换层 (FTL) 是 SSD 控制器的一个组件,它将逻辑块地址 (LBA) 从主机映射到驱动器上的物理块地址 (PBA)。最近的驱动器实现了一种称为“混合日志块映射”的方法或其派生方法,其工作方式类似于日志结构文件系统。这允许像顺序写入一样处理随机写入。


10. 内部并行性

在内部,多个并行级别允许一次将多个块写入不同的 NAND 闪存芯片,即所谓的“集群块”。


11. 磨损均衡

由于 NAND 闪存单元不可避免磨损,因此 FTL 的主要目标之一是在单元之间尽可能均匀地分配工作,以便块将达到其 P/E 周期限制并同时磨损。


12.垃圾收集

SSD 控制器中的垃圾收集过程确保“陈旧”页面被擦除并恢复到“空闲”状态,以便可以处理传入的写入命令。


13.后台操作会影响前台操作

垃圾收集等后台操作会对来自主机的前台操作产生负面影响,尤其是在小随机写入的持续工作负载的情况下。


访问模式

14.永远不要写不到一页

避免写入小于 NAND 闪存页面大小的数据块,以最大限度地减少写入放大并防止读取-修改-写入操作。当前页面的最大大小为 16 KB,因此默认情况下应使用该值。此大小取决于 SSD 型号,将来随着 SSD 的改进,您可能需要增加它。


15. 对齐写入

在页面大小上对齐写入,并写入页面大小的倍数的数据块。、


16.缓冲小数据量写

为了最大限度地提高吞吐量,尽可能将小数据量写入 RAM 中的缓冲区,当缓冲区已满时,执行单次大数据量写以批处理所有小写。


17.为了提高读取性能,将相关数据一起写入

读取性能是写入模式的结果。当一次写入大量数据时,它会分布在单独的 NAND 闪存芯片上。因此,您应该在同一页、块或集群块中写入相关数据,以便稍后通过利用内部并行性通过单个 I/O 请求更快地读取这些数据。


18. 分离读写请求

由小型交错读取和写入混合构成的工作负载将阻止内部缓存和预读机制正常工作,并导致吞吐量下降。最好避免同时读取和写入,并在大块中依次执行它们,最好是集群块的大小。例如,如果必须更新 1000 个文件,您可以迭代这些文件,对文件进行读写,然后移动到下一个文件,但这会很慢。最好一次读取所有 1000 个文件,然后一次写回这 1000 个文件。


19.批量失效数据

当某些数据不再需要或需要删除时,最好在单个操作中大批量等待并使其失效。这将允许垃圾收集器进程一次处理更大的区域,并有助于最大限度地减少内部碎片。


20. 随机写入并不总是比顺序写入慢

如果写入很小(即低于集群块的大小),则随机写入比顺序写入慢。
如果写入既是集群块大小的倍数又与集群块大小对齐,则随机写入将使用所有可用的内部并行级别,并且将执行与顺序写入一样好。对于大多数驱动器,群集块的大小为 16 MB 或 32 MB,因此使用 32 MB 是安全的。


21.一个大的单线程读比很多小的并发读好

并发随机读取无法充分利用预读机制。此外,多个逻辑块地址可能会出现在同一个芯片上,而不是利用或利用内部并行性。大型读操作将访问顺序地址,因此将能够使用预读缓冲区(如果存在)并使用内部并行性。因此,如果例允许,最好发出大型读取请求。


22.一个大的单线程写比很多小的并发写好

大型单线程写入请求提供与许多小型并发写入相同的吞吐量,但在延迟方面,大型单线程写入比并发写入具有更好的响应时间。因此,只要有可能,最好执行单线程大写。


23.当写量较小且不能分组或缓冲时,多线程是有益的

许多并发的小的写请求将提供比单个小的写请求更好的吞吐量。所以如果I/O很小,不能批量处理,最好使用多线程。


24.冷热数据分离

热数据是变化频繁的数据,冷数据是变化不频繁的数据。如果一些热数据和一些冷数据存储在同一个页面中,那么每次在读-修改-写操作中更新热数据时,冷数据都会被一起复制,并且会在垃圾收集期间一起移动以进行磨损均衡。尽可能将冷热数据拆分成单独的页面将使垃圾收集器的工作更轻松。


25. 缓存热点数据

应尽可能多地缓冲极热数据和其他高变化的元数据,并尽可能不频繁地将其写入驱动器。


系统优化

26. PCI Express 和 SAS 比 SATA 快

制造商提供的两个主要主机接口是 SATA 3.0(550 MB/s)和 PCI Express 3.0(每通道 1 GB/s,使用多个通道)。串行连接 SCSI (SAS) 也可用于企业 SSD。在它们的最新版本中,PCI Express 和 SAS 比 SATA 更?快,但它们也更贵。


27. 过度配置对于磨损平衡和性能很有用

只需将驱动器格式化为小于最大物理容量的逻辑分区容量,即可过度配置驱动器。对用户不可见的剩余空间仍将可见并由 SSD 控制器使用。过度配置有助于磨损平衡机制应对 NAND 闪存单元固有的有限寿命。对于写入不那么重的工作负载,10% 到 15% 的过度空间配置就足够了。对于持续随机写入的工作负载,保持高达 25% 的过度空间配置将提高性能。超额配置将充当 NAND 闪存块的缓冲区,帮助垃圾收集过程吸收写入峰值。


28.启用TRIM命令

确保您的内核和文件系统支持 TRIM 命令。当一个块被删除时,TRIM 命令会通知 SSD 控制器。然后,垃圾收集过程可以在空闲时间在后台擦除块,使驱动器准备好应对大型写入工作负载。


29.对齐分区

为确保逻辑写入真正与物理内存对齐,您必须将分区与驱动器的 NAND 闪存页面大小对齐。


结论

如果您在阅读本文章后想更深入地了解 SSD。一个重要资源是 FAST 会议(文件和存储技术的 USENIX 会议)。每年都有许多优秀的研究在那里发表。强烈推荐FAST 2013的视频和出版物。https://www.usenix.org/conference/fast13

相关推荐

华为交换机配置命令总结

1、配置文件相关命令[Quidway]displaycurrent-configuration显示当前生效的配置[Quidway]displaysaved-configuration显示fla...

解决账户无法登录的故障
解决账户无法登录的故障

在优化系统时错误地根据网上的提示,将唯一的Administrator账户设置为禁用,导致重启后无法进入系统。类似的故障还有使用组策略限制本地账户登录,导致重启后...

2023-10-11 17:16 xiyangw

S5720交换机登录提示初始密码存在安全风险
S5720交换机登录提示初始密码存在安全风险

问题描述客户每次登录输密码时,提示初始密码不安全,现在客户嫌麻烦想要去掉:Username:huaweiPassword:Warning:Theinitia...

2023-10-11 17:15 xiyangw

Springboot,Mybatis修改登录用户的密码
Springboot,Mybatis修改登录用户的密码

一、Mybatis.xml<updateid="changePassword"parameterType="string...

2023-10-11 17:15 xiyangw

PHP理论知识之沐浴更衣重看PHP基础(二)
PHP理论知识之沐浴更衣重看PHP基础(二)

接上篇,咱们继续讲解PHP基础八、标准PHP组件和框架的数量很多,随之产生的问题就是:单独开发的框架没有考虑到与其他框架的通信。这样对开发者和框架本身都是不利的...

2023-10-11 17:15 xiyangw

新鲜出炉UCloud云主机“数据方舟”评测报告(5)— — 关其城
新鲜出炉UCloud云主机“数据方舟”评测报告(5)— — 关其城

2015年10月29日,UCloud云主机黑科技——“数据方舟”功能正式上线,首轮内测随即开放。截止至2015年12月6日,我们共收到了534位用户的评测申...

2023-10-11 17:14 xiyangw

业余无线电Q简语及英文缩语
业余无线电Q简语及英文缩语

Q简语:语音通信及CW通信通用(加粗为常用)QRA电台何台QRB电台间之距离QRG告之正确频率QRH频率是否变动QRI发送音调QRJ能否收到QRK信号之可...

2023-10-11 17:14 xiyangw

非常详细!如何理解表格存储的多版本、生命周期和有效版本偏差
非常详细!如何理解表格存储的多版本、生命周期和有效版本偏差

表格存储在8月份推出了容量型实例,直接支持了表级别最大版本号和生命周期,高性能实例也将会在9月中旬支持这两个特性。那么,最大版本号和生命周期以及特有的...

2023-10-11 17:14 xiyangw

H3C交换机恢复出厂和各种基本配置,这20个要点你知道吗?
H3C交换机恢复出厂和各种基本配置,这20个要点你知道吗?

私信“干货”二字,即可领取138G伺服与机器人专属及电控资料!H3C交换机不知道密码如何恢复出厂设置1、开机启动,Ctrl+B进入bootrom菜单,选择恢复出...

2023-10-11 17:13 xiyangw

在使用移动支付系统的时候如何保护信息安全?

移动支付的方式近年来不断被更新,使得Venmo(据嘉丰瑞德理财师了解,此为美国的“支付宝”)之类的支付方式已经可以某种意义上代替随身携带现金了。但是你必须防范那些第三方应用程序轻松地获取你的银行卡以及...

界面控件DevExpress WinForms MVVM入门指南——登录表单(下)

从本文档中,您将了解如何向应用程序添加登录表单。在本节教程中着重讨论了如何实现此任务,这基本上是附加应用程序功能的一部分。DevExpressUniversalSubscription官方最新版免...

linux基础命令(一)
linux基础命令(一)

为啥要学linux?您可能熟悉WindowsXP、Windows7、Windows10和MacOSX等操作系统。Linux就是这样一种强大的操...

2023-10-11 17:13 xiyangw

MySQL数据库密码忘记了,怎么办?

#头条创作挑战赛#MySQL数据库密码忘记了且没有其他可以修改账号密码的账户时怎么办呢?登录MySQL,密码输入错误/*密码错误,报如下错误*/[root@TESTDB~]#mysql-u...

MobaXterm忘记Session密码,如何查看已保存的密码
MobaXterm忘记Session密码,如何查看已保存的密码

MobaXterm工具登录过SSH终端后,如果存储了Session(存储后再连接ssh的时候只需要输入账号不需要输入密码就可以直接连接上ssh),则可以...

2023-10-11 17:12 xiyangw

华为交换机密码丢失修改方法
华为交换机密码丢失修改方法

华为S2300交换机找回密码设置一、目的交换机的console和telnet密码丢失,无法登录设备。交换机已进行过数据配置,要把密码恢复而数据配置不能丢失。二、...

2023-10-11 17:12 xiyangw

取消回复欢迎 发表评论: