linux启动优化:mdev -s自从…
转载请说明出处: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自动创建。
linux启动优化:mdev -s自从…的更多相关文章
- 嵌入式Linux启动优化手记2 U…
参考一下 原文地址:U-boot优化">嵌入式Linux启动优化手记2 U-boot优化作者:ZhaoJunling 既然不能使用新的U-boot,那就优化一点是一点,慢慢干吧. 1. ...
- Linux启动时间优化-内核和用户空间启动优化实践
关键词:initcall.bootgraph.py.bootchartd.pybootchart等. 启动时间的优化,分为两大部分,分别是内核部分和用户空间两大部分. 从内核timestamp 0.0 ...
- [转载] Linux启动过程详解-《别怕Linux编程》之八
本原创文章属于<Linux大棚>博客,博客地址为http://roclinux.cn.文章作者为rocrocket.为了防止某些网站的恶性转载,特在每篇文章前加入此信息,还望读者体谅. = ...
- Android内核开发:系统启动速度优化-Android OS启动优化(转)
Android系统的启动优化主要分为三大部分: (1) Bootloader优化 (2) Linux Kernel的剪裁与优化 (3) Android OS部分的剪裁与优化 本文重点关注Android ...
- Linux 启动参数介绍
Linux 启动参数介绍 取自2.6.18 kernel Documentation/i386/boot.txt 文件中介绍 vga= 这里的不是一个整数(在C语言表示法中,应是十进制,八进制或者十六 ...
- 记录Linux启动流程的工具bootchart
/********************************************************************* * Author : Samson * Date ...
- 【转】嵌入式Linux启动配置文件及脚本
原文网址:http://blog.csdn.net/shuaishuai80/article/details/6202497 使用Busybox制作根文件系统时,/etc目录非常重要,它包含了嵌入式L ...
- 嵌入式Linux启动配置文件及脚本分…
使用Busybox制作根文件系统时,/etc目录非常重要,它包含了嵌入式Linux启动所需的配置文件及脚本.由于init进程,或者说linuxrc程序会解析inittab文件,因此就从/etc/ini ...
- Linux启动过程笔记
Linux启动过程 1.启动流程(BIOS->MBR:Boot Code->引导GRUB->载入内核->运行init->runlevel) 2./boot/grub/下有 ...
随机推荐
- inline,block,inline-block解析
display:block就是将元素显示为块级元素. block元素的特点是: 总是在新行上开始: 高度,行高以及顶和底边距都可控制: 宽度缺省是它的容器的100%,除非设定一个宽度 <div& ...
- php之接口内curl请求其他接口
今天遇到一个需要写curl的需求,情况是这样的: 同一应用的A系统(购物系统),B系统(答题系统)相互独立,用户数据全部存在于A系统的数据库中, 现在处于B系统的某项操作中,需要在B系统中验证当前请求 ...
- Activity has leaked window that was originally added(以解决)
在编写Android程序的时候,遇到一个隐藏性问题.仔细查看LogCat,错误信息如下: 10-31 13:03:34.549: ERROR/WindowManager(444): Activi ...
- 在CodeBlocks上配置OpenGL问题
问题:出现No such file or directory.之后重建了C++project 仍然出现这个error.嘿 奇了怪了! 原因:前几日写密码学作业,用到NTL库,将编译器路径设置为NTL库 ...
- Python之MySQLdb
MySQLdb是用于Python链接Mysql数据库的接口,它实现了Python数据库API规范V2.0,基于MySql C API上建立的. 1. MySQLdb安装 (1)安装Mysql,参考上篇 ...
- flask中cookie和session介绍
flask中cookie和session介绍 一.cookie: 在网站中,http请求是无状态的.也就是说即使第一次和服务器连接后并且登录成功后,第二次请求服务器依然不能知道当前请求是哪个用户.co ...
- NIO:异步非阻塞I/O,AIO,BIO
Neety的基础使用及说明 https://www.cnblogs.com/rrong/p/9712847.html BIO(缺乏弹性伸缩能力,并发量小,容易出现内存溢出,出现宕机 每一个客户端对应一 ...
- H5打字机特效
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 记一次愚蠢的gradle操作
今晚把工作移植到mac平台,在用gradle命令 exec ./gradlew --parallel --info assembleDebug 打包apk时卡住,gradle一直处于下载状态,过了几分 ...
- vuecli3修改项目启动端口
工作中可能存在启动多个项目的时候,默认端口号会被占,导致启动错误,这种情况下只要把要启动的项目的端口号换掉启动未用的端口就可以了,具体实现如下: vuecli3中的端口文件存放目录为:node_mod ...