2015-02-05 7 views
1

Я работаю со встроенной системой 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 просто неточным?

ответ

0

Существует два переключателя контекста для каждого тика, один из которых выполняет процесс до ожидания таймера, а один - от ожидания повторного запуска таймера. Таким образом, 107,5% за цикл идеально согласуется с коммутаторами контекста, занимающими около 40-50%, поскольку каждый цикл включает в себя два контекстных переключателя и некоторый вывод.