公告

Gentoo交流群:87709706 欢迎您的加入

#1 2022-08-03 23:34:23

batsom
管理团队
注册时间: 2022-08-03
帖子: 594
个人网站

General setup

General setup
常规设置

Cross-compiler tool prefix
CONFIG_CROSS_COMPILE
    交叉编译工具前缀(比如"arm-linux-"相当于使用"make CROSS_COMPILE=arm-linux-"进行编译).除非你想配置后默认自动进行交叉编译,否则不要使用此选项.

Compile also drivers which will not load
COMPILE_TEST
一些驱动可能在其它的编译平台被编译,而这个编译平台跟它的期望运行平台不一样(这不就是交叉编译么),
所以即使这些驱动不能在编译平台加载运行,一些开发者仍然可能想要构建这个驱动来进行编译测试
(就是看看它到底能不能编译通过,没打算让它运行么)所以,根据你的需求来选择好了,这个一般是不选。

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".

Enable process_vm_readv/writev syscalls
(CROSS_MEMORY_ATTACH)
启用process_vm_readv / writev系统调用

open by fhandle syscalls
CONFIG_FHANDLE
用户程序可以使用句柄(而非文件名)来追踪文件(使用open_by_handle_at(2)/name_to_handle_at(2)系统调用),
即使某文件被重命名,用户程序依然可定位那个文件.此特性有助于实现用户空间文件服务器(userspace file server).不确定的选"N",但使用systemd的建议选"Y".

uselib syscall (USELIB)
uselib系统调用

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".
    Expose irq internals in debugfs
        在debugfs中公开irq内部
       
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

Temporary per-CPU printk log buffer size
   临时的每CPU printk日志缓冲区大小

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"文件

Memory controller
内存控制器
Swap controller
交换控制器
Swap controller enabled by default
默认情况下启用交换控制器
IO controller
IO控制器
IO controller debugging
IO控制器调试
CPU controller
CPU控制器
   Group scheduling for SCHED_OTHER
   SCHED_OTHER的组调度
   CPU bandwidth provisioning for FAIR_GROUP_SCHED
   FAIR_GROUP_SCHED的CPU带宽配置
   Group scheduling for SCHED_RR/FIFO
   SCHED_RR / FIFO的组调度
PIDs controller
PID控制器
RDMA controller
RDMA控制器
Freezer controller
冷柜控制器
HugeTLB controller
HugeTLB控制器
Cpuset controller
Cpuset控制器
Include legacy /proc/<pid>/cpuset file
包括legacy / proc / <pid> / cpuset文件
Device controller
设备控制器
Simple CPU accounting controller
简单的CPU计费控制器
Perf controller
Perf控制器
Support for eBPF programs attached to cgroups
支持附加到cgroup的eBPF程序
Debug controller
调试控制器
   
    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的带宽
        Group scheduling for SCHED_OTHER
        CONFIG_FAIR_GROUP_SCHED
            公平CPU调度策略,也就是在多个cgroup之间平均分配CPU带宽.
            "鸡血补丁"CONFIG_SCHED_AUTOGROUP(自动分组调度功能)依赖于它.
            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).
    UTS namespace
    CONFIG_UTS_NS
        uname() 系统调用的命名空间支持
    IPC namespace
    CONFIG_IPC_NS
        进程间通信对象ID的命名空间支持
    User namespace
    CONFIG_USER_NS
        允许容器(也就是VServer)使用user命名空间.如果开启此项,
        建议同时开启CONFIG_MEMCG和CONFIG_MEMCG_KMEM选项,
        以允许用户空间使用"memory cgroup"限制非特权用户的内存使用量.不确定的选"N".
    PID Namespaces
    CONFIG_PID_NS
        进程PID命名空间支持
    Network namespace
    CONFIG_NET_NS
        网络协议栈的命名空间支持

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年之后的发行版中必须关闭.
    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
        文件或一个空格分隔的目录与文件列表.细节可以参考
        "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"是目前渐渐流行的格式,压缩率高,解压速度也不慢.

