linux内核编译选项详解

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


 

 

linux内核编译选项详解(二):Loadable Module and Block Layer Support

 

[*] Enable loadable module support —>
打开可加载模块支持,如果打开它则必须通过”make modules_install”把内核模块安装在/lib/modules/中这个选项可以让你的内核支持模块,模块是什么呢?模块是一小段代码,编译 后可在系统内核运行时动态的加入内核,从而为内核增加一些特性或是对某种硬件进行支持。一般一些不常用到的驱动或特性可以编译为模块以减少内核的体积。在 运行时可以使用modprobe命令来加载它到内核中去(在不需要时还可以移除它)。一些特性是否编译为模块的原则是,不常使用的,特别是在系统启动时不 需要的驱动可以将其编译为模块,如果是一些在系统启动时就要用到的驱动比如说文件系统,系统总线的支持就不要编为模块,否则无法启动系统。在启动时不用到 的功能,编成模块是最有效的方式。你可以查看MAN手册来了解:modprobe, lsmod, modinfo, insmod 和 rmmod.
如果不清楚,选Y。

  • [ ]   Forced module loading
    允许强制加载模块
  • [*]   Module unloading
    允许卸载已经加载的模块
  • [*]   Forced module unloading
    允许强制卸载正在使用中的模块(比较危险)这个选项允许你强行卸除模块,即使内核认为这不安全。内核将会立即移除模块,而不管是否有人在使用它(用 rmmod -f 命令)。这主要是针对开发者和冲动的用户提供的功能。如果不清楚,选N。
  • [ ]   Module versioning support
    有时候,你需要编译模块。选这项会添加一些版本信息,来给编译的模块提供独立的特性,以使不同的内核在使用同一模块时区别于它原有的模块。这有时可能会有点用。如果不清楚,选N。允许使用其他内核版本的模块(可能会出问题)
  • [ ]   Source checksum for all modules
    为所有的模块校验源码,如果你不是自己编写内核模块就不需要它这个功能是为了防止你在编译模块时不小心更改了内核模块的源代码但忘记更改版本号而造成版本冲突。如果不清楚,选N。

-*- Enable the block layer —>
块设备支持,使用硬盘/USB/SCSI设备者必选这选项使得块设备可以从内核移除。如果不选,那么 blockdev 文件将不可用,一些文件系统比如 ext3 将不可用。这个选项会禁止 SCSI 字符设备和 USB 储存设备,如果它们使用不同的块设备。选Y,除非你知道你不需要挂载硬盘和其他类似的设备。不过此项无可选项

  • [*]   Support for large (2TB+) block devices and files
    仅在使用大于2TB的块设备时需要
  • [*]   Block layer SG support v4
    通用scsi块设备第4版支持
  • [ ]   Block layer data integrity support
    块设备数据完整性支持
  • IO Schedulers —>
    IO调度器I/O是输入输出带宽控制,主要针对硬盘,是核心的必須的东西。这里提供了三个IO调度器。

     

    • <*> Anticipatory I/O scheduler
      使用于大多数环境假设一个块设备只有一个物理查找磁头(例如一个单独的SATA硬盘),将多个随机的小写入流合并成一个大写入流,用写入延时换取最大的写 入吞吐量.适用于大多数环境,特别是写入较多的环境(比如文件服务器)抢先式 I/O 调度方式是默认的磁盘调度方式。它对于大多数环境通常是比较好的选择。但是它和Deadline I/O 调度器相比有点大和复杂,它有时在数据调入时会比较慢。
    • <*> Deadline I/O scheduler
      使用轮询的调度器,简洁小巧,提供了最小的读取延迟和尚佳的吞吐量,特别适合于读取较多的环境(比如数据库)Deadline I/O调度器简单而又紧密,在性能上和抢先式调度器不相上下,在一些数据调入时工作得更好。至于在单进程I/O磁盘调度上,它的工作方式几乎和抢先式调度 器相同,因此也是一个好的选择。
    • <*> CFQ I/O scheduler
      使用QoS策略为所有任务分配等量的带宽,避免进程被饿死并实现了较低的延迟,可以认为是上述两种调度器的折中.适用于有大量进程的多用户系统CFQ调度器尝试为所有进程提供相同的带宽。它将提供平等的工作环境,对于桌面系统很合适。
    • Default I/O scheduler (CFQ) —>
      默认IO调度器我这样理解上面三个IO调度器:抢先式是传统的,它的原理是一有响应,就优先考虑调度。如果你的硬盘此时在运行一项工作,它也会暂停下来先 响应用户。期限式则是:所有的工作都有最终期限,在这之前必须完成。当用户有响应时,它会根据自己的工作能否完成,来决定是否响应用户。CFQ则是平均分 配资源,不管你的响应多急,也不管它的工作量是多少,它都是平均分配,一视同仁的。

       

      • ( ) Anticipatory
      • ( ) Deadline
      • (X) CFQ
      • ( ) No-op

 

