время переключения контекста - PullRequest
2 голосов
/ 18 сентября 2011

Интересно, знает ли кто-нибудь из вас, как использовать функцию get_timer ()? измерить время для переключения контекста

как найти среднее? когда это отобразить?

Может ли кто-нибудь помочь мне с этим.

Кто-нибудь из экспертов знает это?

Ответы [ 3 ]

5 голосов
/ 18 сентября 2011

Одним из довольно простых способов было бы соединение двух потоков через канал. Один поток будет делать (псевдокод):

for(n = 1000; n--;) {
    now = clock_gettime(CLOCK_MONOTONIC_RAW);
    write(pipe, now);
    sleep(1msec); // to make sure that the other thread blocks again on pipe read
}

Другой поток будет делать:

context_switch_times[1000];
while(n = 1000; n--;) {
    time = read(pipe);
    now = clock_gettime(CLOCK_MONOTONIC_RAW);
    context_switch_times[n] = now - time;
}

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

Время будет включать в себя накладные расходы на чтение и запись канала и получение времени, однако, это дает хорошее представление о большом времени переключения контекста.

В прошлом я проводил аналогичный тест с использованием стандартного ядра Fedora 13 и потоков FIFO в реальном времени. Минимальное время переключения контекста, которое я получил, было около 4-5 раз.

3 голосов
/ 28 сентября 2011

Я не думаю, что мы на самом деле можем измерить это время из пространства пользователя, так как в ядре вы никогда не узнаете, когда ваш процесс запускается после истечения времени. Поэтому все, что вы получаете в пользовательском пространстве, также включает в себя задержки планирования. Однако из пользовательского пространства вы можете получить более точные измерения, но не всегда. Даже задержка имеет значение.

1 голос
/ 28 сентября 2011

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

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