linux内核配置make_menuconfig菜单详解
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
linux内核配置make menuconfig菜单详解
前言
一、配置系统的基本结构
Linux内核的配置系统由三个部分组成,分别是:
1、Makefile:分布在 Linux 内核源代码根目录及各层目录中,定义Linux 内核的编译规则;
2、配置文件(config.in(2.4内核,2.6内核)):给用户提供配置选择的功能;
3、配置工具:包括配置命令解释器(对配置脚本中使用的配置命令进行解释)和配置用户界面(提供基于字符界面、基于 Ncurses 图形界面以及基于 Xwindows 图形界面的用户配置界面,各自对应于 Make config、Make menuconfig 和 make xconfig)。
这些配置工具都是使用脚本语言,如 Tcl/TK、Perl 编写的(也包含一些用 C 编写的代码)。
本文并不是对配置系统本身进行分析,而是介绍如何使用配置系统。
所以,除非是配置系统的维护者,一般的内核开发者无须了解它们的原理,只需要知道如何编写 Makefile 和配置文件就可以。
二、makefile menuconfig过程讲解
当我们在执行make menuconfig这个命令时,系统到底帮我们做了哪些工作呢?这里面一共涉及到了一下几个文件我们来一一讲解
Linux内核根目录下的scripts文件夹
arch/$ARCH/Kconfig文件、各层目录下的Kconfig文件
Linux内核根目录下的makefile文件、各层目录下的makefile文件
Linux内核根目录下的的.config文件、arm/$ARCH/下的config文件
Linux内核根目录下的 include/generated/autoconf.h文件
1)scripts文件夹存放的是跟make menuconfig配置界面的图形绘制相关的文件,我们作为使用者无需关心这个文件夹的内容
2)当我们执行make menuconfig命令出现上述蓝色配置界面以前,系统帮我们做了以下工作:
首先系统会读取arch/$ARCH/目录下的Kconfig文件生成整个配置界面选项(Kconfig是整个linux配置机制的核心),那么ARCH环境变量的值等于多少呢?
它是由linux内核根目录下的makefile文件决定的,在makefile下有此环境变量的定义:
或者通过 make ARCH=arm menuconfig命令来生成配置界面,默认生成的界面是所有参数都是没有值的
比如教务处进行考试,考试科数可能有外语、语文、数学等科,这里相当于我们选择了arm科可进行考试,系统就会读取arm/arm/kconfig文件生成配置选项(选择了arm科的卷子),系统还提供了x86科、milps科等10几门功课的考试题
3)假设教务处比较“仁慈”,为了怕某些同学做不错试题,还给我们准备了一份参考答案(默认配置选项),存放在arch/$ARCH/configs下,对于arm科来说就是arch/arm/configs 文件夹:
此文件夹中有许多选项,系统会读取哪个呢?内核默认会读取linux内核根目录下.config文件作为内核的默认选项(试题的参考答案),我们一般会根据
开发板的类型从中选取一个与我们开发板最接近的系列到Linux内核根目录下(选择一个最接近的参考答案)
#cp arch/arm/configs/s3c2410_defconfig .config
4).config
假设教务处留了一个心眼,他提供的参考答案并不完全正确(.config 文件与我们的板子并不是完全匹配),这时我们可以选择直接修改.config文件然后执行make menuconfig命令读取新的选项
但是一般我们不采取这个方案,我们选择在配置界面中通过空格、esc、回车选择某些选项选中或者不选中,最后保存退出的时候,Linux内核会把新的选项(正确的参考答案)更新到.config中,此时我们可以把.config重命名为其它文件保存起来(当你执行make distclean时系统会把.config文件删除),以后我们再配置内核时就不需要再去arch/arm/configs下考取相应的文件了,省去了重新配置的麻烦,直接将保存的.config文件复制为.config即可.
5)经过以上两步,我们可以正确的读取、配置我们需要的界面了
那么他们如何跟makefile文件建立编译关系呢?
当你保存make menuconfig选项时,系统会除了会自动更新.config外,还会将所有的选项以宏的形式保存在
Linux内核根目录下的include/generated/autoconf.h文件下
内核中的源代码就都会包含以上.h文件,跟宏的定义情况进行条件编译。
当我们需要对一个文件整体选择如是否编译时,还需要修改对应的makefile文件,例如:
当我们需要对一个文件整体选择如是否编译时,还需要修改对应的makefile文件,例如:
我们选择是否要编译s3c2410_ts.c这个文件时,makefile会根据CONFIG_TOUCHSCREEN_S3C2410来决定是编译此文件,此宏是在Kconfig文件中定义,当我们配置完成后,会出现在.config及autconf中,至此,我们就完成了整个linux内核的编译过程。
最后我们会发现,整个linux内核配置过程中,留给用户的接口其实只有各层Kconfig、makefile文件以及对应的源文件。
比如我们如果想要给内核增加一个功能,并且通过make menuconfig控制其声称过程
首先需要做的工作是:修改对应目录下的Kconfig文件,按照Kconfig 语法增加对应的选项;
其次执行make menuconfig选择编译进内核或者不编译进内核,或者编译为模块,.config文件和autoconf.h文件会自动生成;
最后修改对应目录下的makefile文件完成编译选项的添加;
最后的最后执行make zImage命令进行编译。
以上内容摘自网络我们在linux内核裁剪过程中,进入内核所在目录,键入 make menuconfig 就会看到一堆的配置菜单,它们具体代表什么含义呢?我们该如何取舍呢?这里把近期收集到的一些信息
做一个总结。
make menuconfig 图形化的内核配置make mrproper -----删除不必要的文件和目录.
#make config(基于文本的最为传统的配置界面,不推荐使用)
#make menuconfig(基于文本选单的配置界面,字符终端下推荐使用)
#make xconfig(基于图形窗口模式的配置界面,Xwindow下推荐使用)
#make oldconfig(如果只想在原来内核配置的基础上修改一些小地方,会省去不少麻烦)
1、General setup
代码成熟度选项,它又有子项:
1.1、prompt for development and/or incomplete code/drivers
该选项是对那些还在测试阶段的代码,驱动模块等的支持。
一般应该选这个选项,除非你只是想使用 LINUX 中已经完全稳定的东西。
但这样有时对系统性能影响挺大。
1.2、Cross-compiler tool prefix
交叉编译工具前缀,例如:Cross-compiler tool prefix值为: (arm-linux-)
1.3、Local version - append to kernel release
内核显示的版本信息,填入 64字符以内的字符串,你在这里填上的字符口串可以用uname -a 命令看到。
1.4、Automatically append version information to the version string
自动在版本字符串后面添加版本信息,编译时需要有perl以及git仓库支持
1.5、Kernel compression mode (Gzip) --->
有四个选项,这个选项是说内核镜像要用的压缩模式,回车一下,可以看到gzip,bzip2,lzma,lxo,一般可以按默认的gzip,如果要用bzip2,lzma,lxo要先装上支持
1.6、Support for paging of anonymous memory (swap)
使用交换分区或交换文件来做为虚拟内存,一定要选上。
1.7、System V IPC
表示系统的进程间通信Inter Process Communication,它用于处理器在程序之间同步和交换信息,如果不选这项,很多程序运行不起来,必选。
1.8、POSIX Message Queues
POSIX标准的消息队列,它同样是一种IPC。
建议你最好将它选上
1.9、BSD Process Accounting
用户进程访问内核时将进程信息写入文件中。
通常主要包括进程的创建时间/创建者/内存占用等信息。
建议最好选上。
1.10、BSD Process Accounting version 3 file format
使用新的第三版文件格式,可以包含每个进程的PID和其父进程的PID,但是不兼容老版本的文件格式。
2解释进程统计文件使用V3格式。
注:V3格式是一种二进制的格式,如果想明码保存,则不应该选择此项。
1.11、Export task/process statistics through netlink (EXPERIMENTAL)
通过netlink接口向用户空间导出任务/进程的统计信息,netlink是一种在内核与用户应用之间进行双向数据传输的非常好的方式,用户应用使用标准的socket API就可以使用netlink提供的强大功能。
1.12、Enable per-task delay accounting (EXPERIMENTAL)
统计数据包含每个任务/进程的延时(y)
1.13、Enable extended accounting over taskstats (EXPERIMENTAL)
统计数据包含扩展任务读取数据和发送数据使用的时间(y)
1.14、Enable per-task storage I/O accounting (EXPERIMENTAL)
统计数据包括I/O设备产生的字节数(y)
1.15、Auditing support
审记支持,用于和内核的某些子模块同时工作,例如Security Enhanced Linux。
只有选择此项及它的子项,才能调用有关审记的系统调用。
支持审计功能,某些内核模块需要它(SELinux,Security-Enhanced Linux)(y)
1.16、Enable system-call auditing support
支持对系统调用的审计
开启系统调用的审计功能(y)
1.17、RCU Subsystem --->
非对称读写锁系统是一种新的kernel锁机制,适用于读多写少环境。
对于被RCU保护的共享数据结构,读者不需要获得任何锁就可以访问它,但写者在访问它时首先拷贝一个副本,然后对副本进行修改,最后使用一个回调(callback)机制在适当的时机把指向原来数据的指针重新指向新的被修改的数据。
(1)RCU Implementation (Tree-based hierarchical RCU) ---> RCU实现机制
(X) Tree-based hierarchical RCU:CONFIG_TREE_RCU=y基于树的等级划分
(2)[ ] Enable tracing for RCU:CONFIG_RCU_TRACE=y打开RCU追踪(3) (32) Tree-based hierarchical RCU fanout value
CONFIG_RCU_FANOUT=32RCU树的分支数
(4)[ ] Disable tree-based hierarchical RCU auto-balancing CONFIG_RCU_FANOUT_EXACT=y关闭RCU自动均衡功能
(5)[*] Accelerate last non-dyntick-idle CPU's grace periods CONFIG_RCU_FAST_NO_HZ=y提高非休眠CPU的使用时间
1.18、< > Kernel .config support
y|m把编译内核时使用的.config文件保存在编译好的内核中.
1.19、(17) Kernel log buffer size (16 => 64KB, 17 => 128KB)
17内核日志缓存的大小。
这个值是以2的平方取的,取值范围12-21
1.20、Control Group support --->
是一种进程管理机制,可以针对一组进程进行系统资源的分配和管理,可用于Cpusets,CFS(完全公平调度器),内存管理等子系统.此外,systemd与Docker/LXC等容器也依赖于它(不确定可以不选择)
Control Group support
[ ] Example debug cgroup subsystem //子系统调试例子
[*] Namespace cgroup subsystem //子系统命名空间
[*] Freezer cgroup subsystem
[ ] Device controller for cgroups
[*] Cpuset support
[*] Include legacy /proc/<pid>/cpuset file
[*] Simple CPU accounting cgroup subsystem
[*] Resource counters
[ ] Memory Resource Controller for Control Groups// cgroup内存资源控制器
[*] Group CPU scheduler --->
< > Block IO controller (NEW)
1.21、enable deprecated sysfs features to support old userspace tools
在某些文件系统上(比如debugfs)提供从内核空间向用户空间传递大量数据的接口
1.22、Kernel->user space relay support (formerly relayfs)
内核系统区和用户区进行传递通讯的支持。
这个选项在特定的文件系统中提供数据传递接口支持,它可以提供从内核空间到用户空间的大批量的数据传递工具和设施。
如果不清楚,选N。
1.23、-*- Namespaces support
命名空间支持,允许服务器为不同的用户信息提供不同的用户名空间服务[*] UTS namespace
通用终端系统的命名空间。
它允许容器,比如Vservers利用UTS命名空间来为不同的服务器提供不同的UTS。
如果不清楚,选N。
[*] IPC namespace
IPC命名空间,不确定可以不选
[*] User namespace (EXPERIMENTAL)
User命名空间,不确定可以不选
[*] PID Namespaces
PID命名空间,不确定可以不选
[*] Network namespace
1.24、Initial RAM filesystem and RAM disk (initramfs/initrd) support
初始RAM的文件和RAM磁盘(initramfs /initrd)支持(如果要采用initrd启动则要选择,否则可以不选)
1.25、Initramfs source file(s) //initrd已经被initramfs取代,如果你不明白这是什么意思,请
保持空白
1.26、Optimize for size
这个选项将在GCC命令后用“-Os” 代替“-O2″参数,这样可以得到更小的内核。
没必要选。
一个编译好的内核才7-10多M,大家不会少这么点空间吧。
选上了可能会出一些问题。
最好不选。
有时会产生错误的二进制代码。
1.27、Configure standard kernel features (for small systems) --->
配置标准的内核特性(为小型系统)。
这个选项可以让内核的基本选项和设置无效或者扭曲。
这是用于特定环境中的,它允许“非标准”内核。
你要是选它,你一定要明白自己在干什么。
这是为了编译某些特殊用途的内核使用的,例如引导盘系统。
--- 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才打开该选项
1.28、Kernel Performance Events And Counters --->
CPU 性能监听器,包括 CPU 同一时间执行指令数,cache miss 数,分支预测失败次数
-*- Kernel performance events and counters
[ ] Kernel performance counters (old config option) (NEW)
[ ] Debug: use vmalloc to back perf mmap() buffers (NEW) < === 调试特性关闭
1.29、Disable heap randomization
禁用随机heap(heap堆是一个应用层的概念,即堆对CPU是不可见的,它的实现方式有多种,可以由OS 实现,也可以由运行库实现,如果你愿意,你也可以在一个栈中来实现一个堆)
1.30、Choose SLAB allocator (SLUB (Unqueued Allocator)) --->
选择内存分配管理器(强烈推荐使用SLUB)
( ) SLAB //各种环境通用的内存分配管理器
(X) SLUB (Unqueued Allocator) //更加优秀的内存分配管理器
1.31、Profiling support
剖面支持,用一个工具来扫描和提供计算机的剖面图。
支持系统评测(对于大多数用户来说并不是必须的)
1.32、OProfile system profiling(上一项关闭,这一项就没有了)
OProfile评测和性能监控工具
1.33、Kprobes //调试内核除非开发人员,否则不选
1.34、GCOV-based kernel profiling --->
[ ] Enable gcov-based kernel profiling (NEW)
1.35、Slow work debugging through debugfs (NEW)
2、Enable loadable module support
2.1 Forced module loading
允许强制加载模块
2.2 Module unloading
允许卸载已经加载的模块
2.3 Forced module unloading
允许强制卸载正在使用中的模块(比较危险)这个选项允许你强行卸除模块,即使内核认为这不安全。
内核将会立即移除模块,而不管是否有人在使用它(用 rmmod -f 命令)。
这主要是针对开发者和冲动的用户提供的功能。
如果不清楚,选N。
2.4 Module versioning support
有时候,你需要编译模块。
选这项会添加一些版本信息,来给编译的模块提供独立的特性,以使不同的内核在使用同一模块时区别于它原有的模块。
这有时可能会有点用。
如果不清楚,选N。
允许使用其他内核版本的模块(可能会出问题)
2.5 Source checksum for all modules
为所有的模块校验源码,如果你不是自己编写内核模块就不需要它这个功能是为了防止你在编译模块时不小心更改了内核模块的源代码但忘记更改版本号而造成版本冲突。
如果不清楚,选N。
3、Enable the block layer
3、Enable the block layer
块设备支持,使用硬盘/USB/SCSI设备者必选这选项使得块设备可以从内核移除。
如果不选,那么 blockdev 文件将不可用,一些文件系统比如 ext3 将不可用。
这个选项会禁止 SCSI 字符设备和 USB 储存设备,如果它们使用不同的块设备。
选Y,除非你知道你不需要挂载硬盘和其他类似的设备。
不过此项无可选项
3.1 Support for large (2TB+) block devices and files
仅在使用大于2TB的块设备时需要
3.2 Block layer SG support v4
通用scsi块设备第4版支持
3.3 Block layer data integrity support
块设备数据完整性支持
3.4 IO Schedulers ---> //几乎默认
IO调度器I/O是输入输出带宽控制,主要针对硬盘,是核心的必須的东西。
这里提供了三个IO调度器。
<*> Deadline I/O scheduler
使用轮询的调度器,简洁小巧,提供了最小的读取延迟和尚佳的吞吐量,特别适合于读取较多的环境(比如数据库)Deadline I/O调度器简单而又紧密,在性能上和抢先式调度器不相上下,在一些数据调入时工作得更好。
至于在单进程I/O磁盘调度上,它的工作方式几乎和抢先式调度器相同,因此也是一个好的选择。
<*> CFQ I/O scheduler
使用QoS策略为所有任务分配等量的带宽,避免进程被饿死并实现了较低的延迟,可以认为是上述两种调度器的折中.适用于有大量进程的多用户系统CFQ调度器尝试为所有进程提供相同的带宽。
它将提供平等的工作环境,对于桌面系统很合适。
Default I/O scheduler (CFQ) --->
默认IO调度器我这样理解上面三个IO调度器:
抢先式是传统的,它的原理是一有响应,就优先考虑调度。
如果你的硬盘此时在运行一项工作,它也会暂停下来先响应用户。
期限式则是:所有的工作都有最终期限,在这之前必须完成。
当用户有响应时,它会根据自己的工作能否完成,来决定是否响应用户。
CFQ则是平均分配资源,不管你的响应多急,也不管它的工作量是多少,它都是平均分配,一视同仁的。
( ) Deadline
(X) CFQ
( ) No-op
4、Processor type and features (处理器类型及特点)
4.1[*] Tickless System (Dynamic Ticks) --->
非固定频率系统,这项技术能让新内核运行的更有效率,并且更省电。
4.2[*] High Resolution Timer Support不选
支持高频率时间发生器,如果硬件不兼容,则这个选项只会增大内核(大多数个人PC并没有这个)
4.3 Symmetric multi-processing support
对称多处理器支持,如果你有多个CPU或者使用的是多核CPU就选上.此时"Enhanced Real Time Clock Support"选项必须开启,"Advanced Power Management"选项必须关闭如果你选N,内核将会在单个或者多个CPU的机器上运行,但是只会使用一个CPU。
如果你选Y,内核可以在很多(但不是所有)单CPU的机器上运行,在这样的机器,你选N会使内核运行
得更快。
注意如果你选Y,然后在Processor family选项中选择“586〃 or “Pentium” ,内核将不能运行在486构架的机器上。
同样的,多CPU的运行于PPro构架上的内核也无法在 Pentium 系列的板上运行。
4.4 Support sparse irq numbering //支持稀有的中断编号(不选)
4.5 Enable MPS table
mps多处理器规范(不选)
4.6 Support for big SMP systems with more than 8 CPUs
4.7 Support for extended (non-PC) x86 platforms
支持非pc (不选)
4.8 AMD Elan
4.9 Moorestown MID platform (NEW)
4.10 RDC R-321x SoC
4.11 Support non-standard 32-bit SMP architectures 若4.7不选,这几个选项不用管。
自动隐藏
4.12[*] Single-depth WCHAN output 编译选项
4.13Paravirtualized 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)
增加虚拟机的运行效率
4.14[ ] Disable Bootmem code
4.15[ ] Memtest
这一选项使内核增加一个“memtest”(内核测试)的参数,这将允许设置memtest。
如果你不知道如何回答这个问题,选择N
4.16 Processor family (Pentium-Pro)处理器系列,请按照你实际使用的CPU选择这里是处
理器的类型。
这里的信息主要目的是用来优化。
为了让内核能够在所有X86构架的CPU上运行(虽然不是最佳速度),在这你可以选386。
内核不会运行在比你选的构架还要老的机器上。
比如,你选了Pentium构架来优化内核,它将不能在486构架上运行。
如果你不清楚,选386。
∙( ) 386
∙( ) 486
∙( ) 586/K5/5x86/6x86/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
4.17 Generic x86 support
这一选项针对x86系列的CPU使用更多的常规优化。
如果你在上面一项选的是i386、i586之类的才选这个通用x86支持,如果你的CPU能够在上述"Processor family"中找到就别选除了对上面你选择的X86 CPU进行优化,它还对更多类型X86 CPU的进行优化。
这将会使内核在其他的X86 CPU上运行得更好。
这个选项提供了对X86系列CPU最大的兼容性,用来支持一些少见的x86构架的CPU。
如果你的CPU能够在上面的列表中找到,就里就不用选了。
4.18 PentiumPro memory ordering errata workaround
旧的PentiumPro多处理器系统有勘误能力,可能会导致在少数的情况下,违反x86的排序标准内存操作。
启用此选项将尝试解决一些(但不是全部)此类问题,但将以spinlock 和内存为代价。
4.19 HPET Timer Support(HPET时钟支持)
允许内核使用HPET。
HPET是替代8254芯片的新一代定时器,i686及以上级别的主板都支持,可以安全的选上。
但是,HEPT只会在支持它的平台和BIOS上运行。
如果不支持,8254将会激活。
选N,将继续使用8254时钟。
4.20 Maximum number of CPUs (NEW)
支持的最大CPU数,每增加一个内核将增加8K体积
4.21 SMT (Hyperthreading) scheduler support
支持Intel的超线程(HT)技术超线程调度器在某些情况下将会对Intel Pentium 4 HT系列有较好的支持。
如果你不清楚,选N
4.22 Multi-core scheduler support
针对多核CPU进行调度策略优化多核调度机制支持,双核的CPU要选。
多核心调度在某些情况下将会对多核的CPU系列有较好的支持。
如果你不清楚,选N
4.23Preemption Model (Voluntary Kernel Preemption (Desktop)) ---> 内核抢占模式一些优先级很高的程序可以先让一些低优先级的程序执行,即使这些程序是在核心态下执行。
从而减少内核潜伏期,提高系统的响应。
当然在一些特殊的点的内核是不可抢先的,比如内核中的调度程序自身在执行时就是不可被抢先的。
这个特性可以提高桌面系统、实时系统的性能。
( ) No Forced Preemption (Server)
适合服务器环境的禁止内核抢占这是传统的LINUX抢先式模型,针对于高吞吐量设计。
它同样在很多时候会提供很好的响应,但是也可能会有较长的延迟。
如果你是建立服务器或者用于科学运算,选这项,或者你想要最大化内核的原始运算能力,而不理会调度上的延迟。
(X) Voluntary Kernel Preemption (Desktop)
适合普通桌面环境的自愿内核抢占这个选项通过向内核添加更多的“清晰抢先点”来减少内核延迟。
这些新的抢先点以降低吞吐量的代价,来降低内核的最大延迟,提供更快的应用程序响应。
这通过允许低优先级的进程自动抢
先来响应事件,即使进程在内核中进行系统调用。
这使得应用程序运行得更“流畅”,即使系统已经是高负荷运转。
如果你是为桌面系统编译内核,选这项。
( ) Preemptible Kernel (Low-Latency Desktop)
适合运行实时程序的主动内核抢占这个选项通过使所有内核代码(非致命部分)编译为“可抢先”来降低内核延迟。
这通过允许低优先级进程进行强制抢先来响应事件,即使这些进程正在进行系统调用或者未达到正常的“抢先点”。
这使得应用程序运行得更加“流畅”即使系统已经是高负荷运转。
代价是吞吐量降低,内核运行开销增大。
选这项如果你是为桌面或者嵌入式系统编译内核,需要非常低的延迟。
如果你要最快的响应,选第三项。
我认为万物是平衡的,低延迟意味着系统运行不稳定,因为过多来响应用户的要求,所以我选第二个。
4.24 [*]Reroute for broken boot IRQs
未知项:Local APIC support on uniprocessors(New)(默认不选)
4.25 [*] Machine Check / overheating reporting
让CPU检测到系统故障时通知内核,以便内核采取相应的措施(如过热关机等)
4.26 Intel MCE features //默认
4.27 AMD MCE features (NEW)//默认
4.28S upport for old Pentium 5 / WinChip machine checks //默认不选
4.29< > Machine check injector support(默认木选)
让CPU检测到系统故障时通知内核,以便内核采取相应的措施(如过热关机等) 4.30< > Toshiba Laptop support
东芝笔记本模块支持
4.31< > Dell laptop support
Dell笔记本模块支持
4.32[*] Enable X86 board specific fixups for reboot不选
修正某些旧x86主板的重起bug,这种主板基本绝种了
4.33 dev/cpu/microcode - microcode support
是否支持Intel IA32架构的CPU。
这个选项将让你可以更新Intel IA32系列处理器的微代码,显然你需要到网上去下载最新的代码,LINUX不提供这些代码。
当然你还必须在文件系统选项中选择/dev file system support才能正常的使用它。
如果你把它译为模
块 ,它将是 microcode。
IA32主要用于高于4GB的内存。
详见下面的“高内存选项”。
使用不随Linux内核发行的IA32微代码,你必需有IA32微代码二进制文件,仅对Intel的CPU 有效。
4.34 Intel microcode patch loading support
4.35 AMD microcode patch loading support
4.36 /dev/cpu/*/msr - Model-specific register support
是否打开CPU特殊功能寄存器的功能。
这个选项桌面用户一般用不到,它主要用在Intel的嵌入式CPU中的,这个寄存器的作用也依赖与不同的CPU类型而有所不同,一般可以用来改变一些CPU原有物理结构的用途,但不同的CPU用途差别也很大。
在多cpu系统中让特权CPU访问x86的MSR寄存器。
4.37 /dev/cpu/*/cpuid - CPU information support
是否打开记录CPU相关信息功能。
这会在/dev/cpu中建立一系列的设备文件,用以让过程去访问指定的CPU。
能从/dev/cpu/x/cpuid获得CPU的唯一标识符(CPUID)。
4.38 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
4.39 Memory model (Flat Memory) --->
一般选"Flat Memory",其他选项涉及内存热插拔(X) Flat Memory (平坦内存模式)这个选项允许你改变内核在内部管理内存的一些方式。
大多数用户在这只会有一个选项:Flat Memory。
这是普遍的和正确的选项。
一些用户的机器有更高级的特性,比如 NUMA。