资讯详情

Linux内核配置选项简介

General setup常规设置

Enable loadable module support可加载模块支持

Enable the block layer块设备支持

Processor type and features中央处理器(CPU)类型及特性

Power management and ACPI options电源管理和ACPI选项

Bus options (PCI etc.)总线选项

Executable file formats / Emulations可执行文件格式/仿真

Networking support网络支持

Device Drivers设备驱动程序

Firmware Drivers固件(Firmware)驱动

File systems文件系统

Kernel hacking内核hack选项

Security options如果您不了解这里的选项,建议不要选择安全选项,否则可能会弄巧成拙.

Cryptographic API内核加密API支持这里的加密算法广泛应用于驱动程序通信协议等机制.不能选择子选项。如果核心中的其他部分依赖它,它将自动选择.可能需要手动选择内核树外的模块.

Virtualization虚拟化支持仅将此内核视为宿主机(host)只有在这里打开子项

Library routines库子程序子选项可以选项。如果核心中的其他部分依赖它,它将自动选择.可能需要手动选择内核树外的模块.


General setup 常规设置

Cross-compiler tool prefix CONFIG_CROSS_COMPILE

交叉编译工具的前缀(例如(例如)"arm-linux-"相当于使用"make CROSS_COMPILE=arm-linux-"进行编译).除非您想在默认情况下自动交叉编译,否则不要使用此选项.

Compile also drivers which will not load CONFIG_COMPILE_TEST

显示属于其他平台(非显示)x86平台)驱动选项(需要交叉编译)仅供驱动开发者使用,普通发行版制作人应选择"N".

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开发的程序),或者需要使用Docker容器,就必须开启此选项.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依赖于它.

uselib syscall CONFIG_USELIB

启用老旧的uselib()系统接口支持,仅在你需要使用基于libc5的古董级程序时才需要,不确定的选"N".

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进程记账支持.用户空间程序可以要求内核将进程的统计信息写入一个指定的文件,主要包括进程的创建时间/创建者/内存占用等信息.不确定的选"N".

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

在统计信息中包含进程的更多扩展信息.不确定的选"N".

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

设置内核日志缓冲区的最小尺寸(合理的设置应该等于CONFIG_LOG_CPU_MAX_BUF_SHIFT*最大CPU数量): 12(最小值)=4KB,...,16=64KB,17=128KB,18=256KB,...,25(最大值)

CPU kernel log buffer size contribution CONFIG_LOG_CPU_MAX_BUF_SHIFT

每个CPU的内核日志缓存大小(通常只有几行文字,但在报告故障时可能会产生大量文字).例如在最大CPU数量(包含热插拔CPU)为64的系统上,如果CONFIG_LOG_BUF_SHIFT=18,那么该值应该设为12

Memory placement aware NUMA scheduler CONFIG_NUMA_BALANCING

允许自动根据NUMA系统的节点分布状况进行进程/内存均衡(方法很原始,就是简单的内存移动).这个选项对UMA系统无效.[提示]UMA系统的例子:(1)只有一颗物理CPU(即使是多核)的电脑,(2)不支持"虚拟NUMA",或"虚拟NUMA"被禁用的虚拟机(即使所在的物理机是NUMA系统)

Automatically enable NUMA aware memory/task placement CONFIG_NUMA_BALANCING_DEFAULT_ENABLED

在NUMA(Non-Uniform Memory Access Architecture)系统上自动启用进程/内存均衡,也就是自动开启CONFIG_NUMA_BALANCING特性.

Control Group support CONFIG_CGROUPS

Cgroup(Control Group)是一种进程管理机制,可以针对一组进程进行系统资源的分配和管理,可用于Cpusets,CFS(完全公平调度器),内存管理等子系统.此外,systemd与Docker/LXC等容器也依赖于它.更多细节可以参考内核的"Documentation/cgroups/cgroups.txt"文件

Example debug cgroup subsystem CONFIG_CGROUP_DEBUG

导出cgroups框架的调试信息,仅用于调试目的.

Freezer cgroup subsystem CONFIG_CGROUP_FREEZER

允许冻结/解冻cgroup内所有进程.Docker依赖于它.

PIDs cgroup subsystem CONFIG_CGROUP_PIDS

允许限制同一cgroup内所有进程的数量,超出限制后将无法fork()出新进程.

Device controller for cgroups CONFIG_CGROUP_DEVICE

允许为cgroup建立设备白名单,这样cgroup内的进程将仅允许对白名单中的设备进行mknod/open操作.Docker依赖于它.

Cpuset support CONFIG_CPUSETS