linux内核编译选项详解(三):Processor type and features

[*] Tickless System (Dynamic Ticks) —>
非固定频率系统,这项技术能让新内核运行的更有效率,并且更省电。

[*] High Resolution Timer Support不选
支持高频率时间发生器,如果硬件不兼容,则这个选项只会增大内核(大多数个人PC并没有这个)

[*] Symmetric multi-processing support不选
对称多处理器支持,如果你有多个CPU或者使用的是多核CPU就选上,此时”Enhanced RealTime Clock Support”选项必须开启,”Advanced Power Management”选项必须关闭。如果你选N,内核将会在单个或者多个CPU的机器上运行,但是只会使用一个CPU。如果你选Y,内核可以在很多(但 不是所有)单CPU的机器上运行,在这样的机器,你选N会使内核运行得更快。注意如果你选Y,然后在Processor family选项中选择“586″ or “Pentium” ,内核将不能运行在486构架的机器上。同样的,多CPU的运行于PPro构架上的内核也无法在 Pentium 系列的板上运行。

[*] Support sparse irq numbering不选
支持稀有的中断编号

[*] Enable MPS table不选
mps多处理器规范

[ ] Support for big SMP systems with more than 8 CPUs

[*] Support for extended (non-PC) x86 platforms 不选
支持非pc

[*] Single-depth WCHAN output 编译选项

[ ] Paravirtualized guest support —>
虚拟化客户端支持

  • [ ]   VMI Guest support (DEPRECATED) (NEW)
    VMware ESX server客户端
  • [ ]   KVM paravirtualized clock (NEW)
    KVM时允许虚拟一个时钟
  • [ ]   KVM Guest support (NEW)
    KVM客户端
  • [ ]   Lguest guest support (NEW)
    Lguest(linux内核虚拟化的x86程序)客户端
  • [ ]   Enable paravirtualization code (NEW)
    增加虚拟机的运行效率

[ ] Disable Bootmem code

[ ] Memtest
内存测试

Processor family (Pentium-Pro) —>
处理器系列,请按照你实际使用的CPU选择这里是处理器的类型。这里的信息主要目的是用来优化。为了让内核能够在所有X86构架的CPU上运行(虽然不是 最佳速度),在这你可以选386。内核不会运行在比你选的构架还要老的机器上。比如,你选了Pentium构架来优化内核,它将不能在486构架上运行。 如果你不清楚,选386。

  • ( ) 386
  • ( ) 486
  • ( ) 586/K5/5×86/6×86/6x86MX
  • ( ) Pentium-Classic
  • ( ) Pentium-MMX
  • (X) Pentium-Pro
  • ( ) Pentium-II/Celeron(pre-Coppermine)
  • ( ) Pentium-III/Celeron(Coppermine)/Pentium-III Xeon
  • ( ) Pentium M
  • ( ) Pentium-4/Celeron(P4-based)/Pentium-4 M/older Xeon
  • ( ) K6/K6-II/K6-III
  • ( ) Athlon/Duron/K7
  • ( ) Opteron/Athlon64/Hammer/K8
  • ( ) Crusoe
  • ( ) Efficeon
  • ( ) Winchip-C6
  • ( ) Winchip-2/Winchip-2A/Winchip-3
  • ( ) GeodeGX1
  • ( ) Geode GX/LX
  • ( ) CyrixIII/VIA-C3
  • ( ) VIA C3-2 (Nehemiah)
  • ( ) VIA C7
  • ( ) Core 2/newer Xeon
  • ( ) Intel Atom

