1、linux内核裁剪的具体过程和方法 内核功能: 能够完成系统的基本功能,上网,收发邮件等,支持xwindows图形界面。 在menuconfig中配置: 详细介绍内核配置选项及删改情况 第一部分:全部删除 Code maturity level options - 代码成熟等级选项 Prompt for development and/or incomplete code/drivers 默认情况下是选择的,这将会在设置界面中显示还在开发或者还没有完成的代码与驱动.不选。 第二部分 :除以下选项,其它全部删除 General setup System V IPC (IPC:Inter Proc
2、ess Communication)是组系统调用及函数库,它能让程序彼此间同步进行交换信息。某些程序以及DOS模拟环境都需要它。为进程提供通信机制,这将使系统中各进程间有交换信息与保持同步的能力。有些程序只有在选Y的情况下才能运行,所以不用考虑,这里一定要选。 第三部分:除以下选项,其它全部删除 Loadable module support - 可引导模块支持 建议作为模块加入内核 Enable loadable module support 这个选项可以让你的内核支持模块,模块是什么呢?模块是一小段代码,编译后可在系统内核运行时动态的加入内核,从而为内核增加一些特性或是对某种硬件进行支持。
3、一般一些不常用到的驱动或特性可以编译为模块以减少内核的体积。在运行时可以使用modprobe命令来加载它到内核中去(在不需要时还可以移除它)。一些特性是否编译为模块的原则是,不常使用的,特别是在系统启动时不需要的驱动可以将其编译为模块,如果是一些在系统启动时就要用到的驱动比如说文件系统,系统总线的支持就不要编为模块了,否在无法启动系统。 Automatic kernel module loading 一般情况下,如果我们的内核在某些任务中要使用一些被编译为模块的驱动或特性时,我们要先使用modprobe命令来加载它,内核才能使用。不过,如果你选择了这个选项,在内核需要一些模块时它可以自动调用m
4、odprobe命令来加载需要的模块,这是个很棒的特性,当然要选Y喽。 第四部分:全部删除 Block layer-块设备 第五部分:除以下选项,其它全部删除 Processor type and features - 处理器类型 Subarchitecture Type (PC-compatible) - 这选项的主要的目的,是使Linux可以支持多种PC标准,一般我们使用的PC机是遵循所谓IBM兼容结构(pc/at)。这个选项可以让你选择一些其它架构。我们一般选择PC-compatible就可以了。 Processor family(386) : 它会对每种CPU做最佳化,让它跑的好又快,一
5、般来说,你是什么型号的就选什么型号的就好。我选的是386,这样内核会省下不少空间 第六部分:除以下选项,其它全部删除 Power management options (ACPI, APM) - 电源管理选项 Power Management Debug Support 电源管理的调试信息支持,如果不是要调试内核有关电源管理部份,请不要选择这项。 ACPI Support -高级电源接口配置支持,如果BIOS支持,建议选上这项 Button 这个选项用于注册基于电源按钮的事件,比如power, sleep等,当你按下按钮时事件将发生,一个守护程序将读取/proc/acpi/event,并执行用
6、户在这些事件上定义的动作比如让系统关机。可以不选择,根据自己的需求。 第七部分:除以下选项,其它全部删除 Bus options (PCI, PCMCIA, EISA, MCA, ISA) - 总线选项 PCI support PCI access mode (Any) - PCI外围设备配置,强列建议选Any,系统将优先使用MMConfig,然后使用BIOS,最后使用Direct检测PCI设备。 第八部分:除以下选项,其它全部删除 Executable file formats - Kernel support for ELF binaries ELF是开放平台下最常用的二进制文件,它支持不
7、同的硬件平台。一定要选。 第九部分:除以下选项,其它全部删除 Networking Networking options - Unix domain sockets TCP/IP networking 第十部分:除以下选项,其它全部删除 Device Drivers -设备驱动 Block devices- Compaq SMART2 support Compaq Smart Array 5xxx support Loopback device support 大部分的人这一个选项都选N,因为没有必要。但是如果你要mount iso文件的话,你得选上Y。这个选项的意思是说,可以将一个文件挂成一
8、个文件系统。如果要烧光盘片的,那么您很有可能在把一个文件烧进去之前,看看这个文件是否符合IS09660的文件系统的内容,是否符合您的需求。而且,可以对这个文件系统加以保护。不过,如果您 想做到这点的话,您必须有最新的mount程序,版本是在2.5X版以上的。而且如果您希望对这个文件系统加上保护,则您必须有des.1.tar.gz这个程序。注意:此处与网络无关。建议编译成模块 RAM disk support SCSI device support - 里面有关于USB支持的,要选择 SCSI device support USB要用,必须选择 legacy /proc/scsi/ suppor
9、t USB要用,必须选择 SCSI disk support USB要用,必须选择 SCSI Low-level drivers Serial ATA(SATA) support Intel PIIX/ICH SATA support 这个必须选择,否则无法产生引导文件 Via SATA support Networking device support - 这个下面是选网卡驱动,一定要选 Ethernet(1000mbit)-我的电脑是千兆网卡所以就选这个 broadcom Tigon3support Input device support - 这个里面要设置你的鼠标键盘什么的 Provi
10、de legacy /dev/psaux device Graphics support - Support for frame buffer devices 支持Frame buffer的,一定要选择 USB support - USB device filesystem 这个好象是用U盘必须的 EHCI HCD (USB 2.0) support 有usb2.0就选上把,编译成模块 OHCI HCD support 必须选择,编译成模块 UHCI HCD (most Intel and VIA) support 必须选择,编译成模块 USB Mass Storage support 用U盘
11、必须选择 USB Human Interface Device (full HID) support 里面选择usb鼠标和usb键盘,如果你有一定选上这个必需选 HID input layer support 应该选择 /dev/hiddev raw HID device support如果这里有USB键盘和鼠标选项,一定要选择 第十一部分:除以下选项,其它全部删除 file systems -文件系统 Second extended fs support Ext2 extended attributes Ext2 POSIX Access Control Lists Ext2 Securit
12、y Labels Ext3 journalling file system support Ext3 extended attributes Ext3 POSIX Access Control Lists Ext3 Security Labels 以上这些肯定是要选择的,linux的标准文件系统 Kernel automounter support 内核自动挂载的,当然要选 Kernel automounter version 4 support (also supports v3) 当然要选 DOS/FAT/NT Filesystems - DOS FAT fs support MSDOS
13、fs support VFAT (Windows-95) fs support NTFS file system support Native language support语言支持,这里就支持英语和汉语就行了,不多说了 NLS ISO 8859-1 必须选择,这个是关于U盘挂载的。 CD-ROM/DVD Filesystems - 这个是关于挂载ISO文件的,用的话就选。 ISO 9660 CDROM file system support 第十二部分: 全部删除 Instrumentation support 第十三部分:全部删除 Kernel hacking -破解核心?可不是当骸客啦
14、,不选 第十四部分:全部删除 Security options - 第十五部分:全部删除 Cryptographic options -这是核心支持加密的选项 第十六部分:全部删除 Library routines - =内容目录 1. Code maturity level options 2 2. General setup 常规安装选项 2 3. Loadable module support 引导模块支持 5 4. Block layer 6 5. Processor type and features 处理器类型及特性 8 6. Power management options (A
15、CPI, APM) 17 7. Bus options (PCI, PCMCIA, EISA, MCA, ISA) 总线选项 22 8. Executable file formats 24 9. Networking support 网络支持。 25 10. Device Drivers 设备驱动 47 11. File systems 文件系统 82 12. Instrumentation Support 测试用的支持项目 86 13. Kernel hacking 内核调试。 86 14. Security options 安全选项。 88 15. Cryptographic optio
16、ns 密码选项。 88 16. Library routines 常规的库。 95 说明1: 文字中的Y表示选择进内核。M表示编成模块。N表示不选择。有的只能选Y,有的只能选M。 在make menuconfig 下,表示Y,M表示M,空白表示N。 make xconfig下, 表示Y, 表示M,空白表示N。 说明2: 菜单中,有的选项你选了Y才出现,有的选了Y,它反而不会出现。有的选项根本不会提供选择。所以我提供的菜单项应该不是最完整的设置选项。如果你碰到了新的选项,你可以认真看它的英文说明,或者通过上网搜索、在论坛提问等方式来了解它。 1. Code maturity level opti
17、ons 代码完成等级选项 1.1. Prompt for development and/or incomplete code/drivers 对开发中的或者未完成的代码和驱动进行提示。 LINUX下的很多东西,比如网络设备、文件系统、网络协议等等,它们的功能、稳定性、或者测试等级等等还不能够符合大众化的要求,还处于开发之中。这就是所谓的阿尔法版本:最初开发版本;接下来的是BETA版本,公开测试版本。如果这是阿尔法版本,那么开发者为了避免收到诸如“为何这东西不工作”的信件的麻烦,常常不会让它发布出去。但是,积极的测试和使用阿尔法版本对软件的开发是非常好的。你只需要明白它未必工作得很好,在某些情
18、况有可能会出问题。汇报详细的出错情况对开发者很有帮助。 这个选项同样会让一些老的驱动的可用。很多老驱动在将来的内核中已经被代替或者被移除。除非你想要帮助软件的测试,或者开发软件,或者你的机器需要这些特性,否则你可以选N,那样你会在配置菜单中得到较少的选项。如果你选了Y,你将会得到更多的阿尔法版本的驱动和代码的配置菜单。 2. General setup 常规安装选项 2.1. Local version - append to kernel release 在你的内核后面加上一串字符来表示版本。这些字符在你使用uname -a 命令时会显示出来。你的字符最多不能超过64位。 2.2. Auto
19、matically append version information to the version string (LOCALVERSION_AUTO) 自动生成版本信息。这个选项会自动探测你的内核并且生成相应的版本,使之不会和原先的重复。这需要Perl的支持。 由于在编译的命令make-kpkg 中我们会加入- - append-to-version 选项来生成自定义版本,所以这里选N。 2.3. Support for paging of anonymous memory (swap) 这个选项将使你的内核支持虚拟内存,也就是让你的计算机好象拥有比实际内存更多的内存空间用来执行很大的程
20、序。这个虚拟内存在LINUX中就是SWAP分区。除非你不想要SWAP分区,否则这里必选Y。 2.4. System V IPC (IPC:Inter Process Communication) 中间过程连接是一组功能和系统调用,使得进程能够同步和交换信息。这通常来说是好事,有一些程序只有你选择了Y才能运行 。特别地,你想在LINUX下运行 DOS仿真程序,你必须要选Y。 你可以用info ipc 命令来了解IPC。 一定要选Y。 2.4.1. IPC Namespaces (IPC_NS) IPC命名空间,命名空间的作用是区别同名的东西,就比如李宁和张宁,都叫“宁”,加个姓才能区分。这个选项
21、也是为不同的服务器提供IPC的多命名,达到一个IPC提供多对象支持的目的。不清楚的话选N。 2.5. POSIX Message Queues 可移植操作系统接口信息队列 可移植操作系统接口信息队列是IPC的一部分,在通信队列中有较高的优先权来保持通信畅通。如果你想要编译和运行在Solaris操作系统上写的POSIX信息队列程序,选Y,同时你还需要 mqueue 库来支持这些特性。它是作为一个文件系统存在(mqueue),你可以mount它。为保证以后的不同程序的协同稳定,如果不清楚,选Y。 2.6. BSD Process Accounting BSD进程统计 如果你选Y,用户级别的程序就可
22、以通过特殊的系统调用方式来通知内核把进程统计信息记录到一个文件,当这个进程存在的时候,信息就会被内核记录进文件。信息通常包括建立时间、所有者、命令名称、内存使用、控制终端等。这对用户级程序非常有用。所以通常选Y是一个好主意。 2.6.1. BSD Process Accounting version 3 file format 选Y,统计信息将会以新的格式(V3)写入,这格式包含进程ID和父进程。注意这个格式和以前的 v0/v1/v2 格式不兼容,所以你需要升级相关工具来使用它。 2.7. Export task/process statistics through netlink (EXPE
23、RIMENTAL) 处于实验阶段的功能。通过通用的网络输出工作/进程的相应数据,和BSD不同的是,这些数据在进程运行的时候就可以通过相关命令访问。和BSD类似,数据将在进程结束时送入用户空间。如果不清楚,选N。 2.8. UTS Namespaces 通用终端系统的命名空间。它允许容器,比如Vservers利用UTS命名空间来为不同的服务器提供不同的UTS。如果不清楚,选N。 2.9. Auditing support 审计支持(AUDIT) 允许审计的下层能够被其他内核子系统使用,比如SELinux,它需要这个来进行登录时的声音和视频输出。没有 CONFIG_AUDITSYSCALL 时(即
24、下一个选项)无法进行系统调用。 2.9.1. Enable system-call auditing support (AUDITSYSCALL) 允许系统独立地或者通过其他内核的子系统,调用审计支持,比如SELinux。要使用这种审计的文件系统来查看特性,请确保 INOTIFY 已经被设置。 上一项的子选项,两项要选就都选。我并不清楚审计的意义,可能是为了调用其他内核的东西吧。所以就都选了,因为我机器上还有个官方2.6.15-27内核。 2.10. Kernel .config support 这个选项允许.config文件(即编译LINUX时的配置文件)保存在内核当中。 它提供正在运行中的
25、或者还在硬盘中的内核的相关配置选项。可以通过内核镜像文件 kernel image file 用命令 script scripts/extract-ikconfig 来提取出来,作为当前内核重编译或者另一个内核编译的参考。如果你的内核在运行中,可以通过/proc/config.gz文件来读取。下一个选项提供这项支持。 看起来好像是一个不错的功能,可以把编译时的 .config文件保存在内核中,以供今后参考调用。用来重编译和编译其他的内核的时候可以用上。你是一个编译内核的狂人的话,这项要选上(比如我,不过我总是会备份所有的 .config 文件)。 2.10.1. Enable access t
26、o .config through /proc/config.gz 上一项的子项,可以通过/proc/config.gz 访问当前内核的.config 。新功能,上一项选的话这个就选上吧。 2.11. Cpuset support 多CPU支持。这个选项可以让你建立和管理CPU集群,它可以动态地将系统分割在各个CPU和内存节点中,在各个节点是独立运行的。这对大型的系统尤其有效。 如果不清楚,选N。 2.12. Kernel-user space relay support (formerly relayfs) 内核系统区和用户区进行传递通讯的支持。这个选项在特定的文件系统中提供数据传递接口支持
27、,它可以提供从内核空间到用户空间的大批量的数据传递工具和设施。 如果不清楚,选N。 2.13. Initramfs source file(s) 没有可选项。 2.14. Optimize for size (Look out for broken compilers!) 这个选项将在GCC命令后用 -Os 代替 -O2参数,这样可以得到更小的内核。警告:某些GCC版本会导致错误。如果有错,请升级你的GCC。 如果不清楚,选N。 这是优化内核大小的功能,没必要选。一个编译好的内核才710多M,大家不会少这么点空间吧。选上了可能会出一些问题。最好不选。 2.15. Configure stand
28、ard kernel features (for small systems) 这个选项可以让内核的基本选项和设置无效或者扭曲。这是用于特定环境中的,它允许“非标准”内核。你要是选它,你一定要明白自己在干什么。 这是为了编译某些特殊用途的内核使用的,例如引导盘系统。通常你可以不选择这一选项,你也不用关心他的子选项。 3. Loadable module support 引导模块支持 3.1. Enable loadable module support 这个选项可以让你的内核支持模块,模块是什么呢?模块是一小段代码,编译后可在系统内核运行时动态的加入内核,从而为内核增加一些特性或是对某种硬件进
29、行支持。一般一些不常用到的驱动或特性可以编译为模块以减少内核的体积。在运行时可以使用modprobe命令来加载它到内核中去(在不需要时还可以移除它)。一些特性是否编译为模块的原则是,不常使用的,特别是在系统启动时不需要的驱动可以将其编译为模块,如果是一些在系统启动时就要用到的驱动比如说文件系统,系统总线的支持就不要编为模块,否则无法启动系统。在启动时不用到的功能,编成模块是最有效的方式。你可以查看MAN手册来了解:modprobe, lsmod, modinfo, insmod 和 rmmod. 如果你选了这项,你可能需要运行 make modules_install 命令来把模块添加到/li
30、b/modules/目录下,以便 modprobe 可以找到它们。 如果不清楚,选Y。 3.2. Module unloading 这个选项可以让你卸载不再使用的模块,如果不选的话你将不能卸载任何模块(有些模块一旦加载就不能卸载,不管是否选择了这个选项)。 如果不清楚,选Y。 3.2.1. Forced module unloading 这个选项允许你强行卸除模块,即使内核认为这不安全。内核将会立即移除模块,而不管是否有人在使用它(用rmmod -f 命令)。这主要是针对开发者和冲动的用户提供的功能。 如果不清楚,选N。 3.3. Module versioning support (MODV
31、ERSIONS) 有时候,你需要编译模块。有时候,你需要编译模块。选这项会添加一些版本信息,来给编译的模块提供独立的特性,以使不同的内核在使用同一模块时区别于它原有的模块。这有时可能会有点用。 如果不清楚,选N。 3.4. Source checksum for all modules 这个功能是为了防止你在编译模块时不小心更改了内核模块的源代码但忘记更改版本号而造成版本冲突。 如果不清楚,选N。 3.5. Automatic kernel module loading 允许内核自动加载模块。一般情况下,如果我们的内核在某些任务中要使用一些被编译为模块的驱动或特性时,我们要先使用modprob
32、e命令来加载它,内核才能使用。不过,如果你选择了这个选项,在内核需要一些模块时它可以自动调用modprobe命令来加载需要的模块。 如果不清楚,选Y。 4. Block layer 块设备。 4.1. Enable the block layer (BLOCK) 这选项使得块设备可以从内核移除。如果不选,那么 blockdev 文件将不可用,一些文件系统比如 ext3 将不可用。这个选项会禁止 SCSI 字符设备和 USB 储存设备,如果它们使用不同的块设备。 选Y,除非你知道你不需要挂载硬盘和其他类似的设备。不过此项无可选项。 4.1.1. Support for Large Block D
33、evices (LBD) 如果你要用大于2TB的硬盘,选这个。 4.1.2. Support for tracing block io actions 对块设备进行跟踪和分析的功能。 4.1.3. Support for Large Single Files (LSF) 大文件支持。如果你准备建的文件大于2TB,选这个。 4.1.4. IO Schedulers 磁盘IO调度器 IO是输入输出带宽控制,主要针对硬盘,是核心的必須的东西。这里提供了三个IO调度器。 4.1.4.1. Anticipatory I/O scheduler 抢先式 I/O 调度方式是默认的磁盘调度方式。它对于大多数环
34、境通常是比较好的选择。但是它和Deadline I/O 调度器相比有点大和复杂,它有时在数据调入时会比较慢。 4.1.4.2. Deadline I/O scheduler Deadline IO调度器简单而又紧密,在性能上和抢先式调度器不相上下,在一些数据调入时工作得更好。至于在单进程IO磁盘调度上,它的工作方式几乎和抢先式调度器相同,因此也是一个好的选择。 看介绍这个好像比上面的更好,可以试试。不过按照我的平衡观点,好东西都会带来问题。 4.1.4.3. CFQ I/O scheduler CFQ调度器尝试为所有进程提供相同的带宽。它将提供平等的工作环境,对于桌面系统很合适。 4.1.4.
35、4. Default I/O scheduler 选择默认的IO调度器 我选了Anticipatory I/O scheduler。 我这样理解上面三个IO调度器:抢先式是传统的,它的原理是一有响应,就优先考虑调度。如果你的硬盘此时在运行一项工作,它也会暂停下来先响应用户。 期限式则是:所有的工作都有最终期限,在这之前必须完成。当用户有响应时,它会根据自己的工作能否完成,来决定是否响应用户。 CFQ则是平均分配资源,不管你的响应多急,也不管它的工作量是多少,它都是平均分配,一视同仁的。 5. Processor type and features 处理器类型及特性 5.1. Symmetric
36、 multi-processing support (SMP) 对称多处理器支持。 这将支持有多CPU的系统。如果你的系统只有一个CPU,选N。反之,选Y。 如果你选N,内核将会在单个或者多个CPU的机器上运行,但是只会使用一个CPU。如果你选Y,内核可以在很多(但不是所有)单CPU的机器上运行,在这样的机器,你选N会使内核运行得更快。 注意如果你选Y,然后在Processor family选项中选择586 or Pentium ,内核将不能运行在486构架的机器上。同样的,多CPU的运行于PPro构架上的内核也无法在 Pentium 系列的板上运行。 使用多CPU机器的人在这里选Y,通常也会
37、在后面的选项“Enhanced Real Time Clock Support”中选Y。如果你在这选Y,Advanced Power Management 的代码将不可用。 如果不清楚,选N。 5.2. Subarchitecture Type 子构架类型 5.2.1. PC-compatible 选这个如果你的机器是标准PC 5.2.2. AMD Elan 注意,如果你是 K6/Athlon/Opteron处理器不要选这个 5.2.3. Voyager 5.2.4. NUMAQ (IBM/Sequent) 5.2.5. Summit/EXA (IBM x440) 5.2.6. SGI 320
38、/540 (Visual Workstation) 5.2.7. Generic architecture (Summit, bigsmp, ES7000, default) 5.2.8. Support for Unisys ES7000 IA32 series 5.3. Processor family 处理器类型。针对自己的CPU类型,选取相应的选项。 这里是处理器的类型。这里的信息主要目的是用来优化。为了让内核能够在所有X86构架的CPU上运行(虽然不是最佳速度),在这你可以选386。 内核不会运行在比你选的构架还要老的机器上。比如,你选了Pentium构架来优化内核,它将不能在486
39、构架上运行。 如果你不清楚,选386。 5.3.1. - 386 5.3.2. - 486 5.3.3. - 586 5.3.4. - Pentium-Classic 5.3.5. - Pentium-MMX 5.3.6. - Pentium-Pro 5.3.7. - Pentium-II 5.3.8. - Pentium-III 5.3.9. - Pentium-4 5.3.10. - K6, K6-II and K6-III 5.3.11. - Athlon K7 (Athlon/Duron/Thunderbird). 5.3.12. -Opteron/Athlon64/Hammer/K8
40、 5.3.13. - Crusoe 5.3.14. - Efficeon 5.3.15. - Winchip-C6 5.3.16. - Winchip-2 5.3.17. - Winchip-2A 5.3.18. - GeodeGX1 5.3.19. - Geode GX/LX 5.3.20. - CyrixIII/VIA C3 5.3.21. - VIA C3-2 Nehemiah. 5.4. Generic x86 support 通用X86支持。 除了对上面你选择的X86 CPU进行优化,它还对更多类型X86 CPU的进行优化。这将会使内核在其他的X86 CPU上运行得更好。 对于供应商
41、来说,他们非常需要这些功能,因为他们需要更通用的优化支持。 这个选项提供了对X86系列CPU最大的兼容性,用来支持一些少见的x86构架的CPU。如果你的CPU能够在上面的列表中找到,就里就不用选了。 5.5. HPET Timer Support HPET时钟支持 允许内核使用 HPET 。HPET 是代替当前8254的下一代时钟,全称叫作高精度事件定时器。你可以安全地选Y。但是,HEPT只会在支持它的平台和BIOS上运行。如果不支持,8254将会激活。 选N,将继续使用8254时钟。 5.6. Maximum number of CPUs (2-255) 设置最高支持的CPU数,无法选择。我
42、的显示为8。 5.7. SMT (Hyperthreading) scheduler support 超线程调度器支持 超线程调度器在某些情况下将会对 Intel Pentium 4 HT系列有较好的支持。 如果你不清楚,选N。 5.8. Multi-core scheduler support 多核调度机制支持,双核的CPU要选。 多核心调度在某些情况下将会对多核的CPU系列有较好的支持。 如果你不清楚,选N。 5.9. Preemptible Kernel 抢先式内核。 一些优先级很高的程序可以先让一些低优先级的程序执行,即使这些程序是在核心态下执行。从而减少内核潜伏期,提高系统的响应。当
43、然在一些特殊的点的内核是不可抢先的,比如内核中的调度程序自身在执行时就是不可被抢先的。这个特性可以提高桌面系统、实时系统的性能。 下面有三个选项: 5.9.1. No Forced Preemption (Server) 非强迫式抢先。 这是传统的LINUX抢先式模型,针对于高吞吐量设计。它同样在很多时候会提供很好的响应,但是也可能会有较长的延迟。 如果你是建立服务器或者用于科学运算,选这项,或者你想要最大化内核的原始运算能力,而不理会调度上的延迟。 5.9.2. Voluntary Kernel Preemption (Desktop) 自动式内核抢先 这个选项通过向内核添加更多的“清晰抢先
44、点”来减少内核延迟。这些新的抢先点以降低吞吐量的代价,来降低内核的最大延迟,提供更快的应用程序响应。这通过允许低优先级的进程自动抢先来响应事件,即使进程在内核中进行系统调用。这使得应用程序运行得更“流畅”,即使系统已经是高负荷运转。 如果你是为桌面系统编译内核,选这项。 5.9.3. Preemptible Kernel (Low-Latency Desktop) 可抢先式内核(低延迟桌面) 这个选项通过使所有内核代码(非致命部分)编译为“可抢先”来降低内核延迟。 这通过允许低优先级进程进行强制抢先来响应事件,即使这些进程正在进行系统调用或者未达到正常的“抢先点”。这使得应用程序运行得更加“流
45、畅”即使系统已经是高负荷运转。代价是吞吐量降低,内核运行开销增大。 选这项如果你是为桌面或者嵌入式系统编译内核,需要非常低的延迟。 如果你要最快的响应,选第三项。我认为万物是平衡的,低延迟意味着系统运行不稳定,因为过多来响应用户的要求,所以我选第二个。 5.10. Preempt The Big Kernel Lock 抢先式大内核锁(早期Linux用于支持SMP系统时所采用的非细粒度锁) 这个选项通过让大内核锁变成“可抢先”来降低延迟。 选Y如果你在构建桌面系统。如果你不清楚,选N。 5.11. Machine Check Exception 机器例外检查 机器例外检查允许处理器在检测到问题
46、(比如过热、组件错误)时通知内核。内核根据问题的严重程度来决定下一步行为,比如在命令行上打印告警信息,或者关机。你的处理器必须是 Pentium或者更新版本才能支持这个功能。 用cat /proc/cpuinfo来检测你的 CPU是否有mce 标志。 注意一些老的 Pentium 系统存在设计缺陷,会提供假的MCE事件,所以在所有P5处理器上MCE被禁用,除非在启动选项上明确 mce参数。同样地,如果MCE被编译入内核并在非标准的机器上导致错误,你可以用nomce启动参数来禁用MCE。 MCE功能会自动忽视非MCE处理器,比如386和486,所以几乎所有人都可以在这里选Y。 5.11.1. Check for non-fatal errors on AMD Athlon/Duron / Intel Pentium 4 检测AMD Athlon/Duron / Intel Pentium 4的非致命错误 允许这项