CPUSET支持:允许将CPU和内存进行分组,并指定某些进程只能运行于特定的分组.Docker依赖于它.这里有一篇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使用量.Docker依赖于它.

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"进行关闭.Docker依赖于它.

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的使用.Docker依赖于它.

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的带宽.Docker依赖于它.systemd资源控制单元(resource control unit)的CPUShares功能依赖于它.

Group scheduling for SCHED_OTHER CONFIG_FAIR_GROUP_SCHED

公平CPU调度策略,也就是在多个cgroup之间平均分配CPU带宽."鸡血补丁"CONFIG_SCHED_AUTOGROUP(自动分组调度功能)依赖于它.Docker依赖于它.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 文件.systemd资源控制单元(resource control unit)的CPUQuota功能也依赖于它.

Group scheduling for SCHED_RR/FIFO CONFIG_RT_GROUP_SCHED

允许用户为cgroup分配实时CPU带宽,还可以对非特权用户的实时进程组进行调度.详情参见 Documentation/scheduler/sched-rt-group.txt 文档.使用systemd的系统应该选"N".

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 文件系统中添加一些额外的条目.用于检测两个进程是否共享同一个内核资源的kcmp()系统调用依赖于它.使用systemd的建议开启此项.

Namespaces support CONFIG_NAMESPACES

命名空间支持.主要用于支持基于容器的轻量级虚拟化技术(比如LXC和Linux-VServer以及Docker).

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"限制非特权用户的内存使用量.systemd服务单元(service unit)中的"PrivateUsers="指令依赖于它.如果你打算构建一个VPS服务器也必须选"Y".

PID Namespaces CONFIG_PID_NS

进程PID命名空间支持

Network namespace CONFIG_NET_NS

网络协议栈的命名空间支持.systemd服务单元(service unit)中的"PrivateNetwork=/PrivateDevices="指令依赖于它.

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包装,建议关闭

Multiple users, groups and capabilities support CONFIG_MULTIUSER

多用户(组)支持.若选"N",则所有进程都将以"UID=0,GID=0"运行(也就是禁止存在非root用户).选"Y",除非你确实知道自己在干什么.

sgetmask/ssetmask syscalls support CONFIG_SGETMASK_SYSCALL

是否开启已被反对使用的sys_sgetmask/sys_ssetmask系统调用(已不再被libc支持).建议选"N".

Sysfs syscall support CONFIG_SYSFS_SYSCALL

是否开启已被反对使用的sys_sysfs系统调用(已不再被libc支持).建议选"N".

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

允许内核向终端打印字符信息.任何由printk显示的字符串通常记录在/var/log/messages文件里.如果关闭,内核在初始化过程中将不会输出字符信息,这会导致很难诊断系统故障,并且"dmesg"命令也会失效.仅在你确实不想看到任何内核信息时选"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时,有可读事件发生,可以进行读取.

Enable bpf() system call CONFIG_BPF_SYSCALL

开启内核的bpf()系统调用支持(从3.15版本开始引入),以支持eBPF功能.可用于内核调试与网络包过滤(tcpdump,libpcap,iptables).不确定的选"N".

Use full shmem filesystem CONFIG_SHMEM

完全使用shmem来代替ramfs.shmem是基于共享内存的文件系统(可以使用swap),在启用CONFIG_TMPFS后可以挂载为tmpfs供用户空间使用,它比简单的ramfs先进许多.仅在微型嵌入式环境中且没有swap的情况下才可能会需要使用原始的ramfs.

Enable AIO support CONFIG_AIO

开启POSIX异步IO支持.它常常被高性能的多线程程序使用,建议开启

Enable madvise/fadvise syscalls CONFIG_ADVISE_SYSCALLS

开启内核的madvise()/fadvise()系统调用支持(2.6.16版本开始引入).以允许应用程序预先提示内核,它将如何使用特定的内存与文件.这种措施有助于提升应用程序的性能.建议选"Y".

Enable userfaultfd() system call CONFIG_USERFAULTFD

开启内核的userfaultfd()系统调用支持(从4.3版本开始引入).该特性可以被诸如QEMU/KVM之类的虚拟化技术用来提高GuestOS热迁移性能.

Enable PCI quirk workarounds CONFIG_PCI_QUIRKS

开启针对多种PCI芯片组的错误规避功能,仅在确定你的PCI芯片组确实没有没有任何bug时才关闭此功能.至于究竟哪些芯片组有bug,你可以直接打开"drivers/pci/quirks.c"文件查看.不确定的选"Y".

Enable membarrier() system call CONFIG_MEMBARRIER

开启内核的membarrier()系统调用支持(与Memory Barrier相关).有助于提升多CPU场景下的并行计算性能.建议选"Y".

Embedded system CONFIG_EMBEDDED

如果你是为嵌入式系统编译内核,可以开启此选项,这样一些高级选项就会显示出来.单独选中此项本身对内核并无任何改变.

