<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<atom:link href="http://gentoo-zh.org/extern.php?action=feed&amp;tid=13&amp;type=rss" rel="self" type="application/rss+xml" />
		<title><![CDATA[Gentoo中文社区 / General setup]]></title>
		<link>http://www.gentoo-zh.org/viewtopic.php?id=13</link>
		<description><![CDATA[General setup 最近发表的帖子。]]></description>
		<lastBuildDate>Wed, 03 Aug 2022 14:34:23 +0000</lastBuildDate>
		<generator>FluxBB</generator>
		<item>
			<title><![CDATA[General setup]]></title>
			<link>http://www.gentoo-zh.org/viewtopic.php?pid=13#p13</link>
			<description><![CDATA[<p>General setup<br />常规设置</p><p>Cross-compiler tool prefix<br />CONFIG_CROSS_COMPILE<br />&#160; &#160; 交叉编译工具前缀(比如&quot;arm-linux-&quot;相当于使用&quot;make CROSS_COMPILE=arm-linux-&quot;进行编译).除非你想配置后默认自动进行交叉编译,否则不要使用此选项.</p><p>Compile also drivers which will not load<br />COMPILE_TEST<br />一些驱动可能在其它的编译平台被编译，而这个编译平台跟它的期望运行平台不一样（这不就是交叉编译么），<br />所以即使这些驱动不能在编译平台加载运行，一些开发者仍然可能想要构建这个驱动来进行编译测试<br />（就是看看它到底能不能编译通过，没打算让它运行么）所以，根据你的需求来选择好了，这个一般是不选。</p><p>Local version - append to kernel release<br />CONFIG_LOCALVERSION<br />&#160; &#160; 在内核版本后面加上自定义的版本字符串(最大64字符),可以用&quot;uname -a&quot;命令看到<br />&#160; &#160;<br />Automatically append version information to the version string<br />CONFIG_LOCALVERSION_AUTO<br />&#160; &#160; 自动在版本字符串(CONFIG_LOCALVERSION)后面添加版本信息(类似&quot;-gxxxxxxxx&quot;格式),需要有perl以及git仓库支持</p><p>Kernel compression mode<br />&#160; &#160; 内核镜像的压缩格式,可选Gzip/Bzip2/LZMA/XZ/LZO格式之一,推荐使用XZ格式.你的系统中需要有相应的压缩工具.</p><p>Default hostname<br />CONFIG_DEFAULT_HOSTNAME<br />&#160; &#160; 设置默认主机名,默认值是&quot;(none)&quot;.用户可以随后使用系统调用sethostname()来修改主机名.</p><p>Support for paging of anonymous memory (swap)<br />CONFIG_SWAP<br />&#160; &#160; 使用交换分区或者交换文件来做为虚拟内存</p><p>System V IPC<br />CONFIG_SYSVIPC<br />&#160; &#160; System V 进程间通信(IPC)支持,用于进程间同步和交换数据,许多程序需要这个功能.选&quot;Y&quot;,除非你确实知道自己在做什么</p><p>POSIX Message Queues<br />CONFIG_POSIX_MQUEUE<br />&#160; &#160; POSIX消息队列是POSIX IPC的一部分,如果你想编译和运行那些使用&quot;mq_*&quot;系统调用的程序(比如为Solaris开发的程序),<br />&#160; &#160; 就必须开启此选项.POSIX消息队列可以作为&quot;mqueue&quot;文件系统挂载以方便用户对队列进行操作.不确定的选&quot;Y&quot;.</p><p>Enable process_vm_readv/writev syscalls<br />(CROSS_MEMORY_ATTACH)<br />启用process_vm_readv / writev系统调用</p><p>open by fhandle syscalls<br />CONFIG_FHANDLE<br />用户程序可以使用句柄(而非文件名)来追踪文件(使用open_by_handle_at(2)/name_to_handle_at(2)系统调用),<br />即使某文件被重命名,用户程序依然可定位那个文件.此特性有助于实现用户空间文件服务器(userspace file server).不确定的选&quot;N&quot;,但使用systemd的建议选&quot;Y&quot;.</p><p>uselib syscall (USELIB)<br />uselib系统调用</p><p>Auditing support<br />CONFIG_AUDIT<br />&#160; &#160; 内核审计(跟踪每个进程的活动情况)支持,某些安全相关的内核子系统(例如SELinux)需要它</p><p>&#160; &#160; Enable system-call auditing support<br />&#160; &#160; CONFIG_AUDITSYSCALL<br />&#160; &#160; &#160; &#160; 对系统调用进行审计.既可独立使用,也可被其他内核子系统(例如SELinux)使用.<br />&#160; &#160; Make audit loginuid immutable<br />&#160; &#160; CONFIG_AUDIT_LOGINUID_IMMUTABLE<br />&#160; &#160; 审计时使用固定的loginuid.在使用systemd之类的系统上应该开启(login服务由init进程负责重启),<br />&#160; &#160; 在使用SysVinit或Upstart之类的系统上应该关闭(login服务由系统管理员手动重启).OpenRC就是一个基于SysVinit的系统.</p><p>IRQ subsystem<br />&#160; &#160; IRQ(中断请求)子系统</p><p>&#160; &#160; Expose hardware/virtual IRQ mapping via debugfs<br />&#160; &#160; CONFIG_IRQ_DOMAIN_DEBUG<br />&#160; &#160; &#160; &#160; 通过debugfs中的irq_domain_mapping文件向用户显示硬件IRQ号/Linux IRQ号之间的对应关系.仅用于开发调试.<br />&#160; &#160; Support sparse irq numbering<br />&#160; &#160; CONFIG_SPARSE_IRQ<br />&#160; &#160; &#160; &#160; 稀疏IRQ号支持.它允许在小型设备上(例如嵌入式设备)定义一个很高的CONFIG_NR_CPUS值,<br />&#160; &#160; &#160; &#160; 但仍然不希望占用太多内核&quot;memory footprint&quot;(一段可以被操作或被管理的内存区域)的场合.<br />&#160; &#160; &#160; &#160; 稀疏IRQ也更适合NUMA平台,因为它以一种对NUMA更友好的方式分发中断描述符.不确定的选&quot;N&quot;.<br />&#160; &#160; Expose irq internals in debugfs<br />&#160; &#160; &#160; &#160; 在debugfs中公开irq内部<br />&#160; &#160; &#160; &#160;<br />Timers subsystem<br />&#160; &#160; Linux内核时钟子系统</p><p>&#160; &#160; Timer tick handling<br />&#160; &#160; &#160; &#160; 内核时钟滴答处理程序,更多信息可以参考内核源码树下的&quot;Documentation/timers/NO_HZ.txt&quot;文件</p><p>&#160; &#160; &#160; &#160; Periodic timer ticks (constant rate, no dynticks)<br />&#160; &#160; &#160; &#160; CONFIG_HZ_PERIODIC<br />&#160; &#160; &#160; &#160; &#160; &#160; 无论CPU是否需要,都强制按照固定频率不断触发时钟中断.这是最耗电的方式,不推荐使用<br />&#160; &#160; &#160; &#160; Idle dynticks system (tickless idle)<br />&#160; &#160; &#160; &#160; CONFIG_NO_HZ_IDLE<br />&#160; &#160; &#160; &#160; &#160; &#160;CPU在空闲状态时不产生不必要的时钟中断,以使处理器能够在较低能耗状态下运行以节约电力,适合于大多数场合<br />&#160; &#160; &#160; &#160; Full dynticks system (tickless)<br />&#160; &#160; &#160; &#160; CONFIG_NO_HZ_FULL<br />&#160; &#160; &#160; &#160; 完全无滴嗒:即使CPU在忙碌状态也尽可能关闭所有时钟中断,适用于CPU在同一时间仅运行一个任务,<br />&#160; &#160; &#160; &#160; 或者用户空间程序极少与内核交互的场合.即使开启此选项,也需要额外设置&quot;nohz_full=?&quot;内核命令行参数才能真正生效.<br />&#160; &#160; Full dynticks system on all CPUs by default<br />&#160; &#160; CONFIG_NO_HZ_FULL_ALL<br />&#160; &#160; &#160; &#160; 即使没有设置&quot;nohz_full&quot;引导参数,也默认对所有CPU(boot CPU 除外)开启完全无滴答特性.<br />&#160; &#160; Old Idle dynticks config<br />&#160; &#160; CONFIG_NO_HZ<br />&#160; &#160; &#160; &#160; 等价于CONFIG_NO_HZ_IDLE,临时用来兼容老版本内核选项,未来会被删除.<br />&#160; &#160; High Resolution Timer Support<br />&#160; &#160; CONFIG_HIGH_RES_TIMERS<br />&#160; &#160; &#160; &#160; 高精度定时器(hrtimer)是从2.6.16开始引入,用于取代传统timer wheel(基于jiffies定时器)的时钟子系统.可以降低与内核其他模块的耦合性,<br />&#160; &#160; &#160; &#160; 还可以提供比1毫秒更高的精度(因为它可以读取HPET/TSC等新型硬件时钟源),<br />&#160; &#160; &#160; &#160; 可以更好的支持音视频等对时间精度要求较高的应用.建议选&quot;Y&quot;.[提示]这里说的&quot;定时器&quot;是指&quot;软件定时器&quot;,<br />&#160; &#160; &#160; &#160; 而不是主板或CPU上集成的硬件时钟发生器(ACPI PM Timer/HPET Timer/TSC Timer).</p><p>CPU/Task time and stats accounting<br />&#160; &#160; CPU/进程的时间及状态统计</p><p>&#160; &#160; Cputime accounting<br />&#160; &#160; &#160; &#160; CPU时间统计方式<br />&#160; &#160; &#160; &#160; Simple tick based cputime accounting<br />&#160; &#160; &#160; &#160; CONFIG_TICK_CPU_ACCOUNTING<br />&#160; &#160; &#160; &#160; &#160; &#160; 简单的基于滴答的统计,适用于大多数场合<br />&#160; &#160; &#160; &#160; Deterministic task and CPU time accounting<br />&#160; &#160; &#160; &#160; CONFIG_VIRT_CPU_ACCOUNTING_NATIVE<br />&#160; &#160; &#160; &#160; &#160; &#160; 通过读取CPU计数器进行统计,可以提供更精确的统计,但是对性能有一些不利影响.<br />&#160; &#160; &#160; &#160; Full dynticks CPU time accounting<br />&#160; &#160; &#160; &#160; CONFIG_VIRT_CPU_ACCOUNTING_GEN<br />&#160; &#160; &#160; &#160; &#160; &#160; 利用上下文跟踪子系统,通过观察每一个内核与用户空间的边界进行统计.<br />&#160; &#160; &#160; &#160; &#160; &#160; 该选项对性能有显著的不良影响,目前仅用于完全无滴答子系统(CONFIG_NO_HZ_FULL)<br />&#160; &#160; &#160; &#160; &#160; &#160; 的调试<br />&#160; &#160; Fine granularity task level IRQ time accounting<br />&#160; &#160; &#160; &#160; CONFIG_IRQ_TIME_ACCOUNTING<br />&#160; &#160; &#160; &#160; &#160; &#160; 通过读取TSC时间戳进行统计,这是统计进程IRQ时间的更细粒度的统计方式,<br />&#160; &#160; &#160; &#160; &#160; &#160; 但对性能有些不良影响(特别是在RDTSC指令速度较慢的CPU上).<br />&#160; &#160; BSD Process Accounting<br />&#160; &#160; CONFIG_BSD_PROCESS_ACCT<br />&#160; &#160; &#160; &#160; 用户空间程序可以要求内核将进程的统计信息写入一个指定的文件,<br />&#160; &#160; &#160; &#160; 主要包括进程的创建时间/创建者/内存占用等信息.<br />&#160; &#160; BSD Process Accounting version 3 file format<br />&#160; &#160; &#160; &#160; CONFIG_BSD_PROCESS_ACCT_V3<br />&#160; &#160; &#160; &#160; &#160; &#160; 使用新的v3版文件格式,可以包含每个进程的PID和其父进程的PID,<br />&#160; &#160; &#160; &#160; &#160; &#160; 但是不兼容老版本的文件格式.比如 GNU Accounting Utilities<br />&#160; &#160; &#160; &#160; &#160; &#160; 这样的工具可以识别v3格式<br />&#160; &#160; Export task/process statistics through netlink<br />&#160; &#160; CONFIG_TASKSTATS<br />&#160; &#160; &#160; &#160; 通过netlink接口向用户空间导出进程的统计信息,<br />&#160; &#160; &#160; &#160; 与 BSD Process Accounting 的不同之处在于这些统计信息在整个进程生存期都是可用的.<br />&#160; &#160; Enable per-task delay accounting<br />&#160; &#160; &#160; &#160; CONFIG_TASK_DELAY_ACCT<br />&#160; &#160; &#160; &#160; &#160; &#160; 在统计信息中包含进程等候系统资源(cpu,IO同步,内存交换等)所花费的时间<br />&#160; &#160; Enable extended accounting over taskstats<br />&#160; &#160; &#160; &#160; CONFIG_TASK_XACCT<br />&#160; &#160; &#160; &#160; &#160; &#160; 在统计信息中包含进程的更多扩展信息.<br />&#160; &#160; Enable per-task storage I/O accounting<br />&#160; &#160; &#160; &#160; CONFIG_TASK_IO_ACCOUNTING<br />&#160; &#160; &#160; &#160; &#160; &#160; 在统计信息中包含进程在存储设备上的I/O字节数.</p><p>RCU Subsystem<br />&#160; &#160; RCU(Read-Copy Update)子系统.在读多写少的情况下,<br />&#160; &#160; 这是一个高性能的锁机制,对于被RCU保护的共享数据结构,<br />&#160; &#160; 读者不需要获得任何锁就可以访问它(速度非常快),<br />&#160; &#160; 但写者在访问它时首先拷贝一个副本,然后对副本进行修改,<br />&#160; &#160; 最后使用一个回调机制在适当的时机把指向原来数据的指针重新指向新的被修改的数据,<br />&#160; &#160; 速度非常慢.RCU只适用于读多写少的情况:如网络路由表的查询更新,设备状态表的维护,<br />&#160; &#160; 数据结构的延迟释放以及多径I/O设备的维护等.<br />&#160; &#160;<br />&#160; &#160; RCU Implementation<br />&#160; &#160; &#160; &#160; RCU的实现方式<br />&#160; &#160; &#160; &#160; Tree-based hierarchical RCU<br />&#160; &#160; &#160; &#160; CONFIG_TREE_RCU<br />&#160; &#160; &#160; &#160; &#160; &#160; 基于树型分层结构的实现.最适用于多CPU的非实时系统.<br />&#160; &#160; &#160; &#160; Preemptible tree-based hierarchical RCU<br />&#160; &#160; &#160; &#160; CONFIG_TREE_PREEMPT_RCU<br />&#160; &#160; &#160; &#160; &#160; &#160; 抢占式基于树型分层结构的实现.最适用于那些要求快速响应的多CPU实时系统.<br />&#160; &#160; &#160; &#160; UP-only small-memory-footprint RCU<br />&#160; &#160; &#160; &#160; CONFIG_TINY_RCU<br />&#160; &#160; &#160; &#160; &#160; &#160; 最简单的实现,能够大幅降低RCU系统的内存占用.最适用于单CPU的非实时系统.<br />&#160; &#160; &#160; &#160; Preemptible UP-only small-memory-footprint RCU<br />&#160; &#160; &#160; &#160; CONFIG_TINY_PREEMPT_RCU<br />&#160; &#160; &#160; &#160; &#160; &#160; 抢占式简单实现,能够大幅降低RCU系统的内存占用.最适用于那些要求快速响应的单CPU实时系统.<br />&#160; &#160; &#160; &#160; Consider userspace as in RCU extended quiescent state<br />&#160; &#160; &#160; &#160; CONFIG_RCU_USER_QS<br />&#160; &#160; &#160; &#160; &#160; &#160; 在内核和用户边界设置钩子函数,将运行在用户态的CPU从全局RCU状态机制中移除,<br />&#160; &#160; &#160; &#160; &#160; &#160; 这样就不会在RCU系统中维护此CPU的时钟滴答.<br />&#160; &#160; &#160; &#160; &#160; &#160; 除非你想要帮助开发CONFIG_NO_HZ_FULL模块,否则不要打开此选项,而且它还会对性能有不利影响.<br />&#160; &#160; &#160; &#160; Force context tracking<br />&#160; &#160; &#160; &#160; CONFIG_CONTEXT_TRACKING_FORCE<br />&#160; &#160; &#160; &#160; &#160; &#160; 默认在内核和用户边界进行探测(上下文跟踪),<br />&#160; &#160; &#160; &#160; &#160; &#160; 以便测试依赖于此特性的各种功能(比如用户空间的 RCU extended quiescent state),<br />&#160; &#160; &#160; &#160; &#160; &#160; 这个特性目前仅用于调试目的,未来也许会用于为CONFIG_NO_HZ_FULL模块提供支持<br />&#160; &#160; &#160; &#160; Tree-based hierarchical RCU fanout value<br />&#160; &#160; &#160; &#160; CONFIG_RCU_FANOUT<br />&#160; &#160; &#160; &#160; &#160; &#160; 这个选项控制着树形RCU层次结构的端点数(fanout),<br />&#160; &#160; &#160; &#160; &#160; &#160; 以允许RCU子系统在拥有海量CPU的系统上高效工作.<br />&#160; &#160; &#160; &#160; &#160; &#160; 这个值必须至少等于CONFIG_NR_CPUS的1/4次方(4次根号).<br />&#160; &#160; &#160; &#160; &#160; &#160; 生产系统上应该使用默认值(64).仅在你想调试RCU子系统时才需要减小此值.<br />&#160; &#160; &#160; &#160; Tree-based hierarchical RCU leaf-level fanout value<br />&#160; &#160; &#160; &#160; CONFIG_RCU_FANOUT_LEAF<br />&#160; &#160; &#160; &#160; &#160; &#160; 这个选项控制着树形RCU层次结构的叶子层的端点数(leaf-level fanout).<br />&#160; &#160; &#160; &#160; &#160; &#160; 对于期望拥有更高能耗比(更节能)的系统,请保持其默认值(16).<br />&#160; &#160; &#160; &#160; &#160; &#160; 对于拥有成千上万个CPU的系统来说,应该考虑将其设为最大值(CONFIG_RCU_FANOUT).<br />&#160; &#160; &#160; &#160; Disable tree-based hierarchical RCU auto-balancing<br />&#160; &#160; &#160; &#160; CONFIG_RCU_FANOUT_EXACT<br />&#160; &#160; &#160; &#160; &#160; &#160; 强制按照CONFIG_RCU_FANOUT_LEAF的值,<br />&#160; &#160; &#160; &#160; &#160; &#160; 而不是使用自动平衡树结构来实现RCU子系统.目前仅用于调试目的.未来也许会用于增强NUMA系统的性能.<br />&#160; &#160; &#160; &#160; Accelerate last non-dyntick-idle CPU&#039;s grace periods<br />&#160; &#160; &#160; &#160; CONFIG_RCU_FAST_NO_HZ<br />&#160; &#160; &#160; &#160; &#160; &#160; 即使CPU还在忙碌,也允许进入dynticks-idle状态,<br />&#160; &#160; &#160; &#160; &#160; &#160; 并且阻止RCU每4个滴答就唤醒一次该CPU,这样能够更有效的使用电力,<br />&#160; &#160; &#160; &#160; &#160; &#160; 同时也拉长了RCU grace period的时间,造成性能降低.<br />&#160; &#160; &#160; &#160; &#160; &#160; 如果能耗比对你而言非常重要(你想节省每一分电力),<br />&#160; &#160; &#160; &#160; &#160; &#160; 并且你不在乎系统性能的降低(CPU唤醒时间增加),可以开启此选项.台式机和服务器建议关闭此选项.<br />&#160; &#160; &#160; &#160; Enable RCU priority boosting<br />&#160; &#160; &#160; &#160; CONFIG_RCU_BOOST<br />&#160; &#160; &#160; &#160; &#160; &#160; 允许提升RCU子系统的实时优先级(包括读操作与写操作),<br />&#160; &#160; &#160; &#160; &#160; &#160; 以避免RCU操作被阻塞太长时间.如果系统的CPU负载经常很重,<br />&#160; &#160; &#160; &#160; &#160; &#160; 或者你需要快速的实时响应系统,那么就选&quot;Y&quot;,否则应该选&quot;N&quot;.<br />&#160; &#160; &#160; &#160; Real-time priority to boost RCU readers to<br />&#160; &#160; &#160; &#160; CONFIG_RCU_BOOST_PRIO<br />&#160; &#160; &#160; &#160; &#160; &#160; 允许提升被长时间抢占(阻塞)的RCU读操作的实时优先级到什么程度.<br />&#160; &#160; &#160; &#160; &#160; &#160; 取值范围是[1,99].默认值&quot;1&quot;适用于实时应用程序中不包含CPU密集型<br />&#160; &#160; &#160; &#160; &#160; &#160; (CPU-bound)线程的常规场合(例如大多数桌面系统).<br />&#160; &#160; &#160; &#160; &#160; &#160; 但是如果你的实时应用程序拥有一个或多个CPU密集型线程,那么可能需要增加这个值,<br />&#160; &#160; &#160; &#160; &#160; &#160; 具体可以参考内核帮助的说明.仅在你确实理解了的情况下再改变默认值.<br />&#160; &#160; &#160; &#160; Milliseconds to delay boosting after RCU grace-period start<br />&#160; &#160; &#160; &#160; CONFIG_RCU_BOOST_DELAY<br />&#160; &#160; &#160; &#160; &#160; &#160;在提升RCU读操作的优先级之前,允许有多长时间潜伏期(阻塞),<br />&#160; &#160; &#160; &#160; &#160; &#160;取值范围是[0,3000],单位是毫秒,默认值是&quot;500&quot;.不确定的请使用默认值.<br />&#160; &#160; &#160; &#160; Offload RCU callback processing from boot-selected CPUs<br />&#160; &#160; &#160; &#160; CONFIG_RCU_NOCB_CPU<br />&#160; &#160; &#160; &#160; &#160; &#160; 如果你想帮助调试内核可以开启,否则请关闭.<br />&#160; &#160; &#160; &#160; Build-forced no-CBs CPUs<br />&#160; &#160; &#160; &#160; &#160; &#160; 在开启CONFIG_RCU_NOCB_CPU选项的情况下,指定哪些CPU是No-CB CPU,<br />&#160; &#160; &#160; &#160; &#160; &#160; 相当于预先设置&quot;rcu_nocbs=&quot;内核引导参数.</p><p>Kernel .config support<br />CONFIG_IKCONFIG<br />&#160; &#160; 把内核的配置信息编译进内核中,以后可以通过scripts/extract-ikconfig脚本从内核镜像中提取这些信息</p><p>Enable access to .config through /proc/config.gz<br />&#160; &#160; CONFIG_IKCONFIG_PROC<br />&#160; &#160; &#160; &#160; 允许通过 /proc/config.gz 文件访问内核的配置信息</p><p>Kernel log buffer size<br />CONFIG_LOG_BUF_SHIFT<br />&#160; &#160; 设置内核日志缓冲区的大小: 12(最小值)=4KB,...,16=64KB,17=128KB,18=256KB,...,21(最大值)=2048KB</p><p>Temporary per-CPU printk log buffer size<br />&#160; &#160;临时的每CPU printk日志缓冲区大小</p><p>Automatically enable NUMA aware memory/task placement<br />CONFIG_NUMA_BALANCING_DEFAULT_ENABLED<br />&#160; &#160; 在NUMA(Non-Uniform Memory Access Architecture)系统上自动启用进程/内存均衡,<br />&#160; &#160; 也就是自动开启CONFIG_NUMA_BALANCING特性.<br />&#160; &#160;<br />Memory placement aware NUMA scheduler<br />CONFIG_NUMA_BALANCING<br />&#160; &#160; 允许自动根据NUMA系统的节点分布状况进行进程/内存均衡(方法很原始,就是简单的内存移动).<br />&#160; &#160; 这个选项对UMA系统无效.[提示]UMA系统的例子:(1)只有一颗物理CPU(即使是多核)的电脑,<br />&#160; &#160; (2)不支持&quot;虚拟NUMA&quot;,或&quot;虚拟NUMA&quot;被禁用的虚拟机(即使所在的物理机是NUMA系统)<br />&#160; &#160;<br />Control Group support<br />CONFIG_CGROUPS<br />&#160; &#160; Cgroup(Control Group)是一种进程管理机制,可以针对一组进程进行系统资源的分配和管理,<br />&#160; &#160; 可用于Cpusets,CFS(完全公平调度器),内存管理等子系统.此外,systemd也依赖于它.<br />&#160; &#160; 更多细节可以参考内核的&quot;Documentation/cgroups/cgroups.txt&quot;文件</p><p>Memory controller<br />内存控制器<br />Swap controller<br />交换控制器<br />Swap controller enabled by default<br />默认情况下启用交换控制器<br />IO controller<br />IO控制器<br />IO controller debugging<br />IO控制器调试<br />CPU controller<br />CPU控制器<br />&#160; &#160;Group scheduling for SCHED_OTHER<br />&#160; &#160;SCHED_OTHER的组调度<br />&#160; &#160;CPU bandwidth provisioning for FAIR_GROUP_SCHED<br />&#160; &#160;FAIR_GROUP_SCHED的CPU带宽配置<br />&#160; &#160;Group scheduling for SCHED_RR/FIFO<br />&#160; &#160;SCHED_RR / FIFO的组调度<br />PIDs controller<br />PID控制器<br />RDMA controller<br />RDMA控制器<br />Freezer controller<br />冷柜控制器<br />HugeTLB controller<br />HugeTLB控制器<br />Cpuset controller<br />Cpuset控制器<br />Include legacy /proc/&lt;pid&gt;/cpuset file<br />包括legacy / proc / &lt;pid&gt; / cpuset文件<br />Device controller<br />设备控制器<br />Simple CPU accounting controller<br />简单的CPU计费控制器<br />Perf controller<br />Perf控制器<br />Support for eBPF programs attached to cgroups<br />支持附加到cgroup的eBPF程序<br />Debug controller<br />调试控制器<br />&#160; &#160;<br />&#160; &#160; Example debug cgroup subsystem<br />&#160; &#160; CONFIG_CGROUP_DEBUG<br />&#160; &#160; &#160; &#160; 导出cgroups框架的调试信息,仅用于调试目的.&#160; &#160; &#160; &#160;<br />&#160; &#160; Freezer cgroup subsystem<br />&#160; &#160; CONFIG_CGROUP_FREEZER<br />&#160; &#160; &#160; &#160; 允许冻结/解冻cgroup内所有进程<br />&#160; &#160; Device controller for cgroups&#160; &#160;<br />&#160; &#160; CONFIG_CGROUP_DEVICE<br />&#160; &#160; &#160; &#160; 允许为cgroup建立设备白名单,这样cgroup内的进程将仅允许对白名单中的设备进行mknod/open操作<br />&#160; &#160; Cpuset support<br />&#160; &#160; CONFIG_CPUSETS<br />&#160; &#160; &#160; &#160; CPUSET支持:允许将CPU和内存进行分组,并指定某些进程只能运行于特定的分组.这里有一篇CPUSET的用法<br />&#160; &#160; &#160; &#160; Include legacy /proc/&lt;pid&gt;/cpuset file<br />&#160; &#160; &#160; &#160; CONFIG_PROC_PID_CPUSET<br />&#160; &#160; &#160; &#160; &#160; &#160; 提供过时的 /proc/&lt;pid&gt;/cpuset 文件接口<br />&#160; &#160; Simple CPU accounting cgroup subsystem<br />&#160; &#160; CONFIG_CGROUP_CPUACCT<br />&#160; &#160; &#160; &#160; 提供一个简单的资源控制器(Resource Controller,用于实现一组任务间的资源共享),以监控cgroup内所有进程的总CPU使用量.<br />&#160; &#160; Resource counters<br />&#160; &#160; CONFIG_RESOURCE_COUNTERS<br />&#160; &#160; &#160; &#160; 为cgroup提供独立于controller资源计数器<br />&#160; &#160; &#160; &#160; Memory Resource Controller for Control Groups<br />&#160; &#160; &#160; &#160; CONFIG_MEMCG<br />&#160; &#160; &#160; &#160; &#160; &#160; 为cgroup添加内存资源控制器,包含匿名内存和页面缓存(Documentation/cgroups/memory.txt).<br />&#160; &#160; &#160; &#160; &#160; &#160; 开启此选项后,将会增加关联到每个内存页fixed memory大小,<br />&#160; &#160; &#160; &#160; &#160; &#160; 具体在64位系统上是40bytes/PAGE_SIZE.<br />&#160; &#160; &#160; &#160; &#160; &#160; 仅在你确实明白什么是 memory resource controller 并且确实需要的情况下才开启此选项.<br />&#160; &#160; &#160; &#160; &#160; &#160; 此功能可以通过命令行选项&quot;cgroup_disable=memory&quot;进行关闭.<br />&#160; &#160; &#160; &#160; &#160; &#160; Memory Resource Controller Swap Extension<br />&#160; &#160; &#160; &#160; &#160; &#160; CONFIG_MEMCG_SWAP<br />&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; 给 Memory Resource Controller添加对swap的管理功能.这样就可以针对<br />&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; 每个cgroup限定其使用的mem+swap总量.<br />&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; 如果关闭此选项, memory resource controller将仅能限制mem的使用量,<br />&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; 而无法对swap进行控制(进程有可能耗尽swap).<br />&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; 开启此功能会对性能有不利影响,<br />&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; 并且为了追踪swap的使用也会消耗更多的内存(如果swap的页面大小是4KB,<br />&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; 那么每1GB的swap需要额外消耗512KB内存),所以在内存较小的系统上不建议开启.<br />&#160; &#160; &#160; &#160; &#160; Memory Resource Controller Swap Extension enabled by default<br />&#160; &#160; &#160; &#160; &#160; CONFIG_MEMCG_SWAP_ENABLED<br />&#160; &#160; &#160; &#160; &#160; &#160; &#160; 如果开启此选项,那么将默认开启CONFIG_MEMCG_SWAP特性,<br />&#160; &#160; &#160; &#160; &#160; &#160; &#160; 否则将默认关闭.即使默认开启也可以通过内核引导参数&quot;swapaccount=0&quot;禁止此特性.<br />&#160; &#160; &#160; &#160; &#160; Memory Resource Controller Kernel Memory accounting<br />&#160; &#160; &#160; &#160; &#160; CONFIG_MEMCG_KMEM<br />&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; 为 Memory Resource Controller 添加对内核对象所占用内存的管理功能.<br />&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; 和标准的 Memory Resource Controller 对内存的控制不一样之处在于:<br />&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; 这些内核对象所占用的内存是基于每个内存页的,并且可以被swap到硬盘.<br />&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; 使用这个功能可以确保cgroup中的进程不会单独耗尽所有内核资源.<br />&#160; &#160; &#160; &#160; &#160; HugeTLB Resource Controller for Control Groups<br />&#160; &#160; &#160; &#160; &#160; CONFIG_CGROUP_HUGETLB<br />&#160; &#160; &#160; &#160; &#160; &#160; 为cgroup添加对HugeTLB页的资源控制功能.开启此选项之后,<br />&#160; &#160; &#160; &#160; &#160; &#160; 你就可以针对每个cgroup限定其对HugeTLB的使用.<br />&#160; &#160; Enable perf_event per-cpu per-container group (cgroup) monitoring<br />&#160; &#160; CONFIG_CGROUP_PERF<br />&#160; &#160; &#160; &#160; 将per-cpu模式进行扩展,使其可以监控属于特定cgroup并运行于特定CPU上的线程<br />&#160; &#160; Group CPU scheduler<br />&#160; &#160; CONFIG_CGROUP_SCHED<br />&#160; &#160; &#160; &#160; 让CPU调度程序可以在不同的cgroup之间分配CPU的带宽<br />&#160; &#160; &#160; &#160; Group scheduling for SCHED_OTHER<br />&#160; &#160; &#160; &#160; CONFIG_FAIR_GROUP_SCHED<br />&#160; &#160; &#160; &#160; &#160; &#160; 公平CPU调度策略,也就是在多个cgroup之间平均分配CPU带宽.<br />&#160; &#160; &#160; &#160; &#160; &#160; &quot;鸡血补丁&quot;CONFIG_SCHED_AUTOGROUP(自动分组调度功能)依赖于它.<br />&#160; &#160; &#160; &#160; &#160; &#160; CPU bandwidth provisioning for FAIR_GROUP_SCHED<br />&#160; &#160; &#160; &#160; &#160; &#160; CONFIG_CFS_BANDWIDTH<br />&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; 允许用户为运行在CONFIG_FAIR_GROUP_SCHED中的进程定义CPU带宽限制.<br />&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; 对于没有定义CPU带宽限制的cgroup而言,可以无限制的使用CPU带宽.<br />&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; 详情参见 Documentation/scheduler/sched-bwc.txt 文件.<br />&#160; &#160; &#160; &#160; Group scheduling for SCHED_RR/FIFO<br />&#160; &#160; &#160; &#160; CONFIG_RT_GROUP_SCHED<br />&#160; &#160; &#160; &#160; &#160; &#160; 允许用户为cgroup分配实时CPU带宽,还可以对非特权用户的实时进程组进行调度.<br />&#160; &#160; &#160; &#160; &#160; &#160; 详情参见 Documentation/scheduler/sched-rt-group.txt 文档.<br />&#160; &#160; Block IO controller<br />&#160; &#160; CONFIG_BLK_CGROUP<br />&#160; &#160; &#160; &#160; 通用的块IO控制器接口,可以用于实现各种不同的控制策略.<br />&#160; &#160; &#160; &#160; 目前,IOSCHED_CFQ用它来在不同的cgroup之间分配磁盘IO带宽<br />&#160; &#160; &#160; &#160; (需要额外开启CONFIG_CFQ_GROUP_IOSCHED),block io throttle<br />&#160; &#160; &#160; &#160; 会用它来针对特定块设备限制IO速率上限(需要额外开启CONFIG_BLK_DEV_THROTTLING).<br />&#160; &#160; &#160; &#160; 更多信息可以参考&quot;Documentation/cgroups/blkio-controller.txt&quot;文件.<br />&#160; &#160; &#160; Enable Block IO controller debugging<br />&#160; &#160; &#160; CONFIG_DEBUG_BLK_CGROUP<br />&#160; &#160; &#160; &#160; &#160; 仅用于调试 Block IO controller 目的.</p><p>Checkpoint/restore support<br />CONFIG_CHECKPOINT_RESTORE<br />&#160; &#160; 在内核中添加&quot;检查点/恢复&quot;支持.也就是添加一些辅助的代码用于设置进程的 text, data, heap 段,<br />&#160; &#160; 并且在 /proc 文件系统中添加一些额外的条目.主要用于调试目的.不确定的选&quot;N&quot;.<br />&#160; &#160;<br />Namespaces support<br />CONFIG_NAMESPACES<br />&#160; &#160; 命名空间支持.用于支持基于容器的轻量级虚拟化技术(比如LXC).<br />&#160; &#160; UTS namespace<br />&#160; &#160; CONFIG_UTS_NS<br />&#160; &#160; &#160; &#160; uname() 系统调用的命名空间支持<br />&#160; &#160; IPC namespace<br />&#160; &#160; CONFIG_IPC_NS<br />&#160; &#160; &#160; &#160; 进程间通信对象ID的命名空间支持<br />&#160; &#160; User namespace<br />&#160; &#160; CONFIG_USER_NS<br />&#160; &#160; &#160; &#160; 允许容器(也就是VServer)使用user命名空间.如果开启此项,<br />&#160; &#160; &#160; &#160; 建议同时开启CONFIG_MEMCG和CONFIG_MEMCG_KMEM选项,<br />&#160; &#160; &#160; &#160; 以允许用户空间使用&quot;memory cgroup&quot;限制非特权用户的内存使用量.不确定的选&quot;N&quot;.<br />&#160; &#160; PID Namespaces<br />&#160; &#160; CONFIG_PID_NS<br />&#160; &#160; &#160; &#160; 进程PID命名空间支持<br />&#160; &#160; Network namespace<br />&#160; &#160; CONFIG_NET_NS<br />&#160; &#160; &#160; &#160; 网络协议栈的命名空间支持</p><p>Require conversions between uid/gids and their internal representation<br />CONFIG_UIDGID_STRICT_TYPE_CHECKS<br />&#160; &#160; 强制将uid/gid转换为内部表示形式,以让那些未对uid/gid进行转换的内核子系统代码也能正常编译.不确定的选&quot;N&quot;.</p><p>Automatic process group scheduling<br />CONFIG_SCHED_AUTOGROUP<br />&#160; &#160; 每个TTY动态地创建任务分组(cgroup),这样就可以降低高负载情况下的桌面延迟.<br />&#160; &#160; 也就是传说中的桌面&quot;鸡血补丁&quot;,桌面用户建议开启.但服务器建议关闭.<br />&#160; &#160;<br />Enable deprecated sysfs features to support old userspace tools<br />CONFIG_SYSFS_DEPRECATED<br />&#160; &#160; 为了兼容旧版本的应用程序而保留过时的sysfs特性.<br />&#160; &#160; 仅当在使用2008年以前的发行版时才需要开启,2009年之后的发行版中必须关闭.<br />&#160; &#160; Enable deprecated sysfs features by default<br />&#160; &#160; CONFIG_SYSFS_DEPRECATED_V2<br />&#160; &#160; &#160; &#160; 默认开启上述特性</p><p>Kernel-&gt;user space relay support (formerly relayfs)<br />CONFIG_RELAY<br />&#160; &#160; 在某些文件系统(比如debugfs)中提供中继(relay)支持(从内核空间向用户空间传递大批量数据).主要用于调试内核.</p><p>Initial RAM filesystem and RAM disk (initramfs/initrd) support<br />CONFIG_BLK_DEV_INITRD<br />&#160; &#160; 初始内存文件系统(initramfs,2.6以上内核的新机制,使用cpio格式,<br />&#160; &#160; 占据的内存随数据的增减自动增减)与初始内存盘(initrd,2.4以前内核遗留的老机制,<br />&#160; &#160; 使用loop设备,占据一块固定的内存,需要额外开启CONFIG_BLK_DEV_RAM选项才生效)支持,<br />&#160; &#160; 一般通过lilo/grub的initrd指令加载.更多细节可以参考&quot;Documentation/initrd.txt&quot;文件,<br />&#160; &#160; 关于initrd到initramfs的进化(墙内镜像),可以参考IBM上的两篇文章:<br />&#160; &#160; Linux2.6 内核的 Initrd 机制解析和Linux 初始 RAM 磁盘（initrd）概述.</p><p>Initramfs source file(s)<br />CONFIG_INITRAMFS_SOURCE<br />&#160; &#160; &#160; &#160; 如果你想将initramfs镜像直接嵌入内核(比如嵌入式环境或者想使用 EFI stub kernel),<br />&#160; &#160; &#160; &#160; 而不是通过lilo/grub这样的引导管理器加载,可以使用此选项,否则请保持空白.<br />&#160; &#160; &#160; &#160; 这个选项指明用来制作initramfs镜像的原料,可以是一个.cpio<br />&#160; &#160; &#160; &#160; 文件或一个空格分隔的目录与文件列表.细节可以参考<br />&#160; &#160; &#160; &#160; &quot;Documentation/early-userspace/README&quot;文档.</p><p>&#160; &#160; &#160; &#160; User ID to map to 0 (user root)<br />&#160; &#160; &#160; &#160; INITRAMFS_ROOT_UID<br />&#160; &#160; &#160; &#160; &#160; &#160; 此选项仅在CONFIG_INITRAMFS_SOURCE中包含目录时才有效,<br />&#160; &#160; &#160; &#160; &#160; &#160; 将此值设为非零(例如&quot;37&quot;),那么所有UID=37的文件在打包到initramfs镜像内时,<br />&#160; &#160; &#160; &#160; &#160; &#160; 其UID都将被设为&quot;0&quot;.<br />&#160; &#160; &#160; &#160; Group ID to map to 0 (group root)<br />&#160; &#160; &#160; &#160; INITRAMFS_ROOT_GID<br />&#160; &#160; &#160; &#160; &#160; &#160; 此选项仅在CONFIG_INITRAMFS_SOURCE中包含目录时才有效,<br />&#160; &#160; &#160; &#160; &#160; &#160; 将此值设为非零(例如&quot;37&quot;),那么所有GID=37的文件在打包到initramfs镜像内时,<br />&#160; &#160; &#160; &#160; &#160; &#160; 其GID都将被设为&quot;0&quot;.</p><p>&#160; &#160; Support initial ramdisks compressed using gzip<br />&#160; &#160; CONFIG_RD_GZIP<br />&#160; &#160; &#160; &#160; 支持经过gzip压缩的ramdisk或cpio镜像<br />&#160; &#160; Support initial ramdisks compressed using bzip2<br />&#160; &#160; CONFIG_RD_BZIP2<br />&#160; &#160; &#160; &#160; 支持经过bzip2压缩的ramdisk或cpio镜像<br />&#160; &#160; Support initial ramdisks compressed using LZMA<br />&#160; &#160; CONFIG_RD_LZMA<br />&#160; &#160; &#160; &#160; 支持经过LZMA压缩的ramdisk或cpio镜像<br />&#160; &#160; Support initial ramdisks compressed using XZ<br />&#160; &#160; CONFIG_RD_XZ<br />&#160; &#160; &#160; &#160; 支持经过XZ压缩的ramdisk或cpio镜像<br />&#160; &#160; Support initial ramdisks compressed using LZO<br />&#160; &#160; CONFIG_RD_LZO<br />&#160; &#160; &#160; &#160; 支持经过LZO压缩的ramdisk或cpio镜像<br />&#160; &#160; Built-in initramfs compression mode<br />&#160; &#160; &#160; &#160; 选择initramfs镜像的压缩格式.&quot;gzip&quot;是兼容性最好的格式,<br />&#160; &#160; &#160; &#160; 但是压缩率却最低.&quot;XZ&quot;是目前渐渐流行的格式,压缩率高,解压速度也不慢.</p><p>Compiler optimization level<br />&#160; 编译器优化级别<br />&#160; &#160; Optimize for size<br />&#160; &#160; CONFIG_CC_OPTIMIZE_FOR_SIZE<br />&#160; &#160; &#160; 编译时优化内核尺寸(使用GCC的&quot;-Os&quot;而不是&quot;-O2&quot;参数编译),<br />&#160; &#160; &#160; 这会得到更小的内核,但是运行速度可能会更慢.主要用于嵌入式环境.<br />&#160; &#160; &#160;<br />Configure standard kernel features (expert users)<br />CONFIG_EXPERT<br />&#160; &#160; 配置标准的内核特性(仅供专家使用).这个选项允许你改变内核的&quot;标准&quot;特性<br />&#160; &#160; (比如用于需要&quot;非标准&quot;内核的特定环境中),仅在你确实明白自己在干什么的时候才开启.<br />&#160; &#160; Enable 16-bit UID system calls<br />&#160; &#160; CONFIG_UID16<br />&#160; &#160; &#160; &#160; 允许对UID系统调用进行过时的16-bit包装,建议关闭<br />&#160; &#160; Multiple users, groups and capabilities support<br />&#160; &#160; &#160; &#160; 多个用户,组和功能支持<br />&#160; &#160; sgetmask/ssetmask syscalls support<br />&#160; &#160; &#160; &#160; sgetmask/ssetmask系统调用支持<br />&#160; &#160; Sysctl syscall support<br />&#160; &#160; CONFIG_SYSCTL_SYSCALL<br />&#160; &#160; &#160; &#160; 二进制sysctl接口支持.由于现在流行直接通过/proc/sys以ASCII明码方式修改内核参数<br />&#160; &#160; &#160; &#160; (需要开启CONFIG_PROC_SYSCTL选项),所以已经不需要再通过二进制接口去控制内核参数,<br />&#160; &#160; &#160; &#160; 建议关闭它以减小内核尺寸.<br />&#160; &#160; Sysctl syscall support<br />&#160; &#160; &#160; &#160; Sysctl系统调用支持<br />&#160; &#160; Posix Clocks &amp; timers<br />&#160; &#160; &#160; &#160; Posix时钟和计时器<br />&#160; &#160; Load all symbols for debugging/ksymoops<br />&#160; &#160; CONFIG_KALLSYMS<br />&#160; &#160; &#160; &#160; 装载所有的调试符号表信息,会增大内核体积,仅供调试时选择<br />&#160; &#160; &#160; &#160; Include all symbols in kallsyms<br />&#160; &#160; &#160; &#160; CONFIG_KALLSYMS_ALL<br />&#160; &#160; &#160; &#160; &#160; &#160; 在/proc/kallsyms中包含内核知道的所有符号,内核将会增大300K,仅在你确实需要的时候再开启<br />&#160; &#160; Enable support for printk<br />&#160; &#160; CONFIG_PRINTK<br />&#160; &#160; &#160; &#160; 允许内核向终端打印字符信息.如果关闭,内核在初始化过程中将不会输出字符信息,<br />&#160; &#160; &#160; &#160; 这会导致很难诊断系统故障.仅在你确实不想看到任何内核信息时选&quot;N&quot;.否则请选&quot;Y&quot;.<br />&#160; &#160; BUG() support<br />&#160; &#160; CONFIG_BUG<br />&#160; &#160; &#160; &#160; 显示故障和失败条件(BUG和WARN),禁用它将可能导致隐含的错误被忽略.<br />&#160; &#160; &#160; &#160; 建议仅在嵌入式设备或者无法显示故障信息的系统上关闭<br />&#160; &#160; Enable ELF core dumps<br />&#160; &#160; CONFIG_ELF_CORE<br />&#160; &#160; &#160; &#160; 内存转储支持,可以帮助调试ELF格式的程序,用于调试和开发用户态程序<br />&#160; &#160; Enable PC-Speaker support<br />&#160; &#160; CONFIG_PCSPKR_PLATFORM<br />&#160; &#160; &#160; &#160; 主板上的蜂鸣器支持.主板上的蜂鸣器只能发出或长或短的&quot;滴&quot;或&quot;嘟嘟&quot;声,<br />&#160; &#160; &#160; &#160; 一般用于系统报警.不要和能够播放音乐的扬声器混淆.如果你的主板上没有就关闭,<br />&#160; &#160; &#160; &#160; 有的话(开机自检完成后一般能听到&quot;滴&quot;的一声)还是建议开启.<br />&#160; &#160; Enable full-sized data structures for core<br />&#160; &#160; CONFIG_BASE_FULL<br />&#160; &#160; &#160; &#160; 在内核中使用全尺寸的数据结构.禁用它将使得某些内核的数据结构减小以节约内存,但是将会降低性能<br />&#160; &#160; Enable futex support<br />&#160; &#160; CONFIG_FUTEX<br />&#160; &#160; &#160; &#160; 快速用户空间互斥(fast userspace mutexes)可以使线程串行化以避免竞态条件,也提高了响应速度.<br />&#160; &#160; &#160; &#160; 禁用它将导致内核不能正确的运行基于glibc的程序<br />&#160; &#160; Enable eventpoll support<br />&#160; &#160; CONFIG_EPOLL<br />&#160; &#160; &#160; &#160; Epoll系列系统调用(epoll_*)支持,<br />&#160; &#160; &#160; &#160; 这是当前在Linux下开发大规模并发网络程序(比如Nginx)的热门人选,<br />&#160; &#160; &#160; &#160; 设计目的是取代既有POSIX select(2)与poll(2)系统接口,建议开启.<br />&#160; &#160; Enable signalfd() system call<br />&#160; &#160; CONFIG_SIGNALFD<br />&#160; &#160; &#160; &#160; signalfd()系统调用支持,建议开启.传统的处理信号的方式是注册信号处理函数,<br />&#160; &#160; &#160; &#160; 由于信号是异步发生的,要解决数据的并发访问和可重入问题.signalfd可以将信号抽象为一个文件描述符,<br />&#160; &#160; &#160; &#160; 当有信号发生时可以对其read,这样可以将信号的监听放到select/poll/epoll监听队列中.<br />&#160; &#160; Enable timerfd() system call<br />&#160; &#160; CONFIG_TIMERFD<br />&#160; &#160; &#160; &#160; timerfd()系统调用支持,建议开启.timerfd可以实现定时器功能,将定时器抽象为文件描述符,<br />&#160; &#160; &#160; &#160; 当定时器到期时可以对其read,这样也可以放到select/poll/epoll监听队列中.<br />&#160; &#160; &#160; &#160; 更多信息可以参考linux新的API signalfd、timerfd、eventfd使用说明<br />&#160; &#160; Enable eventfd() system call<br />&#160; &#160; CONFIG_EVENTFD<br />&#160; &#160; &#160; &#160; eventfd()系统调用支持,建议开启.eventfd实现了线程之间事件通知的方式,<br />&#160; &#160; &#160; &#160; eventfd的缓冲区大小是sizeof(uint64_t),向其write可以递增这个计数器,read操作可以读取,并进行清零.<br />&#160; &#160; &#160; &#160; eventfd也可以放到select/poll/epoll监听队列中.当计数器不是0时,有可读事件发生,可以进行读取.</p><p>Enable bpf() system call<br />&#160; &#160; 启用bpf()系统调用</p><p>Use full shmem filesystem<br />CONFIG_SHMEM<br />&#160; &#160; 完全使用shmem来代替ramfs.shmem是基于共享内存的文件系统(可以使用swap),<br />&#160; &#160; 在启用CONFIG_TMPFS后可以挂载为tmpfs供用户空间使用,它比简单的ramfs先进许多.<br />&#160; &#160; 仅在微型嵌入式环境中且没有swap的情况下才可能会需要使用原始的ramfs.<br />&#160; &#160;<br />Enable AIO support<br />CONFIG_AIO<br />&#160; &#160; 开启POSIX异步IO支持.它常常被高性能的多线程程序使用,建议开启<br />&#160; &#160;<br />Enable madvise/fadvise syscalls<br />&#160; &#160; 启用madvise/fadvise系统调用<br />&#160; &#160;<br />Enable userfaultfd() system call<br />&#160; &#160; 启用userfaultfd()系统调用</p><p>Enable PCI quirk workarounds<br />CONFIG_PCI_QUIRKS<br />&#160; &#160; 开启针对多种PCI芯片组的错误规避功能,仅在确定你的PCI芯片组确实没有没有任何bug时才关闭此功能.<br />&#160; &#160; 至于究竟哪些芯片组有bug,你可以直接打开&quot;drivers/pci/quirks.c&quot;文件查看.不确定的选&quot;Y&quot;.</p><p>Enable membarrier() system call<br />启用membarrier()系统调用</p><p>Embedded system<br />CONFIG_EMBEDDED<br />&#160; &#160; 如果你是为嵌入式系统编译内核,可以开启此选项,这样一些高级选项就会显示出来.<br />&#160; &#160; 单独选中此项本身对内核并无任何改变.<br />&#160; &#160;<br />PC/104 support<br />&#160; &#160;<br />Kernel Performance Events And Counters<br />CONFIG_PERF_EVENTS<br />&#160; &#160; 性能相关的事件和计数器支持(既有硬件的支持也有软件的支持).<br />&#160; &#160; 大多数现代CPU都会通过性能计数寄存器对特定类型的硬件事件(指令执行,缓存未命中,<br />&#160; &#160; 分支预测失败)进行计数,同时又丝毫不会减慢内核和应用程序的运行速度.<br />&#160; &#160; 这些寄存器还会在某些事件计数到达特定的阈值时触发中断,从而可以对代码进行性能分析.<br />&#160; &#160; Linux Performance Event 子系统对上述特性进行了抽象,提供了针对每个进程和每个CPU的计数器,<br />&#160; &#160; 并可以被 tools/perf/ 目录中的&quot;perf&quot;工具使用.<br />&#160; &#160; Debug: use vmalloc to back perf mmap() buffers<br />&#160; &#160; CONFIG_DEBUG_PERF_USE_VMALLOC<br />&#160; &#160; &#160; &#160; 主要用于调试vmalloc代码.</p><p>Enable VM event counters for /proc/vmstat<br />CONFIG_VM_EVENT_COUNTERS<br />&#160; &#160; &quot;/proc/vmstat&quot;中包含了从内核导出的虚拟内存的各种统计信息.<br />&#160; &#160; 开启此项后可以显示较详细的信息(包含各种事件计数器),关闭此项则仅仅显示很简略的信息.<br />&#160; &#160; 主要用于调试和统计.</p><p>Disable heap randomization<br />&#160; &#160; 禁用堆随机化</p><p>Enable SLUB debugging support<br />CONFIG_SLUB_DEBUG<br />&#160; &#160; SLUB调试支持,禁用后可显著降低内核大小,同时/sys/kernel/slab也将不复存在.</p><p>Disable heap randomization<br />CONFIG_COMPAT_BRK<br />&#160; &#160; 禁用堆随机化(heap randomization)功能.堆随机化可以让针对堆溢出的攻击变得困难,<br />&#160; &#160; 但是不兼容那些古董级的二进制程序(2000年以前).如果你不需要使用这些古董程序,那么选&quot;N&quot;.</p><p>Choose SLAB allocator<br />&#160; &#160; 选择内存分配管理器<br />&#160; &#160; SLAB<br />&#160; &#160; CONFIG_SLAB<br />&#160; &#160; &#160; &#160; 久经考验的slab内存分配器,在大多数情况下都具有良好的适应性.<br />&#160; &#160; SLUB (Unqueued Allocator)<br />&#160; &#160; CONFIG_SLUB<br />&#160; &#160; &#160; &#160; SLUB与SLAB兼容,但通过取消大量的队列和相关开销,简化了slab的结构.<br />&#160; &#160; &#160; &#160; 特别是在多核时拥有比slab更好的性能和更好的系统可伸缩性.<br />&#160; &#160; SLOB (Simple Allocator)<br />&#160; &#160; CONFIG_SLOB<br />&#160; &#160; &#160; &#160; SLOB针对小型系统设计,做了非常激进的简化,以适用于内存非常有限(小于64M)的嵌入式环境.</p><p>Allow slab caches to be merged<br />&#160; &#160; 允许合并slab缓存<br />SLAB freelist randomization<br />&#160; &#160; SLAB freelist随机化<br />Harden slab freelist metadata<br />&#160; &#160; 硬化平板freelist元数据<br />SLUB per cpu partial cache<br />&#160; &#160; SLUB每个CPU部分缓存</p><p>Profiling support<br />CONFIG_PROFILING<br />&#160; &#160; 添加扩展的性能分析支持,可以被OProfile之类的工具使用.仅用于调试目的.</p><p>OProfile system profiling<br />CONFIG_OPROFILE<br />&#160; &#160; OProfile性能分析工具支持,仅用于调试目的.</p><p>&#160; &#160; OProfile multiplexing support<br />&#160; &#160; CONFIG_OPROFILE_EVENT_MULTIPLEX<br />&#160; &#160; &#160; &#160; OProfile multiplexing技术支持</p><p>Kprobes<br />&#160; &#160; CONFIG_KPROBES Kprobes是一个轻量级的内核调试工具,<br />&#160; &#160; 能在内核运行的几乎任意时间点进行暂停/读取/修改等操作的调试工具.仅供调试使用.</p><p>Optimize very unlikely/likely branches<br />CONFIG_JUMP_LABEL<br />&#160; &#160; 针对内核中某些&quot;几乎总是为真&quot;或者&quot;几乎总是为假&quot;的条件分支判断使用&quot;asm goto&quot;进行优化<br />&#160; &#160; (在分支预测失败时会浪费很多时间在回退上,但是这种情况极少发生).很多内核子系统都支持进行这种优化.建议开启.</p><p>Static key selftest<br />&#160; &#160; 静态密钥自检<br />&#160; &#160;<br />GCC plugins<br />&#160; &#160; GCC插件<br />&#160; &#160;<br />&#160; &#160;Stack Protector buffer overflow detection<br />&#160; &#160; &#160; Stack Protector缓冲区溢出检测<br />&#160; &#160; &#160;<br />Number of bits to use for ASLR of mmap base address<br />&#160; &#160; 用于mmap基址的ASLR的位数<br />&#160; &#160;<br />Number of bits to use for ASLR of mmap base address for compatible applications<br />&#160; &#160; 兼容应用程序的mmap基址的ASLR使用的位数<br />&#160; &#160;<br />Use a virtually-mapped stack<br />&#160; &#160; 使用虚拟映射堆栈<br />&#160; &#160;<br />Perform full reference count validation at the expense of speed<br />&#160; &#160; 以牺牲速度为代价执行完整的引用计数验证<br />&#160; &#160;<br />GCOV-based kernel profiling<br />&#160; &#160; 基于GCOV的内核分析</p><p>Transparent user-space probes<br />CONFIG_UPROBES<br />&#160; &#160; Uprobes与Kprobes类似,但主要用于用户空间的调试.<br />&#160; &#160;<br />Enable GCOV-based kernel profiling<br />CONFIG_GCOV_KERNEL<br />&#160; &#160; 基于GCC的gcov(代码覆盖率测试工具)的代码分析支持,仅用于调试</p><p>&#160; &#160; Profile entire Kernel<br />&#160; &#160; CONFIG_GCOV_PROFILE_ALL<br />&#160; &#160; &#160; &#160; 支持对整个内核进行分析.内核体积将会显著增大,并且运行速度显著减慢.</p>]]></description>
			<author><![CDATA[dummy@example.com (batsom)]]></author>
			<pubDate>Wed, 03 Aug 2022 14:34:23 +0000</pubDate>
			<guid>http://www.gentoo-zh.org/viewtopic.php?pid=13#p13</guid>
		</item>
	</channel>
</rss>