[*] Generic x86 support不选
这一选项针对x86系列的CPU使用更多的常规优化。如果你在上面一项选的是i386、i586之类的才选这个通用x86支持,如果你的CPU能够在上 述”Processor family”中找到就别选。除了对上面你选择的X86 CPU进行优化,它还对更多类型X86 CPU的进行优化。这将会使内核在其他的X86 CPU上运行得更好。这个选项提供了对X86系列CPU最大的兼容性,用来支持一些少见的x86构架的CPU。如果你的CPU能够在上面的列表中找到,就 里就不用选了。

[ ] PentiumPro memory ordering errata workaround

[*] HPET Timer Support
HPET时钟支持。允许内核使用 HPET 。HPET是替代8254芯片的新一代定时器,i686及以上级别的主板都支持,可以安全的选上。但是,HEPT只会在支持它的平台和BIOS上运行。如 果不支持,8254将会激活。选N,将继续使用8254时钟。

(8) Maximum number of CPUs
支持的最大CPU数,每增加一个内核将增加8K体积

[*] SMT (Hyperthreading) scheduler support
支持Intel的超线程(HT)技术超线程调度器在某些情况下将会对 Intel Pentium 4 HT系列有较好的支持。如果你不清楚,选N

[*] Multi-core scheduler support
针对多核CPU进行调度策略优化多核调度机制支持,双核的CPU要选。多核心调度在某些情况下将会对多核的CPU系列有较好的支持。如果你不清楚,选N

Preemption Model (Voluntary Kernel Preemption (Desktop)) —│>
内核抢占模式一些优先级很高的程序可以先让一些低优先级的程序执行,即使这些程序是在核心态下执行。从而减少内核潜伏期,提高系统的响应。当然在一些特殊 的点的内核是不可抢先的,比如内核中的调度程序自身在执行时就是不可被抢先的。这个特性可以提高桌面系统、实时系统的性能。

  • ( ) No Forced Preemption (Server)
    适合服务器环境的禁止内核抢占这是传统的LINUX抢先式模型,针对于高吞吐量设计。它同样在很多时候会提供很好的响应,但是也可能会有较长的延迟。如果你是建立服务器或者用于科学运算,选这项,或者你想要最大化内核的原始运算能力,而不理会调度上的延迟。
  • (X) Voluntary Kernel Preemption (Desktop)
    适合普通桌面环境的自愿内核抢占这个选项通过向内核添加更多的“清晰抢先点”来减少内核延迟。这些新的抢先点以降低吞吐量的代价,来降低内核的最大延迟, 提供更快的应用程序响应。这通过允许低优先级的进程自动抢先来响应事件,即使进程在内核中进行系统调用。这使得应用程序运行得更“流畅”,即使系统已经是 高负荷运转。如果你是为桌面系统编译内核,选这项。
  • ( ) Preemptible Kernel (Low-Latency Desktop)
    适合运行实时程序的主动内核抢占这个选项通过使所有内核代码(非致命部分)编译为“可抢先”来降低内核延迟。这通过允许低优先级进程进行强制抢先来响应事 件,即使这些进程正在进行系统调用或者未达到正常的“抢先点”。这使得应用程序运行得更加“流畅”即使系统已 经是高负荷运转。代价是吞吐量降低,内核运行开销增大。选这项如果你是为桌面或者嵌入式系统编译内核,需要非常低的延迟。如果你要最快的响应,选第三项。 我认为万物是平衡的,低延迟意味着系统运行不稳定,因为过多来响应用户的要求,所以我选第二个。

[*] Reroute for broken boot IRQs

[*] Machine Check / overheating reporting
让CPU检测到系统故障时通知内核,以便内核采取相应的措施(如过热关机等)

  • [*]   Intel MCE features
  • [*]   AMD MCE features
  • [ ]   Support for old Pentium 5 / WinChip machine checks

< > Machine check injector support
让CPU检测到系统故障时通知内核,以便内核采取相应的措施(如过热关机等)

< > Toshiba Laptop support
东芝笔记本模块支持

< > Dell laptop support
Dell笔记本模块支持

[*] Enable X86 board specific fixups for reboot不选
修正某些旧x86主板的重起bug,这种主板基本绝种了