Kernel Performance Events And Counters CONFIG_PERF_EVENTS

性能相关的事件和计数器支持(既有硬件的支持也有软件的支持).大多数现代CPU都会通过性能计数寄存器对特定类型的硬件事件(指令执行,缓存未命中,分支预测失败)进行计数,同时又丝毫不会减慢内核和应用程序的运行速度.这些寄存器还会在某些事件计数到达特定的阈值时触发中断,从而可以对代码进行性能分析. Linux Performance Event 子系统对上述特性进行了抽象,提供了针对每个进程和每个CPU的计数器,并可以被 tools/perf/ 目录中的"perf"工具使用.

Debug: use vmalloc to back perf mmap() buffers CONFIG_DEBUG_PERF_USE_VMALLOC

主要用于调试vmalloc代码.

Enable VM event counters for /proc/vmstat CONFIG_VM_EVENT_COUNTERS

"/proc/vmstat"中包含了从内核导出的虚拟内存的各种统计信息.开启此项后可以显示较详细的信息(包含各种事件计数器),关闭此项则仅仅显示内存页计数.主要用于调试和统计.

Enable SLUB debugging support CONFIG_SLUB_DEBUG

SLUB调试支持,禁用后可显著降低内核大小,同时/sys/kernel/slab也将不复存在.

Disable heap randomization CONFIG_COMPAT_BRK

禁用堆随机化(heap randomization)功能.堆随机化可以让针对堆溢出的攻击变得困难,但是不兼容那些古董级的二进制程序(2000年以前).如果你不需要使用这些古董程序,那么选"N".

Choose SLAB allocator

选择内存分配管理器

SLAB CONFIG_SLAB

久经考验的slab内存分配器,在大多数情况下都具有良好的适应性.

SLUB (Unqueued Allocator) CONFIG_SLUB

SLUB与SLAB兼容,但通过取消大量的队列和相关开销,简化了slab的结构.特别是在多核时拥有比slab更好的性能和更好的系统可伸缩性.

SLOB (Simple Allocator) CONFIG_SLOB

SLOB针对小型系统设计,做了非常激进的简化,以适用于内存非常有限(小于64M)的嵌入式环境.

SLUB per cpu partial cache CONFIG_SLUB_CPU_PARTIAL

让SLUB内存分配器使用基于每个CPU的局部缓存,这样可以加速分配和释放属于此CPU范围内的对象,但这样做的代价是增加对象释放延迟的不确定性.因为当这些局部缓存因为溢出而要被清除时,需要使用锁,从而导致延迟尖峰.对于需要快速响应的实时系统,应该选"N",服务器则可以选"Y".

Provide system-wide ring of trusted keys CONFIG_SYSTEM_TRUSTED_KEYRING

在内核中创建一个密钥环,从而允许向密钥环上添加受信任的密钥,主要用于内核模块的签名.如果你开启了CONFIG_MODULE_SIG,此项将被自动选中.不需要使用内核模块签名检查功能的应该选"N"

Profiling support CONFIG_PROFILING

添加扩展的性能分析支持,可以被OProfile之类的工具使用.仅用于调试目的.

OProfile system profiling CONFIG_OPROFILE

OProfile性能分析工具支持,仅用于调试目的.

OProfile multiplexing support CONFIG_OPROFILE_EVENT_MULTIPLEX

OProfile multiplexing技术支持

Kprobes CONFIG_KPROBES

Kprobes是一个轻量级的内核调试工具,能在内核运行的几乎任意时间点进行暂停/读取/修改等操作的调试工具.仅供调试使用.

Optimize very unlikely/likely branches CONFIG_JUMP_LABEL

针对内核中某些"几乎总是为真"或者"几乎总是为假"的条件分支判断使用"asm goto"进行优化(在分支预测失败时会浪费很多时间在回退上,但是这种情况极少发生).很多内核子系统都支持进行这种优化.建议开启.

Static key selftest CONFIG_STATIC_KEYS_SELFTEST

在内核启动时对上述分支优化补丁进行一次自我检查.

Transparent user-space probes CONFIG_UPROBES

Uprobes与Kprobes类似,但主要用于用户空间的调试.

Stack Protector buffer overflow detection

GCC的"stack-protector"功能可以在函数开始执行时,在函数的返回地址末端设置一个敏感值,当函数执行完成要返回时,检查这个敏感值,看看是否存在溢出.如果有溢出则表明可能受到了堆栈溢出攻击,内核将通过panic来阻止可能的攻击.选项中的"None"表示关闭此功能,"Regular"表示启用此功能但是仅提供较弱的保护(需要GCC-4.2及以上版本),"Strong"则表示提供较强的保护(需要GCC-4.9及以上版本)