Compiler optimization level
  编译器优化级别
    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
        多个用户,组和功能支持
    sgetmask/ssetmask syscalls support
        sgetmask/ssetmask系统调用支持
    Sysctl syscall support
    CONFIG_SYSCTL_SYSCALL
        二进制sysctl接口支持.由于现在流行直接通过/proc/sys以ASCII明码方式修改内核参数
        (需要开启CONFIG_PROC_SYSCTL选项),所以已经不需要再通过二进制接口去控制内核参数,
        建议关闭它以减小内核尺寸.
    Sysctl syscall support
        Sysctl系统调用支持
    Posix Clocks & timers
        Posix时钟和计时器
    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)系统接口,建议开启.
    Enable signalfd() system call
    CONFIG_SIGNALFD
        signalfd()系统调用支持,建议开启.传统的处理信号的方式是注册信号处理函数,
        由于信号是异步发生的,要解决数据的并发访问和可重入问题.signalfd可以将信号抽象为一个文件描述符,
        当有信号发生时可以对其read,这样可以将信号的监听放到select/poll/epoll监听队列中.
    Enable timerfd() system call
    CONFIG_TIMERFD
        timerfd()系统调用支持,建议开启.timerfd可以实现定时器功能,将定时器抽象为文件描述符,
        当定时器到期时可以对其read,这样也可以放到select/poll/epoll监听队列中.
        更多信息可以参考linux新的API signalfd、timerfd、eventfd使用说明
    Enable eventfd() system call
    CONFIG_EVENTFD
        eventfd()系统调用支持,建议开启.eventfd实现了线程之间事件通知的方式,
        eventfd的缓冲区大小是sizeof(uint64_t),向其write可以递增这个计数器,read操作可以读取,并进行清零.
        eventfd也可以放到select/poll/epoll监听队列中.当计数器不是0时,有可读事件发生,可以进行读取.

Enable bpf() system call
    启用bpf()系统调用

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
    启用madvise/fadvise系统调用
   
Enable userfaultfd() system call
    启用userfaultfd()系统调用

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

Enable membarrier() system call
启用membarrier()系统调用

Embedded system
CONFIG_EMBEDDED
    如果你是为嵌入式系统编译内核,可以开启此选项,这样一些高级选项就会显示出来.
    单独选中此项本身对内核并无任何改变.
   
PC/104 support
   
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"中包含了从内核导出的虚拟内存的各种统计信息.
    开启此项后可以显示较详细的信息(包含各种事件计数器),关闭此项则仅仅显示很简略的信息.
    主要用于调试和统计.

Disable heap randomization
    禁用堆随机化

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)的嵌入式环境.

Allow slab caches to be merged
    允许合并slab缓存
SLAB freelist randomization
    SLAB freelist随机化
Harden slab freelist metadata
    硬化平板freelist元数据
SLUB per cpu partial cache
    SLUB每个CPU部分缓存

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
    静态密钥自检
   
GCC plugins
    GCC插件
   
   Stack Protector buffer overflow detection
      Stack Protector缓冲区溢出检测
     
Number of bits to use for ASLR of mmap base address
    用于mmap基址的ASLR的位数
   
Number of bits to use for ASLR of mmap base address for compatible applications
    兼容应用程序的mmap基址的ASLR使用的位数
   
Use a virtually-mapped stack
    使用虚拟映射堆栈
   
Perform full reference count validation at the expense of speed
    以牺牲速度为代价执行完整的引用计数验证
   
GCOV-based kernel profiling
    基于GCOV的内核分析

Transparent user-space probes
CONFIG_UPROBES
    Uprobes与Kprobes类似,但主要用于用户空间的调试.
   
Enable GCOV-based kernel profiling
CONFIG_GCOV_KERNEL
    基于GCC的gcov(代码覆盖率测试工具)的代码分析支持,仅用于调试

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

离线

页脚

Powered by FluxBB

本站由XREA提供空间支持