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
- 编译64位内核.本文仅讲述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的系统上高效工作.这个值必须至少等于CONFIG_NR_CPUS的1/4次方(4次根号).生产系统上应该使用默认值(64).仅在你想调试RCU子系统时才需要减小此值. Tree-based hierarchical RCU leaf-level fanout value CONFIG_RCU_FANOUT_LEAF
- 这个选项控制着树形RCU层次结构的叶子层的端点数(leaf-level fanout).对于期望拥有更高能耗比(更节能)的系统,请保持其默认值(16).对于拥有成千上万个CPU的系统来说,应该考虑将其设为最大值(CONFIG_RCU_FANOUT). Disable tree-based hierarchical RCU auto-balancing CONFIG_RCU_FANOUT_EXACT
- 强制按照CONFIG_RCU_FANOUT_LEAF的值,而不是使用自动平衡树结构来实现RCU子系统.目前仅用于调试目的.未来也许会用于增强NUMA系统的性能. Accelerate last non-dyntick-idle CPU's grace periods CONFIG_RCU_FAST_NO_HZ
- 即使CPU还在忙碌,也允许进入dynticks-idle状态,并且阻止RCU每4个滴答就唤醒一次该CPU,这样能够更有效的使用电力,同时也拉长了RCU grace period的时间,造成性能降低.如果能耗比对你而言非常重要(你想节省每一分电力),并且你不在乎系统性能的降低(CPU唤醒时间增加),可以开启此选项.台式机和服务器建议关闭此选项. Enable RCU priority boosting CONFIG_RCU_BOOST
- 允许提升RCU子系统的实时优先级(包括读操作与写操作),以避免RCU操作被阻塞太长时间.如果系统的CPU负载经常很重,或者你需要快速的实时响应系统,那么就选"Y",否则应该选"N".
-
-
Real-time priority to boost RCU readers to
CONFIG_RCU_BOOST_PRIO
- 允许提升被长时间抢占(阻塞)的RCU读操作的实时优先级到什么程度.取值范围是[1,99].默认值"1"适用于实时应用程序中不包含CPU密集型(CPU-bound)线程的常规场合(例如大多数桌面系统).但是如果你的实时应用程序拥有一个或多个CPU密集型线程,那么可能需要增加这个值,具体可以参考内核帮助的说明.仅在你确实理解了的情况下再改变默认值. Milliseconds to delay boosting after RCU grace-period start CONFIG_RCU_BOOST_DELAY
- 在提升RCU读操作的优先级之前,允许有多长时间潜伏期(阻塞),取值范围是[0,3000],单位是毫秒,默认值是"500".不确定的请使用默认值.
Offload RCU callback processing from boot-selected CPUs
CONFIG_RCU_NOCB_CPU
- 如果你想帮助调试内核可以开启,否则请关闭. Build-forced no-CBs CPUs
- 在开启CONFIG_RCU_NOCB_CPU选项的情况下,指定哪些CPU是No-CB CPU,相当于预先设置"rcu_nocbs="内核引导参数.
Kernel .config support CONFIG_IKCONFIG
- 把内核的配置信息编译进内核中,以后可以通过scripts/extract-ikconfig脚本从内核镜像中提取这些信息
-
-
Enable access to .config through /proc/config.gz
CONFIG_IKCONFIG_PROC
- 允许通过 /proc/config.gz 文件访问内核的配置信息
Kernel log buffer size CONFIG_LOG_BUF_SHIFT
- 设置内核日志缓冲区的大小: 12(最小值)=4KB,...,16=64KB,17=128KB,18=256KB,...,21(最大值)=2048KB Automatically enable NUMA aware memory/task placement CONFIG_NUMA_BALANCING_DEFAULT_ENABLED
- 在 NUMA(Non-Uniform Memory Access Architecture)系统上自动启用进程/内存均衡,也就是自动开启CONFIG_NUMA_BALANCING特性. Memory placement aware NUMA scheduler CONFIG_NUMA_BALANCING
- 允许自动根据NUMA系统的节点分布状况进行进程/内存均衡(方法很原始,就是简单的内存移动).这个选项对UMA系统无效.[提示]UMA系统的例子:(1)只有一颗物理CPU(即使是多核)的电脑,(2)不支持"虚拟NUMA",或"虚拟NUMA"被禁用的虚拟机(即使所在的物理机是NUMA系统) Control Group support CONFIG_CGROUPS
- Cgroup(Control Group)是一种进程管理机制,可以针对一组进程进行系统资源的分配和管理,可用于Cpusets,CFS(完全公平调度器),内存管理等子系统.此外,systemd也依赖于它.更多细节可以参考内核的" Documentation/cgroups/cgroups.txt"文件
-
-
Example debug cgroup subsystem
CONFIG_CGROUP_DEBUG
- 导出cgroups框架的调试信息,仅用于调试目的. Freezer cgroup subsystem CONFIG_CGROUP_FREEZER
- 允许冻结/解冻cgroup内所有进程 Device controller for cgroups CONFIG_CGROUP_DEVICE
- 允许为cgroup建立设备白名单,这样cgroup内的进程将仅允许对白名单中的设备进行mknod/open操作 Cpuset support CONFIG_CPUSETS
- CPUSET支持:允许将CPU和内存进行分组,并指定某些进程只能运行于特定的分组.这里有一篇 CPUSET的用法
-
-
Include legacy /proc/<pid>/cpuset file
CONFIG_PROC_PID_CPUSET
- 提供过时的 /proc/<pid>/cpuset 文件接口
Simple CPU accounting cgroup subsystem CONFIG_CGROUP_CPUACCT
- 提供一个简单的资源控制器(Resource Controller,用于实现一组任务间的资源共享),以监控cgroup内所有进程的总CPU使用量. Resource counters CONFIG_RESOURCE_COUNTERS
- 为cgroup提供独立于controller资源计数器
-
-
Memory Resource Controller for Control Groups
CONFIG_MEMCG
- 为cgroup添加内存资源控制器,包含匿名内存和页面缓存( Documentation/cgroups/memory.txt).开启此选项后,将会增加关联到每个内存页fixed memory大小,具体在64位系统上是40bytes/PAGE_SIZE.仅在你确实明白什么是 memory resource controller 并且确实需要的情况下才开启此选项.此功能可以通过命令行选项"cgroup_disable=memory"进行关闭.
-
-
Memory Resource Controller Swap Extension
CONFIG_MEMCG_SWAP
- 给 Memory Resource Controller 添加对swap的管理功能.这样就可以针对每个cgroup限定其使用的mem+swap总量.如果关闭此选项, memory resource controller 将仅能限制mem的使用量,而无法对swap进行控制(进程有可能耗尽swap).开启此功能会对性能有不利影响,并且为了追踪swap的使用也会消耗更多的内存(如果swap的页面大小是4KB,那么每1GB的swap需要额外消耗512KB内存),所以在内存较小的系统上不建议开启.
-
-
Memory Resource Controller Swap Extension enabled by default
CONFIG_MEMCG_SWAP_ENABLED
- 如果开启此选项,那么将默认开启CONFIG_MEMCG_SWAP特性,否则将默认关闭.即使默认开启也可以通过内核引导参数"swapaccount=0"禁止此特性.
Memory Resource Controller Kernel Memory accounting CONFIG_MEMCG_KMEM
- 为 Memory Resource Controller 添加对内核对象所占用内存的管理功能.和标准的 Memory Resource Controller 对内存的控制不一样之处在于:这些内核对象所占用的内存是基于每个内存页的,并且可以被swap到硬盘.使用这个功能可以确保cgroup中的进程不会单独耗尽所有内核资源.
HugeTLB Resource Controller for Control Groups CONFIG_CGROUP_HUGETLB
- 为cgroup添加对 HugeTLB页的资源控制功能.开启此选项之后,你就可以针对每个cgroup限定其对 HugeTLB的使用.
Enable perf_event per-cpu per-container group (cgroup) monitoring CONFIG_CGROUP_PERF
- 将per-cpu模式进行扩展,使其可以监控属于特定cgroup并运行于特定CPU上的线程 Group CPU scheduler CONFIG_CGROUP_SCHED
- 让CPU调度程序可以在不同的cgroup之间分配CPU的带宽.systemd资源控制单元(resource control unit)的CPUShares功能依赖于它.
-
-
Group scheduling for SCHED_OTHER
CONFIG_FAIR_GROUP_SCHED
- 公平CPU调度策略,也就是在多个cgroup之间平均分配CPU带宽." 鸡血补丁"CONFIG_SCHED_AUTOGROUP(自动分组调度功能)依赖于它.systemd资源控制单元(resource control unit)的CPUShares功能也依赖于它.
-
-
CPU bandwidth provisioning for FAIR_GROUP_SCHED
CONFIG_CFS_BANDWIDTH
- 允许用户为运行在CONFIG_FAIR_GROUP_SCHED中的进程定义CPU带宽限制.对于没有定义CPU带宽限制的cgroup而言,可以无限制的使用CPU带宽.详情参见 Documentation/scheduler/sched-bwc.txt 文件.
Group scheduling for SCHED_RR/FIFO CONFIG_RT_GROUP_SCHED
- 允许用户为cgroup分配实时CPU带宽,还可以对非特权用户的实时进程组进行调度.详情参见 Documentation/scheduler/sched-rt-group.txt 文档.
Block IO controller CONFIG_BLK_CGROUP
- 通用的块IO控制器接口,可以用于实现各种不同的控制策略.目前,IOSCHED_CFQ用它来在不同的cgroup之间分配磁盘IO带宽(需要额外开启CONFIG_CFQ_GROUP_IOSCHED), block io throttle也会用它来针对特定块设备限制IO速率上限(需要额外开启CONFIG_BLK_DEV_THROTTLING).更多信息可以参考" Documentation/cgroups/blkio-controller.txt"文件.
-
-
Enable Block IO controller debugging
CONFIG_DEBUG_BLK_CGROUP
- 仅用于调试 Block IO controller 目的.
Checkpoint/restore support CONFIG_CHECKPOINT_RESTORE
- 在内核中添加"检查点/恢复"支持.也就是添加一些辅助的代码用于设置进程的 text, data, heap 段,并且在 /proc 文件系统中添加一些额外的条目.主要用于调试目的.不确定的选"N". Namespaces support CONFIG_NAMESPACES
- 命名空间支持.主要用于支持基于容器的轻量级虚拟化技术(比如 LXC和 Linux-VServer).
-
-
UTS namespace
CONFIG_UTS_NS
- uname()系统调用的命名空间支持 IPC namespace CONFIG_IPC_NS
- 进程间通信对象ID的命名空间支持 User namespace CONFIG_USER_NS
- 允许容器使用user命名空间.如果开启此项,建议同时开启CONFIG_MEMCG和CONFIG_MEMCG_KMEM选项,以允许用户空间使用"memory cgroup"限制非特权用户的内存使用量.不确定的选"N",如果你打算构建一个 VPS服务器就必须选"Y". PID Namespaces CONFIG_PID_NS
- 进程PID命名空间支持 Network namespace CONFIG_NET_NS
- 网络协议栈的命名空间支持.systemd服务单元(service unit)中的"PrivateNetwork"依赖于它.
Require conversions between uid/gids and their internal representation CONFIG_UIDGID_STRICT_TYPE_CHECKS
- 强制将uid/gid转换为内部表示形式,以让那些未对uid/gid进行转换的内核子系统代码也能正常编译.不确定的选"N". Automatic process group scheduling CONFIG_SCHED_AUTOGROUP
- 每个TTY动态地创建任务分组(cgroup),这样就可以降低高负载情况下的桌面延迟.也就是传说中的桌面" 鸡血补丁",桌面用户建议开启.但服务器建议关闭. Enable deprecated sysfs features to support old userspace tools CONFIG_SYSFS_DEPRECATED
- 为了兼容旧版本的应用程序而保留过时的sysfs特性.仅当在使用2008年以前的发行版时才需要开启,2009年之后的发行版中必须关闭.此外,使用udev或systemd的系统也必须关闭.
-
-
Enable deprecated sysfs features by default
CONFIG_SYSFS_DEPRECATED_V2
- 默认开启上述特性
Kernel->user space relay support (formerly relayfs) CONFIG_RELAY
- 在某些文件系统(比如debugfs)中提供 中继(relay)支持(从内核空间向用户空间传递大批量数据).主要用于调试内核. Initial RAM filesystem and RAM disk (initramfs/initrd) support CONFIG_BLK_DEV_INITRD
- 初始内存文件系统( initramfs,2.6以上内核的新机制,使用cpio格式,占据的内存随数据的增减自动增减)与初始内存盘( initrd,2.4以前内核遗留的老机制,使用loop设备,占据一块固定的内存,需要额外开启CONFIG_BLK_DEV_RAM选项才生效)支持,一般通过lilo/grub的initrd指令加载.更多细节可以参考" Documentation/initrd.txt"文件,关于 initrd到initramfs的进化( 墙内镜像),可以参考IBM上的两篇文章: Linux2.6 内核的 Initrd 机制解析和 Linux 初始 RAM 磁盘(initrd)概述.
-
-
Initramfs source file(s)
CONFIG_INITRAMFS_SOURCE
- 如果你想 将initramfs镜像直接嵌入内核(比如嵌入式环境或者想使用 EFI stub kernel),而不是通过lilo/grub这样的引导管理器加载,可以使用此选项,否则请保持空白.这个选项指明用来制作initramfs镜像的原料,可以是一个.cpio文件,或一个Initramfs虚根目录(其下包含"bin,dev,etc,lib,proc,sys"等子目录),或一个描述文件.细节可以参考" Documentation/early-userspace/README"文档.[注意]内核帮助文档说可以指定多个目录或文件是错误的,实际只能接受单一的目录或文件
-
-
User ID to map to 0 (user root)
INITRAMFS_ROOT_UID
- 此选项仅在CONFIG_INITRAMFS_SOURCE中包含目录时才有效,将此值设为非零(例如"37"),那么所有UID=37的文件在打包到initramfs镜像内时,其UID都将被设为"0". Group ID to map to 0 (group root) INITRAMFS_ROOT_GID
- 此选项仅在CONFIG_INITRAMFS_SOURCE中包含目录时才有效,将此值设为非零(例如"37"),那么所有GID=37的文件在打包到initramfs镜像内时,其GID都将被设为"0".
Support initial ramdisks compressed using gzip CONFIG_RD_GZIP
- 支持经过gzip压缩的ramdisk或cpio镜像 Support initial ramdisks compressed using bzip2 CONFIG_RD_BZIP2
- 支持经过bzip2压缩的ramdisk或cpio镜像 Support initial ramdisks compressed using LZMA CONFIG_RD_LZMA
- 支持经过LZMA压缩的ramdisk或cpio镜像 Support initial ramdisks compressed using XZ CONFIG_RD_XZ
- 支持经过XZ压缩的ramdisk或cpio镜像 Support initial ramdisks compressed using LZO CONFIG_RD_LZO
- 支持经过LZO压缩的ramdisk或cpio镜像 Built-in initramfs compression mode
- 选择initramfs镜像的压缩格式."gzip"是兼容性最好的格式,但是压缩率却最低."XZ"是目前渐渐流行的格式,压缩率高,解压速度也不慢.
Optimize for size CONFIG_CC_OPTIMIZE_FOR_SIZE
- 编译时优化内核尺寸(使用GCC的"-Os"而不是"-O2"参数编译),这会得到更小的内核,但是运行速度可能会更慢.主要用于嵌入式环境. Configure standard kernel features (expert users) CONFIG_EXPERT
- 配置标准的内核特性(仅供专家使用).这个选项允许你改变内核的"标准"特性(比如用于需要"非标准"内核的特定环境中),仅在你确实明白自己在干什么的时候才开启.
-
-
Enable 16-bit UID system calls
CONFIG_UID16
- 允许对UID系统调用进行过时的16-bit包装,建议关闭 Sysctl syscall support CONFIG_SYSCTL_SYSCALL
- 二进制sysctl接口支持.由于现在流行直接通过/proc/sys以ASCII明码方式修改内核参数(需要开启CONFIG_PROC_SYSCTL选项),所以已经不需要再通过二进制接口去控制内核参数,建议关闭它以减小内核尺寸. Load all symbols for debugging/ksymoops CONFIG_KALLSYMS
- 装载所有的调试符号表信息,会增大内核体积,仅供调试时选择
-
-
Include all symbols in kallsyms
CONFIG_KALLSYMS_ALL
- 在 /proc/kallsyms中包含内核知道的所有符号,内核将会增大300K,仅在你确实需要的时候再开启
Enable support for printk CONFIG_PRINTK
- 允许内核向终端打印字符信息.如果关闭,内核在初始化过程中将不会输出字符信息,这会导致很难诊断系统故障.仅在你确实不想看到任何内核信息时选"N".否则请选"Y". BUG() support CONFIG_BUG
- 显示故障和失败条件(BUG和WARN),禁用它将可能导致隐含的错误被忽略.建议仅在嵌入式设备或者无法显示故障信息的系统上关闭 Enable ELF core dumps CONFIG_ELF_CORE
- 内存转储支持,可以帮助调试ELF格式的程序,用于调试和开发用户态程序 Enable PC-Speaker support CONFIG_PCSPKR_PLATFORM
- 主板上的 蜂鸣器支持. 主板上的蜂鸣器只能发出或长或短的"滴"或"嘟嘟"声,一般用于系统报警.不要和能够播放音乐的扬声器混淆.如果你的主板上没有就关闭,有的话(开机自检完成后一般能听到"滴"的一声)还是建议开启. Enable full-sized data structures for core CONFIG_BASE_FULL
- 在内核中使用全尺寸的数据结构.禁用它将使得某些内核的数据结构减小以节约内存,但是将会降低性能 Enable futex support CONFIG_FUTEX
- 快速用户空间互斥(fast userspace mutexes)可以使线程串行化以避免竞态条件,也提高了响应速度.禁用它将导致内核不能正确的运行基于glibc的程序 Enable eventpoll support CONFIG_EPOLL
- Epoll系列系统调用(epoll_*)支持,这是当前在Linux下开发大规模并发网络程序(比如Nginx)的热门人选,设计目的是取代既有POSIX select(2)与poll(2)系统接口,systemd依赖于它.建议开启. Enable signalfd() system call CONFIG_SIGNALFD
- signalfd()系统调用支持,建议开启.传统的处理信号的方式是注册信号处理函数,由于信号是异步发生的,要解决数据的并发访问和可重入问题.signalfd可以将信号抽象为一个文件描述符,当有信号发生时可以对其read,这样可以将信号的监听放到select/poll/epoll监听队列中.systemd依赖于它. Enable timerfd() system call CONFIG_TIMERFD
- timerfd()系统调用支持,建议开启.timerfd可以实现定时器功能,将定时器抽象为文件描述符,当定时器到期时可以对其read,这样也可以放到select/poll/epoll监听队列中.更多信息可以参考 linux新的API signalfd、timerfd、eventfd使用说明.systemd依赖于它. Enable eventfd() system call CONFIG_EVENTFD
- eventfd()系统调用支持,建议开启.eventfd实现了线程之间事件通知的方式,eventfd的缓冲区大小是sizeof(uint64_t),向其write可以递增这个计数器,read操作可以读取,并进行清零.eventfd也可以放到select/poll/epoll监听队列中.当计数器不是0时,有可读事件发生,可以进行读取. Use full shmem filesystem CONFIG_SHMEM
- 完全使用shmem来代替ramfs.shmem是基于共享内存的文件系统(可以使用swap),在启用CONFIG_TMPFS后可以挂载为tmpfs供用户空间使用,它比简单的ramfs先进许多.仅在微型嵌入式环境中且没有swap的情况下才可能会需要使用原始的ramfs. Enable AIO support CONFIG_AIO
- 开启POSIX异步IO支持.它常常被高性能的多线程程序使用,建议开启 Enable PCI quirk workarounds CONFIG_PCI_QUIRKS
- 开启针对多种PCI芯片组的错误规避功能,仅在确定你的PCI芯片组确实没有没有任何bug时才关闭此功能.至于究竟哪些芯片组有bug,你可以直接打开" drivers/pci/quirks.c"文件查看.不确定的选"Y".