128 Star 896 Fork 321

GVP朱天龙 (Armink) / FlashDB

 / 详情

FlashDB 开机初始化速度慢的问题

待办的
创建于  
2022-06-22 17:48

您好!
当开始初始化时 在这个函数中

fdb_err_t _fdb_kv_load(fdb_kvdb_t db)
{
fdb_err_t result = FDB_NO_ERR;
struct fdb_kv kv;
struct kvdb_sec_info sector;
size_t check_failed_count = 0;

db->in_recovery_check = true;
/* check all sector header */
sector_iterator(db, &sector, FDB_SECTOR_STORE_UNUSED, &check_failed_count, db, check_sec_hdr_cb, false);
if (db->parent.not_formatable && check_failed_count > 0) {
    result = FDB_READ_ERR;
    goto __exit;
}
/* all sector header check failed */
if (check_failed_count == SECTOR_NUM) {
    FDB_INFO("All sector header is incorrect. Set it to default.\n");
    fdb_kv_set_default(db);
}

/* lock the KV cache */
db_lock(db);
/* check all sector header for recovery GC */
sector_iterator(db, &sector, FDB_SECTOR_STORE_UNUSED, db, NULL, check_and_recovery_gc_cb, false);

__retry:
/* check all KV for recovery */
kv_iterator(db, &kv, db, NULL, check_and_recovery_kv_cb);
if (db->gc_request) {
gc_collect(db);
goto __retry;
}

db->in_recovery_check = false;

__exit:
/* unlock the KV cache */
db_unlock(db);

return result;

}
在这里
/* lock the KV cache /
db_lock(db);
/
check all sector header for recovery GC */
sector_iterator(db, &sector, FDB_SECTOR_STORE_UNUSED, db, NULL, check_and_recovery_gc_cb, false);

把NORFLASH的所有扇区都遍历了一遍,导致开机速度很慢,有什么办法解决吗?

有什么办法去掉 recovery Gc 功能吗?

评论 (6)

htiot 创建了任务

norflash 空间如果是1024*1024字节,开机遍历起来就很慢了

同问,楼主后来解决了没有,使用fdb_kv_set_blob 多次写入同一个key 值后,再读取速度会越变越慢。使用fdb_kv_set_default 恢复默认后才正常。

这个问题解决没,我只是5个KV 16KB的大小,颗粒度是128,初始化一次要20ms左右,太慢了

同感,实测1024*1024,开机初始化大概需要150ms,比littlefs和fatFS文件系统都慢很多,这两个文件系统大致只要80ms

初次运行会初始化整个芯片,带来了两个问题,1、此部分耗时交久,需要在扇区迭代中添加喂狗。2、整个扇区初始化导致了资源的浪费,比如4M的片外flash,我只需要前2M用于flashDB存储历史记录,后2M用于普通校准参数、设置参数等的存储,这样每次在执行falshDB历史数据存储的时候会将后面2M也给格式化一遍,这就导致了前期存储的设置参数的丢失。 请问可以一个芯片分开多部分应用么?

在实际应用中,随着新增,修改KV次数的增加,fdb_kv_get_blob会调用kv_iterator,这里面会用do while去遍历查询搜索。这样子导致fdb_kv_get_blob会越来越慢。关于这一块有什么优化的想法吗?谢谢。

登录 后才可以发表评论

状态
负责人
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
参与者(6)
8781839 eprohuang 1700031180
C
1
https://gitee.com/Armink/FlashDB.git
git@gitee.com:Armink/FlashDB.git
Armink
FlashDB
FlashDB

搜索帮助

53164aa7 5694891 3bd8fe86 5694891