linux内核编译选项详解(一):General setup

linux内核编译选项详解(一):General setup

[*]Prompt for development and/or incomplete code/drivers
显示尚在开发中或尚未完成的代码与驱动.你应该选择它,因为有许多设备可能必需选择这个选项才能进行配置,实际上它是安全的。这个选项同样会让一些老的驱动的可用。如果你选了Y,你将会得到更多的阿尔法版本的驱动和代码的配置菜单。

()Local version – append to kernel release
在内核版本后面加上自定义的版本字符串(小于64字符),可以用”uname -a”命令看到

[ ]Automatically append version information to the version string
自动生成版本信息。这个选项会自动探测你的内核并且生成相应的版本,使之不会和原先的重复。这需要Perl的支持。由于在编译的命令make-kpkg 中我们会加入- – append-to-version 选项来生成自定义版本,所以这里选N。

Kernel compression mode (Gzip)
内核压缩模式选baip2

  • gzip用于UNIX系统的文件压缩。 后缀为.gz的文件。现今已经成为Internet 上使用非常普遍的一种数据压缩格式,或者说一种文件格式。HTTP协议上的GZIP编码是一种用来改进WEB应用程序性能的技术。大流量的WEB站点常常 使用GZIP压缩技术来让用户感受更快的速度。
  • bzip2是一个基于Burrows- Wheeler 变换的无损压缩软件,压缩效果比传统的LZ77/LZ78压缩算法来得好。它是一款免费软件。bzip2能够进行高质量的数据压缩。它利用先进的压缩技 术,能够把普通的数据文件压缩10%至15%,压缩的速度和解压的效率都非常高!支持现在大多数压缩格式,包括tar、gzip 等等。
  • lzma是一个Deflate和LZ77算法改良和优化后的压缩算法,开发者是Igor Pavlov,2001年被首次应用于7-Zip压缩工具中,是 2001年以来得到发展的一个数据压缩算法。它使用类似于 LZ77 的字典编码机制,在一般的情况

[*] Support for paging of anonymous memory (swap)
将使你的内核支持虚拟内存。这个虚拟内存在LINUX中就是SWAP分区。除非你不想要SWAP分区,否则这里必选Y。

[*] System V IPC
System V进程间通信(IPC)支持,于处理器在程序之间同步和交换信息,如果不选这项,很多程序运行不起来,特别地,你想在LINUX下运行 DOS仿真程序,你必须要选Y。

[*] POSIX Message Queues
POSIX消息队列,这是POSIX IPC中的一部分。建议你最好将它选上POSIX 表示可移植操作系统接口

[*] BSD Process Accounting
这是允许用户进程访问内核,将账户信息写入文件中。这通常被认为是个好主意,建议你最好将它选上。将进程的统计信息写入文件的用户级系统调用,主要包括进程的创建时间/创建者/内存占用等信息。

  • [ ]BSD Process Accounting version 3 file format
    选Y,统计信息将会以新的格式(V3)写入,这格式包含进程ID和父进程。注意这个格式和以前的 v0/v1/v2 格式不兼容,所以你需要 升级相关工具来使用它。

[*] Export task/process statistics through netlink (EXPERIMENTAL)
处于实验阶段的功能。通过通用的网络输出工作/进程的相应数据,和BSD不同的是,这些数据在进程运行的时候就可以通过相关命令访问。和BSD类似,数据将在进程结束时送入用户空间。如果不清楚,选N。

  • [*]   Enable per-task delay accounting (EXPERIMENTAL)
    在统计信息中包含进程等候系统资源(cpu,IO同步,内存交换等)所花费的时间
  • [*]   Enable extended accounting over taskstats (EXPERIMENTAL)
    在统计信息中包含扩展进程所花费的时间
    • [*]    Enable per-task storage I/O accounting (EXPERIMENTAL)
      在统计信息中包含I/O存储进程所花费的时间

[*] Auditing support
审计支持,用于和内核的某些子模块同时工作,(例如SELinux)需要它,只有同时选择其子项才能对系统调用进行审计。
允许审计的下层能够被其他内核子系统使用,比如SE-Linux,它需要这个来进行登录时的声音和视频输出。没有CONFIG_AUDITSYSCALL 时(即下一个选项)无法进行系统调用。

  • [*]   Enable system-call auditing support
    支持对系统调用的审计。允许系统独立地或者通过其他内核的子系统,调用审计支持,比如SE-Linux。要使用这种审计的文件系统来查看特性,请确保 INOTIFY 已经被设置。

RCU Subsystem —> 一个高性能的锁机制RCU 子系统
RCU(Read-Copy Update),顾名思义为读取-复制更新。对于被RCU保护的共享数据结构,读者不需要获得任何锁就可以访问它,但写者在访问它时首先拷贝一个副本,然 后对副本进行修改,最后使用一个回调(callback)机制在适当的时机把指向原来数据的指针重新指向新的被修改的数据。这个时机就是所有引用该数据的 CPU都退出对共享数据的操作。

  • RCU Implementation (Tree-based hierarchical RCU) —>
    RCU 实现机制

    • (X) Tree-based hierarchical RCU
      基本数按等级划分
  • [ ] Enable tracing for RCU
    激活跟踪
  • (32) Tree-based hierarchical RCU fanout value
    基本数按等级划分分列值
  • [ ] Disable tree-based hierarchical RCU auto-balancing

