发布:06 The Linux Kernel--Configuring the Kernel Part 2

This commit is contained in:
wxy 2013-11-05 21:03:19 +08:00
parent a294b3f514
commit edca9f4d72
2 changed files with 46 additions and 46 deletions

View File

@ -16,7 +16,7 @@
- make silentoldconfig - 和oldconfig相似但是不会显示配置文件中已有的问题的回答。 - make silentoldconfig - 和oldconfig相似但是不会显示配置文件中已有的问题的回答。
- make olddefconfig -和silentoldconfig相似但有些问题已经以它们的默认值选择。 - make olddefconfig -和silentoldconfig相似但有些问题已经以它们的默认值选择。
- make defconfig - 这个选项将会创建一份以当前系统架构为基础的默认设置文件。 - make defconfig - 这个选项将会创建一份以当前系统架构为基础的默认设置文件。
- make ${PLATFORM}_defconfig - 创建一份使用arch/$ARCH/configs/${PLATFORM}_defconfig中的值的配置文件。 - make ${PLATFORM}\_defconfig - 创建一份使用arch/$ARCH/configs/${PLATFORM}\_defconfig中的值的配置文件。
- make allyesconfig - 这个选项将会创建一份尽可能多的问题回答都为yes的配置文件。 - make allyesconfig - 这个选项将会创建一份尽可能多的问题回答都为yes的配置文件。
- make allmodconfig - 这个选项将会创建一份将尽可能多的内核部分配置为模块的配置文件。 - make allmodconfig - 这个选项将会创建一份将尽可能多的内核部分配置为模块的配置文件。
@ -41,17 +41,17 @@
注意:每一项选择会改变接下来显示什么问题及何时显示。我会(在教程里)包含上我的选择让读者可以在他们自己的系统上跟上配置的进度。 注意:每一项选择会改变接下来显示什么问题及何时显示。我会(在教程里)包含上我的选择让读者可以在他们自己的系统上跟上配置的进度。
接下来,用户会看到“Local version - append to kernel release (LOCALVERSION) []”(本地版本号,附加到内核版本号后面)。这使开发人员可以给定一个特殊版本号或命名他们自定义的内核。我将输入“LinuxDotOrg”这样内核版本会显示为“3.9.4-LinuxDotOrg”。接下来配置工具会询问“Automatically append version information to the version string (LOCALVERSION_AUTO) [N/y/?]”是否自动添加版本信息到版本号后。如果本地有一个git版本库git的修订号会被添加到版本号后面。这个例子中我们没有使用git所以我回答"no"。不然git修订号将会追加到版本号中。还记得vmlinuz和几个类似的文件么好了下一个问题就是问使用哪一种格式压缩内核。开发人员可以从五个选项中选择一个。它们是 接下来,用户会看到“Local version - append to kernel release (LOCALVERSION) []”。这使开发人员可以给定一个特殊版本号或命名他们自定义的内核。我将输入“LinuxDotOrg”这样内核版本会显示为“3.9.4-LinuxDotOrg”。接下来配置工具会询问“Automatically append version information to the version string (LOCALVERSION_AUTO) [N/y/?]”是否自动添加版本信息到版本号后。如果本地有一个git版本库git的修订号会被添加到版本号后面。这个例子中我们没有使用git所以我回答"no"。不然git修订号将会追加到版本号中。还记得vmlinuz和几个类似的文件么好了下一个问题就是问使用哪一种格式压缩内核。开发人员可以从五个选项中选择一个。它们是
1. Gzip (KERNEL_GZIP) 1. Gzip (KERNEL\_GZIP)
2. Bzip2 (KERNEL_BZIP2) 2. Bzip2 (KERNEL\_BZIP2)
3. LZMA (KERNEL_LZMA) 3. LZMA (KERNEL\_LZMA)
4. XZ (KERNEL_XZ) 4. XZ (KERNEL\_XZ)
5. LZO (KERNEL_LZO) 5. LZO (KERNEL\_LZO)
Gzip是默认值所以我选择"1"并按回车。每种压缩格式和其他压缩格式相比都有更高或者更低的压缩比。更好的压缩比意味着更小的体积,但是与低压缩比文件相比,它解压时需要更多的时间。 Gzip是默认值所以我选择"1"并按回车。每种压缩格式和其他压缩格式相比都有更高或者更低的压缩比。更好的压缩比意味着更小的体积,但是与低压缩比文件相比,它解压时需要更多的时间。
现在这行显示“Default hostname (DEFAULT_HOSTNAME) [(none)]”(默认主机名)。这里可以配置主机名。通常地,开发者这行留空(我这里留空)以便以后Linux用户可以自己设置他们的主机名。 现在这行显示“Default hostname (DEFAULT\_HOSTNAME) [(none)]”。这里可以配置主机名。通常地,开发者这行留空(我这里留空)以便以后Linux用户可以自己设置他们的主机名。
接下来开发者可以启用或者禁用交换分区。Linux使用一个叫做"swap space"的独立分区来使用虚拟内存。这相当于Windows中的页面文件。典型地开发者在这行“Support for paging of anonymous memory (swap) (SWAP) [Y/n/?]”是否支持匿名内存换页回答“Y”。 接下来开发者可以启用或者禁用交换分区。Linux使用一个叫做"swap space"的独立分区来使用虚拟内存。这相当于Windows中的页面文件。典型地开发者在这行“Support for paging of anonymous memory (swap) (SWAP) [Y/n/?]”是否支持匿名内存换页回答“Y”。
@ -59,7 +59,7 @@ Gzip是默认值所以我选择"1"并按回车。每种压缩格式和其他
下一个问题“open by fhandle syscalls (FHANDLE) [Y/n/?]”是否使用文件句柄系统调用来打开文件是问当有需要进行文件系统操作的时候程序是否允许使用文件句柄而不是文件名进行。默认上这个选择是“Y”。 下一个问题“open by fhandle syscalls (FHANDLE) [Y/n/?]”是否使用文件句柄系统调用来打开文件是问当有需要进行文件系统操作的时候程序是否允许使用文件句柄而不是文件名进行。默认上这个选择是“Y”。
有时开发者在做了一些选择后某些问题会自动回答。比如下一个问题“Auditing support (AUDIT) [Y/?]”是否支持审计会在没有提示的情况下自动回答因为先前的选项需要这个特性。审计支持会记录所有文件的访问和修改。下一个关于审计的问题“Enable system-call auditing support (AUDITSYSCALL) [Y/n/?]”是否启用系统调用审计支持。如果启用所有的系统调用都会记录下来。如果开发者想要更好的性能那么最好尽可能地禁用审计特性并且不把它加入内核。而另外一些开发者可能为了安全监控而启用审计。这个问题我选择“n”。下一个审计方面的问题“Make audit loginuid immutable (AUDIT_LOGINUID_IMMUTABLE) [N/y/?]”是否要审计进程身份ID不可变是询问进程是否可以改变它们的loginuid(LOGIN User ID)如果启用用户空间的进程将无法改变他们的loginuid。为了更好的性能我们这里禁用这个特性。译注对于使用systemd这样的系统其是通过中央进程来重启登录服务的设置为“y”可以避免一些安全问题而使用较旧的SysVinit和Upstart的系统其需要管理员手工重启登录服务应该设置为“N” 有时开发者在做了一些选择后某些问题会自动回答。比如下一个问题“Auditing support (AUDIT) [Y/?]”是否支持审计会在没有提示的情况下自动回答因为先前的选项需要这个特性。审计支持会记录所有文件的访问和修改。下一个关于审计的问题“Enable system-call auditing support (AUDITSYSCALL) [Y/n/?]”是否启用系统调用审计支持。如果启用所有的系统调用都会记录下来。如果开发者想要更好的性能那么最好尽可能地禁用审计特性并且不把它加入内核。而另外一些开发者可能为了安全监控而启用审计。这个问题我选择“n”。下一个审计方面的问题“Make audit loginuid immutable (AUDIT\_LOGINUID\_IMMUTABLE) [N/y/?]”是否要审计进程身份ID不可变是询问进程是否可以改变它们的loginuid(LOGIN User ID)如果启用用户空间的进程将无法改变他们的loginuid。为了更好的性能我们这里禁用这个特性。译注对于使用systemd这样的系统其是通过中央进程来重启登录服务的设置为“y”可以避免一些安全问题而使用较旧的SysVinit和Upstart的系统其需要管理员手工重启登录服务应该设置为“N”
注意当通过“make config”配置时这些通过配置工具回答的问题会显示出来但是用户无法改变答案。当通过"make menuconfig"配置时,无论用户按任何键都无法改变选项。开发者不需要去改变这些选项,因为之前的选择决定了另外一个问题的选择。 注意当通过“make config”配置时这些通过配置工具回答的问题会显示出来但是用户无法改变答案。当通过"make menuconfig"配置时,无论用户按任何键都无法改变选项。开发者不需要去改变这些选项,因为之前的选择决定了另外一个问题的选择。

