找回密码
 注册
关于网站域名变更的通知
查看: 262|回复: 5
打印 上一主题 下一主题

RISC-V生态全景解析15——YoC组件的KV组件介绍

  [复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-6-9 09:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
本期我们将为大家讲解YoC的KV组件,通过KV组件的简介、设计概述、主要原理描述以及示例四部分内容,带大家全面了解该组件。
" t. k7 c, e# a0 w) s, w
3 a4 K. G5 t8 x) l0 H$ A& y" }1、介绍! e  J# N5 p8 y
KV是基于Nor Flash的一种Key-Value 数据存储系统,该系统采用极小的代码及内存开销(最小资源 rom:3K bytes,ram:100bytes),在小规模的Nor Flash上实现数据的存储管理能力,支持断电保护、磨损均衡、坏块处理等功能,并提供标准的aos kv接口进行访问。: F1 R- k, V* K. d
KV 存储系统支持只读模式与读写模式共存,只读模式可以用于工厂生产数据,读写模式可用于运行时的数据存储。2 B) x" a# R* `7 v( N0 {2 K

$ ]$ W( W8 z  d5 g+ o  W) N2、设计概述
/ y8 h" w$ C9 f) \2.1 数据格式8 S- s3 |" I- r
为了简化设计,降低复杂性,减少代码规模及内存开销,又考虑到只读KV与读写KV的兼容性,KV系统未采用传统KV系统或文件系统中采用的HEAD描述结构,采用的链式遍历方式设计。
1 M. |& ]- n: ]+ _3 L1 T& T+ S根据FLASH 的特点,以block 为单位,每一个block 都是一个独立的存储单元,限制一个KV必须存储在一个block上。
- U3 r5 B& V! {+ l7 fKV格式:  G, H3 w' @7 i" D1 E& S0 T7 f- I
只读:=\n
- ], `: n. H% b( G/ a) G读写:<key><\0><size_lo><size_hi><version>=<value><size_hi><erase_flag>
+ t0 a; y7 N' R字段具体说明:
7 a5 Q, Z4 c3 H2 T9 q+ T" Q
字段空间(Byte)说明
KEYn用户传入的key,由字母、数字等可打印字符组成
0位1数值0的特殊值,紧跟在KEY后,是检索的关键标记值
SIZE_LO/SIZE_HI2占两个字节,保存KEY的长度与Value的长度,Value占高10位,KEY占低6位(允许最大KEY长度为63字节,Value理论长度为1023,但由到block 的大小限制,最大长度不得超出block)SIZE_LO为value 长度的低8位,SIZE_HI 的低2位为value 长度的高2位
Version1版本,用于保存KEY被修改的次数,当一个KV被多次修改时,Version最累加,累加到255时掉头为1;该字符用于保证KV修改的有效性,在写入时断电可能会造成KV的重复,采用最新版本的KV为有效KV,删除历史版本的KV;
等号位1即字符”c”,占位及检索标记位,用于识别有效KV
Valuen用户传入的value值,长度由实际Value 长度决定,受block 及 key 长度限制
SIZE_HI/保存上述SIZE_HI 数据,该位用于校检KV的有效性
Erase flag4KV删除标记位,由四个字节组成,非0时为有效KV,为0时,表示该KV已被删除
2 }, L- t6 w" R
& J6 N$ l* p6 m8 G2 Z
2.2 重点功能设计概述
6 A9 m2 s% Z  `- h7 h; E& @2.2.1 断电保护/ ^5 o" ?5 l4 i$ ]6 ]* r4 k
断电保护的设计是为了在修改KV时,能保证KV不会被破坏的事务处理机制,即要写入失败,要么写入成功,对于已经存的KV,写失败后,KV的值仍然为旧值。对于不存在的KV,写失败后,KV不存在。
7 j) |4 C; h2 q0 R
: I2 J; Y' T7 y6 k6 l# ]' Q2.2.2 磨损均衡( P/ [3 [+ n8 Z. c/ Z# ^) B
在通常的应用中,部分KV被经常修改,由于FLASH物理特性,擦写的次数有一定的限制,擦写次数超过次数时,该块会损坏不能使用。磨损均衡的设计是将KV的写入分散到多 block上,避免存储在固定的位置上,达到磨损均衡的效果。磨损均衡主要依赖以下两个策略来实现:/ f& J, _! m4 v0 K* A
异地更新策略 Key-Value键值对采用顺序写入、异地更新的方式,即不再在原存储位置擦除重写,而是在其余空闲位置写入新键值并将原键值标记无效等待回收。这样既可以减少flash的擦除操作次数,又可以提高flash的空间利用率,也避免了对“特定”存储区块过度使用的问题。8 b' X; A, n/ T- b: m5 z! J9 N6 z
垃圾回收策略 当free block总数接近gc下限时,会触发gc操作。flash数据在gc前,存在有效键值和无效键值交织的情况;gc后,把有效文件数据归并到free block,原区域则被擦除并置入free block。gc循环向后搬运键值。 7 u7 O; Q: g# f  n2 A

) |, N/ h% N! a6 a6 I* Q2 y2.2.3 坏块处理" h) y: M2 i$ E3 ~; a
Nor flash有一定的擦写次数限制,如果达到这个限制,或者由于物理方面的损坏,会导致这些block写入有问题。KV系统采用直接片上链式读取,擦除与写入时校验数据正确性,不采用特殊的标识信息来处理坏块,当block 擦除失败或者写失败后,会重新申请新的数据块,避免坏块被错误使用。
7 @* C* N: r2 s6 g* s' y; N  E% N' j6 V
3、主要原理描述' r6 V9 Q+ |0 v1 ~- w( O0 Q3 Z
3.1 关键过程处理流程
: \7 Z5 I: Y% P5 T4 c8 ]* K格式化
- {6 G$ i3 o# p: j( B' F) R将所有块擦除后,若擦除失败则置为坏块。
. ^0 B- x, o( L! U4 M
9 b" A- d3 ^) P7 C! c, h8 P4 k' [初始化; c) J! ]" t; s# g% Q0 \
遍历整个系统,统计每个block 上KV的个数、占用空间、可用位置,删除KV的数量,清理无效的KV,回收无用的block,若cache功能打开,则还会将所有key信息存入cache中。
+ [4 f7 }+ J9 ?/ j' G4 L
5 q( E" N" ]+ d3 Q  K: @2 k! B- U; V写键值
6 V/ @7 w9 }: r% d# T/ u% a3.1 查找系统中是否已存在该键值) w  T0 d5 w2 n/ z: t0 r+ i, d
3.2 分配新的kvnode,计算版本号、长度,将kvnode 写入block
* ^( l. {/ O" H$ t* B3.3 删除已存在的键值
% d& d' k$ H$ h) c5 X$ W9 n/ ^0 B- Q- c2 C
读取及删除键值
4 \% Q  P- D& ^' v- Q4.1 查找系统中是否已存在该键值
* K  s7 R4 }& }; P4.2 读取或删除已存在的键值
7 W9 n" b4 i! h$ p+ }
, q# [0 Q( O& e  o5 N" j" S' L" o$ D) g/ n& d0 U# _* M! S1 s0 y0 w

RISC-V生态全景解析(十五):YoC组件的KV组件介绍.pdf

373.36 KB, 下载次数: 0, 下载积分: 威望 -5

该用户从未签到

2#
发表于 2022-6-9 10:15 | 只看该作者
不错不错,学习学习

该用户从未签到

3#
发表于 2022-6-9 13:49 | 只看该作者
不错,学习学习

该用户从未签到

4#
发表于 2022-6-9 14:59 | 只看该作者
不错,学习学习

该用户从未签到

5#
发表于 2022-6-12 22:40 | 只看该作者
不错,学习学习
  • TA的每日心情
    开心
    2024-4-29 15:07
  • 签到天数: 466 天

    [LV.9]以坛为家II

    6#
    发表于 2022-6-13 08:05 | 只看该作者
    :hug::hug::hug::hug:
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-9-30 01:00 , Processed in 0.140625 second(s), 26 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

    快速回复 返回顶部 返回列表