Linux-2.6.31内核优化指南

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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 --->

相关文档
最新文档