内核压缩方式速度优化
Linux 内核启动一般采用自解压的方式,在编译的时候压缩,而Linux启动时对内核固件进行自动解压。
因此,在这一方面,影响内核启动速度的分为两个部分,一个是内核固件的读取时间,另一个是内核解压的时间
压缩算法越复杂,则内核固件尺寸越小,内核解压时间越长
压缩算法越简答,则内核固件尺寸越大,内核解压时间越短。
- 如果flash或者mmc等ROM存储介质的读取速度足够快,那么内核固件的大小就不是问题
- 如果嵌入式系统的CPU主频够高,解压速度足够快,那么内核的解压时间也同样不是问题
因此,对于压缩算法的评估,主要还是根据实际的嵌入式系统以及搭配的存储介质进行实际的测量。
实际评估测试
使用 RV1103_LuckyFox_Pico_Plus,采用 nandflash 存储方案,实际得到的内核由上电,到刚运行的时间统计如下:
压缩方式 | 宏编译选项 | 解压时间 | 总启动时间 | 内核大小 |
---|---|---|---|---|
GZIP | CONFIG_KERNEL_GZIP | 0.231s | 1.179s | 3.8M |
LZMA | CONFIG_KERNEL_LZMA | 2.067s | 2.976s | 3.2M |
XZ | CONFIG_KERNEL_XZ | 1.274s | 2.176s | 3.0M |
LZO | CONFIG_KERNEL_LZO | 0.137s | 1.110s | 4.1M |
LZ4 | CONFIG_KERNEL_LZO | 0.124s | 1.111s | 4.3M |
可以由此得到,LZO 和 LZ4 相比于其他压缩方案,在读取和解压时间上达到较好的平衡,具备最快的启动速度。
但是,由于 LZ4 算法的压缩率相比 LZO 算法的压缩率较低,因此采用占用空间较少的 LZO 算法