戏说FTL (2)- 鸿门宴

原创内容,转载请注明:  [http://www.ssdfans.com]  谢谢!

刚开始学习FTL,写了一篇《论FTL的重要性之FTL是个什么鬼》,正在踌躇满志的酝酿后面怎么一一展开。结果蛋神第二天就发了一篇文章,以自己多年看小电影的亲身经历解释了OP,WA和GC, 冬瓜大侠在群里跟大家海聊,然后三天之内弄了两篇相关的文章出来。

看到他们才华横溢的文字,我决定去读书充值,做心理建设。

阿呆最近有篇文章提到了楚汉争霸,项羽刘邦这对CP之间有说不完的故事,其中鸿门宴绝对是知名度前三的。

话说当年两人约定好先入关中者—王之。项羽大开大合,正面攻击,正面攻不下继续攻,反正他武力值高没人抗的住。刘邦同学是目标性导向选手,昼伏夜出,打不过的绕过,反正比项羽提前几天进了咸阳,刘邦直接让委萧何第一时间直接去了大秦档案馆,把全国各地户籍资料全部拿下。

大秦帝国这块SSD,自从主控从嬴政cost down成了胡亥,配上了以赵高为首的FW系统,Performance是一天不如一天,GC和WL基本停止,也就剩下maintain映射表(各地的户籍资料)这点功能了,一旦改朝换代,整个系统突然Power lost,就指着这个户籍资料来进行全国百姓生产,劳动,交税,服役的管理了。

项羽team也有明白人 ,范增一听说萧何读取了户籍资料,赶紧发了一个Uncorrectable Error Interrupt给项羽,建议项羽launch error handling流程:立刻在鸿门召开董事局会议,要求刘邦汇上交在咸阳拿到的所有资料,最后在安排独立董事项庄在会议上攻击刘邦在拿下咸阳的过程中没有按照公司流程,一举把刘邦踢出董事会。

结果大家都知道了,另一个刘邦介绍加入的独立董事项伯,提前跟刘邦通了气,刘邦把完整的映射表留了备份,只交了存在SRAM中的一小部分。会议上项伯又帮刘邦挡了不少刀,最后刘邦有惊无险,主动要求让项羽主持咸阳总公司的工作,自己申请去了当时业绩最差的汉中分公司。

这里简单说一下秦国之前的映射表(户籍制度):

每户人家都有一个唯一的LPA(逻辑页地址),这是国家管理户籍的基本单位,这户人家实际居住在哪个郡县,哪个村称为PPA(物理页地址),住在村里几号称为偏移量(offset)。这样就形成了一张LPA和PPA+Offset之间的映射表,这张表格存在阿旁宫(咸阳档案馆),同时国家给每户人家发一个户口本,这个户口本分两部门:

  1. Main区域:行政命令(写),税赋(读)
  2. Spare区域:家庭住址PPA和国家档案馆备案的唯一LPA

等项羽志得意满的进入咸阳,才发现刘邦上交的映射表有问题,一气之下把阿旁宫给烧了。同时只好开展全国人口普查,要求官僚机构根据百姓手上的户口本重构映射表。这个工作量,你懂的…

古往中外,不同的国家之间户籍管理的方法也是有所不同,大致分为三大类:

第一种是美帝采用的,以个人为单位,每人一个社会保险号,学名叫页映射。

这个页是指逻辑页,如果可以使用的逻辑地址空间有n个逻辑页,那么就需要维护一个有n个条目的映射表,每个条目记录物理地址(通道号,块号,页号和页内偏移),一个条目需要4Byte,那么映射表的大小就是4n Byte。

读取一个逻辑页时,根据逻辑页号直接在映射表里索引对应的物理地址;

写入一个逻辑页时,先在NAND上找到下一个可以写入的物理地址将数据写入,然后更新映射表。

以下图为例,逻辑页4K,物理页16K,每个物理页存4个逻辑页,一共16个逻辑页,主机可以看到的容量64K(16×4). NAND共有3个块,每个块有2个物理页,每个物理页16K,NAND物理容量为96K(3x2x16)。

每一个逻辑页都可以映射到任意物理页上,在物理页上的偏移也是任意的。如果映射表一个条目需要4B,映射表的大小为64B。

当读取逻辑页0时,通过查询映射表得到物理地址:块1页0,页内偏移为0,这个位置的数据就是用户想要的数据;

当写入逻辑页14时,内部分配的地址为块2页1,页内偏移为3,那么用户的数据就存在这个位置。

PS:”empty”表示这个逻辑地址未使用过。

 

 

第二种是满清使用的八旗制度,每个旗内部的结构完全一样(300人为1牛录, 5 牛录为1甲喇,5甲喇为1固山),学名叫做块映射:

美帝那种页映射的方式需要记录每个逻辑页对应的物理地址,导致页映射表很大,而满清没几个大学生搞不定这么复杂的映射关系,只能用块映射这种简单粗暴的方式。以块为映射颗粒度,每个条目记录逻辑块映射到的物理块的地址,逻辑块大小等于物理块大小,逻辑页的大小也等于物理页的大小。

因为块映射表只记录了逻辑块的映射信息,逻辑页的映射信息是绑定的,也就是说逻辑页在逻辑块的偏移和物理页在物理块中的偏移是相等的。

在下图的例子中,用户可以使用的逻辑块有3个,NAND Flash上物理块有4个,每个块都有2个页,逻辑页大小等于物理页,块映射每个条目需要4B,那么块映射表的大小是12B(3*4)。

逻辑页LPA0属于物理块1,块内偏移为0;

逻辑页LPA3属于物理块2,块内偏移为1;

读取LPA0,查看映射表,得到逻辑块0映射在物理块1上,再根据块内偏移得到物理地址就是块1页0;

写入LPA3时,同理得到物理地址是块2页1;

 

第三种方式,贵国正在实施的户口本+身份证制度, 学名叫混合映射:

从效率上说,页映射优于块映射,因为每个逻辑页可以映射到任意的物理页上,而块映射仅仅在块级别上映射,块内页的写入位置是固定的。在随机写入的时候代价比较大。

看下面例子(写入顺序为LPA1, LPA0,LPA0):

1. 找到空块x,将LPA1写入页1,将LPA0写入页0;

2. 申请空块y,将第二次LPA0写入块y页0上;

3. 将LPA1从块x搬到块y上;

4. 更新块映射表

5. 将块x擦除;

 

块映射表的大小比页映射表小很多,以32G固态硬盘为例:物理页16KB,每个块256个页,一个块大小为4MB,映射表每个条目为4B:

页映射表大小: (32G/4K)*4B=32M

块映射表大小: (32G/4M)*4B=32K

虽然带来了诸多争议,这种方式也许是更先进的映射方式:

 

家家都有户口本:在RAM中维护一张块映射表,存储逻辑块到物理块的映射关系;

人人都有身份证:块内按页映射处理(保存在NAND Flash中)

 

注1:能力有限,有意见您就提,我愿意改就改。

注2:技术细节部分参考的是中科大郁志平先生的论文

分类目录 未分类.
扫一扫二维码或者微信搜索公众号ssdfans关注(添加朋友->点最下面的公众号->搜索ssdfans),可以经常看到SSD技术和产业的文章(SSD Fans只推送干货)。
ssdfans微信群介绍
技术讨论群 覆盖2000多位中国和世界华人圈SSD以及存储技术精英
固件、软件、测试群 固件、软件和测试技术讨论
异构计算群 讨论人工智能和GPU、FPGA、CPU异构计算
ASIC-FPGA群 芯片和FPGA硬件技术讨论群
闪存器件群 NAND、3D XPoint等固态存储介质技术讨论
企业级 企业级SSD、企业级存储
销售群 全国SSD供应商都在这里,砍砍价,会比某东便宜20%
工作求职群 存储行业换工作,发招聘,要关注各大公司招聘信息,赶快来
高管群 各大SSD相关存储公司高管和创始人、投资人

想加入这些群,请微信扫描下面二维码,或搜索nanoarchplus,加阿呆为微信好友,介绍你的昵称-单位-职务,注明群名,拉你进群。SSD业界需要什么帮助,也可以找阿呆聊。