Enable GCOV-based kernel profiling CONFIG_GCOV_KERNEL

基于GCC的gcov(代码覆盖率测试工具)的代码分析支持,仅用于调试

Profile entire Kernel CONFIG_GCOV_PROFILE_ALL

支持对整个内核进行分析.内核体积将会显著增大,并且运行速度显著减慢.

Enable loadable module support 可加载模块支持

Enable loadable module support CONFIG_MODULES

打开可加载模块支持,可以通过"make modules_install"把内核模块安装在/lib/modules/中.然后可以使用 modprobe, lsmod, modinfo, insmod, rmmod 等工具进行各种模块操作.

Forced module loading CONFIG_MODULE_FORCE_LOAD

允许使用"modprobe --force"在不校验版本信息的情况下强制加载模块,这绝对是个坏主意!建议关闭.

Module unloading CONFIG_MODULE_UNLOAD

允许卸载已经加载的模块.如果将模块静态编译进内核中,那么内核的执行效率会更好.如果代码作为动态模块加载,那么不使用时可以减少内核的内存使用并减少启动的时间,然而内核和模块在内存上相互独立又会影响内核的执行性能.

Forced module unloading CONFIG_MODULE_FORCE_UNLOAD

允许强制卸载正在使用中的模块(rmmod -f),即使可能会造成系统崩溃.这又是一个坏主意!建议关闭.

Module versioning support CONFIG_MODVERSIONS

允许使用为其他内核版本编译的模块,可会造成系统崩溃.这同样是个坏主意!建议关闭.

Source checksum for all modules CONFIG_MODULE_SRCVERSION_ALL

为模块添加"srcversion"字段,以帮助模块维护者准确的知道编译此模块所需要的源文件,从而可以校验源文件的变动.仅内核模块开发者需要它.

Module signature verification CONFIG_MODULE_SIG

在加载模块时检查模块签名,详情参见"Documentation/module-signing.txt"文件.[!!警告!!]开启此选项后,必须确保模块签名后没有被strip(包括rpmbuild之类的打包工具).

Require modules to be validly signed CONFIG_MODULE_SIG_FORCE

仅加载已签名并且密钥正确的模块,拒绝加载未签名或者签名密钥不正确的模块

Automatically sign all modules CONFIG_MODULE_SIG_ALL

在执行"make modules_install"安装模块的时候,自动进行签名.否则你必须手动使用 scripts/sign-file 工具进行签名.

Which hash algorithm should modules be signed with?

选择对模块签名时使用的散列函数.建议使用强度最高的"SHA-512"算法.注意:所依赖的散列算法必须被静态编译进内核.对于"SHA-512"来说,就是CONFIG_CRYPTO_SHA512和CONFIG_CRYPTO_SHA512_SSSE3(如果你的CPU支持SSSE3指令集的话).

Compress modules on installation CONFIG_MODULE_COMPRESS

在'make modules_install'时对内核模块进行压缩.传统的module-init-tools工具可能支持gzip压缩,而新式的kmod可能支持gzip与xz压缩.使用Kbuild在内核树之外编译的模块也会同样在安装时被压缩.不确定的选"N".

Enable the block layer 块设备支持

Enable the block layer CONFIG_BLOCK

块设备支持,使用SSD/硬盘/U盘/SCSI/SAS设备者必选.除非你是某些特殊的嵌入式系统,否则没有理由不使用块设备.

Block layer SG support v4 CONFIG_BLK_DEV_BSG