< > Kernel .config support
这个选项允许.config文件(即编译LINUX时的配置文件)保存在内核当中。它提供正在运行中的或者还在硬盘中的内核的相关配置选项。可以通过内核 镜像文件 kernel image file 用命令 script scripts/extract-ikconfig 来提取出来,作为当前内核重编译或者另一个内核编译的参考。如果你的内核在运行中,可以通过/proc/config.gz文件来读取。下一个选项提供这 项支持。
看起来好像是一个不错的功能,可以把编译时的 .config文件保存在内核中,以供今后参考调用。用来重编译和编译其他的内核的时候可以用上。你是一个编译内核的狂人的话,这项要选上

  • [ ]   Enable access to .config through /proc/config.gz (NEW)
    上一项的子项,可 以通过/proc/config.gz 访问当前内核的.config 。新功能,上一项选的话这个就选上吧。

(18) Kernel log buffer size (16 => 64KB, 17 => 128KB)
内核日志缓存的大小,12 => 4 KB,13 => 8 KB,14 => 16 KB单处理器,15 => 32 KB多处理器,16 => 64 KB for x86 NUMAQ or IA-64,17 => 128 KB for S/390

[*] Control Group support —>
cgroup支持,如cpusets那样来使用cgroup子 系统进程(不确定可以不选)

  • [ ]   Example debug cgroup subsystemcgroup
    子系统调试例子
  • [*]   Namespace cgroup subsystem cgroup
    子系统命名空间
  • [*]   Freezer cgroup subsystem
  • [*]   Cpuset support
    只有含有大量CPU(大于16个)的SMP系统或NUMA(非一致内存访问)系统才需要它

    • [*]     Include legacy /proc//cpuset file
  • [*]   Simple CPU accounting cgroup subsystem
    简单cgroup子系统cpu所花费的时间

    • [ ]     Memory Resource Controller for Control Groups
      cgroup内存资源控制器

[ ] enable deprecated sysfs features which may confuse old userspce tools
在某些文件系统上(比如debugfs)提供从内核空间向用户空间传递大量数据的接口

-*- Kernel->user space relay support (formerly relayfs)
内核系统区和用户区进行传递通讯的支持。这个选项在特定的文 件系统中提供数据传递接口支持,它可以提供从内核空间到用户空间的大批量的数据传递工具和设施。如果不清楚,选N。

-*- Namespaces support
命名空间支持,允许服务器为不同的用户信息提供不 同的用户名空间服务

[*]   UTS namespace
通用终端系统的命名空间。它允许容器,比如Vservers利用UTS命名空间来为不同的服务器提供不同 的UTS。如果不清楚,选N。

[*]   IPC namespace
IPC命名空间,不确定可以不选

[*] Initial RAM filesystem and RAM disk (initramfs/initrd) suppor
初始RAM的文件和RAM磁盘( initramfs /initrd)支持(如果要采用initrd启动则要选择,否则可以不选)

  • ()    Initramfs source file(s)
    initrd已经被initramfs取代,如果你不明白这是什么 意思,请保持空白

[*] Optimize for size
这个选项将在GCC命令后用 “-Os” 代替 “-O2″参数,这样可以得到更小的内核。没必要选。一个编译好的内核才7-10多M,大家不会少这么点空间吧。选上了可能会出一些问题。最好不选。有时会产生错误的二进制代码。

[ ] Configure standard kernel features (for small systems) —>
配置标准的内核特性(为小型系统)。这个选项可以让内核的基本选项和设置无效或者扭曲。这是用于特定环境中的,它允许“非标准”内核。你要是选它,你一定要明白自己在干什么。这是为了编译某些特殊用途的内核使用的,例如引导盘系统。

  • -*-   Load all symbols for debugging/ksymoops
    装载所有的调试符号表信息,仅供调试时选择

    • [*]     Include all symbols in kallsyms
      在kallsyms中包含内核知道的所有符号,内核将会 增大300K
    • [*]     Do an extra kallsyms pass
      除非你在kallsyms中发现了bug并需要 报告这个bug才打开该选项

Kernel Performance Events And Counters —>

  • -*- Kernel performance events and counters
  • [*] Tracepoint profiling sources
  • [ ] Kernel performance counters (old config option)

[ ] Disable heap randomization
禁用随机heap(heap堆是一个应用层的概念,即堆对CPU是不可见的,它的实现方式有多种,可以由OS 实现,也可以由运行库实现,如果你愿意,你也可以在一个栈中来实现一个堆)

Choose SLAB allocator (SLUB (Unqueued Allocator)) —>
选择内存分配管 理器(强烈推荐使用SLUB)

  • ( ) SLAB
    各种环境通用的内存分配管理器
  • (X) SLUB (Unqueued Allocator)
    更加优秀的内存分配管理器

[*] Profiling support (EXPERIMENTAL)
剖面支持,用一个工具来扫描和提供计算机的剖面图。支持系统评测(对于大多数用户来说并不是必须的)

  • < > OProfile system profiling (EXPERIMENTAL)
    OProfile评测和性能监控工具

[*] Kprobes
调试内核除非开发人员,否则不选

GCOV-based kernel profiling —>

  • [ ] Enable gcov-based kernel profiling

[ ] Slow work debugging through debugfs

发表评论?

3 条评论。

  1. Linux 2.6.36内核优化指南 | skyfire - pingback on 2012/04/04 在 04:21
  2. Linux 2.6.36内核优化指南 | 袁峥嵘的小黑窝 - pingback on 2013/02/16 在 20:51
  3. 请问一下这些内核项的修改在哪里修改的?在系统里直接执行命令,还是修改配置文件?

发表评论

Trackbacks and Pingbacks: