了解计划和/ proc / [pid] / sched

时间:2018-10-10 09:24:53

标签: linux-kernel kernel scheduler scheduling

我有一个单线程应用程序,它(带有任务集和CPU隔离)固定(纺丝并)到一个内核(即isolcpus = 12-23 nohz_full = 21,22,23 rcu_nocbs = 12-23;我有2个CPU,并且每个12核心-Skylake):

exec taskset -c 22 setuidgid myuser envdir ./env -c = /opt/bin/UtilityServer > /tmp/logs/utility-server.log

出于某种原因,在运行了几个小时后,我检查了统计信息:

UtilityServer (1934, #threads: 1)
-------------------------------------------------------------------
se.exec_start                                :      78998944.120048
se.vruntime                                  :      78337609.962134
se.sum_exec_runtime                          :      78337613.040860
se.nr_migrations                             :                    6
nr_switches                                  :                   41
nr_voluntary_switches                        :                   31
nr_involuntary_switches                      :                   10
se.load.weight                               :                 1024
policy                                       :                    0
prio                                         :                  120
clock-delta                                  :                   13
mm->numa_scan_seq                            :                  925
numa_migrations, 0
numa_faults_memory, 0, 0, 0, 0, 1
numa_faults_memory, 1, 0, 0, 0, 1
numa_faults_memory, 0, 1, 1, 1, 0
numa_faults_memory, 1, 1, 0, 1, 9

问题:

  1. 如何停止切换和迁移(即se.nr_migrationsnr_switchesnr_voluntary_switchesnr_involuntary_switches为零)?鉴于我的应用程序确实想使用整个内核。
  2. 为什么内核尝试迁移?鉴于我已经隔离了内核,并且在那里只分配了一个单线程应用程序。
  3. nr_voluntary_switches跟踪了我的应用程序自愿放弃核心的次数?如果是,在什么情况下我的应用程序将放弃核心?我的应用程序确实执行了一些非阻塞磁盘I / O(即fwrite_unlocked()等),但网络事务为零。
  4. 在什么情况下我的应用程序将被迫切换?我看到nr_involuntary_switches = 10,这意味着我的应用程序被迫切换了10次吗?
  5. 输入numa_faults_memory之后的数字是什么意思?

如果有问题,我正在使用3.10.0-862.2.3.el7.x86_64。

谢谢!

0 个答案:

没有答案