Skip to content Skip to main navigation Skip to footer

Linux:戴文的Linux内核专题:06 内核配置(2)

这一部分我们讲配置内核IRQ子系统。中断请求(IRQ)是硬件发给处理器的一个信号,它暂时停止一个正在运行的程序并允许一个特殊的程序占用CPU运行。

这个目录中的第一个问题属于内核特性(Expose hardware/virtual IRQ mapping via debugfs (IRQ_DOMAIN_DEBUG))(通过debugfs来显示硬件/虚拟的IRQ映射),它询问是否可以使用虚拟的调试文件系统来映射硬件及Linux上对应的IRQ中断号。这个用作调试目的,大多数用户不需要用到,所以我选择了”no”。

下一个标题显示”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/任务用时与状态统计),这个是关于进程的追踪。第一个问题看上去像这样:

Cputime accounting (CPU用时统计)

  1. Simple tick based cputime accounting (TICK_CPU_ACCOUNTING) (简单基于滴答的用时统计)
  2. Full dynticks CPU time accounting (VIRT_CPU_ACCOUNTING_GEN) (NEW) (全动态滴答的用时统计)
  3. Fine granularity task level IRQ time accounting (IRQ_TIME_ACCOUNTING) (细粒度的任务级IRQ用时统计)

TICKCPUACCOUNTING会在每个CPU滴答中检测/proc/stat。这是默认的选项,这个记账方法非常简单。

注意:CPU滴答是抽象测量CPU时间的方式。每个处理器、操作系统和安装的系统都不同,比如说,一个更强大的处理器会比老的处理器拥有更多的CPU滴答。如果你安装了一个Linux系统,然后接着在同一块磁盘上重新安装了它,你可能会得到一个更快或更慢的CPU滴答时间(至少一些计算机技术书上这么说)。通常来讲,一个更快的时钟速度意味着更多的CPU滴答。

如果启用了VIRT_CPU_ACCOUNTING_GEN,任务和CPU时间统计将由监视内核-用户边界实现。这个选择的代价是会增加额外的开销。

IRQ_TIME_ACCOUNTING记账方式则通过检测IRQ状态间的时间戳工作,这个性能开销很小。

我选择了”1″并被询问有关BSD记账”BSD Process Accounting (BSD_PROCESS_ACCT)”(BSD进程记账)的问题。这个内核特性会记录每个进程不同的关闭信息。为了得到一个更小和更快的内核,我选择了”no”.

下一组问题看上去就像下面这样。

  • Export task/process statistics through netlink (TASKSTATS) (通过netlink导出任务/进程统计数据)
  • Enable per-task delay accounting (TASK_DELAY_ACCT) (启用针对每个任务的延迟统计)
  • Enable extended accounting over taskstats (TASK_XACCT) (启用taskstats的扩展统计)

TASKSTATS使内核可以通过网络套接字导出进程统计。网络套接字是内核和用户空间进程间IPC通信的一种形式。TASKDELAYACCT监视进程并注意资源访问的延迟。比如,TASKDELAYACCT可以看到X进程正在为了CPU时间而等待,如果TASK_DELAY_ACCT观察到进程已经等待了太长时间,这个进程接着就会被给予一些CPU时间。TASK_XACCT会收集额外的统计数据,为了更小的内核负载我会禁用这个。

现在接下来的目录就会显示RCU子系统:读取-复制-更新子系统是一种低负载的同步机制,它允许程序查看到正在被修改/更新的文件。配置工具已经回答了第一个问题。

RCU Implementation (RCU 实现方式)

> 1. Tree-based hierarchical RCU (TREE_RCU) (树形分层结构的RCU)

choice[1]: 1

这里就选择“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回调)。(译注:此处作者没做解释。前一个能够节省电力,但是降低了性能;后一个用于调试。)

来源:https://linux.cn/article-2216-1.html

0 Comments

There are no comments yet

Leave a comment

Your email address will not be published.