Учитывая использование C ++ или C, как я могу измерить, сколько времени требуется для переключения потока в linux? Возможно ли это? - PullRequest
0 голосов
/ 28 мая 2020

Учитывая использование C ++ или C, как я могу измерить, сколько времени требуется для переключения потока в linux? Возможно ли это? На большинстве платформ, сколько времени это занимает? Кто-нибудь может дать мне типичное значение?

Я действительно не хочу измерять квант потока . Я надеюсь найти практический метод измерения продолжительности переключения потока на другой (, а не как долго поток может работать ).

Буду признателен, если вы предоставите код.

Буду признателен за любые подсказки по этому вопросу.

1 Ответ

1 голос
/ 02 июня 2020

Увидимся снова:)

Возможно, но вам нужно немного изменить код ядра. Так что openwrt или что-то еще может вам подойти.

Вы можете посмотреть мой блог и исходный код , чтобы решить проблему. График вытеснения будет выполнять проверку времени, и он выглядит так, как показано ниже

/*
 * Preempt the current task with a newly woken task if needed:
 */
static void
check_preempt_tick(struct cfs_rq *cfs_rq, struct sched_entity *curr)
{
    unsigned long ideal_runtime, delta_exec;
    struct sched_entity *se;
    s64 delta;
    ideal_runtime = sched_slice(cfs_rq, curr);
    delta_exec = curr->sum_exec_runtime - curr->prev_sum_exec_runtime;
    if (delta_exec > ideal_runtime) {
        resched_curr(rq_of(cfs_rq));
        /*
         * The current task ran long enough, ensure it doesn't get
         * re-elected due to buddy favours.
         */
        clear_buddies(cfs_rq, curr);
        return;
    }
    /*
     * Ensure that a task that missed wakeup preemption by a
     * narrow margin doesn't have to wait for a full slice.
     * This also mitigates buddy induced latencies under load.
     */
    if (delta_exec < sysctl_sched_min_granularity)
        return;
    se = __pick_first_entity(cfs_rq);
    delta = curr->vruntime - se->vruntime;
    if (delta < 0)
        return;
    if (delta > ideal_runtime)
        resched_curr(rq_of(cfs_rq));
}

Здесь у нас есть несколько полезных для вас времени

ideal_runtime: время выполнения этой задачи в этот период расписания

sum_exec_runtime: общее время выполнения задачи

prev_sum_exec_runtime: общее время истории

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