initramfs 解包非常慢

initramfs 解包非常慢

我正在尝试改善我的设备的内核启动时间,我需要一些帮助。我在用奥玛普138与内核版本2.6.37启动过程大约需要50秒才能完成,我认为这是一个很长的时间。下面是启动过程的某些阶段的图像。如您所见,消息延迟了 19 秒EMAC:MII PHY 配置出现,我认为这是我的启动时间的主要问题。

内核启动过程

经过一些测试,我发现这个延迟是在解压过程中发生的initramfs.cpio.lzma。我通过在中打印一些消息发现了它initramfs.c文件,并且这种延迟发生在尽管内部循环解压到根文件系统功能。 initramfs.cpio.lzma 有 5.3MB,总内核映像 (uImage) 有 7.3MB。

我的问题是:我是否做错了什么,或者改善这一问题的唯一方法是减小内核的大小?也许你们中的一些人之前曾经处理过这个问题,所以我想了解一些关于如何继续改善启动时间的建议。非常感谢。

答案1

可能不是 CPU 瓶颈而是闪存介质访问时间慢?在 TI 论坛上找到下面这个帖子,讨论闪存吞吐量限制为 0.6 MB/秒。 OMAP-L138 EVM SPI 闪存读取性能和启动时间

对于测试(如 Janus 建议的那样),看看是否可以压缩内核映像和/或 initramfs(gzip -0如果可能)。或者可能更简单(在另一个工作站上),获取您的副本initramfs.cpio.lzma文件,解压缩至初始化文件系统cpio,然后用 重新压缩lzma -0。将新的重新压缩文件覆盖回您的闪存介质。我预计该文件应该稍大一些。如果启动速度更快,那么 CPU 可能是瓶颈。如果启动速度较慢,则 IO 可能是瓶颈。

甚至可以使用 重复测试lzma -9,但要注意压缩和解压缩可能需要大量内存。

以下是 lzma (v5.07) 手册页的摘录:

     On the same hardware, the decompression speed is approximately
     a constant number of bytes of compressed data per second.   In
     other words, the better the compression, the faster the decom-
     pression will usually be.  This also means that the amount  of
     uncompressed output produced per second can vary a lot.

     The following table summarises the features of the presets:

            Preset   DictSize   CompCPU   CompMem   DecMem
              -0     256 KiB       0        3 MiB    1 MiB
              -1       1 MiB       1        9 MiB    2 MiB
              -2       2 MiB       2       17 MiB    3 MiB
              -3       4 MiB       3       32 MiB    5 MiB
              -4       4 MiB       4       48 MiB    5 MiB
              -5       8 MiB       5       94 MiB    9 MiB
              -6       8 MiB       6       94 MiB    9 MiB
              -7      16 MiB       6      186 MiB   17 MiB
              -8      32 MiB       6      370 MiB   33 MiB
              -9      64 MiB       6      674 MiB   65 MiB

答案2

如果IO速度不是瓶颈,那么另一个选择是使用LZ4压缩,它的文件比gzip大一点,但解压速度非常快。

用于压缩内核的内核配置选项是 CONFIG_KERNEL_LZ4=y。

http://events.linuxfoundation.org/sites/events/files/lcjpcojp13_klee.pdf

相关内容