https://github.com/oscomp/proj117-smart-flash-fs

题目分析

题目中指定的技术点

  1. 数据压缩算法(可以是自适应的压缩算法)
  2. 检错、纠错、纠删码**(可以是联合信源信道编码)**
  3. 数据块选择、擦除策略(仅裸 Flash)
  4. Cache 机制
  5. 『智能』如果可以是机器学习,要如何结合

以上加粗的是上一届项目中没有涉及或者说注重的点。

⚠️特别注意

  1. 在往届队伍实现中的『Flash』指的是『裸Flash』,即嵌入式设备中常用的可以指定绝对写入地址的 Flash 环境。如果理解为用于 SSD 等『基于 Flash 的存储设备』,则实现逻辑和题目要求可能南辕北辙。其 UBIFS 和改进是针对裸 Flash 设计的。

往年实现分析

编译通过求求了 / proj117-基于UBIFS的更智能的文件系统

注重的地方

  1. 文档数量庞大。

    文档中需要包含整个开发流程,需要列举并详细说明涉及到的技术要点和原理,以及配有丰富的示意图和代码段。

    在这个队伍的文档实现中,很大部分是分析原版 UBIFS 的实现逻辑和代码理解,另外一部分有基于这些理解对技术进行的调研以及自己的实现逻辑。

  2. 总代码大。

    去除重复文件后统计文件行数如下:

    -------------------------------------------------------------------------------
    Language                     files          blank        comment           code
    -------------------------------------------------------------------------------
    C                               48           6044          12432          30124
    C/C++ Header                    13            713           4033           4173
    -------------------------------------------------------------------------------
    SUM:                            61           6757          16465          34297
    -------------------------------------------------------------------------------
    

    看起来原版 UBIFS 的代码量就是很大,总大小有 1.5MiB,队伍自己的实现暂未统计。

  3. 从「智能」这一点出发。

    PPT:

    1. 『智能:针对不同的情况能够进行不同的处理,从而提升整体性能』
    2. 『相较于ai,其只是低级层面的智能』

    项目中「智能」的实现:

    1. 通过判断文件名的方式来判断使用的压缩算法和参数,即压缩算法和等级的自适应
    2. 通过检查压缩效果是否合适来判断是否继续压缩,压缩效果不好可能其数据本身就是压缩文件,则再次不压缩
    3. 利用文件系统中的局部性
    4. 在 Flash 后期容易产生错误的时候转用纠错能力更强的算法
    5. 冷热数据判别
  4. UBIFS 部分使用到了 Log-Structured 文件系统,即划分了一部分空间来给 Journal 做直接写入