您好!
当开始初始化时 在这个函数中
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, §or, 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, §or, 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, §or, FDB_SECTOR_STORE_UNUSED, db, NULL, check_and_recovery_gc_cb, false);
把NORFLASH的所有扇区都遍历了一遍,导致开机速度很慢,有什么办法解决吗?
有什么办法去掉 recovery Gc 功能吗?
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会越来越慢。关于这一块有什么优化的想法吗?谢谢。
登录 后才可以发表评论