




全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
技巧:Linux 系统快速启动的十大秘诀 Linux 需要重新启动是少有的。可是一旦需要,Linux 启动常常是缓慢的。简单介绍一 些加速的办法。其中一些方法不太难。 #1: 撤消多余的服务 根据机器的用途,很多服务是不需要的。要是 Linux 只用作桌面,就不需要 sendmail、httpd 和另外许多服务。如果你的服务器只是 Web 服务器,也可以关掉许多服务。 为此,可转到管理菜单,检查服务项目。只需撤消所有不想启动的服务选项。 #2: 撤消多余的内核模块 假如你的桌面连接到以太网,就不需要装载无线内核模块。这是较为困难的任务,可 能需要重新编译内核,而编译内核不是可以轻松担当的工作。为此,你大概需要内核源代 码。接着,按照编译内核的标准步骤进行。不同在于你要搜查系统,撤除所有不需要的模 块。 查明系统中当前安装和运行的内核模块的最好方法是安装 Bootchart。它不仅会给你一 个适宜的模块清单,而且还会说明系统启动过程中发生的事情。还可以发出命令: chkconfig list |grep 3:on,弄清楚正在运行什么服务。一旦知道装载了什么不需要的模块, 就可以在内核重新编译期间将其移除。只要这样处理,编译的内核就完全适合你的体系结 构。 #3: 使用轻型窗口管理器代替 GNOME 或 KDE 我插入小脚印窗口管理器的原因是它们大幅度减少图形(界面) 启动时间。代替不 得不额外等待启动 GNOME 或 KDE 的 30 到 60 秒,为什么不等待用于启动 Enlightenment 或者 XFCE 的 2 到 10 秒呢?它们不仅节省启动时间,还会节省内存并解救处理臃肿软体 (bloatware)这种令人头痛的事。 #4: 使用基于文本的登录而不是图形登录 我的大多数 Linux 机器启动 run level 3 而非 run level 5。这个运行级别将停在文本登录 模式,我就在这个地方登录并发出 startx 命令,开始选择桌面。图形登录模式做两件事: 增加装入时间并引起头痛的问题即试图从拙劣的 X windows 挣脱出来。 #5: 使用轻型发行版 不要装载重型的 Fedora,为什么不试一下 Gentoo、Arch 或 Puppy Linux 呢? 这些较小 的发行版的启动时间比更加臃肿的 Fedora(甚至 Ubuntu)要快很多。在较大的发行版中, OpenSuSE 声称启动最快,但我还没有亲自试验。在最新的 Fedora 和 Ubuntu 之间,Ubuntu 击败 Fedora 的启动时间(而且是即开即用 )。 #6: 使用 Open BIOS 要是你相当聪明能干,准备升级 PC 固件,可以考虑迁移到开源 BIOS。一个附加说明, 使用开放固件允许 Linux 启动时真正初始化硬件( 而不依赖 BIOS)。最重要的是,许多开放 BIOS 可以设置满足机器的特殊需要。如果不走开放 BIOS 之路,至少也可以设置 BIOS 不 寻找不存在的软盘驱动器,即直接启动第一个硬盘驱动器(首先不是 CD 驱动器) 。 #7: 回避 DHCP 如果你工作在地址租约不是问题的家庭网络(或者小型企业网络) 上,那么,机器就用 静态 IP 地址。这将使机器不必出外访问 DHCP 服务器来获得 IP 地址。如果采取这种途径, 就要确保配置文件/etc/resolve.conf 也表达你的 DNS 服务器地址。 #8: 热插拔可免就免 热插拔是指允许把新设备插上电源并立即使用的系统。如果你知道你的服务器不需要 这种系统,就删除它。这将减少启动时间。在许多系统上,热插拔消耗大量启动时间。排 除热插拔将发生的变化取决于你所用的发行版。注意:就绝大部分而言,udev 已经取代热 插拔。但如果你还在运行老一点的发行版,这样做还是适合的。 #9: 要是真的大胆无畏,可尝试一下 initng initng 系统充当 sysvinit 系统的替换物,并承诺彻底减少类 UNIX 操作系统的启动时间。 如果你愿意了解运行中的 initng 系统,可以试一试 Pingwinek LiveCD。 #10: 利用 Debian 具有的代码 要是正在使用 Debian,就有一行可用来将你的启动脚本转换成并行运行的简单代码。 如果检查一下/etc/init.d/rc 脚本,就会看到:大约在 24 行有 CONCURRENCY=none。把这 一行改为 CONCURRENCY=shell,你有可能目睹启动时间的减少。 上述大部分应该是最重要的,当然最快的使 Linux 启动提速的方法就是不要重启,所 以,极少重新启动一般可以减轻启动时间的担子。 嵌入式 Linux 系统中的快速启动技术研究 时间:2009-03-05 15:10:33 来源:中国传动网 作者: 1 嵌入式 Linux 系统启动时序 目前,嵌入式系统的硬件平台和应用方向区别很大,但总体启动流程一致的。这里的系统启动是指从用户执行上电/复位操作,到系 统开始提供用户可接收的服务水平所需要的过程。典型的上电/复位时序如表 1 所列。 表 1 嵌入式 Linux 系统启动时序 2 Linux 快速启动方法 目前,一些 Linux 的发行版本已经对启动速度进行了优化。如果利用标准 Linux 进行开发,则启动速度的提高主要是通过内核配置和各种补丁 包来实现的。下面分析快速启动的一些关键技术。 2.1 Firmware 和 Bootloader 阶段 目标板一旦确定,Firmware 运行的时间就无法改变了, Flash 和 RAM 的读写速度也就随之确定了。但 如果复位时能够绕过 Firmware 和 Bootloader,即允许运行中的内核加载以及运行另一个内核,可以缩短启动的时间。典型的实现有 Kexec,它有 2 个组件,即用户空间组件 kexectools 和内核补丁。另外一种办法是在内核命令行中加入 reboot=soft 数,同样可以跳过 Firmware,但是缺点在于无 法从用户空间调用。 对于正常启动,可以选择速度比较快的 Bootloader,并对内核进行小型化处理;还可以使用高速的映像复制技术(如 DMA2RAM), 从而缩短复制的时间。为了缩短解压消耗的时间,可寻求比较高效的压缩算法。但一般情况下,压缩比越高,算法越复杂,解压速度就越慢,从 而造成复制时间(与压缩比成反比)和解压时间(一般与压缩比成正比)之间的矛盾。 2.2 内核阶段 内核初始化时要对 RealTime Clock (RTC)进行同步。此过程要占用 1s 的时间,可去掉以节约时间,但这样 CPU 会与正确的时间有 1s 的偏差,如果关机时 CPU 时钟又要保存在 RTC 中,偏差就会不断累积。但对于使用外部时钟源进行同步的系统,则可安全地跳过这个阶段。 Preset LPJ 可以用来缩短每次启动时调用 calibrate_delay()来校准 loops_per_jiffy 消耗的时间。这个时间开销与 CPU 频率无关,在典 型的嵌入式硬件环境下会消耗 300ms 左右。LPJ 值对于固定硬件平台应该是一致的,可以只计算一次,在后续的启动中就可以在启动参数中强制 指定 LPJ 值,而跳过实际的计算过程。具体方法是:在正常启动后记录下内核启动信息中的 “Calibrating Delay“数值,在启动参数中以“lpj=xxxxxx“ 的形式强制指定。 启动过程默认打开控制台输出启动消息,但是控制台尤其是基于帧缓冲的控制台会减慢启动速度。因此在嵌入式 Linux 产品中,将启 动过程中的控制台设为静默状态,方法是在内核启动参数中加入“quiet“。 设备搜索和驱动安装是比较耗时的操作,因此要在编译内核时确定需要安装哪些驱动模块,以免系统搜索那些根本不存在的设备,尤 其是多余的 IDE 设备。对于启动时暂时不用安装的设备,尽量将驱动编译成模块,在以后空闲时或者使用设备时加载,而不是全部放在启动阶段。 2.3 用户空间阶段 传统 Linux 的初始化脚本是由 bash 执行的,在内核引导后启动 init 进程(/sbin/init)。它使用一个 ASCII 文件(/etc/inittab)来改变运 行级别,这个文件中又会调用 RCSript,由 RCSript 查找/etc/rc.d/rc5.d/并启动相应链接指向的系统服务。 消费电子类 Linux 系统需要启用图形界面等必要的服务,未经优化的系统在这个过程中会默认启动很多根本用不到或者当前用不到的 系统服务,这一部分会花去较大的时间开销。最简单的优化办法就是根据实际需要,通过改写服务配置文件定制系统服务。另外,init 脚本的执行 是串行的,在脚本量大时会导致引导过程非常,因此可以考虑并行运行各种服务以加快启动的速度。现在已经出现了一些初始化程序来替代 init 进 程,下面介绍 initng 和 upstart。 initng(init nextgerneration)能够并行启动服务从而快速完成初始化工作。initng 认为满足了依赖关系的服务就可以启动。在从外存加 载一个脚本或等待硬件设备启动的同时,可以运行另一个脚本来启动别的服务,使系统在 CPU 和 I/O 之间实现较好的平衡。作为一个基于依赖 关系的解决方案,initng 使用自己的初始化脚本集,它们对服务和守护进程的依赖性进行了编码。如果某个服务依赖(使用 need 关键字定义)于 其他服务,则要保证启动时它所依赖的所有服务均可用。无依赖关系的服务立即并行启动,具有依赖关系的服务则要等待以安全启动。 upstart 与 initng 的区别在于: upstart 基于事件,任务/服务的启动/停止都取决于它所等待的事件是否发生。upstart 对事件的定义非常 灵活,分为 3 类:edge (simple) events, level (value ) events 和 temporal events。使用 start/stop、事件名以及它所期待的值(可选)组成条目 对触发事件进行描述。事件依赖有两种办法:一种是任务自身导致事件发生,不管任务何时启动/结束都会有事件发生,对于启动时要执行的基本 任务,这种办法比较有效;而对于较复杂的依赖关系,则可使用任务的 Shell 脚本工具。 2.4 预读取和预链接 预读取(Readahead)可以将文件(程序和库文件)在使用之前预先加载到 RAM 缓存中,这样就不用在使用时为读取这个文件而访问 I/O。如果知道下一步操作要访问哪些文件,就可以提前将它们全部/部分读取到缓冲区,从而加快执行速度。嵌入式系统很多场合下对于下一步操 作都是可预测的,比如系统启动时总是以同样的顺序访问同样的可执行/数据文件,文件块的访问往往是顺序的,应用程序启动时总是访问同样的 程序文件段、共享库、资源或者输入文件。这样使用预读取有很强的针对性,从而提高程序执行速度。 ELF(Excutable and Linkable File)是目前 Linux 中的标准二进制格式,其启动需要以下步骤:将共享库映射到虚拟地址空间;解析符 号引用;初始化每个 ELF 文件。由于共享库是位置无关的,要在运行时完成部分重定位处理和符号查找的工作,才能跳到程序的入口点,因此在 带来灵活性的同时,也造成 ELF 文件的启动速度缓慢,尤其是解析符号引用要消耗大量的时间,对于使用多个共享库的大型程序更是如此。但在 很多嵌入式系统中,可执行文件和共享库极少变化,而且每次程序运行时链接工作完全相同。 预链接(Prelink)利用这一点,修改 ELF 共享库和二进制文件,将链接信息加入到可执行文件中以简化动态链接重定位,从而使程序 启动加快。预链接首先搜集要预链接的 ELF 二进制文件及其所依赖的共享库,为每个库分配唯一的虚拟空间位置,并将共享库重新链接到这个基 准位置(动态链接器要加载这个库时,只要虚拟空间地址未被占用,它就会将库映射到指定位置);然后预链接解析二进制或者库中的所有重定 位,并将重定位信息存放到 ELF 对象,还要将所有依赖库的列表及校验和添加到二进制文件或库中。对于二进制文件,还需列出所有的冲突(在 共享库的自然搜索范围内对符号的解析不相同)。在运行时,动态链接器先检查是否所有依赖的库都已经映射到指定的位置,而且库文件没有变 化,只考虑冲突而不用处理每个库的重定位,这样大大提高了程序启动的速度。使用时要注意的是,若共享库发生了改变,则使用它的所有程序 都要重新链接,否则程序仍要进行耗时的正常重定位。 3 XIP 和文件系统优化 3.1 代码执行方式 嵌入式系统中代码的执行方式主要有 3 种: 完全映射(fully shadowed )。嵌入式系统程序运行时,将所有的代码从非易失存储器(Flash 、ROM 等)复制到 RAM 中运行。 按需分页(demand paging)。只复制部分代码到 RAM 中。这种方法对 RAM 中的页进行导入/导出管理,如果访问位于虚存中但 不在物理 RAM 中会产生页错误,这时才将代码和数据映射到 RAM 中。 eXecute In Place (XIP)。在系统启动时,不将代码复制到 RAM,而是直接在非易失性存储位置执行。RAM 中只存放需要不断变 化的数据部分,如图 1 所示。如果非易失性存储器的读取速度与 RAM 相近,则 XIP 可以节省复制和解压的时间。 NOR Flash 和 ROM 的读取速度 比较快(约 100 ns),适合 XIP;而 NAND Flash 的读操作是基于扇区的,速度相对很慢( s级),因此不宜实现 XIP。 XIP 可以分为以下 2 种: 内核 XIP。直接在 Flash/ROM 中运行内核,可以节省复制和映像解压的时间。 Linux 2.6.10 内核已经包含了 XIP 支持。 应用程序 XIP。直接从应用程序代码的存储位置执行,而不用将它加载到 RAM 中,这样应用程序的第一次执行速度会比较快。要 使用应用程序 XIP,应该基于支持它的文件系统。 3.2 XIP 文件系统 目前 XIP 文件系统的实现主要有 2 种: Linear XIP CRAMFS 和 Advanced XIP File System(AXFS)。 CRAMFS 是一个压缩的只读文件系统,本来用于桌面 Linux 系统的启动,但 CRAMFS 经过修改后可以支持嵌入式系统并支持 XIP。 Linear XIP CRAMFS 用一个 sticky bit 对它管理的文件进行区分,标记为压缩(按需分页)或者未压缩(XIP)。如果文件标记为 XIP,则所 有页都不压缩,而且要在 Flash 中连续存储。在加载 XIP 文件时,直接对所有页地址进行映射;而按需分页的文件则在发生页错误时,将相应页解 压到 RAM 中。 要创建 Linear XIP CRAMFS 文件系统映像,必须确定可执行文件和库文件的使用频率,频繁使用的文件适合于 XIP,而其他文件应该 进行压缩。现在有一些工具(如 RAMUST 和 CFSST)可以帮助判断哪些文件需要 XIP,而哪些不需要。下面就可以给 XIP 文件加上标记并制作根 文件系统,以使用 mkfs.cramfs 工具为例: chmod +t filenames mkfs.cramfs-x rootfs rootfs.bin 另外,还要修改内核配置参数以支持 XIP:在启动选项中向默认内核命令字符串中加入 rootfstype=cramfs,选择内核 XIP 并设置 XIP 内核物理地址;在驱动程序中加入 MTD 对 XIP 的支持;在文件系统中加入对 Linear XIP CRAMFS 的支持。接下来就可以生成 XIP 映像了。 Linear XIP CRAMFS 的一个缺陷在于它是基于文件的,即一个文件中的所有页要么全部采用 XIP,要么全部采用压缩/按需分页,但事 实上同一文件中不同页的使用频率区别也很大。AXFS 是 Intel 公司开发的一个新的只读文件系统,它从 Linear
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 空港物流考试题及答案
- 科学100考试题及答案
- 考试题目及答案初中
- 舟桥工专业技能考核试卷及答案
- 军训教员考试题及答案
- 惊恐障碍考试题及答案
- 前厅服务员设备维护与保养考核试卷及答案
- 2025年心血管内科常见病例分析试题答案及解析
- 2025年教师招聘之《幼儿教师招聘》预测试题完整参考答案详解
- 多膛炉焙烧工异常处理考核试卷及答案
- 高级综合英语知到智慧树章节测试课后答案2024年秋浙江中医药大学
- 燃气锅炉招投标文件范本含安装
- 《我设计的机器人》课件
- 2024-2030年中国特征尺寸测量用扫描电子显微镜(CDSEM)行业发展策略与前景规划分析报告
- 2024-2025学年陕西省西安西工大附中高一(上)月考物理试卷(含答案)
- 港航实务 皮丹丹 教材精讲班课件 60-第2章-2.8.1-航道整治的方法
- 智鼎在线测评题库88题
- 电缆敷设施工方案及安全措施
- 三级电工职业技能等级认定理论考试复习题及答案
- 肾性贫血的诊治进展课件
- 《济南的冬天》课后习题参考答案
评论
0/150
提交评论