История изменений
Исправление GPFault, (текущая версия) :
Посмотрел на примере нагрузки входяшими пингами в несколько flood-потоков, которая (при конкретной загрузке) даёт softirq-нагрузку на cpu0 (обработчик прерываний не мигрирует между ядрами). Программу повесил на то же ядро, остальные ядра по сути в простое (менее 1% утилизации)
По показателям htop на этом ядре - user: 75%, system 12%, softirq 13%. При этом в попроцессном просмотре он почему-то приплюсовал user и system в 87% для процесса off_cpu_estimate, хотя тот делает крайне мало сисколлов.
grep 'cpu0' /proc/stat; timeout 100 taskset 1 ./a.out; grep cpu0 /proc/stat;
cpu0 3496 0 582 82904 12 838 19635 0 0 0
calibration: TSC per 1024 iterations=26560 process was off-cpu for 153‰
calibration: TSC per 1024 iterations=26302 process was off-cpu for 162‰
....
calibration: TSC per 1024 iterations=26372 process was off-cpu for 160‰
cpu0 10987 0 1745 82904 12 873 20947 0 0 0
То есть программа определяет off-cpu время как ~15-16%. Это явно всё время проведённое в softirq и похоже какая-то небольшая доля времени проведённго в system
Разбивка по user+system+softirq в /proc/stat такая же как в htop - ибо он отсюда и берёт данные.
В общем, мне по итогу не очень понятно насколько это всё точно, интуитивно кажется что 12% system, которые появляются только когда ядро одновременно загружено и обработкой ответов на пинги и userspace приложением - это какая-то очень неточная оценка затрат на переключение контекста.
Исходная версия GPFault, :
Посмотрел на примере нагрузки входяшими пингами в несколько flood-потоков, которая (при конкретной загрузке) даёт softirq-нагрузку на cpu0 (обработчик прерываний не мигрирует между ядрами). Программу повесил на то же ядро, остальные ядра по сути в простое (менее 1% утилизации)
По показателям htop на этом ядре - user: 75%, system 12%, softirq 13%. При этом в попроцессном просмотре он почему-то приплюсовал user и system в 87% для процесса off_cpu_estimate, хотя тот делает крайне мало сисколлов.
grep ‘cpu0’ /proc/stat; timeout 100 taskset 1 ./a.out; grep cpu0 /proc/stat; cpu0 3496 0 582 82904 12 838 19635 0 0 0 calibration: TSC per 1024 iterations=26560 process was off-cpu for 153‰ calibration: TSC per 1024 iterations=26302 process was off-cpu for 162‰ …. calibration: TSC per 1024 iterations=26372 process was off-cpu for 160‰ cpu0 10987 0 1745 82904 12 873 20947 0 0 0
То есть программа определяет off-cpu время как ~15-16%. Это явно всё время проведённое в softirq и похоже какая-то небольшая доля времени проведённго в system
Разбивка по user+system+softirq в /proc/stat такая же как в htop - ибо он отсюда и берёт данные.
В общем, мне по итогу не очень понятно насколько это всё точно, интуитивно кажется что 12% system, которые появляются только когда ядро одновременно загружено и обработкой ответов на пинги и userspace приложением - это какая-то очень неточная оценка затрат на переключение контекста.