View File

@ -4,9 +4,9 @@
这一部分我们讲配置内核IRQ子系统。中断请求(IRQ)是硬件发给处理器的一个信号它暂时停止一个正在运行的程序并允许一个特殊的程序占用CPU运行。 这一部分我们讲配置内核IRQ子系统。中断请求(IRQ)是硬件发给处理器的一个信号它暂时停止一个正在运行的程序并允许一个特殊的程序占用CPU运行。
这个目录中的第一个问题属于内核特性(Expose hardware/virtual IRQ mapping via debugfs (IRQ\_DOMAIN\_DEBUG))通过debugfs来显示硬件/虚拟的IRQ映射它询问是否可以使用虚拟的调试文件系统来映射硬件及对应Linux上的IRQ中断号。这个用作调试目的大多数用户不需要用到所以我选择了"no"。 这个目录中的第一个问题属于内核特性(Expose hardware/virtual IRQ mapping via debugfs (IRQ\_DOMAIN\_DEBUG))通过debugfs来显示硬件/虚拟的IRQ映射它询问是否可以使用虚拟的调试文件系统来映射硬件及Linux上对应的IRQ中断号。这个用作调试目的大多数用户不需要用到所以我选择了"no"。
下一个标题显示"Timers subsystem"计时器子系统。第一个有关定时器子系统的问题是“Tickless System (Dynamic Ticks) (NO\_HZ)”(无CPU滴答系统。我选择了“yes”这会启用一个无滴答系统。这意味着定时器中断将会按需使用定时器中断允许任务以特定的时间间隔执行。下一个问题(High Resolution Timer Support (HIGH\_RES\_TIMERS))问的是是否支持高精度定时器。并不是所有的硬件支持这个,通常地说,如果硬件很慢或很旧,那么选择"no",否则像我一样选择"yes". 下一个标题显示"Timers subsystem"计时器子系统。第一个有关定时器子系统的问题是“Tickless System (Dynamic Ticks) (NO\_HZ)”无滴答系统。我选择了“yes”这会启用一个无滴答系统。这意味着定时器中断将会按需使用定时器中断允许任务以特定的时间间隔执行。下一个问题(High Resolution Timer Support (HIGH\_RES\_TIMERS))问是否支持高精度定时器。并不是所有的硬件支持这个,通常地说,如果硬件很慢或很旧,那么选择"no",否则像我一样选择"yes"
下一个标题"CPU/Task time and stats accounting"CPU/任务用时与状态统计),这个是关于进程的追踪。第一个问题看上去像这样: 下一个标题"CPU/Task time and stats accounting"CPU/任务用时与状态统计),这个是关于进程的追踪。第一个问题看上去像这样:
@ -20,7 +20,7 @@ TICK_CPU_ACCOUNTING会在每个CPU滴答中检测/proc/stat。这是默认的选
注意CPU滴答是抽象测量CPU时间的方式。每个处理器、操作系统和安装的系统都不同比如说一个更强大的处理器会比老的处理器拥有更多的CPU滴答。如果你安装了一个Linux系统然后接着在同一块磁盘上重新安装了它你可能会得到一个更快或更慢的CPU滴答时间(至少一些计算机技术书上这么说)。通常来讲一个更快的时钟速度意味着更多的CPU滴答。 注意CPU滴答是抽象测量CPU时间的方式。每个处理器、操作系统和安装的系统都不同比如说一个更强大的处理器会比老的处理器拥有更多的CPU滴答。如果你安装了一个Linux系统然后接着在同一块磁盘上重新安装了它你可能会得到一个更快或更慢的CPU滴答时间(至少一些计算机技术书上这么说)。通常来讲一个更快的时钟速度意味着更多的CPU滴答。
如果启用了VIRT\_CPU\_ACCOUNTING_GEN任务和CPU时间统计将由监视内核-用户边界实现。这个选择的代价是会增加额外的开销。 如果启用了VIRT\_CPU\_ACCOUNTING\_GEN任务和CPU时间统计将由监视内核-用户边界实现。这个选择的代价是会增加额外的开销。
IRQ\_TIME\_ACCOUNTING记账方式则通过检测IRQ状态间的时间戳工作这个性能开销很小。 IRQ\_TIME\_ACCOUNTING记账方式则通过检测IRQ状态间的时间戳工作这个性能开销很小。
@ -42,7 +42,7 @@ RCU Implementation RCU 实现方式)
choice[1]: 1 choice[1]: 1
这里就选择“1”。除了TREE\_RCU还有classic RCU(更老的实现)。下一个问题(Consider userspace as in RCU extended quiescent state (RCU\_USER\_QS) [N/y/?])(是否在用户空间记录扩展的安静状态)问的是RCU是否可以在CPU运行在用户空间时设置一个特殊的状态。这个选项通常被禁用因为这会增加太多消耗。下面是另一个RCU问题(Tree-based hierarchical RCU fanout value (RCU\_FANOUT) [64])树形分层结构的RCU端点数问的是关于端点数。下一个问题(Tree-based hierarchical RCU leaf-level fanout value (RCU\_FANOUT\_LEAF) [16])树形分层结构的RCU叶级端点数是另外一个关于端点数的问题但它只处理叶级。还有另外一个RCU问题(Disable tree-based hierarchical RCU auto-balancing (RCU\_FANOUT\_EXACT) [N/y/?])是否禁用树形分层结构的RCU的自动平衡询问是否禁用RCU自动平衡树而采用上述的端点数。 这里就选择“1”。除了TREE\_RCU还有classic RCU(更老的实现)。下一个问题(Consider userspace as in RCU extended quiescent state (RCU\_USER\_QS) [N/y/?])(是否在用户空间记录扩展的quiescent状态RCU是否可以在CPU运行在用户空间时设置一个特殊的quiescent状态。这个选项通常被禁用因为这会增加太多消耗。下面是另一个RCU问题(Tree-based hierarchical RCU fanout value (RCU\_FANOUT) [64])树形分层结构的RCU端点数问的是关于端点数。下一个问题(Tree-based hierarchical RCU leaf-level fanout value (RCU\_FANOUT\_LEAF) [16])树形分层结构的RCU叶级端点数是另外一个关于端点数的问题但它只处理叶级。还有另外一个RCU问题(Disable tree-based hierarchical RCU auto-balancing (RCU\_FANOUT\_EXACT) [N/y/?])是否禁用树形分层结构的RCU的自动平衡询问是否禁用RCU自动平衡树而采用上述的端点数。
接下来,配置脚本将会询问"Accelerate last non-dyntick-idle CPU's grace periods (RCU\_FAST\_NO\_HZ)"加速最后的非dyntick-idle CPU的RCU宽限期。在这之后会显示"Offload RCU callback processing from boot-selected CPUs (RCU\_NOCB\_CPU)"从选择引导的CPU里面卸载RCU回调译注此处作者没做解释。前一个能够节省电力但是降低了性能后一个用于调试。 接下来,配置脚本将会询问"Accelerate last non-dyntick-idle CPU's grace periods (RCU\_FAST\_NO\_HZ)"加速最后的非dyntick-idle CPU的RCU宽限期。在这之后会显示"Offload RCU callback processing from boot-selected CPUs (RCU\_NOCB\_CPU)"从选择引导的CPU里面卸载RCU回调译注此处作者没做解释。前一个能够节省电力但是降低了性能后一个用于调试。
@ -50,7 +50,7 @@ choice[1]: 1
下一个问题是内核使用多大的log缓冲区(Kernel log buffer size (16 => 64KB, 17 => 128KB) (LOG\_BUF\_SHIFT) [17])(内核日志缓冲区大小)。小的缓冲区意味着它无法像更大的缓冲区那样保持日志更长的时间。这个选择取决于开发者想要日志保持的时间,我选择的是"12"。 下一个问题是内核使用多大的log缓冲区(Kernel log buffer size (16 => 64KB, 17 => 128KB) (LOG\_BUF\_SHIFT) [17])(内核日志缓冲区大小)。小的缓冲区意味着它无法像更大的缓冲区那样保持日志更长的时间。这个选择取决于开发者想要日志保持的时间,我选择的是"12"。
接着出现了另外一个问题。该问题询问关于是否启用NUMA(非一致性内存访问)的内存/任务的均衡(Automatically enable NUMA aware memory/task placement (NUMA_BALANCING\_DEFAULT\_ENABLED))自动启用NUMA的内存/任务均衡。如果在NUMA的机器上设置了该选项那么NUMA自动平衡就会启用。在NUMA下处理器可以比非本地内存(内存分配给另外一个处理器或在处理器之间共享的内存)更快地访问它的本地内存。如果上面启用了(我启用了),那么最好对这个问题"Memory placement aware NUMA scheduler (NUMA\_BALANCING)"由NUMA调度器进行内存分配回答"yes"这是一个NUMA调度器。 接着出现了另外一个问题。该问题询问关于是否启用NUMA(非一致性内存访问)的内存/任务的均衡(Automatically enable NUMA aware memory/task placement (NUMA\_BALANCING\_DEFAULT\_ENABLED))自动启用NUMA的内存/任务均衡。如果在NUMA的机器上设置了该选项那么NUMA自动平衡就会启用。在NUMA下处理器可以比非本地内存(内存分配给另外一个处理器或在处理器之间共享的内存)更快地访问它的本地内存。如果上面启用了(我启用了),那么最好对这个问题"Memory placement aware NUMA scheduler (NUMA\_BALANCING)"由NUMA调度器进行内存分配回答"yes"这是一个NUMA调度器。
在新的标题"Control Group support"Cgroup支持因为先前的选择"Control Group support (CGROUPS)"Cgroup支持被自动地回答了"yes"。 在新的标题"Control Group support"Cgroup支持因为先前的选择"Control Group support (CGROUPS)"Cgroup支持被自动地回答了"yes"。
@ -66,73 +66,73 @@ choice[1]: 1
启用cgroup统计子系统(Simple CPU accounting cgroup subsystem (CGROUP\_CPUACCT))Cgroup子系统的简单CPU统计会生成一个资源控制器来监控在一个cgroup组内的独立任务的CPU使用情况。我选择了"no"。 启用cgroup统计子系统(Simple CPU accounting cgroup subsystem (CGROUP\_CPUACCT))Cgroup子系统的简单CPU统计会生成一个资源控制器来监控在一个cgroup组内的独立任务的CPU使用情况。我选择了"no"。
资源计数器(Resource counters (RESOURCE\_COUNTERS))使控制器独立资源能够统计工作在cgroup上的设备。我选择了"no"。 资源计数器(Resource counters (RESOURCE\_COUNTERS))使控制器独立资源统计功能能够统计cgroup。我选择了"no"。
下一个问题(Enable perf_event per-cpu per-container group (cgroup) monitoring (CGROUP_PERF))允许开发者扩展扩展每个CPU的模式使它可以只监控运行在特定CPU上的一个特别的cgroup组的线程。 下一个问题(Enable perf\_event per-cpu per-container group (cgroup) monitoring (CGROUP\_PERF))启用每个CPU、每个容器组的pref_event监控允许开发者扩展每个CPU的模式使它可以只监控运行在特定CPU上的一个特别的cgroup组的线程。
下一章节是"Group CPU Scheduler"。前两个已经回答的问题包括: 下一章节是"Group CPU Scheduler"CPU分组调度器。前两个已经回答的问题包括:
Group CPU scheduler (CGROUP_SCHED) Group CPU scheduler (CGROUP_SCHED)CPU分组调度器
Group scheduling for SCHED_OTHER (FAIR_GROUP_SCHED) Group scheduling for SCHED_OTHER (FAIR_GROUP\_SCHED)SCHED\_OTHER分组调度
第一个已回答的问题(CPU bandwidth provisioning for FAIR_GROUP_SCHED (CFS_BANDWIDTH))询问的是内核是否允许用户设置在公平组调度器内执行的任务的CPU带宽限制。没有限制的组会被认为不受约束并会没有限制地运行。 第一个已回答的问题(CPU bandwidth provisioning for FAIR\_GROUP\_SCHED (CFS\_BANDWIDTH))CPU带宽分配询问的是内核是否允许用户设置在公平组调度器内执行的任务的CPU带宽限制。没有限制的组会被认为不受约束并会没有限制地运行。
注意:并不是所有内核选项都在这个组里。我这里提到的组只是为了阅读舒适并指出这是一个新的,大的主题。了解所有组并不重要。当使用图形工具配置内核时,分组系统是有帮助的。那么开发者可以在搜索特定的设置时直接浏览分组后的菜单就可以了 注意:并不是所有内核选项都在这里。我这里提到的组只是为了便于阅读,并挑出那些新的和大的部分。并不需要了解所有的分组。分组有助于使用图形工具配置内核,这样开发者可以在搜索特定的设置时,直接通过分组菜单找到。
开发者可以通过回答"Group scheduling for SCHED_RR/FIFO (RT_GROUP_SCHED)"这个问题为"是"使用户可以分配CPU带宽到任务组中。 开发者可以通过回答"Group scheduling for SCHED\_RR/FIFO (RT\_GROUP\_SCHED)"SCHED\_RR/FIFO分组调度这个问题为"yes"来让用户可以分配CPU带宽到任务组中。
下一个问题是"Block IO controller (BLK_CGROUP)"。这样任务组可以被识别并且它们的磁盘带宽是由使用块IO控制器实现的CFQ IO调度器分配的。BIO在块的限制逻辑使用块IO控制器来提供设备上的IO速率上限。 下一个问题是"Block IO controller (BLK\_CGROUP)"阻塞IO控制器。任务组可以被识别并且它们的磁盘带宽是由使用块IO控制器实现的CFQ IO调度器分配的。BIO在块的限制逻辑使用块IO控制器来提供设备上的IO速率上限。
这里有一个调试问题(Enable Block IO controller debugging (DEBUG_BLK_CGROUP) [N/y/?])询问的是是否启用块IO控制器的调试。为了制作一个精简的内核好禁用这个特性。 这里有一个调试问题(Enable Block IO controller debugging (DEBUG_BLK_CGROUP) [N/y/?])启用阻塞IO控制器的调试询问是否启用块IO控制器的调试。为了制作一个精简的内核好禁用这个特性。
为了启用内核中的检查点和还原特性。这个问题“Checkpoint/restore support (CHECKPOINT_RESTORE)”我们回答是。为了更低的负载这里我选择了否。启用这个特性会正经啊辅助的进程控制代码来设置进程的代码段,数据段和堆的大小。并增加了一些额外的程序入口。 为了启用内核中的检查点和还原特性。这个问题“Checkpoint/restore support (CHECKPOINT_RESTORE)”检查点及还原支持可以选择“yes”不过为了更低的负载这里我选择了“n”。启用这个特性会增加辅助的进程控制代码来设置进程的代码段、数据段和堆的大小并增加了一些额外的程序入口。
下面我们就要配置命名空间的支持了。命名空间是一组标识符的容器。比如,/usr/lib/python3/dist-packages/re.py就是一个标识符/usr/lib/python3/dist-packages/就是一个命名空间。而re.py是这个命名空间下的本地名称。 下面我们就要配置命名空间的支持了。命名空间是一组标识符的容器。比如,/usr/lib/python3/dist-packages/re.py就是一个标识符/usr/lib/python3/dist-packages/就是一个命名空间。而re.py是这个命名空间下的本地名称。
第一个命名空间问题(Namespaces support (NAMESPACES))询问的是是否启用命名空间。这允许可以使用相同的PID但在不同的命名空间内(译注:原文为" This will allow the same PIDs (Process ID) to be used but indifferent namespaces",这里indiffernt根据上下文应该是少了空格)否则PID永远不会重复。 第一个命名空间问题(Namespaces support (NAMESPACES))询问的是是否启用命名空间。这允许可以使用相同的PID但在不同的命名空间内(译注:原文为" This will allow the same PIDs (Process ID) to be used but indifferent namespaces",这里indiffernt根据上下文应该是少了空格)否则PID永远不会重复。
下一个问题(UTS namespace (UTS_NS))询问是否可以让UTS命名空间内的任务可以在uname()系统调用中看到不同的信息。uname()系统调用提供查看机器和操作系统的信息。 下一个问题(UTS namespace (UTS\_NS))询问是否可以让UTS命名空间内的任务可以在uname()系统调用中看到不同的信息。uname()系统调用提供查看机器和操作系统的信息。
启用IPC命名空间(IPC namespace (IPC_NS))将允许在这个命名空间内的任务与其他IPC ID相对应的不同命名空间内的对象共同工作。 启用IPC命名空间(IPC namespace (IPC\_NS))将允许在这个命名空间内的任务与其他命名空间内相对应IPC ID的对象协同工作。
PID命名空间(PID Namespaces (PID_NS))就是进程ID命名空间。这可以使不同的进程在使用相同的PID时使用不同的PID命名空间。这是一个构建块的容器 PID命名空间(PID Namespaces (PID\_NS))就是进程ID命名空间。这可以使不同的进程在不同的PID命名空间使用相同的PID。这是一个容器的构建块
接下来,启用网络命名空间(Network namespace (NET_NS))可以使用户创建一个拥有多个实例的网络栈。 接下来,启用网络命名空间(Network namespace (NET\_NS))可以使用户创建一个拥有多个实例的网络栈。
当启用后,自动进程分组调度(SCHED_AUTOGROUP)会填充并创建任务组来优化桌面程序的调度。它将把占用大量资源的应用程序放在它们自己的任务组这有助于性能提升。 当启用后,自动进程分组调度(SCHED\_AUTOGROUP)会填充并创建任务组来优化桌面程序的调度。它将把占用大量资源的应用程序放在它们自己的任务组这有助于性能提升。
这里是一个调试特性,除非你有特别的需求否则应该禁用它。这个问题(Enable deprecated sysfs features to support old userspace tools (SYSFS_DEPRECATED))询问是否启用sysfs。这是调式内核时用的虚拟文件系统。 这里是一个调试特性,除非你有特别的需求否则应该禁用它。这个问题(Enable deprecated sysfs features to support old userspace tools (SYSFS_DEPRECATED))启用不推荐的sysfs功能来支持旧式的用户空间工具询问是否启用sysfs这是调试内核时用的虚拟文件系统。
接下来,因为当前的配置需要它,所以"Kernel->user space relay support (formerly relayfs) (RELAY)"已经被设成"yes"了。最好启用initrd(初始化内存文件系统和内存盘(initramfs/initrd))支持(BLK_DEV_INITRD)) 接下来,因为当前的配置需要它,所以"Kernel->user space relay support (formerly relayfs) (RELAY)"(内核->用户空间的中继支持即relayfs已经被设成"yes"了。最好启用initrd支持(Initial RAM filesystem and RAM disk (initramfs/initrd) support (BLK\_DEV\_INITRD))(初始化内存文件系统和内存盘(initramfs/initrd)
用户会被问及哪里放置initramfs源文件。如果没有需要请留空。 用户会被问及哪里放置initramfs源文件。如果没有需要请留空。
接下来,开发人员会被询问关于初始虚拟磁盘(Linux的内核映像文件)所支持的压缩格式。你可以启用所有支持的压缩格式。 接下来,开发人员会被询问关于初始虚拟磁盘(Linux的内核映像文件)所支持的压缩格式。你可以启用所有支持的压缩格式。
Support initial ramdisks compressed using gzip (RD_GZIP) - Support initial ramdisks compressed using gzip (RD\_GZIP)
Support initial ramdisks compressed using bzip2 (RD_BZIP2) - Support initial ramdisks compressed using bzip2 (RD\_BZIP2)
Support initial ramdisks compressed using LZMA (RD_LZMA) - Support initial ramdisks compressed using LZMA (RD\_LZMA)
Support initial ramdisks compressed using XZ (RD_XZ) - Support initial ramdisks compressed using XZ (RD\_XZ)
Support initial ramdisks compressed using LZO (RD_LZO) - Support initial ramdisks compressed using LZO (RD\_LZO)
这里设置了内核的编译内核编译选项(Optimize for size (CC_OPTIMIZE_FOR_SIZE))。开发者可以让编译器在编译时优化代码。我选择了"yes"。 这里设置了内核的编译内核编译选项(Optimize for size (CC\_OPTIMIZE\_FOR\_SIZE))(优化大小)。开发者可以让编译器在编译时优化代码。我选择了"yes"。
用户想要配置更多的内核特性,那么下个问题就回答"yes"(Configure standard kernel features (expert users) (EXPERT))。 用户想要配置更多的内核特性,那么下个问题就回答"yes"(Configure standard kernel features (expert users) (EXPERT))(配置标准内核特性(专家级用户))
要启用遗留的16位UID系统调用封装器这个问题设成"yes"(Enable 16-bit UID system calls (UID16))。系统调用就会使用16位UID。 要启用过时的16位UID系统调用封装器这个问题设成"yes"(Enable 16-bit UID system calls (UID16))。系统调用就会使用16位UID。
我们建议启用"sysctl syscall"(Sysctl syscall support (SYSCTL_SYSCALL))支持。这使/proc/sys成为二进制路径的接口。 推荐启用"sysctl syscall"(Sysctl syscall support (SYSCTL_SYSCALL))支持。这使/proc/sys成为二进制路径的接口。
接下来的两个问题已经被预先回答了"yes",它们是"Load all symbols for debugging/ksymoops (KALLSYMS)"和"“Include all symbols in kallsyms (KALLSYMS_ALL)"。这些都是启用调试标志。 接下来的两个问题已经被预先回答了"yes",它们是"Load all symbols for debugging/ksymoops (KALLSYMS)"(载入所以的调试符号)和"“Include all symbols in kallsyms (KALLSYMS_ALL)"包括所有的kallsyms符号。这些都是启用调试标志。
下一步开发者应该启用printk支持( (Enable support for printk (PRINTK)))。这会打印内核消息到内核日志中。这在内核出错时是很重要的。编译一个"哑巴"内核并不是一个好主意。然而,如果我们有做了选择,一些开发者就会看到它的目的。否则,我们没有选择的余地 下一步开发者应该启用printk支持( (Enable support for printk (PRINTK))),这会输出内核消息到内核日志中。这在内核出错时是很重要的。编译一个"哑巴"内核并不是一个好主意。然而,如果我们启用了这个支持,就会被一些开发者看到这些出错,要么就不要启用
除非有必要开发者可以禁用bug支持(BUG() support (BUG))。禁用这项将会一处WARN和BUG信息的支持。这会减小内核的体积。 除非有必要开发者可以禁用bug支持(BUG() support (BUG))。禁用这项将会不支持WARN信息和BUG信息。这会减小内核的体积。
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
via: http://www.linux.org/threads/the-linux-kernel-configuring-the-kernel-part-2.4318/ via: http://www.linux.org/threads/the-linux-kernel-configuring-the-kernel-part-2.4318/
译者:[geekpi](https://github.com/geekpi) 校对:[校对者ID](https://github.com/校对者ID) 译者:[geekpi](https://github.com/geekpi) 校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出