- 博客(27)
- 资源 (7)
- 收藏
- 关注
原创 3.3 ZNS协议
前阵子刚介绍NVMe v2.0发布的ZNS 在企业级SSD上的支持,想着手机上要进展慢一些,谁想Mobile上的标准这么快就发布了,看来先进技术在Mobile的实现进度加快了。看来ZNS的优先级我得调整下尽快的更新。
2023-11-28 16:01:21
448
原创 4.3 F2FS/ZNS+Copy+FBO 最佳拍档
2021年NVMe 发布10周年之际,NVMe 2.0 Spec对协议进行的重新架构,也发布了很多有意思的特性优化存储性能。F2FS文件系统在一定程度上缓解了逻辑碎片化问题,但随着手机的使用和threaded logging随机写,还是有严重的逻辑碎片化。NVMe 的很多功能,一样也可以用到UFS应用层协议。2. UFS 固件检查这些LBA对应的PBA是否连续,以及不连续的程度。1. 系统空闲时,手机通过文件系统把需要性能优化的文件的LBA信息告诉UFS。3. 手机根据反馈,确定优化等级,发起优化指令。
2023-10-30 17:35:44
419
原创 4.3 F2FS
基于LFS(Log-structured File System)类型,使用copy-on-write策略直接写到新的数据块上,避免等待block擦除的开销,解决了需要先擦后写的问题;:在设备的第一个Segment (2MB)内。考虑到冗余,有2个f2fs_super_block结构,包括整个磁盘的segment数量、各个管理区域的起始地址、支持的特性。append-only的日志写策略,将随机写转化成顺序写。为了保证数据一致性,分为CP #0和CP #1,每个CP占一个Segment(2MB)
2023-09-27 14:54:46
509
原创 3.2 NVMe协议
背景:SATA/SAS带宽演进缓慢以及瓶颈,AHCI/SCSI协议低效。2009年Intel牵头Samsung,美光,DELL,Marvell,NetAPP,EMC等90多企业成立NVMe工作组制定新的标准。
2023-09-07 16:51:28
468
原创 5.6 SPDK
英特尔开发的SPDK(Storage Performance Development Kit),提供了一整套工具、库、驱动程序,以实现高性能、扩展性强、全用户态的存储应用框架,大幅缩减存储IO栈的软件开销,从而提升存储性能。spdk的基石是用户态(user space)、轮询(polled-mode)、异步(asynchronous)、无锁(lockless)。
2023-09-04 17:09:30
120
原创 5.4 TiDB
负责接受客户端的连接,执行SQL解析和优化,将实际的数据读取请求转发给底层的存储节点 TiKV。TiDB是无状态的,可以部署多个实例,前端通过负载均衡组件对外提供统一接入地址。TiDB 是由PingCAP 公司研发设计的开源分布式数据库,兼容 MySQL,支持无限的水平扩展,具备强一致性和高可用等特性。TiDB主要包括三个核心组件:TiDB Server,PD Server和TiKV Server。负责存储数据,是一个分布式的提供事务的 Key-Value 存储引擎,底层实现是Rocksdb。
2023-09-04 16:03:59
99
1
原创 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
589
1
原创 5.1 Rocksdb
MySQL默认存储引擎是B+ tree 结构的InnorDB,也可以把存储引擎切换成Rocksdb称为MyRocks。Write首先写WAL日志文件,再写Memtable。当系统崩溃时,WAL 日志可以完整恢复 Memtable 中的数据。DBOptions::max_total_wal_size # WAL最大size。,是硬盘中持久化数据,有序键值对集合,因此可以通过二分法查找指定的key或范围。来提升写性能,数据有序存储,缺点是读性能的损失和写放大的增加。
2023-05-31 00:37:06
334
原创 3 SSD协议
3.1 PCIe 协议。3.2 NVMe 协议。3.3 ZNS 协议。3.4 CXL 协议。3.5 SATA 协议。3.6 SCSI 协议。
2023-05-30 22:37:33
121
原创 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
2464
原创 2.8 企业级SSD之掉电保护
突然掉电时,钽电容反向放电支持到DDR中的数据刷到NAND。重新上电后SSD需要10秒左右重新建立地址转换表。图有点复杂,有时间画好了再详细讲。
2023-04-02 22:45:54
1152
原创 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
1351
原创 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
956
原创 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
2684
原创 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
1528
原创 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
1242
原创 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
1144
原创 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
2078
原创 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
512
原创 2.7 SSD data path
Read 时,如果数据出现在电压分布的重叠区域,LDPC首先进行重读(Read Retry),也就是用硬判决,不断调整判决电压值,来读取正确数据。如果硬判决依旧无法准确判断出准确数据,就需要通过一些“软信息”(这些软信息能反应所要读取的数据处于哪个电压分布区域的概率),能更准确的判断出真正的数值,这种纠错方式也称作 “软判决译码”。ECRC是可以选择加或不加,一般为4 bytes。32bit,把逻辑块数据与一个地址关联起来,防止被误用或者乱序逻辑块传输,用来检测数据是否写入错误的 LBA 地址)。
2023-03-30 22:29:56
502
2
PMP 第六版 ITTO.jpg
2020-05-07
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人