Я работаю со встроенной системой Linux на процессоре AM3505 (одноядерный процессор ARM Cortex-A8). Я пытаюсь понять, почему переключение контекста использует больше времени процессора, чем я ожидал.Накладные расходы на установку нити для сна слишком высоко?
В то время как тест lat_ctx от lmbench говорит мне, что переключатель контекста должен занимать от 40 до 50 секунд, этот цикл дает мне около 4,3% использования процессора в соответствии с htop.
int main(int argc, char** argv)
{
while(1) {
usleep(2500);
printf("tick\n");
}
return 0;
}
Это приведет к 107,5 мксекам за «галочку».
Профилирования процесса с Трассированием дает мне около 8% загрузки процессора и:
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
93.45 0.292904 29 10038 nanosleep
6.55 0.020528 2 10039 write
------ ----------- ----------- --------- --------- ----------------
100.00 0.313432 20077 total
Ядра Linux сконфигурирован как полного preemtible режиме реального времени с поддержкой привет разрешения таймера. Может ли это повлиять на измерения? Является ли использование процессора показанным в htop просто неточным?