Linux kernel 配置选项
时间:2022-07-09 07:00:00
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).不确定的选"N",但使用systemd的建议选"Y".
Auditing support
CONFIG_AUDIT
支持内核审计(跟踪每个过程的活动),一些与安全相关的内核系统(如SELinux)需要它
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密集型线程,那么可能需要