Linux-2.6.31内核优化指南
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Linux 2.6.31内核优化指南
作者:Ken Wu
Email: ken.wug@
介绍
本文档是一篇关于Linux Kernel 2.6.31的最简优化指南。作者旨在编译一份性
能最佳且适合普通Application/Server开发用的内核。(非生产环境)
本文提及的内核调优,主要是通过选择最佳编译选项,删除无用驱动,减少内核尺寸,关闭部分安全特性等方式来进行的。
优化后的效果,主要体现在OS启动时间,启动后的内存占用以及应用程序运行性能。
由于作者水平有限,如果描述错误,还请不吝指教。
运行环境
虚拟机Virtualbox 3.1.4
CPU Core 2 Duo P9500 2.53G双核开启vt-x, APIC
磁盘
虚拟10G的SATA磁盘
内存
分了1G物理内存
网卡
虚拟AMD PCNet32 100M
其他USB,串口,显卡,声卡全关
作者是在虚拟机中编译的内核,如果你与作者的运行环境不同,则本文档中的部分描述可能会与你的实际情况有一定出入。
不过,相信大部分用户在看到选项释义时,能做出适合自己的选择。
说明
下列选项中,通过"// "注释的行,代表金国步写的内核选项简介中未提及的选项释义。
通过红色"<==="注释的行,代表内核默认开启,本文档推荐关闭的选项,释
义部分会给出关闭的理由。
参考资料
金国步写的内核选项简介
Linux Kernel Database
Linuxsir BBS
优化前后性能对比
项目优化前优化后
内核尺寸 4.1M 1.6M
启动时间(含dhcp+默认init service)22s14s
启动后的内存占用25M22M
APP SPEC测试成绩待测待测
General setup --->
[ ] Prompt for development and/or incomplete code/drivers <===显示尚在开发中或尚未完成的代码和驱动.我不是内核或驱动开发人员。
() Local version - append to kernel release
[ ] Automatically append version information to the version string Kernel compression mode (Bzip2) ---> <===对比默认的Gzip,Bzip2拥有更高的压缩比
[*] Support for paging of anonymous memory (swap)
[*] System V IPC
[*] BSD Process Accounting
[ ] BSD Process Accounting version 3 file format
[ ] Export task/process statistics through netlink (EXPERIMENTAL) <===体验类选项一律关
[ ] Auditing support <===给SELinux提供支持。我的使用场景主要是开发应用程序,不需要那么高的安全性,另外安全总是以牺牲性能为代价RCU Subsystem ---> // 非对称读写锁系统是一种新的kernel锁机制,适用于读多写少环境
RCU Implementation (Classic RCU) ---> <===选择标准的RCU系统,tree-base是给拥有大规模CPU集群的SMP系统用的< > Kernel .config support
(18) Kernel log buffer size (16 => 64KB, 17 => 128KB)
[] Control Group support ---><=== cgroups支持,文档资料,cgroups主要作用是给进程分组,并可以动态调控进程组的CPU占用率。比如A进程分到apple组,给予20%CPU占用率,E进程分easy组,给予50%CPU占用率,最高100%。我目前没有此类应用场景,用到时会选择将其编译进去。
[] Kernel->user space relay support (formerly relayfs) <===在某些文件系统上(比如debugfs)提供从内核空间向用户空间传递大量数据的接口,我目前没有此类应用场景
-*- Namespaces support
[] UTS namespace <===我没有已安装的应用程序要用到UTS ns
[] IPC namespace <===我没有已安装的应用程序要用到IPC ns
[] Initial RAM filesystem and RAM disk (initramfs/initrd) support <===用于在真正内核装载前,做一些操作(俗称两阶段启动),比如加载module,mount一些非root分区,提供灾难恢复shell环境等,资料,我是期望直接从kernel image直接启动,所以没选它
[*] Optimize for size
[ ] Configure standard kernel features (for small systems) ---> -*- Load all symbols for debugging/ksymoops
[ ] Do an extra kallsyms pass <===除非你在kallsyms中发现了bug并需要报告这个bug才打开该选项
Performance Counters --->
[*] Kernel Performance Counters // CPU性能监听器,包括CPU 同一时间执行指令数,cache miss数,分支预测失败次数(Branch misprediction)。调优其他程序时或许会用到,比如JVM
[ ] Strip assembler-generated symbols during link
[ ] Disable heap randomization
Choose SLAB allocator (SLUB (Unqueued Allocator)) --->
[ ] Profiling support (EXPERIMENTAL) <===我不是内核开发人员,不需要profile内核
[] Activate markers <===一种运行时状态分析诊断工具,类似instrumentation,资料,我用不到
[ ] Kprobes <===我不是内核开发人员,不需要调试内核
GCOV-based kernel profiling --->