<*> /dev/cpu/microcode – microcode support
是否支持Intel IA32架构的CPU。这个选项将让你可以更新Intel IA32系列处理器的微代码,显然你需要到网上去下载最新的代码,LINUX不提供这些代码。当然你还必须在文件系统选项中选择/dev file system support才能正常的使用它。如果你把它译为模块 ,它将是 microcode。IA32主要用于高于4GB的内存。详见下面的“高内存选项”。使用不随Linux内核发行的IA32微代码,你必需有IA32微代 码二进制文件,仅对Intel的CPU有效

  • [*]   Intel microcode patch loading support
  • [*]   AMD microcode patch loading support

<*> /dev/cpu/*/msr – Model-specific register support
是否打开CPU特殊功能寄存器的功能。这个选项桌面用户一般用不到,它主要用在Intel的嵌入式CPU中的,这个寄存器的作用也依赖与不同的CPU类型 而有所不同,一般可以用来改变一些CPU原有物理结构的用途,但不同的CPU用途差别也很大。在多cpu系统中让特权CPU访问x86的MSR寄存器

<*> /dev/cpu/*/cpuid – CPU information support
是否打开记录CPU相关信息功能。这会在/dev/cpu中建立一系列的设备文件,用以让过程去访问指定的CPU。能从/dev/cpu/x/cpuid 获得CPU的唯一标识符(CPUID)< > /sys/kernel/debug/x86/cpu/* – CPU Debug support

High Memory Support (4GB) —>
LINUX能够在X86系统中使用64GB的物理内存。但是,32位地址的X86处理器只能支持到4GB大小的内存。这意味着,如果你有大于4GB的物理 内存,并非都能被内核“永久映射”。这些非永久映射内存就称为“高阶内存”。如果你编译的内核永远都不会运行在高于1G内存的机器上,选OFF(默认选 项,适合大多数人)。这将会产生一个“3GB/1GB”的内存空间划分,3GB 虚拟内存被内核映射以便每个处理器能够“看到”3GB的虚拟内存空间,这样仍然能够保持4GB的虚拟内存空间被内核使用,更多的物理内存能够被永久映射。
如果你有1GB-4GB之间的物理内存,选4GB选项。如果超过4GB,那么选择64GB。这将打开 Intel 的物理地址延伸模式(PAE)。PAE将在IA32处理器上执行3个层次的内存页面。PAE是被LINUX完全支持的,现在的Intel处理器 (Pentium Pro 和更高级的)都能运行PAE模式。注意:如果你选64GB,那么在不支持PAE的CPU上内核将无法启动。你机器上的内存能够被自动探测到,或者你可以用 类似于“mem=256M”的参数强制给内核指定内存大小。4GB 选这项如果你用的是32位的处理器,内存在1-4GB之间。64GB 选这项如果你用的是32位的处理器,内存大于4GB。

  • ( ) off
  • (X) 4GB
  • ( ) 64GB

[ ] PAE (Physical Address Extension) Support (NEW)
物理地址扩展 (PAE) 允许将最多 64 GB 的物理内存用作常规的 4 KB 页面,并扩展内核能使用的位数以将物理内存地址从 32 扩展到 36。

[ ] Enable KSM for page merging

(4096) Low address space to protect from user allocation

[ ] Enable recovery from hardware memory errors

[*] Check for low memory corruption

  • [*]   Set the default setting of memory_corruption_check

[*] Reserve low 64K of RAM on AMI/Phoenix BIOSen

[ ] Math emulation 不选
数学协处理器仿真,486DX以上的cpu就不要选它了

[*] MTRR (Memory Type Range Register) support
内存类型区域寄存器。在 Intel P6 系列处理器(Pentium Pro, Pentium II 和更新的)上,MTRR将会用来规定和控制处理器访问某段内存区域的策略。如果你在PCI或者AGP总线上有VGA卡,这将非常有用。可以提升图像的传送 速度2.5倍以上。选Y,会生成文件/proc/mtrr,它可以用来操纵 你的处理器的MTRR。典型地,X server 会用到。这段代码有着通用的接口,其他CPU的寄存器同样能够使用该功能。Cyrix 6×86, 6×86MX和 M II处理器有ARR ,它和 MTRR有着类似的功能。AMD K6-2/ K6-3有两个MTRR, Centaur C6有8个MCR允许复合写入。所有这些处理器都支持这段代码,你可以选Y如果你有以上处理器。选Y同样可以修正SMP BIOS的问题,它仅为第一个CPU提供MTRR,而不为其他的提供。这会导致各种各样的问题,所以选Y是明智的。你可以安全地选Y,即使你的机器没有 MTRR。这会给内核增加9KB。打开它可以提升PCI/AGP总线上的显卡2倍以上的速度,并且可以修正某些BIOS错误

  • [ ]   MTRR cleanup support
    MTRR清理(2.6.27内核新增功能,不确定可以不选)

[*] EFI runtime service support不选
EFI启动支持这里允许内核在EFI平台上使用储存于EFI固件中的系统设置启动。这也允许内核在运行时使用EFI的相关服务。这个选项只在有EFI固件 的系统上有用,它会使内核增加8KB。另外,你必须使用最新的ELILO 登录器才能使内核采用EFI的固件设置来启动(GRUB和LILO完全不知道EFI是什么东西)。即使你没有EFI,却选了这个选项,内核同样可以启动。 大家应该用的是GRUB,所以选上这个也没什么用。除非你的系统支持EFI(一种可代替传统BIOS的技术)否则不选

[*] Enable seccomp to safely compute untrusted bytecode 选
只有嵌入式系统可以不选

[ ] Enable -fstack-protector buffer overflow detection (EXPERIMEN│

Timer frequency (1000 HZ) —>内核时钟频率 桌面1000 服务器100或250
允许设置时钟频率。这是用户定义的时钟中断频率 100HZ-1000 HZ ,不过 100 HZ 对服务器和NUMA系统更合适,它们不需要很快速的响应用户的要求,因为时钟中断会导致总线争用和缓冲打回。注意在SMP环境中,时钟中断由变量 NR_CPUS * Hz定义在每个CPU产生。其实和前面的抢先式进程差不多,就是多少频率来响应用户要求。我选了250HZ的。要快点的可以选1000HZ的。但是还是那 句话,一切是平衡的。机器过 快响应你,它自己的活就不知道做得好不好了。

  • ( ) 100 HZ
    100 HZ是传统的对服务器、SMP 和 NUMA的系统选项。这些系统有比较多的处理器,可以在中断较集中的时候分担中断
  • ( ) 250 HZ
    250 HZ对服务器是一个好的折衷的选项,它同样在SMP 和 NUMA 系统上体现出良好的反应速度。
  • ( ) 300 HZ
  • (X) 1000 HZ
    1000 HZ对于桌面和其他需要快速事件反应的系统是非常棒的。

[*] kexec system call不选
kexec 系统调用。kexec是一个用来关闭你当前内核,然后开启另一个内核的系统调用。它和重启很像,但是它不访问系统固件。由于和重启很像,你可以启动任何内 核,不仅仅 是LINUX。kexec这个名字是从 exec 系统调用来的。它只是一个进程,可以确定硬件是否正确关闭,Linus本人都没话说,估计是受害不浅。我们当然不能上当,选N!提供kexec系统调用, 可以不必重启而切换到另一个内核,如果需要就选择,对大多数用户来说并不需要

[ ] kexec jump (EXPERIMENTAL)不选
kexec跳转,如果你需要用kexec来启动内核就选择吧

[*] Build a relocatable kernel不选
建立一个移动的内核,除非特殊要求否则只是增大内核大小而已

(0×1000000) Alignment value to which kernel should be aligned
内核编译、运行时的物理地址匹配,不要更改该值除非你知道你在干嘛

-*- Support for hot-pluggable CPUs
对SMP休眠和热插拔CPU提供支持

[ ] Compat VDSO support不选
如果Glibc版本大于等于2.3.3就不选,否则就选上,目前的版本基本上都大于2.3.3
如果你运行的是最新的glibc(GNU C函数库)版本( 2.3.3 或更新),选N,这样可以移除高阶的VDSO 映射,使用随机的 VDSO。

[ ] Built-in kernel command line


转自:http://www.path8.net/tn/archives/3504

你可能感兴趣的:(linux内核编译选项详解)