我正在尝试改善我的设备的内核启动时间,我需要一些帮助。我在用奥玛普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