SSD
文章平均质量分 72
shenfan321
很喜欢CSDN
展开
-
2.1 SSD介绍
本来是标配,主要用来存放地址映射表,每4bytes的地址映射4k数据,所以需要ssd容量的千分之一。SSD一直以来都是外企的天下,samsung从16年追上intel后到现在占了基本一半的市场份额,其他的有铠侠(东芝)美光也有机械盘大佬的西数希捷等等,fw里有温度控制相关的算法,比如超过warning 温度开始减少IO,达到critical温度停止IO,有的企业是阶梯型的调整,有些抛物线型的调整。所以国内的SSD企业知道的不多。SSD上一般有3个,监控NAND温度,主控温度,及板子温度。原创 2023-04-01 13:59:04 · 440 阅读 · 0 评论 -
2.2 SSD之地址映射
为了向前兼容,LBA是以sector(512B)为单位顺序排列,LBA不能直接映射到PBA,需要通过中间的转换HAFA找到PBA。LBA计算出HA,HA根据映射表找到FA,FA根据位置计算出PBA。在HDD时代,数据可以覆盖写,LBA和PBA直接对应不会更改。但是SSD时代,由于NAND特性,LBA所对应的PBA映射关系是不断修改着的。LBA(Logical Block Address),表示用户操作(读写)数据的位置。H2F表格的索引是FA,存放的值是FA。F2H表格的索引是FA,存放的值是HA。原创 2023-04-10 23:21:52 · 2004 阅读 · 0 评论 -
2.3 SSD之垃圾回收(GC)
数据删除时之前的映射关系解除,数据覆写时找干净的位置写入并建立新的映射关系。GC流程就是把几个block中的有效数据读取到新的block上,原来的块就全部是无效数据,可以擦除后加入干净block链表,用于写入新数据。这样也就带来了写放大。或者说空闲时的后台垃圾回收(background GC),在没有IO操作时,controller利用这个空闲时间来做GC,利于保持SSD的性能。GC的一个优化就是根据块中无效page多少,从无效page最多的块,依次选择block去做GC,这样也能减小写放大。原创 2023-04-01 15:44:22 · 1732 阅读 · 0 评论 -
2.4 SSD之磨损均衡(WL-wear leveling)
是在缓存处理数据,就是说有Write操作时,从空闲block链表里拿ECT最小的block写入,这个block从空闲链表加入到数据块链表,并建立地址映射关系。NAND寿命受限于擦除次数,对相同的block进行改写和擦除很容易就造成永久性伤害,因此引入WL平均地擦除所有block,以延长SSD寿命。NAND中也有很多坏块,包括出厂时的硬坏块,还有使用过程中产生的软坏块,在状态寄存器标示后倒出数据,并加入到坏块表里,这些会另外文章里介绍。相减,超过阈值就把数据挪到空间快最大ECT这个block。原创 2023-04-01 22:09:03 · 1294 阅读 · 0 评论 -
2.5 SSD 之写放大
比如要写一个page H的数据,这时如果没有干净的block,需要做垃圾回收,把block x的3个有效page搬出来,擦除block x,再写入新数据。,比如冷热数据的分离处理,冷数据挪到EC(erase count)值最大的block中,这样也较少了GC对冷数据的搬移次数。数据区比例小了,每个block中的有效数据占比也减少,做GC操作时搬移数据也就相应减少。假如是覆盖写,比如修改page B,有效数据和新的page b写入到新的block里,WA就是3。,比如随机的数据整合成顺序写。原创 2023-04-01 16:21:38 · 938 阅读 · 0 评论 -
2.6 SSD之ECC/LDPC
如果有2个bit发生反转,假如在同一行,通过CP能找到在哪2列,但是RP是完全相同找不到在哪行。2011年做手机memory时,2D NAND检错和纠错算法是ECC,一个page 2k,每256 bytes做ecc,纠1检2。刚才的图再拿过来用下,还是从列先讲原理,比如bit2的列里存在1个bit反转,从最外层往里二分法比较。bit 0/bit 1/bit 4/bit 5 这。bit 0/bit 2/bit 4/bit 6 这。bit 0/bit 1/bit 2/bit 3 这。时怎么用它来纠错和检错呢?原创 2023-04-01 21:22:55 · 1095 阅读 · 0 评论 -
2.7 SSD data path
Read 时,如果数据出现在电压分布的重叠区域,LDPC首先进行重读(Read Retry),也就是用硬判决,不断调整判决电压值,来读取正确数据。如果硬判决依旧无法准确判断出准确数据,就需要通过一些“软信息”(这些软信息能反应所要读取的数据处于哪个电压分布区域的概率),能更准确的判断出真正的数值,这种纠错方式也称作 “软判决译码”。ECRC是可以选择加或不加,一般为4 bytes。32bit,把逻辑块数据与一个地址关联起来,防止被误用或者乱序逻辑块传输,用来检测数据是否写入错误的 LBA 地址)。原创 2023-03-30 22:29:56 · 423 阅读 · 2 评论 -
2.8 企业级SSD之掉电保护
突然掉电时,钽电容反向放电支持到DDR中的数据刷到NAND。重新上电后SSD需要10秒左右重新建立地址转换表。图有点复杂,有时间画好了再详细讲。原创 2023-04-02 22:45:54 · 931 阅读 · 0 评论 -
2.9 企业级SSD之namespace管理
–flbas=, -f ] — FLBA size 用LBA模式0,size和capacity的单位都是逻辑块的大小512B。-c , -controllers= 就是前面命令获取到的id。[ –ncap=, -c ] — capacity of ns 单位512B, 所以最大是totalnvm/512。[ –nsze=, -s ] — size of ns 单位512B, 所以最大是totalnvm/512。7. 验证能否读取数据。原创 2023-04-02 22:25:04 · 1041 阅读 · 0 评论 -
2.10 企业级SSD之nvme log分析
Host从Controller读的千个512B(3 -> 2001~3000),不含meta。Controller检测到数据完整性错误次数(SCT:2h, SC:81~84h),Controller总共收到的err_log数量。剩余的坏块替换占比,Spare占OP约70%Host从Controller读的命令数。过Warning 温度时间,单位:秒。过Critical温度时间,单位:秒。过警告温度时间,单位:分钟。过临界温度时间,单位:分钟。过Warning 温度的次数。主控忙于I/O命令的分钟数。原创 2023-04-01 23:34:45 · 743 阅读 · 0 评论 -
2.11 企业级SSD之nvme-cli使用
其实nvme-cli的族谱里除了reset,rescan等几个命令,其他都是admin-passthru,IO-passthru衍生出来的。比如nvme-admin-passthru衍生出get-log等一堆admin命令,get-log又衍生出很多具体的log命令。nvme SSD用的最多的是开源工具nvme-cli,大部分代码就是拼命令字段然后通过ioctl发给内核,可以github下载源码看下具体实现。nvme -h 可以获取所支持的命令,nvme smart-log -h能更具体获得参数介绍。原创 2023-04-01 23:05:49 · 2189 阅读 · 0 评论 -
2.12 企业级SSD之性能测试工具fio
写一个文件时,每次执行完一个job后,fio可以检验文件内容.允许的校验算法是:md5,crc64,crc32c,crc32c-intel,crc32,crc16,crc7,sha512,sha256,sha1,meta,null。如果refilee_buffers成本太高的话,但是负载要求不使用重复数据块,设置这个选项的话,可以轻微的改动IO buffer内容,这种方法骗不过聪明的块压缩算法,但是可以骗过一些简单的算法。负载,配置生成器的种子,使得路径是可以预估的,使得每次重复执行生成的序列是一样的。原创 2023-07-13 00:30:38 · 467 阅读 · 1 评论