http://www.jinbuguo.com/kernel/longterm-3_10-options.html
Linux-3.10-x86_64 内核配置选项简介
作者:金步国
版权声明
本文作者是开源理念的坚定支持者,因此本文虽然不是软件,但遵循开源精神。
- 无担保:本文作者不保证作品内容准确,也不承担使用本文件造成的任何损失。
- 自由使用:任何人都可以自由使用阅读/链接/打印本文档无任何附加条件。
- 名誉权:任何人都可以自由转载/引用/再创作但必须保留作者的签名并注明出处。
其他作品
本文作者非常愿意与他人分享劳动成果。如果您对我的其他翻译作品或技术文章感兴趣,您可以在以下位置查看现有作品集:
联系方式
由于作者水平有限,无法保证作品内容的准确性。如果你在作品中发现了错误(即使是错误的单词),请写信指出,我将虚心接受任何提高作品质量的建议。
- Email(QQ):70171448在QQ邮箱
Gentoo Linux Gentoo内核(gentoo-sources)特有的选项
- Gentoo Linux support CONFIG_GENTOO_LINUX
- 选择"Y"之后会自动选择那些。Gentoo内核选项必须在环境中打开,以避免用户遗漏一些必要的选项,减少用户配置内核的难度.建议选"Y".
-
- Linux dynamic and persistent device naming (userspace devfs) support CONFIG_GENTOO_LINUX_UDEV
- 目前这个项目的作用只是开放CONFIG_TMPFS和CONFIG_DEVTMPFS所依赖的选项.CONFIG_TMPFS是为了在"/dev/shm","/run","/sys/fs/cgroup"挂载在三个目录中tmpfs文件系统,CONFIG_DEVTMPFS是为了在"/dev"目录挂载devtmpfs文件系统.建议选"Y".
Support for init systems,system and service managers - "init"系统(系统与服务管理器)."init"内核启动的第一个用户空间程序(PID=1),也是所有用户态过程"大总管"([提示]所有核态过程的大总管都是PID=2的[kthreadd]).
-
- OpenRC,runit and other script based systems and managers CONFIG_GENTOO_LINUX_INIT_SCRIPT
- OpenRC是Gentoo传统的"init"基于 SysVinit传统的脚本启动技术.选"Y"后,所有OpenRC目前只有必要的内核选项(CONFIG_BINFMT_SCRIPT)将自动选择.不确定的选"Y". systemd CONFIG_GENTOO_LINUX_INIT_SYSTEMD
- 虽然备受争议,但 systemd确实是目前风头最强的。"init"系统,大有在Linux世界统一江湖的霸气和潜力.你只打算 从OpenRC迁移到systemd时选"Y".选"Y"之后,所有内核都被 systemd自动选择所依赖的选项,包括 systemd总共有20个建议(而非必要)选项. systemd官方 README文件还列出了必要/推荐/可选的内核选项.
- 64-bit kernel CONFIG_64BIT
- .本文仅讲述x86_64(AMD64)平台的核心编译,所以这是必要的选择.
General setup 常规设置
- Cross-compiler tool prefix CONFIG_CROSS_COMPILE
- "arm-linux-"相当于使用"make CROSS_COMPILE=arm-linux-"进行编译).除非您想在默认情况下自动交叉编译,否则不要使用此选项. Local version - append to kernel release CONFIG_LOCALVERSION
- 在核版本后面添加自定义版本字符串(最大64字符),可以使用"uname -a"命令见 Automatically append version information to the version string CONFIG_LOCALVERSION_AUTO
- (CONFIG_LOCALVERSION)后面添加版本信息(类似)"-gxxxxxxxx"格式),需要有perl以及git仓库支持 Kernel compression mode
- 内核镜像的压缩格式可选Gzip/Bzip2/LZMA/XZ/LZO推荐使用格式之一XZ格式.你的系统中需要有相应的压缩工具. Default hostname CONFIG_DEFAULT_HOSTNAME
- 设置默认主机名称,默认值为"(none)".用户可以随后使用系统调用sethostname()修改主机名称. Support for paging of anonymous memory (swap) CONFIG_SWAP
- 使用交换分区或者交换文件来做为虚拟内存 System V IPC CONFIG_SYSVIPC
- System V 进程间通信(IPC)支持,用于进程间同步和交换数据,许多程序需要这个功能.选"Y",除非你确实知道自己在做什么 POSIX Message Queues CONFIG_POSIX_MQUEUE
- POSIX消息队列是POSIX IPC的一部分,如果你想编译和运行那些使用"mq_*"系统调用的程序(比如为Solaris开发的程序),就必须开启此选项.POSIX消息队列可以作为"mqueue"文件系统挂载以方便用户对队列进行操作.不确定的选"Y". open by fhandle syscalls CONFIG_FHANDLE
- 用户程序可以使用句柄(而非文件名)来追踪文件(使用open_by_handle_at(2)/name_to_handle_at(2)系统调用),即使某文件被重命名,用户程序依然可定位那个文件.此特性有助于实现用户空间文件服务器(userspace file server).建议选"Y",因为systemd和udev依赖于它. Auditing support CONFIG_AUDIT
- 内核审计(跟踪每个进程的活动情况)支持,某些安全相关的内核子系统(例如SELinux)需要它.但是它会与systemd冲突,所以在使用systemd的系统上必须关闭.
-
-
Enable system-call auditing support
CONFIG_AUDITSYSCALL
- 对系统调用进行审计.既可独立使用,也可被其他内核子系统(例如SELinux)使用. Make audit loginuid immutable CONFIG_AUDIT_LOGINUID_IMMUTABLE
- 审计时使用固定的loginuid.在使用 systemd之类的系统上应该开启(login服务由init进程负责重启),在使用 SysVinit或 Upstart之类的系统上应该关闭(login服务由系统管理员手动重启). OpenRC就是一个基于SysVinit的系统.
IRQ subsystem
- IRQ(中断请求)子系统
-
-
Expose hardware/virtual IRQ mapping via debugfs
CONFIG_IRQ_DOMAIN_DEBUG
- 通过debugfs中的irq_domain_mapping文件向用户显示硬件IRQ号/Linux IRQ号之间的对应关系.仅用于开发调试. Support sparse irq numbering CONFIG_SPARSE_IRQ
- 稀疏IRQ号支持.它允许在小型设备上(例如嵌入式设备)定义一个很高的CONFIG_NR_CPUS值,但仍然不希望占用太多内核" memory footprint"(一段可以被操作或被管理的内存区域)的场合.稀疏IRQ也更适合NUMA平台,因为它以一种对NUMA更友好的方式分发中断描述符.不确定的选"N".
Timers subsystem
- Linux内核时钟子系统
-
-
Timer tick handling
- 内核时钟滴答处理程序,更多信息可以参考内核源码树下的" Documentation/timers/NO_HZ.txt"文件
-
-
Periodic timer ticks (constant rate, no dynticks)
CONFIG_HZ_PERIODIC
- 无论CPU是否需要,都强制按照固定频率不断触发时钟中断.这是最耗电的方式,不推荐使用 Idle dynticks system (tickless idle) CONFIG_NO_HZ_IDLE
- CPU在空闲状态时不产生不必要的时钟中断,以使处理器能够在较低能耗状态下运行以节约电力,适合于大多数场合 Full dynticks system (tickless) CONFIG_NO_HZ_FULL
- 完全无滴嗒:即使CPU在忙碌状态也尽可能关闭所有时钟中断,适用于CPU在同一时间仅运行一个任务,或者用户空间程序极少与内核交互的场合.即使开启此选项,也需要额外设置"nohz_full=?"内核命令行参数才能真正生效.
Full dynticks system on all CPUs by default
CONFIG_NO_HZ_FULL_ALL
- 即使没有设置"nohz_full"引导参数,也默认对所有CPU(boot CPU 除外)开启完全无滴答特性. Old Idle dynticks config CONFIG_NO_HZ
- 等价于CONFIG_NO_HZ_IDLE,临时用来兼容老版本内核选项,未来会被删除. High Resolution Timer Support CONFIG_HIGH_RES_TIMERS
- 高精度定时器(hrtimer)是从2.6.16开始引入,用于取代传统timer wheel( 基于jiffies定时器)的时钟子系统.可以降低与内核其他模块的耦合性,还可以提供比1毫秒更高的精度(因为它可以读取HPET/TSC等新型硬件时钟源),可以更好的支持音视频等对时间精度要求较高的应用.建议选"Y".[提示]这里说的"定时器"是指"软件定时器",而不是主板或CPU上集成的 硬件时钟发生器(ACPI PM Timer/HPET Timer/TSC Timer).
CPU/Task time and stats accounting
- CPU/进程的时间及状态统计
-
-
Cputime accounting
- CPU时间统计方式
-
-
Simple tick based cputime accounting
CONFIG_TICK_CPU_ACCOUNTING
- 简单的基于滴答的统计,适用于大多数场合 Deterministic task and CPU time accounting CONFIG_VIRT_CPU_ACCOUNTING_NATIVE
- 通过读取CPU计数器进行统计,可以提供更精确的统计,但是对性能有一些不利影响. Full dynticks CPU time accounting CONFIG_VIRT_CPU_ACCOUNTING_GEN
- 利用上下文跟踪子系统,通过观察每一个内核与用户空间的边界进行统计.该选项对性能有显著的不良影响,目前仅用于完全无滴答子系统(CONFIG_NO_HZ_FULL)的调试 Fine granularity task level IRQ time accounting CONFIG_IRQ_TIME_ACCOUNTING
- 通过读取TSC时间戳进行统计,这是统计进程IRQ时间的更细粒度的统计方式,但对性能有些不良影响(特别是在RDTSC指令速度较慢的CPU上).
BSD Process Accounting
CONFIG_BSD_PROCESS_ACCT
- 用户空间程序可以要求内核将进程的统计信息写入一个指定的文件,主要包括进程的创建时间/创建者/内存占用等信息.
-
-
BSD Process Accounting version 3 file format
CONFIG_BSD_PROCESS_ACCT_V3
- 使用新的v3版文件格式,可以包含每个进程的PID和其父进程的PID,但是不兼容老版本的文件格式.比如 GNU Accounting Utilities 这样的工具可以识别v3格式
Export task/process statistics through netlink
CONFIG_TASKSTATS
- 通过 netlink接口向用户空间导出进程的统计信息,与 BSD Process Accounting 的不同之处在于这些统计信息在整个进程生存期都是可用的.
-
-
Enable per-task delay accounting
CONFIG_TASK_DELAY_ACCT
- 在统计信息中包含进程等候系统资源(cpu,IO同步,内存交换等)所花费的时间 Enable extended accounting over taskstats CONFIG_TASK_XACCT
- 在统计信息中包含进程的更多扩展信息.
-
-
Enable per-task storage I/O accounting
CONFIG_TASK_IO_ACCOUNTING
- 在统计信息中包含进程在存储设备上的I/O字节数.
RCU Subsystem
- RCU(Read-Copy Update)子系统.在读多写少的情况下,这是一个高性能的锁机制,对于被RCU保护的共享数据结构,读者不需要获得任何锁就可以访问它(速度非常快),但写者在访问它时首先拷贝一个副本,然后对副本进行修改,最后使用一个回调机制在适当的时机把指向原来数据的指针重新指向新的被修改的数据,速度非常慢.RCU只适用于读多写少的情况:如网络路由表的查询更新,设备状态表的维护,数据结构的延迟释放以及多径I/O设备的维护等.
-
-
RCU Implementation
- RCU的实现方式
-
-
Tree-based hierarchical RCU
CONFIG_TREE_RCU
- 基于树型分层结构的实现.最适用于多CPU的非实时系统. Preemptible tree-based hierarchical RCU CONFIG_TREE_PREEMPT_RCU
- 抢占式基于树型分层结构的实现.最适用于那些要求快速响应的多CPU实时系统. UP-only small-memory-footprint RCU CONFIG_TINY_RCU
- 最简单的实现,能够大幅降低RCU系统的内存占用.最适用于单CPU的非实时系统. Preemptible UP-only small-memory-footprint RCU CONFIG_TINY_PREEMPT_RCU
- 抢占式简单实现,能够大幅降低RCU系统的内存占用.最适用于那些要求快速响应的单CPU实时系统.
Consider userspace as in RCU extended quiescent state
CONFIG_RCU_USER_QS
- 在内核和用户边界设置钩子函数,将运行在用户态的CPU从全局RCU状态机制中移除,这样就不会在RCU系统中维护此CPU的时钟滴答.除非你想要帮助开发CONFIG_NO_HZ_FULL模块,否则不要打开此选项,而且它还会对性能有不利影响. Force context tracking CONFIG_CONTEXT_TRACKING_FORCE
- 默认在内核和用户边界进行探测(上下文跟踪),以便测试依赖于此特性的各种功能(比如用户空间的 RCU extended quiescent state),这个特性目前仅用于调试目的,未来也许会用于为CONFIG_NO_HZ_FULL模块提供支持 Tree-based hierarchical RCU fanout value CONFIG_RCU_FANOUT
- 这个选项控制着树形RCU层次结构的端点数(fanout),以允许RCU子系统在拥有海量CPU的