nvme 盘写放大

1. SSD 盘内部写操作的来源

1.1 用户请求

和其他存储介质一样,用户的写请求的数据及其相关meta 数据更新,是驱动SSD写操作的主要来源。

1.2 垃圾回收(GC)

基于SSD介质需要擦除之后才能写同一个位置的特性,对SSD逻辑地址的覆盖写会变成内部SSD物理地址的追加写,而对之前占用的物理地址空间就需要回收。这些空间通常是尽量凑成整个Block去回收,为此Block 内部的有效数据就需要搬迁,这就导致了额外的写。

1.3 磨损均衡 (wear leveling)

类似的限制是磨损均衡,为了保证不同块的PE尽量均衡,内部有时也可能需要搬迁数据。

1.4 坏块管理

坏块上的数据需要搬迁,这也会导致内部额外的写操作。

1.5 读干扰 (Read Disturb)

当某个闪存块的读的次数达到一定阈值的时候,FTL会把这些数据从该闪存块搬走以避免数据出错。

1.6 数据保持 (Data Retention)

由于电荷流失,闪存块上的数据保持可能出现问题,为此FTL需要搬迁这些数据。

2. nvme盘写放大统计

从上面的介绍可以看到SSD内部有许多种额外的写操作,为了分析这些写操作对用户写请求的影响,就需要统计出这些数据。
对于nvme 盘,可以借助nvme cli工具去获取相关数据。

2.1 准备工作

在linux系统上,可以下载并编译nvme cli工具:
git clone https://github.com/linux-nvme/nvme-cli.git
cd nvme-cli
make

如果出现下面的问题:
NVME_VERSION = 1.6.72.g43f2.dirty
cc -D_GNU_SOURCE -D__CHECK_ENDIAN__ -O2 -g -Wall -Werror -std=gnu99 -DNVME_VERSION=‘"1.6.72.g43f2.dirty"‘ -c nvme-print.c
In file included from nvme.h:34:0,
from nvme-print.h:4,
from nvme-print.c:6:
linux/nvme.h:19:24: fatal error: linux/uuid.h: No such file or directory

可以参考下面的方法解决:
修改如下:
#ifndef _LINUX_NVME_H
#define _LINUX_NVME_H

#include <linux/types.h>
//#include <linux/uuid.h> //?? 注释掉这行

2.2 确定nvme盘类型

使用lsscsi /smart ?获取相关盘的类型

2.3 读取nvme盘写统计数据

[[email protected] nvme-cli]# ./nvme intel smart-log-add /dev/nvme0n1
Additional Smart Log for NVME device:nvme0n1 namespace-id:ffffffff
key normalized raw
program_fail_count : 100% 0
erase_fail_count : 100% 0
wear_leveling : 96% min: 164, max: 206, avg: 190
end_to_end_error_detection_count: 100% 0
crc_error_count : 100% 0
timed_workload_media_wear : 100% 63.999%
timed_workload_host_reads : 100% 65535%
timed_workload_timer : 100% 65535 min
thermal_throttle_status : 100% 0%, cnt: 0
retry_buffer_overflow_count : 100% 0
pll_lock_loss_count : 100% 0
nand_bytes_written : 100% sectors: 7654336
host_bytes_written : 100% sectors: 6398681
[[email protected] nvme-cli]# ./nvme intel smart-log-add /dev/nvme0n1
Additional Smart Log for NVME device:nvme0n1 namespace-id:ffffffff
key normalized raw
program_fail_count : 100% 0
erase_fail_count : 100% 0
wear_leveling : 96% min: 164, max: 206, avg: 190
end_to_end_error_detection_count: 100% 0
crc_error_count : 100% 0
timed_workload_media_wear : 100% 63.999%
timed_workload_host_reads : 100% 65535%
timed_workload_timer : 100% 65535 min
thermal_throttle_status : 100% 0%, cnt: 0
retry_buffer_overflow_count : 100% 0
pll_lock_loss_count : 100% 0
nand_bytes_written : 100% sectors: 7654576
host_bytes_written : 100% sectors: 6398903

对比上面的两组数据可以看到,nand_bytes_written/host_bytes_written都在增加,前者是内部SSD的物理空间写的总量,后者可以认为是来自用户的写请求总量,可以认为一段时间内两者增量之比值就是该时间段内的写放大系数。

原文地址:http://blog.51cto.com/xiamachao/2298006

时间: 2024-08-29 06:22:35

nvme 盘写放大的相关文章

如何计算和优化追加写引擎中GC的写放大

名词解释 append写一种基于journal的顺序追加写的数据记录方式,类似ZFS的ZIL,ext4的journal. GCgarbage colletion 是指在append写过程中对覆盖写产生的垃圾数据的回收过程. GC过程中写放大的计算 不同层次的写放大 journal级别统计前端用户有效数据的写入量total_user_io,和包含了这部分数据且对接了分布式一致性协议.支持索引而设计的journal 的写入总量total_journal_io,计算 total_journal_io/

