转载请说明出处:http://control.blog.sina.com.cn/admin/article/article_add.php

近期工作中遇到的问题如下:

linux启动后加载根文件系统时,会停留时间很久,跟人一种死机的感觉,于是老大要求优化linux的启动时间。

先第一步做的是给linux内核启动加上时间戳,方法:配置linux内核

make menuconfig--->Kernel hacking-->show
timing information on printks选中即可,重新编译内核下载。

发现linux内核启动的时间是可以接受的在3s左右,主要时间是在根文件系统的挂在出停留时间比较久,于是下面就把中心放在根文件系统的优化上。

linux内核启动的最后是挂在根文件系统,打印信息如下:

[   
3.810000] Failed to execute /init.  Attempting
defaults...执行到这时明显逗留时间比较长,大概有5s左右, 有这里我们想到 系统启动后
自动加载 /etc/init.d/rcs 打开rcs,在开头加上一个打印语句echo
"*******test0****",
用来验证,保存重启,神奇的发现Failed to execute /init. 
Attempting
defaults...之后紧接着出现*******test0****,这个充分说明了,问题出现在/etc/init.d/rcs文件中,我在该文件中(由于文件不大)我每条指令下加一个打印输出语句echo
"*******test1****"(一次增加)。最后终于找到最耗时间的地方是/sbin/mdev
-s,下面的问题就是如何优化它。

我们首先要了解一下mdev -s自动创建设备节点的原理和方法:请参考这篇文章

http://blog.csdn.net/hugerat/article/details/3437099

mdev扫描 /sys/class 和/sys/block中所有的类设备目录,如果在目录中含有名为“dev”的文件,且文件中包含的是设备号,则mdev就利用这些信息为这个设备在/dev下创建设备节点文件。

热插拔事件:由于启动时运行了命令:echo /sbin/mdev > /proc/sys/kernel/hotplug
,那么当有热插拔事件产生时,内核就会调用位于/sbin目录的mdev。这时mdev通过环境变量中的 ACTION
和DEVPATH,(这两个变量是系统自带的)来确定此次热插拔事件的动作以及影响了/sys中的那个目录。接着会看看这个目录中是否有“dev”的属性文件,如果有就利用这些信息为这个设备在/dev
下创建设备节点文件。

由于我们做的产品是在linux挂在文件系统后直接运行我们的应用程序(一直),所以我们boss希望我们的应用界面尽可能早的出现,我们的应用程序启动是在文件系统下/etc/init.d/rcS中的最后添加的启动脚本。但是mdev
-s出现的必须比较早,如果放在应用程序后面,会造成设备节点没创建而导致应用程序的不正常运行,但是应用放在后面吧,有启动的较晚,(由于mdev自动创建节点比较耗时,前面已经说过),那如何解决这个问题呢?

解决办法:

        
最简单的方式是我们应用必须用的设备节点在前面手工创建(还是在rcS启动脚本里面),对于其他的可以放在我们的应用启动后在用medv
-s自动创建。

最新文章

  1. UVa 10300 - Ecological Premium
  2. Hydra---Linux下的暴力美学
  3. 【python cookbook】【数据结构与算法】18.将名称映射到序列的元素中
  4. spark streaming kafka1.4.1中的低阶api createDirectStream使用总结
  5. java初探native
  6. SIFT算法:特征描述子
  7. 为什么struts2 ajax 方法执行两次
  8. linux c数据库备份第三版
  9. Use API to retrieve data from internet
  10. android调用音乐播放器,三种方
  11. Nginx的配置文件详解
  12. Weave 如何与外网通信?- 每天5分钟玩转 Docker 容器技术(66)
  13. vueSSR全栈(项目实战 mac)
  14. Python中怎么读写文件
  15. Python—re模块
  16. 鸟哥的Linux私房菜:基础学习篇 —— 第五章笔记
  17. SoapUI5.0创建WebService接口模拟服务端(转)
  18. WP8.1学习系列(第二十七章)——ListView和GridView入门
  19. Entity Framework Core的坑:Skip/Take放在Select之前造成Include的实体全表查询
  20. python SQLite说一点点, python使用数据库需要注意的几点

热门文章

  1. UICollectionView-网格视图
  2. UI- UINavigationController UITabBarController 使用总结
  3. LitJson使用中需要注意的一些问题(转)
  4. 如何在100万文字的文章中 200ms内 快速提取 替换 上万个关键字
  5. canvas - 圆圈内 hover效果
  6. Java加载jar文件并调用jar文件当中有参数和返回值的方法
  7. 指针和引用在C++中应用
  8. 在Virtualbox虚拟机中配置使用ROS Spark机器人(Orbbec Astra 和 Xtion)
  9. [置顶] 【机器学习PAI实践六】金融贷款发放预测
  10. 转:C++模板特化的概念