ingram14
原博客地址:https://blog.csdn.net/wangpeng22

    背景:

           随着NVMe的流行,高并发多线程多核的SSD必定是未来方向, sata的单核及FTL架构已不在适用于当前的NVMe firmware。

          高性能低功耗是SSD未来的趋势,但随之而来的是复杂的设计,和各种内部IO,该如何平衡和合理分配资源将是Firmware设计的重中之重。

     如果管理各种Internal IO

          这里引进一个 机制---arbiter,来管理各种IO,让其有序执行,减少相互争夺资源,以便减少不必要的开销。

          为了简单理解arbiter机制,这里讲一个简单的算法:

                      比如一个3室的房子有一个大门,只有一把钥匙,拿到钥匙才能进门,这里把token比作钥匙。这3个房间住着3个人,就是3个open block,但是由于某些限制这个套三只能同时有一个人呆在里面,所以需要一个规则来定义每个人一次性能在房间待多久,这里用credit来描述。只有credit还不够,还需要一个规则描述3个人进房间的比例,用ratio来描述。

FTL arbiter:

token:钥匙,要写资料必须拿到token。(当前tokencredit消耗完,arbiter会仲裁token。)

credit:进门时间,(每次写多少)。(每次arbiter的时候,由ratio比例配置credit。)

ratio:决定进入时间比例(写比例)。(check free spaces2tgc enable都会去配radio比)。

     S2T/CKPT/GC/HOST-IO/SYS 通过arbiter得到token(钥匙),credit通过具体场景分配。

eg:host的credit写完了,ckpt/gc/s2t都没有达到触发条件,则host继续得到下一轮credit。消耗完这轮credit,如果s2t enable,则轮到arbiter 为bs分配credit,消耗完credit,如果gc enable,arbiter为gc分配credit。

       FTL在trans write消耗credit,如果消耗完credit就需要切换tokenHOST消耗完切换到GCGC如果消耗完就切换到S2T,S2T直接给credit(eg: one short给3 superpage, two-pass program cnt 根据nand特性给cnt),CKPT如果enable也会轮到token。

FTL TRANS WRITE写一个Data Unit消耗一个credit,消耗完会进行下一次arbiter。

S2T : HOST  =  ?

     S2T:消耗1 TLC,释放3 SLC。----->释放2个SLC blk.

    为了最大的满足性能, 即释放=消耗, HOST:S2T = 2:1时,满足消耗=释放。

GC: HOST  =  ?

    GC的情况较复杂,具体需要看GC是生产者还是消费者,  SLC or TLC:

         比如: GC是生产者的时候:  GC : HOST  = 1 : 1 (根据blokc valid count来配置)

ratio 该如何配置?

     ---未完待续

posted on 2021-07-06 18:10  ingram14  阅读(233)  评论(0编辑  收藏  举报