Понимание планирования и / proc / [pid] / sched - PullRequest
0 голосов
/ 10 октября 2018

У меня есть однопоточное приложение, которое (вращается и) прикреплено к ядру с набором задач и изоляцией ЦП (то есть isolcpus = 12-23 nohz_full = 21,22,23 rcu_nocbs = 12-23; у меня 2 ЦП и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_migrations, nr_switches, nr_voluntary_switches, nr_involuntary_switches равны нулю)?Учитывая, что мое приложение действительно хочет использовать все ядро.
  2. Почему ядро ​​пыталось мигрировать?Учитывая, что я уже изолировал ядро ​​и назначил там только одно однопоточное приложение.
  3. nr_voluntary_switches отслеживал количество раз, когда мое приложение добровольно отказывалось от ядра?Если да, то при какой ситуации мое приложение отказалось бы от ядра?Мое приложение выполнило некоторые неблокирующие операции ввода-вывода (например, fwrite_unlocked() и т. Д.), Но не работало с сетью.
  4. При какой ситуации мое приложение будет вынуждено переключаться?Я вижу, что nr_involuntary_switches = 10, это означает, что мое приложение было вынуждено переключаться 10 раз?
  5. Что означают цифры после numa_faults_memory записей?

Я нахожусь на 3.10.0-862.2.3.el7.x86_64, если это имеет значение.

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...