背景:
随着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。(当前token的credit消耗完,arbiter会仲裁token。)
credit:进门时间,(每次写多少)。(每次arbiter的时候,由ratio比例配置credit。)
ratio:决定进入时间比例(写比例)。(check free space,s2t,gc 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就需要切换token,HOST消耗完切换到GC,GC如果消耗完就切换到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 该如何配置?
---未完待续
本文来自博客园,作者:ingram14,转载请注明原文链接:https://www.cnblogs.com/ingram14/p/15778937.html