为块设备启用第四版SG(SCSI generic)支持.v4相比v3能够支持更复杂的SCSI指令(可变长度的命令描述块,双向数据传输,通用请求/应答协议),而且UDEV也要用它来获取设备的序列号.对于使用systemd的系统来说,建议选"Y".对于不使用systemd的系统,如果你需要通过/dev/bsg/*访问块设备,也建议开启此选项,否则(通过/dev/{sd*,st*,sr*})可以关闭.

Block layer SG support v4 helper lib CONFIG_BLK_DEV_BSGLIB

你不需要手动开启此选项,如果有其他模块需要使用,会被自动开启.

Block layer data integrity support CONFIG_BLK_DEV_INTEGRITY

某些块设备可以通过存储/读取额外的信息来保障端到端的数据完整性,这个选项为文件系统提供了相应的钩子函数来使用这个特性.如果你的设备支持 T10/SCSI Data Integrity Field 或者 T13/ATA External Path Protection 特性,那么可以开启此选项,否则建议关闭.

Block layer bio throttling support CONFIG_BLK_DEV_THROTTLING

Bio Throttling 支持,也就是允许限制每个cgroup对特定设备的IO速率.细节可以参考"Documentation/cgroups/blkio-controller.txt".

Block device command line partition parser CONFIG_BLK_CMDLINE_PARSER

允许通过内核引导参数设定块设备的分区信息(Documentation/block/cmdline-partition.txt).仅对某些嵌入式设备有意义.

Advanced partition selection CONFIG_PARTITION_ADVANCED

如果你想支持各种不同的磁盘分区格式(特别是与UEFI配合使用的GPT格式),务必选中此项.

Acorn partition support CONFIG_ACORN_PARTITION

Acorn 操作系统使用的分区格式,请根据实际情况选择子项,这里省略

Alpha OSF partition support CONFIG_OSF_PARTITION

Alpha 平台上使用的分区格式

Amiga partition table support CONFIG_AMIGA_PARTITION

AmigaOS 使用的分区格式

Atari partition table support CONFIG_ATARI_PARTITION

Atari OS 使用的分区格式

Macintosh partition map support CONFIG_MAC_PARTITION

苹果的Macintosh平台使用的分区格式

PC BIOS (MSDOS partition tables) support CONFIG_MSDOS_PARTITION

渐成历史垃圾,但目前依然最常见的DOS分区格式.除非你确信不使用此格式,否则必选.其下的子项根据实际情况选择.

Windows Logical Disk Manager (Dynamic Disk) support CONFIG_LDM_PARTITION

使用 Windows Logical Disk Manager 创建的分区格式.参见"Documentation/ldm.txt"

SGI partition support CONFIG_SGI_PARTITION

SGI 平台上使用的分区格式

Ultrix partition table support CONFIG_ULTRIX_PARTITION

DEC/Compaq Ultrix 平台上使用的分区格式

Sun partition tables support CONFIG_SUN_PARTITION

SunOS 平台上使用的分区格式

Karma Partition support CONFIG_KARMA_PARTITION

Rio Karma MP3 player 使用的分区格式

EFI GUID Partition support CONFIG_EFI_PARTITION

代表未来趋势,眼下正大红大紫的EFI GPT(GUID Partition Table)分区格式.建议开启.如果你在UEFI平台上安装则必须开启.

SYSV68 partition table support CONFIG_SYSV68_PARTITION

Motorola Delta 机器上使用的分区格式

IO Schedulers

IO调度器(另一篇文章)

Deadline I/O scheduler CONFIG_IOSCHED_DEADLINE

deadline调度器.简洁小巧(只有400+行代码),提供了最小的读取延迟,非常适合同一时间只有少数个别进程进行IO请求的情况.如果你希望尽快读取磁盘,而不介意写入延迟,那它是最佳选择.通常对于数据库工作负载有最佳的表现.

CFQ I/O scheduler CONFIG_IOSCHED_CFQ

cfq(Complete Fair Queuing)调度器.努力在各内核线程间公平分配IO资源,适用于系统中存在着大量内核线程同时进行IO请求的情况.但对于只有少数内核线程进行密集IO请求的情况,则会出现明显的性能下降.

CFQ Group Scheduling support CONFIG_CFQ_GROUP_IOSCHED

允许将CFQ和cgroup组合使用,也就是将每个cgroup看成一个整体,在各cgroup之间进行IO资源的分配.参见"Documentation/cgroups/blkio-controller.txt"文件.还可以参考一下《Linux内核精髓》中的"使用Block I/O控制器"一章.

BFQ I/O scheduler CONFIG_IOSCHED_BFQ

bfq(Budget Fair Queueing)调度器.这是一个基于CFQ调度器的改进版本,更适合于对交互性要求比较高的场合,比如桌面系统和实时系统.如果静态编译进内核,还支持和cgroup配合,实现分层调度(hierarchical scheduling).

BFQ hierarchical scheduling support CONFIG_CGROUP_BFQIO

通过cgroup文件系统接口,允许将BFQ分层使用(类似CONFIG_CFQ_GROUP_IOSCHED),这个子系统的名字是"bfqio".

Default I/O scheduler

默认IO调度器.如果上述调度器都是模块,那么将使用最简单的内置NOOP调度器.NOOP(No Operation)调度器只是一个简单的FIFO队列,不对IO请求做任何重新排序处理(但还是会做一定程度的归并),适合于SSD/U盘/内存/虚拟机硬盘/SAN(Storage Area Networks)等无需寻道的存储设备,重点是可以节约CPU资源,但不适用于普通硬盘这样的需要依靠磁头来定位的设备.另外,有人说拥有TCQ/NCQ技术(能够自动重新排序)的硬盘也适合用NOOP调度器,这个说法其实并不那么合理,但笔者在此不敢断言,希望读者在严谨的测试之后再做定夺.

Processor type and features 中央处理器(CPU)类型及特性

DMA memory allocation support CONFIG_ZONE_DMA

允许为寻址宽度不足32位的设备(也就是ISA和LPC总线设备)在物理内存的前16MB范围内(也就是传统上x86_32架构的ZONE_DMA区域)分配内存.不确定的选"N",内核中若有其它驱动(主要是某些老旧的声卡)需要它会自动选中此项.[提示]LPC总线通常和主板上的南桥物理相连,通常连接了一系列的传统设备:BIOS,PS/2键盘,PS/2鼠标,软盘,并口设备,串口设备,某些集成声卡,TPM(可信平台模块),等等.[题外话]x86_64已经没有ZONE_HIGHMEM了

Symmetric multi-processing support CONFIG_SMP

SMP(对称多处理器)支持,如果你有多个CPU或者使用的是多核CPU就选上.

Processor feature human-readable names CONFIG_X86_FEATURE_NAMES

让 /proc/cpuinfo 中的CPU特性标记更具可读性.选"Y".

Support x2apic CONFIG_X86_X2APIC

x2apic支持.具有这个特性的CPU可以使用32位的APIC ID(可以支持海量的CPU),并且可以使用MSR而不是mmio去访问 local APIC (更加高效).可以通过"grep x2apic /proc/cpuinfo"命令检查你的CPU是否支持这个特性.注意:有时候还需要在BIOS中也开启此特性才真正生效.[提示]在虚拟机中,还需要VMM的支持(例如qemu-kvm).

Enable MPS table CONFIG_X86_MPPARSE

如果是不支持acpi特性的古董级SMP系统就选上.但现今的64位系统早都已经支持acpi了,所以可以安全的关闭.

Support for extended (non-PC) x86 platforms CONFIG_X86_EXTENDED_PLATFORM

支持非标准的PC平台: Numascale NumaChip, ScaleMP vSMP, SGI Ultraviolet. 绝大多数人都遇不见这些平台.

Numascale NumaChip CONFIG_X86_NUMACHIP

Numascale NumaChip 平台支持

ScaleMP vSMP CONFIG_X86_VSMP

ScaleMP vSMP 平台支持

SGI Ultraviolet CONFIG_X86_UV

SGI Ultraviolet 平台支持

Intel Low Power Subsystem Support CONFIG_X86_INTEL_LPSS

为 Intel Lynx Point PCH 或更高级别芯片组中的 Intel Low Power Subsystem 技术提供支持.Lynx Point PCH 芯片组主要是为采用LGA1150的Haswell处理器提供支持.

AMD ACPI2Platform devices support CONFIG_X86_AMD_PLATFORM_DEVICE

为AMD Carrizo以及后继架构的I2C,UART,GPIO提供支持.

Intel SoC IOSF Sideband support for SoC platforms CONFIG_IOSF_MBI

为主打低功耗的Intel SoC平台CPU开启"sideband"寄存器访问支持.这些CPU包括:BayTrail,Braswell,Quark

Single-depth WCHAN output CONFIG_SCHED_OMIT_FRAME_POINTER

使用简化的 /proc/<PID>/wchan 值,禁用此选项会使用更加精确的wchan值(可以在"ps -l"结果的WCHAN域看到),但会轻微增加调度器消耗.

Linux guest support CONFIG_HYPERVISOR_GUEST

如果这个内核将在虚拟机里面运行就开启,否则就关闭.

Enable paravirtualization code CONFIG_PARAVIRT

半虚拟化(paravirtualization)支持.

paravirt-ops debugging CONFIG_PARAVIRT_DEBUG

仅供调试.paravirt-ops是内核通用的半虚拟化接口.

Paravirtualization layer for spinlocks CONFIG_PARAVIRT_SPINLOCKS

半虚拟化的自旋锁支持.开启之后运行在虚拟机里的内核速度会加快,但是运行在物理CPU上的宿主内核运行效率会降低(最多可能会降低5%).请根据实际情况选择.

Xen guest support CONFIG_XEN

Xen半虚拟化技术支持

Enable Xen debug and tuning parameters in debugfs CONFIG_XEN_DEBUG_FS

为Xen在debugfs中输出各种统计信息和调整选项.对性能有严重影响.仅供调试.

KVM Guest support (including kvmclock) CONFIG_KVM_GUEST

KVM客户机支持(包括kvmclock).

Paravirtual steal time accounting CONFIG_PARAVIRT_TIME_ACCOUNTING

允许进行更细粒度的 task steal time 统计.会造成性能的略微降低.仅在你确实需要的时候才开启.

Memtest CONFIG_MEMTEST

为内核添加内存测试功能,也就是添加"memtest"内核引导参数以支持对内存进行"体检".仅在你确实知道这是什么东西并且确实需要的时候再开启.否则请关闭.

Processor family

处理器系列,请按照你实际使用的CPU选择."Generic-x86-64"表示通用于所有x86-64平台,而不是针对特定类型的CPU进行优化.

Supported processor vendors CONFIG_PROCESSOR_SELECT

支持的CPU厂商,按实际情况选择.

Enable DMI scanning CONFIG_DMI

允许扫描DMI(Desktop Management Interface)/SMBIOS(System Management BIOS)以获得机器的硬件配置,从而对已知的bug bios进行规避.具体涉及到哪些机器可参见"drivers/acpi/blacklist.c"文件.除非确定你的机器没有bug,否则请开启此项.

GART IOMMU support CONFIG_GART_IOMMU

为较旧的AMD Athlon64/Opteron/Turion/Sempron CPU提供GART IOMMU支持.图形地址重映射表(Graphics Address Remapping Table)可以将物理地址不连续的系统内存映射成看上去连续的图形内存交给GPU使用,是一种挖CPU内存补GPU内存机制,这种机制也可以被认为是一种"伪IOMMU"(缺乏地址空间隔离和访问控制).开启此选项以后,在内存大于3G的系统上,传统的32位总线(PCI/AGP)的设备将可以使用完全DMA的方式直接访问原本超出32位寻址范围之外的系统内存区域.具体方法是:通过编程让设备在受GART控制的显存区域工作,然后使用GART将这个地址映射为真实的物理地址(4GB以上)来实现的.USB/声卡/IDE/SATA之类的设备常常需要它.开启此选项之后,除非同时开启了CONFIG_IOMMU_DEBUG选项或者使用了"iommu=force"内核引导参数,否则此特性仅在条件满足的情况下(内存足够大且确有支持GART的设备)激活.由于较新的AMD CPU都已配备了AMD IOMMU(应该使用CONFIG_AMD_IOMMU),故而仅建议在内存大于3G的老式AMD系统上选"Y".

IBM Calgary IOMMU support CONFIG_CALGARY_IOMMU

IBM xSeries/pSeries 系列服务器的 Calgary IOMMU 支持.

Should Calgary be enabled by default? CONFIG_CALGARY_IOMMU_ENABLED_BY_DEFAULT

开启此选项表示默认启用Calgary特性,关闭此选项表示默认禁用Calgary特性(可以使用"iommu=calgary"内核引导参数开启).

Enable Maximum number of SMP Processors and NUMA Nodes CONFIG_MAXSMP

让内核支持x86_64平台所能支持的最大SMP处理器数量和最大NUMA节点数量.主要用于调试目的.

Maximum number of CPUs CONFIG_NR_CPUS

支持的最大CPU数量,每个CPU要占8KB的内核镜像,最小有效值是"2",最大有效值是"512".注意:这里的"CPU数量"是指"逻辑CPU数量".例如,对于一颗带有超线程技术的4核8线程CPU来说,相当于拥有8个CPU.

SMT (Hyperthreading) scheduler support CONFIG_SCHED_SMT

Intel超线程技术(HyperThreading)支持.

Multi-core scheduler support CONFIG_SCHED_MC

针对多核CPU进行调度策略优化

Preemption Model

内核抢占模式

No Forced Preemption (Server) CONFIG_PREEMPT_NONE

禁止内核抢占,这是Linux的传统模式,可以得到最大的吞吐量,适合服务器和科学计算环境

Voluntary Kernel Preemption (Desktop) CONFIG_PREEMPT_VOLUNTARY

自愿内核抢占,通过在内核中设置明确的抢占点以允许明确的内核抢占,可以提高响应速度,但是对吞吐量有不利影响.适合普通桌面环境的

Preemptible Kernel (Low-Latency Desktop) CONFIG_PREEMPT

主动内核抢占,允许抢占所有内核代码,对吞吐量有更大影响,适合需要运行实时程序的场合或者追求最快响应速度的桌面环境.

Reroute for broken boot IRQs CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS

这是一个对某些芯片组bug(在某些情况下会发送多余的"boot IRQ")的修复功能.开启此选项之后,仅对有此bug的芯片组生效.要检查哪些芯片组有此bug可以查看"drivers/pci/quirks.c"文件中的"quirk_reroute_to_boot_interrupts_intel"函数.

Machine Check / overheating reporting CONFIG_X86_MCE

MCE(Machine Check Exception)支持.让CPU检测到硬件故障(过热/数据错误)时通知内核,以便内核采取相应的措施(如显示一条提示信息或关机等).更多信息可以"man mcelog"看看.可以通过"grep mce /proc/cpuinfo"检查CPU是否支持此特性,若支持建议选中,否则请关闭.当然,如果你对自己的硬件质量很放心,又是桌面系统的话,不选也无所谓.

Intel MCE features CONFIG_X86_MCE_INTEL

Intel CPU 支持

AMD MCE features CONFIG_X86_MCE_AMD

AMD CPU 支持

Machine check injector support CONFIG_X86_MCE_INJECT

MCE注入支持,仅用于调试

Enable vsyscall emulation CONFIG_X86_VSYSCALL_EMULATION

对过时的vsyscall页提供仿真支持.禁用此项大致相当于使用"vsyscall=none"内核引导参数(差别在于当应用程序使用vsyscall时将直接崩溃(segfault)而不会产生警告消息).许多2013年之前编译的程序(也可能包括某些新近编译的程序)需要使用此特性.

Enable support for 16-bit segments CONFIG_X86_16BIT

如果你需要使用Wine运行那些古董级的16位保护模式程序,就选"Y",否则选"N"

Dell laptop support CONFIG_I8K

Dell Inspiron 8000 笔记本的 System Management Mode 驱动(i8k).该驱动可以读取CPU温度和风扇转速,进而帮助上层工具控制风扇转速.该驱动仅针对 Dell Inspiron 8000 笔记本进行过测试,所以不保证一定能适用于其他型号的Dell笔记本.

CPU microcode loading support CONFIG_MICROCODE

CPU的微代码更新支持,建议选中.CPU的微代码更新就像是给CPU打补丁,用于纠正CPU的行为.更新微代码的常规方法是升级BIOS,但是也可以在Linux启动后更新.比如在Gentoo下,可以使用"emerge microcode-ctl"安装microcode-ctl服务,再把这个服务加入boot运行级即可在每次开机时自动更新CPU微代码.其他Linux系统可以参考这个帖子.

Intel microcode loading support CONFIG_MICROCODE_INTEL

Intel CPU 微代码支持

AMD microcode loading support CONFIG_MICROCODE_AMD

AMD CPU 微代码支持

Early load microcode CONFIG_MICROCODE_INTEL_EARLY

支持从initrd镜像首部加载微代码,以便尽可能早的更新CPU微代码.即使在initrd首部并未嵌入微代码也不会造成问题,所以"Y"是安全的.不过你真的需要吗?笔者认为你一般并不需要:)

/dev/cpu/*/msr - Model-specific register support CONFIG_X86_MSR

