Skip to content

fdb_kvdb_init 第一次上电初始化冗余的双重格式化 #419

Description

@crazy3min

fdb_kvdb_init()
  │
  ├─ _fdb_init_ex()                 ← 读取分区信息,很快
  ├─ 找 oldest sector               ← 读一次各扇区头部,很快
  │
  ├─ _fdb_kv_load()                 ★★★★★ 这里最慢 ★★★★★
  │   │
  │   ├─ sector_iterator() 遍历64个扇区
  │   │   │
  │   │   ├─ 第1扇区: read_sector_info → magic校验失败 → check_sec_hdr_cb()
  │   │   │   └─ format_sector() → ①擦除+②写头部     ← 第一次擦除!
  │   │   ├─ 第2扇区: read_sector_info → magic校验失败 → check_sec_hdr_cb()
  │   │   │   └─ format_sector() → ①擦除+②写头部     ← 第一次擦除!
  │   │   ├─ ...
  │   │   └─ 第64扇区: ...                            ← 第一次擦除!
  │   │
  │   ├─ check_failed_count (64) == SECTOR_NUM (64)
  │   │   └─ fdb_kv_set_default()                     ★ 冗余操作 ★
  │   │       ├─ 第1扇区: format_sector → ①擦除+②写头部  ← 第二次擦除!
  │   │       ├─ 第2扇区: format_sector → ①擦除+②写头部  ← 第二次擦除!
  │   │       ├─ ...
  │   │       ├─ 第64扇区: format_sector               ← 第二次擦除!
  │   │       └─ 逐条写入 default KV                   ← 少量写入
  │   │
  │   ├─ sector_iterator() (GC恢复检查)                 ← 已格式化,基本无操作
  │   └─ kv_iterator() (KV恢复检查)                     ← 已格式化,基本无操作
  │
  └─ kv_auto_update() (若启用)                        ← 写入 __ver_num__

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions