您的位置 首页 电子

嵌入式Linux发动时刻优化的隐秘之二文件体系

嵌入式Linux启动时间优化的秘密之二文件系统-我们继续上篇没有讲完的嵌入式Linux启动时间优化方法,本文主要会讲文件系统。想看上一篇的请查看本文结尾的链接。 1. 文件系统 不同的存储介质会采用不同的文件系统: 1)块存储介质 (包括存储卡, eMMC): ext2, ext3,ext4 xfs, jfs,reiserfs btrfs f2fs SquashFS 2)Raw 闪存: JFFS2 YAFFS2 UBIFS ubiblock +SquashFS 对于块文件系统,特性各异: ext4:最适合较大的分区,良好的读写性能。 xfs,jfs,reiserfs:在某些读或写场景中也可能很好。 btrfs,f2fs:利用闪存块设

  咱们持续上篇没有讲完的嵌入式Linux发动时刻优化办法,本文首要会讲文件体系。想看上一篇的请检查本文结束的链接。

  1. 文件体系

  不同的存储介质会选用不同的文件体系:

  1)块存储介质 (包括存储卡, eMMC):

  ext2, ext3,ext4

  xfs, jfs,reiserfs

  btrfs

  f2fs

  SquashFS

  2)Raw 闪存:

  JFFS2

  YAFFS2

  UBIFS

  ubiblock +SquashFS

  关于块文件体系,特性各异:

  ext4:最适宜较大的分区,杰出的读写功能。

  xfs,jfs,reiserfs:在某些读或写场景中也或许很好。

  btrfs,f2fs:运用闪存块设备的特性,能够完成最佳的读写功能。

  SquashFS:关于只读分区,最佳挂载时刻和读取功能。十分适宜需求只读的根文件体系。

  下面别离介绍各文件体系的具体特性。

  1.1. JFFS2

  用于RAW Flash:

  挂载时刻取决于文件体系的巨细:内核必须在挂载时扫描整个文件体系,以读取归于每个文件的块。

  需求运用CONFIG_JFFS2_SUMMARY内核选项将此类信息存储在Flash中。这大大削减了安装时刻。

  ARM基准:关于128 MB分区,从16 s到0.8 s。

  与YAFFS2和UBIFS比较,读写功能相当差。

  1.3 YAFFS2

  用于RAW Flash:

  杰出的安装时刻

  杰出的读写功能

  缺陷:不紧缩,不在主线Linux内核中

  1.4. UBIFS

  用于RAW Flash:

  优势:

  杰出的读写功能(类似于YAFFS2)

  其他长处:更好的磨损均衡(不只能够在单个分区内,而且能够在整个UBI空间中运用)。

  缺陷:

  不适用于小型分区(元数据开支过多)。请改用JFFS2或JAFFS2。

  挂载时刻不是很好,因为初始化UBI需求时刻(UBI Attach:在引导时或在用户空间中运转ubi_attach)。

  由Linux 3.7中引进的UBI Fastmap处理。

  1.5. UBI Fastmap怎么作业

  UBI 加载:需求经过扫描一切擦除块来读取UBI元数据。时刻与存储空间成正比。

  UBI Fastmap将此类信息存储在几个闪存块中(通常在体系封闭期间在UBI别离时),并在引导时找到该信息。

  这样可使UBI附加时刻稳定。

  假如Fastmap信息无效(例如,不正常的体系封闭),它将退回到扫描状况(速度较慢,但能确保正确,Fastmap在下次发动时将康复)。

  具体信息:Thomas Gleixner的ELCE 2012讲演:

  http://elinux.org/images/a/ab/UBI_Fastmap.pdf

  运用进程:

  运用CONFIG_UBI_FASTMAP装备编译内核

  运用ubi.fm_autoconvert = 1内核参数至少引导一次体系。

  以洁净的方法重启体系

  确保如上发动一次后能够删去ubi.fm_autoconvert = 1

  UBI Fastmap功能测验举例:

  在Linux 3.10的Microchip SAMA5D3 Xplained板(ARM)上测得

  UBI空间:216 MB

  根文件体系:已运用80 MB(Yocto)

  均匀加载时刻:

  无UBI Fastmap,加载时刻:968ms

  有UBI Fastmap,加载时刻:238 ms

  可见UBI Fastmap 改进十分明显!

  1.6. ubiblock + SquashFS

  对RAW Flash :

  ubiblock:坐落UBI顶部的只读块设备

  运用CONFIG_MTD_UBI_BLOCK装备编译。

  答应将SquashFS放在UBI卷上。

  引导时刻和读取功能不错。十分适宜于只读根文件体系。

  2. 选取适宜的文件体系

  RAW Flash :带有CONFIG_UBI_FASTMAP的UBIFS或许是最佳处理计划。

  块存储:SquashFS是根文件体系的最佳处理计划,它能够是只读的。Btrfs和f2fs或许是读/写文件体系的最佳处理计划。

  更改文件体系类型十分简单,而且对应用程序彻底通明。只需测验几个文件体系选项,看看哪个最适宜!

  不要只重视发动时刻。

  关于读写功能至关重要的体系,咱们主张运用独自的根文件体系(以加速发动时刻)和数据分区(以完成杰出的运转时功能)。

  2.1 Initramfs

  一个很好的计划是运用十分小的initramfs,以发动要害应用程序,然后切换到终究的根文件体系。


 

  initramfs机制:将根文件体系集成到内核映像中,因而它与内核一同被加载到内存中:

  它将文件体系的紧缩存档集成到内核映像中

  变种:紧缩的initramfs固件也能够由bootloader独自加载。

  initramfs在下面两种情况下十分有用:

  快速发动且十分小的根文件体系。因为文件体系在发动时已彻底加载,因而应用程序发动也十分快。

  作为切换到实践根文件体系之前的中心进程,该文件坐落需求其驱动程序不归于内核映像的设备(存储驱动程序,文件体系驱动程序,网络驱动程序)上。一直在桌面/服务器发行版的内核上运用此选项,以坚持内核映像巨细合理。

   2.2 内存中的initramfs


 

  运用CONFIG_INITRAMFS_SOURCE选项在内核装备等级界说initramfs的内容

  能够是包括根文件体系内容的目录的途径

  能够是cpio归档文件的途径

  能够是描绘initramfs内容的文本文件

  内核构建进程将主动获取CONFIG_INITRAMFS_SOURCE选项装备的内容,并将根文件体系集成到内核映像中

  具体信息(在内核源文件中):

  Documentation/filesystems/ramfs-rootfs-initramfs.txt

  DocumentaTIon/early-userspace/README

  2.3 用initramfs发动进程


 

  2.4 initramfs 下降发动时刻

  创立尽或许小的最小初始化文件,足以发动要害应用程序,然后运用switch_root切换到终究根文件体系:

  运用轻量级的C库以减小固件巨细,主张运用uClibc。

  将BusyBox裁剪到最小。乃至能够不必BusyBox直接在C中完成/init。

  运用静态链接的应用程序(较少的CPU开支,较少的库加载,较小的initramfs(假如底子没有库))。Buildroot顶用BR2_STATIC_LIBS装备。

  2.5 静态链接可执行文件

  静态链接的可执行文件关于减小巨细(特别是在小型initramfs中)十分有用,而且发动作业量较少。

  假如您将initramfs放在紧缩的内核映像中,请不要对其进行紧缩(启用CONFIG_INITRAMFS_COMPRESSION_NONE)。

  不然默许情况下,您的initramfs数据将被紧缩两次,内核将更大,而且将花费更多的时刻来加载宽和紧缩。

  在Linux 5.1上的示例在Beagle Bone Black上具有1.60 MB的initramfs(tar存档巨细):这能够将内核巨细从4.94 MB削减到4.74 MB(-200 KB),并节约大约170毫秒的发动时刻。

      修改连载引荐:嵌入式Linux发动时刻优化的隐秘之一东西链/应用程序优化

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qiche/dianzi/87374.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部