效率源希捷硬盘远程维修案例-K9K10盘写认流程

效率源希捷硬盘远程维修案例-K9K10盘写认流程 故障盘:酷鱼10代希捷盘.ST3610815AS SN : 5RA2TXNW 固件版本号:4.AAA. 故障现象及用户维修情况:刚做完校准需要写认扫描硬盘看坏道情况.还没有对其断过电. 远程连接好用户电脑:发现并不是K9盘,而是K10的盘.打开希捷专修程序指令模式显示如下情况: 直接在指令下用句号能观察到当前的AGE值,上图显示4F说明校准没有跑完全部流程,中途有错误的流程跳过. 用E4E命令看看这次校准的具体LOG情况吧! 确实很多流程没有跑过

回写盘写速度被限速为10M左右

问题现像如下图所示: 用hd-speed等测试虚拟盘速度都能达到90M/s左右,但复制文件到虚拟盘速度最高只有10M/s 原因:由于客户机开机加载这个随机驱动和随机进程后,会对磁盘启动进程等有扫描检查的动作,并且对网络有限制,所以会就出现回写盘写速度被限制10M左右,目录为随机目录如下图所示: 解决方法: 开启驱动过滤对随机驱动进行拦截 原文地址:https://www.cnblogs.com/bingxing/p/8454527.html

一种NVMe SSD友好的数据存储系统设计

闪存介质的大规模使用给传统存储系统的设计带来了强烈的冲击,传统存储系统的很多设计理念不再适用于闪存存储系统.传统存储在设计过程中紧紧围绕磁盘抖动问题,所以在数据布局方面会适应磁盘的顺序读写特征.在设计过程中会大量采用内存作为磁盘缓存,利用数据局部性特征过滤掉大量的磁盘操作,并且将小写聚合成大写:在IO调度器方面,通过LBA的调度将地址临近的IO进行聚合,从而可以优化IO Pattern,使得磁盘的读写操作具有更强的顺序性:在磁盘内部,通过NCQ方式减少磁头的抖动,根据磁头当前所在位置对输入IO进

文件系统在NVMe SSD上的性能表现分析

文件系统是访问存储的一种常用方式,目前常用的文件系统都是针对磁盘的特性进行设计的.例如,为了解决磁盘随机小数据访问的问题,在文件系统层面引入了Page cache机制,利用内存缓存对这种访问进行加速.大多数业务都会存在数据局部性,因此,通过这种Page cache机制可以很好的提升文件系统的性能.另外,文件系统的数据布局也会考虑磁盘的特性,元数据聚合存放在一起,这样可以高效的实现元数据的存放,避免磁盘抖动.如下图描述,包括文件系统在内的存储软件栈在各个层次都会对磁盘抖动问题进行优化. 在NVMe

[转帖]深度: NVMe SSD存储性能有哪些影响因素?

深度: NVMe SSD存储性能有哪些影响因素? http://www.itpub.net/2019/07/17/2434/ 之前有一个误解 不明白NVME 到底如何在队列深度大的情况下来提高性能, 现在看来是因为 比AHCI多了 多队列的控制来提高性能. 导读: NVMe SSD的性能时常捉摸不定,为此我们需要打开SSD的神秘盒子,从各个视角分析SSD性能影响因素,并思考从存储软件的角度如何最优化使用NVMe SSD,推进数据中心闪存化进程.本文从NVMe SSD的性能影响因素进行分析,并给出

[转帖]SSD的工作原理、GC和TRIM、写入放大以及性能评测

SSD的工作原理.GC和TRIM.写入放大以及性能评测 https://blog.csdn.net/scaleqiao/article/details/50511279 SSD的物理结构和工作原理 SSD是由SSD控制器,FLASH存储阵列,板上DRAM(可选),以及跟HOST接口,诸如SAS.SATA.或者PCIE也就是我们通常说的NVMe磁盘.它的结构图如下: 上面的Nand Flash表示的是Flash颗粒,SSD控制器通过若干个主控通道并行操作这些Flash颗粒,就像RAID0一样,这样

将C盘一个文本文件复制到D盘。

//将C盘一个文本文件复制到D盘./*复制的原理:其实就是将C盘下的文件数据存储到D盘的一个文件中. 步骤:1.在D盘创建一个文件,用于存储C盘文件中的数据.2.定义读取流和C盘文件关联.3.通过不断的读写完成数据存储.4.关闭资源. */ public class CopyText { public static void main(String[] args) throws IOException { copy_2(); } public static void copy_2() { Fil

电子工程师名片——UFI Command,USB盘符的显示

USB Mass Storage类规范概述        USB Mass storage Device协议即海量存储设备协议适用于硬盘,U盘等大容量存储设备.协议使用的接口端点有BulkIn.BulkOut和Interrupt端点.该设备类又包含6个独立的子类以及3种传输协议.        Bulk- Only 传输规范仅仅使用Bulk 端点传送数据/命令/状态,CBI 传输规范则使用Control/Bulk/Interrupt 三种类型的端点进行数据/命令/状态传送.       我们手中