Недобровольное переключение контекста в сильно загруженной системе - PullRequest
0 голосов
/ 26 мая 2020
OS - Ubuntu 16 , 64bit
cpu - 2 cores x86

Я запустил три теста sysbench cpu

# sysbench  --num-threads=2  --cpu-max-prime=360000 --test=cpu  run;

ЦП полностью перегружен.

Итак, я ожидаю, что процессы sysbench должны показывать множество энергонезависимых переключений контекста поскольку они конкурируют за ядра процессора. Они страдают от нехватки ресурсов процессора.

# ps axH
23903 pts/6    Sl+    0:00 sysbench --num-threads 2 --cpu-max-prime 360000 --test cpu run
23903 pts/6    Rl+    0:07 sysbench --num-threads 2 --cpu-max-prime 360000 --test cpu run
23903 pts/6    Rl+    0:07 sysbench --num-threads 2 --cpu-max-prime 360000 --test cpu run
23914 pts/7    Sl+    0:00 sysbench --num-threads 2 --cpu-max-prime 360000 --test cpu run
23914 pts/7    Rl+    0:04 sysbench --num-threads 2 --cpu-max-prime 360000 --test cpu run
23914 pts/7    Rl+    0:04 sysbench --num-threads 2 --cpu-max-prime 360000 --test cpu run
23933 pts/8    Sl+    0:00 sysbench --num-threads 2 --cpu-max-prime 360000 --test cpu run
23933 pts/8    Rl+    0:02 sysbench --num-threads 2 --cpu-max-prime 360000 --test cpu run
23933 pts/8    Rl+    0:02 sysbench --num-threads 2 --cpu-max-prime 360000 --test cpu run

У нас есть 3 процесса и 6 потоков

Однако этого не происходит.

Когда я смотрю pidstat о контексте номера переключателей показывает нули.

# pidstat -w 10 -u -h
Linux 4.4.0-62-generic (test-kub-04)    05/26/2020      _x86_64_        (2 CPU)

#      Time   UID       PID    %usr %system  %guest    %CPU   CPU   cswch/s nvcswch/s  Command
 1590446120     0       750    0.00    0.00    0.00    0.00     0     10.39      0.00  vmtoolsd
 1590446120     0     18778   66.63    0.00    0.00   66.63     1      0.00      0.00  sysbench
 1590446120     0     18781   66.53    0.00    0.00   66.53     0      0.00      0.00  sysbench
 1590446120     0     18791   66.63    0.00    0.00   66.63     1      0.00      0.00  sysbench
 1590446120     0     18804    0.00    0.00    0.00    0.00     0      0.10      0.10  pidstat

Насколько я понимаю, каждый временной интервал 1 \ USER_HZ ЦП прекращает выполнение текущего кода, сохраняет всю необходимую информацию о текущем коде обработки и переключается на выполнение кода планировщика linux , затем планировщик решает, какой следующий процесс поставить на каждое ядро ​​процессора. Каждое ядро ​​процессора загружает необходимый контекст и выполняет его для следующего временного интервала 1 \ USER_HZ.

Таким образом, на мой взгляд, номера переключателей контекста должны расти одновременно для процессов, особенно для сильно загруженной системы.

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