📄 加快 linux 的引导.htm
字号:
下启动服务的传统方法有一定的局限性,往往倾向于“安全第一",让所有的重要的服务先启动,然后再启动余下的那些。<BR><BR>所以,尽管我们不能并行地启动所有的服务,但我们可以并行地启动那些相互间没有依赖关系的服务。当这些相互间无依赖的服务启动以后,我们可以启动那些所有依赖条件已经满足(也就是说,那些服务所依赖的服务已经启动)的服务。然后重复这一过程,直到所有服务全部启动。<BR><BR>这个看起来是一个复杂的问题,不过幸运的是,已经有一个现成的可以用来解决这个问题的程序。这个程序不是别的,正是
make。<BR><BR>通常当编译软件时,make 会提供我们所需要的严密的框架。所有我们要做的就是告诉 make
什么是服务之间的依赖;它可以去做所有的计算交叉依赖的艰难工作,并且,使用它的鲜为人知的标记 -j
,它可以作为许多"作业"而同步运行。<BR><BR>得出服务间依赖关系<BR>如先前我间接提到的,传统的 Linux
系统没有显式地表示服务间的依赖关系,所以现在我们不得不自己去做一些艰难的工作,得出这些依赖关系。这可能会需要一段时间,因为您可能都不知道每个服务在做什么,更别提服务之间的关系了。然而,如果您没有完成这些工作,这种方法对您来说没有任何益处。(如前面所提到的,如果这种方法有实用价值,希望
Linux 发行商可以采用它,并且为我们做这些艰难的工作。)<BR><BR>认识您的服务<BR>如果当您运行命令 /sbin/chkconfig
--list时,您有可能会遇到一些您所不认识的服务,那么花一些时间去弄明白它。一个简单的方法是读那些控制相应服务的脚本中开头处的注释。<BR>这样您就可以把不用的那些工具所对应的服务关掉。即便是您需要它,这样您也可以更加了解您的系统。<BR><BR>现在,我们来做一个简单的实例。我们都知道,ntpd
服务需要网络,这说明 ntpd 服务依赖于network 服务。在 make 语法中这个依赖关系这样表示:<BR><BR>ntpd :
network<BR><BR>我们还可以确定 netfs
服务(挂载我们所需要的所有NFS目录)依赖于网络。在我的系统(您的可能会不一样)上,autofs 服务(自动挂载网络文件系统)也依赖于
network 服务,因为我曾经自动挂载远程文件系统(您可能挂载光驱或者软驱)。我们的“依赖表”现在是这样:<BR><BR>ntpd :
network<BR>netfs : network<BR>autofs :
network<BR><BR>这看起来没什么,但是您知道这意味着什么吗?这意味着一旦 network 服务启动完成,我们可以并行地启动
ntpd,netfs 和 autofs 服务。<BR><BR>做为一个特定的例子,假设所有的服务都需要10秒才能启动。用传统的服务启动方法,启动
network,ntpd,netfs 和 autofs
服务需要40秒。而用这种技术,只需要20秒——节约的50%的时间。<BR><BR>为什么会这样?好了请看,network
服务启动需要10秒时间,但是(因为当 rc
脚本在运行时,机器处于完全多任务的状态)其余三个服务可以同时启动,所以这三个服务合起来的启动时间是10秒。<BR><BR>事实上,大部分服务需要的启动时间可能不是10秒,但是既然每一个服务要做一些完全不同的事情,启动它们所需要的时间会很可观。<BR><BR>样例实现<BR>我在参考资料部分提供的压缩文件中有一个使用上述技术的样例实现。包括一个修改过的用于调用
make 命令的 rc 脚本,以及样例GNU makefile文件,分别是
runlevel.mk,start5.mk和stop5.mk。makefile 文件 runlevel.mk 是控制程序,start5.mk
文件和stop5.mk 文件分别是运行级5时启动和停止服务时的服务依赖描述文件。<BR><BR>注意所给出的启动和停止 makefile
文件提供的不是完全的服务间依赖关系列表,而仅仅是一个例子。同时也要注意,如果您不修改这些文件就在您的系统上使用,几乎不可能成功,因为您的服务列表可能和我的并不一样。<BR><BR>结束语(以及一些补充说明)<BR>我提出了一种用来加快
Linux
机器引导速度的方法。这种方法允许系统在启动服务时启动顺序中靠后的部分服务并行启动,而不是以传统的串行方式启动,以实现引导的加速。这种方法在理论上没有问题,并且可以利用现有的系统工具实现。<BR><BR>这种方法的效率取决于需要启动的服务的数量和每个服务启动所需要的时间。并行的可行性主要取决于服务间的依赖关系。对于某些系统来说,使用这种方法可能只会有很小的改进,但对于其他系统,它可能会显著地影响引导速度。可以这样理解,每个系统都有不同的一组服务被激活,并且每一个服务需要不同的时间来启动。再强调一次,要使用这种方法,您需要确定您的特定系统的服务之间的依赖关系。<BR><BR>补充说明:<BR><BR>*
一些服务程序仅仅是在后台运行一个程序,它们自己就退出了(也就是说,服务程序结束了,但是真实的工作仍然在后台进行)。这说明了一个事实,那就是传统的系统是不完善的,这种服务程序编写者试图在现有框架的界限内减少一些时钟周期。采用本文描述的这种方法将会使依赖关系更加显式化,不需要服务编写者再去“欺骗”。这种方法考虑到在这些服务程序之外建立一个更为高效的框架。<BR><BR>*
当您希望“交互式”引导您的系统时,这里所提到的技术不再适用,因为您通常是当系统某些地方出错的时候才会这样去做;在这种情况下,您可能希望串行地去启动所有的服务以找出出错的原因。不过,修改系统的启动过程,来让用户在系统引导来选择是以串行的方式(允许交互的服务启动)或者“并行”的服务启动方式,是容易实现的。<BR><BR>*
采用这种方法可能还需要更深入的考虑,因为如果传统的系统和新的系统都提供给用户,将需要同步维持两组关于服务如何启动的信息(有序的 rc.d/
链接文件和运行级 make 文件)。一个更好一些的解决方案是 Linux 发行版本能从 makefile 文件自动生成链接文件,因为
makefile 文件比链接文件记录了更多的关于服务的信息。<BR><BR>*
这个系统可能对一个专用的服务器来说并不适合,因为当一个服务发生错误时,管理员希望能在错误发生时在控制台中马上可以看到这个错误。不过,对于普通的终端用户来说,并行化的方法可以在允许用户查看是否有问题发生的前提下显著地加快引导速度。<BR><BR>*
有趣的是,尽管我提出的这种方法从传统观点来看不是“类似Linux的”,但 Linux 基础标准 (LSB,Linux Standards
Base)看起来并没有要指定 init.d 脚本的运行顺序,所以这种方法有可能被 Linux 发行商所采用,而且使之仍然符合
LSB。这对用户来说是一个好消息,如前面所提到的,因为发行商可以为我们计算出所有的软件包之间的依赖关系。<BR><BR>*
有一种方法可能更为大胆,那就是 /etc/inittab 文件中的“action
field”的“wait”修改为“once”。这样用户在服务启动完成之前就可以登录。不过,这已经超出了本文的范围。要得到更详细的信息请查阅
man inittab,并且请记住,UML是您的好帮手。
<DIV align=right>发布人:oracle 来自: </DIV><BR></UL><IMG
src="加快 Linux 的引导.files/line.jpg"><BR>
<FORM action=post.php?skin=reart&ID=3574 method=post>
<UL>-- 发表评论 --<BR> 昵称:<INPUT name=name> Email:<INPUT
name=email><BR> 内容:<BR><TEXTAREA name=content rows=5 cols=56></TEXTAREA><BR> <INPUT type=submit value=确定回复> <INPUT type=reset value=清除></UL></FORM><IMG
src="加快 Linux 的引导.files/line.jpg"><BR>
<UL>
<LI>以下是对此文的评论:<BR><BR>昵称:会游泳的鱼 Email:<BR>原地址:<BR>http://www-900.ibm.com/developerWorks/cn/linux/l-boot/index.shtml<BR>
<HR width="100%" noShade SIZE=1>
昵称:fans1 Email:fans1@sina.com.cn<BR>http://www-900.ibm.com/developerWorks/cn/linux/l-boot/index.shtm<BR>原地址l
<HR width="100%" noShade SIZE=1>
昵称:fans1 Email:fans1@sina.com.cn<BR>好东东,不过怎么不把原地址贴出来啊?
<HR width="100%" noShade SIZE=1>
</LI></UL></TD><!--第三列-->
<TD vAlign=top align=left width="25%"> <IMG
src="加快 Linux 的引导.files/online.jpg" border=0>
<UL>
<LI><A href="http://www.heblinux.org/addnews.php"
target=_blank>新闻发布</A><BR><BR>
<LI><A href="http://www.heblinux.org/addart.php"
target=_blank>文献发布</A><BR><BR>
<LI><A href="http://www.heblinux.org/addsoft.php"
target=_blank>软件发布</A><BR><BR>
<LI><A href="http://www.heblinux.org/manger.php"
target=_blank>软件管理</A><BR></LI></UL><IMG height=5
src="加快 Linux 的引导.files/tabledi2.jpg" width="100%"><!--下载排行--> <IMG
src="加快 Linux 的引导.files/download.jpg" border=0> <BR> <A
href="http://www.heblinux.org/view.php?skin=soft&id=676">Red Hat
Linux</A> (78904)<BR> <A
href="http://www.heblinux.org/view.php?skin=soft&id=93">星际译王1.31版</A> (36834)<BR> <A
href="http://www.heblinux.org/view.php?skin=soft&id=219">Oracle9i
Enterprise</A> (36781)<BR> <A
href="http://www.heblinux.org/view.php?skin=soft&id=785">kylix</A> (35589)<BR> <A
href="http://www.heblinux.org/view.php?skin=soft&id=287">AOL
server</A> (27226)<BR> <A
href="http://www.heblinux.org/view.php?skin=soft&id=969">RedHat
中文环境</A> (25499)<BR> <A
href="http://www.heblinux.org/view.php?skin=soft&id=647">Chinput</A> (23572)<BR> <A
href="http://www.heblinux.org/view.php?skin=soft&id=1041">中软Linux</A> (21135)<BR> <A
href="http://www.heblinux.org/view.php?skin=soft&id=946">RedHat Linux
7.1正式</A> (20829)<BR> <A
href="http://www.heblinux.org/view.php?skin=soft&id=134">XteamLinux</A> (20642)<BR><IMG
height=5 src="加快 Linux 的引导.files/tabledi2.jpg" width="100%">
<!--文摘分类--> <IMG src="加快 Linux 的引导.files/artstyle.jpg" border=0>
<BR> <A
href="http://www.heblinux.org/arttype.php?dno=1">内核分析</A><BR> <A
href="http://www.heblinux.org/arttype.php?dno=2">网络技术及应用</A><BR> <A
href="http://www.heblinux.org/arttype.php?dno=3">应用编程</A><BR> <A
href="http://www.heblinux.org/arttype.php?dno=4">硬件应用</A><BR> <A
href="http://www.heblinux.org/arttype.php?dno=5">软件应用</A><BR> <A
href="http://www.heblinux.org/arttype.php?dno=6">系统管理</A><BR> <A
href="http://www.heblinux.org/arttype.php?dno=7">数据库应用</A><BR> <A
href="http://www.heblinux.org/arttype.php?dno=8">系统安全</A><BR> <A
href="http://www.heblinux.org/arttype.php?dno=9">Linux中文化</A><BR> <A
href="http://www.heblinux.org/arttype.php?dno=10">市场与观点</A><BR><IMG
height=5 src="加快 Linux 的引导.files/tabledi2.jpg" width="100%"> <BR><!--合作伙伴--> <IMG src="加快 Linux 的引导.files/friends.jpg" border=0>
<BR> <A href="http://www.5ilinux.com/"
target=_blank>我爱linux</A><BR> <A
href="http://www.heblinux.org/"
target=_blank>河北LINUX协会</A><BR> <A
href="http://www.xteamlinux.com.cn/"
target=_blank>冲浪软件下载中心</A><BR> <A
href="http://cosoft.org.cn/html/"
target=_blank>共创联盟</A><BR> <A
href="http://www.coventive.com.cn/"
target=_blank>XLinux</A><BR> <A
href="http://www.it365.net/"
target=_blank>诺金软件电脑网络</A><BR> <A
href="http://www.ch2000.com.cn/"
target=_blank>中文2000软件</A><BR> <A
href="http://www.csuu.com/"
target=_blank>中国Unix联盟</A><BR> <A
href="http://freewares.cn/"
target=_blank>自由软件在中国</A><BR> <A
href="http://www.pconline.com.cn/pcedu"
target=_blank>太平洋电脑信息网</A><BR> <A
href="http://www.linuxaid.com.cn/"
target=_blank>LinuxAid</A><BR> <A
href="http://www.cosoft.org.cn/"
target=_blank>共创软件联盟</A><BR> <A
href="http://wsdn.org/"
target=_blank>WEB程序开发网络</A><BR> <A
href="http://linux.softhouse.com.cn/"
target=_blank>软件屋Linux之家</A><BR> <A
href="http://ljb.vpnet.cn/"
target=_blank>随意网络</A><BR> <A
href="http://linux.ccidnet.com/"
target=_blank>赛迪网Linux专区</A><BR></TD></TR></TBODY></TABLE>
<CENTER>Completed in 0.220902919769 seconds</CENTER>
<CENTER>COPYRIGHT 2002-2003 <FONT color=#9b2626>LinuxByte.net</FONT> <A
href="mailto:oneteam@mail.linuxbyte.net">联系本站</A></CENTER></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -