Таймер Linux posix вызывает высокую общую загрузку процессораLinux

Ответить Пред. темаСлед. тема
Anonymous
 Таймер Linux posix вызывает высокую общую загрузку процессора

Сообщение Anonymous »

Я написал простую программу для Linux (timertest) с таймером POSIX 500 мкс и работает на двухъядерном процессоре ARM Cortex-A9. Проверка таймера процесса занимает около 25 % загрузки процессора, это нормально. Но иногда общая загрузка процессора очень велика (100%). Если я остановлю процесс timertest, общая загрузка процессора уменьшится до 1%. Я ожидаю, что общая загрузка ЦП такая же, как и в процессе timertest, потому что нет других процессов с высокой нагрузкой?
Я пробовал использовать другой таймер Linux (например, setitimer) ) и команду top (например, htop, procps-ng top). Но результат тот же.
  • Общая загрузка процессора составляет 100 % / timertest — 25 % (htop)
$ timertest
Busy time: 92 us
posix_timer: 0
posix_timer: 1
...
$ htop
0[####****************************100.0%] Tasks: 13, 0 thr, 45 kthr; 1 running
1[# 0.7%] Load average: 0.76 0.25 0.09
Mem[|#*@ 15.3M/1003M] Uptime: 0 0 : 0 2 : 1 6 < b r / > S w p [ 0 K / 0 K ] < b r / > < b r / > P I D U S E R P R I N I V I R T R E S S H R S C P U % - M E M % T I M E + C o m m a n d < b r / > 2 2 9 r o o t 2 0 0 3 4 8 0 2 3 5 6 2 2 2 0 R 2 5 . 8 0 . 2 0 : 1 9 . 7 3 t i m e r t e s t < b r / > 2 3 1 r o o t 2 0 0 3 2 1 6 2 4 2 8 1 8 2 8 R 0 . 7 0 . 2 0 : 0 0 . 2 6 h t o p < b r / > 1 r o o t 2 0 0 1 5 8 0 1 1 7 2 1 0 8 8 S 0 . 0 0 . 1 0 : 0 1 . 6 8 i n i t [ 5 ] < b r / > 2 r o o t 2 0 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
3 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_gp
4 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_par_gp
5 root 20 0 0 0 0 I 0.0 0.0 0:00.00 kworker/0:0-rcu_gp
6 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/0:0H-events_highpr
7 root 20 0 0 0 0 I 0.0 0.0 0:00.00 kworker/u4:0-events_unboun
8 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 mm_percpu_wq
9 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_tasks_rude_
10 root 20 0 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/0
11 root 20 0 0 0 0 I 0.0 0.0 0:00.01 rcu_sched
12 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
13 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/0
14 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/1
15 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/1
16 root 20 0 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/1
17 root 20 0 0 0 0 I 0.0 0.0 0:00.00 kworker/1:0-events
18 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/1:0H-events_highpr
19 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kdevtmpfs
20 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 netns
21 root 20 0 0 0 0 I 0.0 0.0 0:00.00 kworker/0:1-events_long
22 root 20 0 0 0 0 S 0.0 0.0 0:00.00 khungtaskd
23 root 20 0 0 0 0 S 0.0 0.0 0:00.00 oom_reaper
24 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 writeback
25 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kcompactd0
26 root 20 0 0 0 0 I 0.0 0.0 0:00.05 kworker/u4:1-events_unboun
31 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kblockd
32 root -51 0 0 0 0 S 0.0 0.0 0:00.00 watchdogd
33 root 20 0 0 0 0 I 0.0 0.0 0:00.03 kworker/1:1-mm_percpu_wq
34 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rpciod
35 root 0 -20 0 0 0 I 0.0 0.0 0:00.05 kworker/0:1H-kblockd
36 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/u5:0
37 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 xprtiod
38 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kswapd0
39 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 nfsiod
40 root 20 0 0 0 0 I 0.0 0.0 0:00.04 kworker/0:2-mm_percpu_wq
41 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 stmmac_wq
43 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 ipv6_addrconf
44 root 0 -20 0 0 0 I 0.0 0.0 0:00.03 kworker/1:1H-kblockd
45 root 20 0 0 0 0 I 0.0 0.0 0:00.00 kworker/0:3-events
46 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 mmc_complete
47 root 20 0 0 0 0 S 0.0 0.0 0:00.00 jbd2/mmcblk0p2-
48 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 ext4-rsv-conver
51 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/1:2H
78 root 20 0 2744 1464 1116 S 0.0 0.1 0:00.11 /sbin/udevd -d
95 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/0:2H-mmc_complete
96 root 20 0 0 0 0 I 0.0 0.0 0:00.00 kworker/u4:2-events_unboun
194 root 20 0 2156 1168 1072 S 0.0 0.1 0:03.01 /usr/sbin/dropbear -r /etc
202 root 20 0 2344 1492 1408 S 0.0 0.1 0:00.01 /sbin/syslogd -n -O /var/l
205 root 20 0 2344 1512 1408 S 0.0 0.1 0:00.01 /sbin/klogd -n
209 root 20 0 2100 1180 1084 S 0.0 0.1 0:00.00 /usr/sbin/vsftpd
214 root 20 0 2344 1496 1408 S 0.0 0.1 0:00.00 /bin/sh /bin/start_getty 1
215 root 20 0 2344 1432 1344 S 0.0 0.1 0:00.00 /sbin/getty 38400 tty1
217 root 20 0 2432 1684 1556 S 0.0 0.2 0:00.02 -sh
221 root 20 0 2244 1592 1420 S 0.0 0.2 0:00.25 /usr/sbin/dropbear -r /etc
222 root 20 0 2432 1680 1556 S 0.0 0.2 0:00.01 -sh
  • Тестовый код C++ (`timertest.cpp`)
#include
#include
#include
#include
#include

namespace {

void busyCpu()
{
volatile long long i;
for (i = 0; i < 9000; ++i)
{
// Loop 9000: 93 us / CPU 23 % (Linux arrow-sockit 5.10.100-altera)
}
}

void posixTimerSignal(int sig, siginfo_t *si, void *pri)
{
static int i = 0;
static int count = 0;

busyCpu();
if (i++ == 2000)
{
::printf("posix_timer: %d\n", count++);
i = 0;
}
}

void posixTimerTest()
{
timer_t timer = {0};
struct sigevent sev = {0};
struct sigaction sa = {0};

const struct timespec timeVal = {
.tv_sec = 0,
.tv_nsec = 500 * 1000 // 500 us
};

const struct itimerspec its =
{
.it_interval = timeVal,
.it_value = timeVal
};

sev.sigev_notify = SIGEV_SIGNAL;
sev.sigev_signo = SIGRTMIN;
sev.sigev_value.sival_ptr = &timer;

sa.sa_flags = SA_SIGINFO;
sa.sa_sigaction = posixTimerSignal;

if(::sigemptyset(&sa.sa_mask) == -1)
{
::perror("sigemptyset error");
}

if(::sigaction(SIGRTMIN, &sa, nullptr) == -1)
{
::perror("sigaciton error");
}

if(::timer_create(CLOCK_REALTIME, &sev, &timer) != 0)
{
::perror("timer_create error");
}

if(::timer_settime(timer, 0, &its, nullptr) != 0)
{
::perror("timer_settime error");
}

while (true)
{
::pause();
}

}

}
int main(int argc, char* argv[])
{
::printf("Timer test cpp program started\n");
posixTimerTest();
return 0;
}
  • Версия для Linux:
$ uname -a
Linux arrow-sockit 5.10.100-altera #1 SMP Tue Jun 14 16:39:33 UTC 2022 armv7l GNU/Linux
  • Информация о процессоре
$ cat /proc/cpuinfo
processor : 0
model name : ARMv7 Processor rev 0 (v7l)
BogoMIPS : 200.00
Features : half thumb fastmult vfp edsp thumbee neon vfpv3 tls vfpd32
CPU implementer : 0x41
CPU architecture: 7
CPU variant : 0x3
CPU part : 0xc09
CPU revision : 0

processor : 1
model name : ARMv7 Processor rev 0 (v7l)
BogoMIPS : 200.00
Features : half thumb fastmult vfp edsp thumbee neon vfpv3 tls vfpd32
CPU implementer : 0x41
CPU architecture: 7
CPU variant : 0x3
CPU part : 0xc09
CPU revision : 0

Hardware : Altera SOCFPGA
Revision : 0000
Serial : 0000000000000000


Подробнее здесь: https://stackoverflow.com/questions/790 ... l-cpu-load
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Linux»