允许用户空间的特权进程(使用rdmsr与wrmsr指令)访问x86的MSR寄存器(Model-Specific Register)以访问CPU的很多重要的参数.MSR是非标准寄存器,主要用于读取CPU的工作状态(频率/电压/功耗/温度/性能等),以及设置CPU的工作参数(触发特定的CPU特性,依CPU的不同而不同).msrtool工具可以转储出MSR的内容.不确定的可以选"M".

/dev/cpu/*/cpuid - CPU information support CONFIG_X86_CPUID

允许用户空间的特权进程使用CPUID指令获得详细的CPU信息(CPUID):CPU类型,型号,制造商信息,商标信息,序列号,缓存等.不确定的可以选"M".

Enable 1GB pages for kernel pagetables CONFIG_DIRECT_GBPAGES

允许内核页表使用大小为1GB的Hugepages并进行直线映射(linear mapping),需要高端CPU的支持(可以用"grep pdpe1gb /proc/cpuinfo"命令检查).这可以减小页表缓存(Translation Lookaside Buffer)的压力,从而提升系统的性能,这对于拥有海量内存并且运行某些特定应用(PosgreSQL,MySQL,Java,Memcached,KVM,Xen...)的系统来说比较有意义.如果你的CPU支持,可以选"Y".

Numa Memory Allocation and Scheduler Support CONFIG_NUMA

开启 NUMA(Non Uniform Memory Access) 支持.虽然说集成了内存控制器的CPU都属于NUMA架构.但事实上,对于大多数只有一颗物理CPU的个人电脑而言,即使支持NUMA架构,也没必要开启此特性.可以参考SMP/NUMA/MPP体系结构对比.此外,对于不支持"虚拟NUMA",或"虚拟NUMA"被禁用的虚拟机(即使所在的物理机是NUMA系统),也应该关闭此项.

Old style AMD Opteron NUMA detection CONFIG_AMD_NUMA

因为AMD使用一种旧式的方法读取NUMA配置信息(新式方法是CONFIG_X86_64_ACPI_NUMA),所以如果你使用的是AMD多核CPU,建议开启.不过,即使开启此选项,内核也会优先尝试CONFIG_X86_64_ACPI_NUMA方法,仅在失败

标签: 30显卡因电容差别产生黑屏崩溃用pcb板过渡的连接器插头27000mfd电容二极管2ez005传感器lga集成ic二极管z5w

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台