linux - 如何让 tickless 内核工作? nohz_full、rcu_nocbs、isolcpus 还有什么?

标签 linux timer linux-kernel interrupt latency

我刚刚安装了带有新 3.11 内核的 Ubuntu 13.10。在 3.10 中,它具有无滴答功能,我可以在不被本地计时器中断的情况下运行进程,不像以前那样频繁。我点击了这个链接 http://www.breakage.org/2013/11/nohz_fullgodmode/

我计划在 cpu 3 上运行我的应用程序,所以我在我的 grub 中设置了以下内容:

isolcpus=3 nohz_full=3 rcu_nocbs=3

重启后,cpu 3的本地定时器中断似乎确实比其他cpu少了很多。

我也跑了:

# for i in `pgrep rcu` ; do taskset -pc 0 $i ; done

但是当我开始运行我的应用程序时,本地定时器中断的计数跳了起来。 我的应用程序除了无限循环外什么都不做。

int main() {
while (true) {
}
}

那我错过了什么?为什么当我运行某些东西时,时间中断又回来了? 我认为 nohz_full 意味着当只有一个进程在运行时,它将停止中断。

以下是/proc/sched_debug 的输出,当我没有运行应用程序并且显然该 cpu 上没有其他进程时。那我错过了什么?

cpu#3, 2492.071 MHz
  .nr_running                    : 0
  .load                          : 0
  .nr_switches                   : 45818
  .nr_load_updates               : 11165
  .nr_uninterruptible            : -1
  .next_balance                  : 4295.674289
  .curr->pid                     : 0
  .clock                         : 3127610.519188
  .cpu_load[0]                   : 0
  .cpu_load[1]                   : 0
  .cpu_load[2]                   : 0
  .cpu_load[3]                   : 0
  .cpu_load[4]                   : 0
  .yld_count                     : 0
  .sched_count                   : 47377
  .sched_goidle                  : 3956
  .avg_idle                      : 1000000
  .ttwu_count                    : 29329
  .ttwu_local                    : 26078

cfs_rq[3]:/
  .exec_clock                    : 15750.800052
  .MIN_vruntime                  : 0.000001
  .min_vruntime                  : 15699.782432
  .max_vruntime                  : 0.000001
  .spread                        : 0.000000
  .spread0                       : -247950.011716
  .nr_spread_over                : 0
  .nr_running                    : 0
  .load                          : 0
  .runnable_load_avg             : 0
  .blocked_load_avg              : 0
  .tg_load_contrib               : 0
  .tg_runnable_contrib           : 0
  .tg_load_avg                   : 602
  .tg->runnable_avg              : 592
  .avg->runnable_avg_sum         : 0
  .avg->runnable_avg_period      : 47077

rt_rq[3]:/
  .rt_nr_running                 : 0
  .rt_throttled                  : 0
  .rt_time                       : 0.000000
  .rt_runtime                    : 950.000000

runnable tasks:
            task   PID         tree-key  switches  prio     exec-runtime         sum-    exec        sum-sleep
----------------------------------------------------------------------------------------    ------------------

最佳答案

好的,我发现我需要构建自己的内核才能打开配置。

关于linux - 如何让 tickless 内核工作? nohz_full、rcu_nocbs、isolcpus 还有什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20133523/

相关文章:

linux - 在执行另一个 .sh 脚本之前等待 .sh 脚本完成?

c - 串口卡在 close() 上

linux - 内核模块中的 CPU 信息

c# - 将 C# System.Timer 转换为 Threading.Timer

xamarin - 如何在完成之前取消计时器

JavaFX - 无法取消计时器

linux - 如何在 Linux 中临时交换驱动程序?

linux - 无法在 Centos 7 上自动挂载 NFS 共享

linux - 内核启动错误 - 我可以获取日志吗?

linux - 如何判断两个按键是否同时按下?