Прерывание таймера Linux

Да. Есть два способа добиться этого:

  1. Уловка для изменения порядка рабочих областей (, предполагая, что ваш левый экран является основным экраном, вы можете использовать xrandr -q, чтобы проверить ) workspaces = ["2:mail", "3:web", "4:dev", "5", "6", "7", "8:chat", "9", "10", "1:db"] associatedKeySyms = [xK_2.. xK_9] ++ [xK_0, xK_1] Ключевым здесь является порядок associatedKeySyms, так как xmonad не заботятся об именах ваших рабочих областей. Если вы не отображаете имена рабочих областей в строке состояния, это будет работать. Еще более простой способ — просто изменить associatedKeySymsбез изменения workspaces. Однако, если вам нужно отобразить имена рабочих областей (, вы можете захотеть, чтобы «1 :db» стояло первым и было связано с mod+1), тогда вам нужно следовать следующему решению.

  2. В основном вам нужно взломать StackSetв XMonad.StackSet(https://github.com/xmonad/xmonad/blob/master/src/XMonad/StackSet.hs), чтобы манипулировать привязкой между экранами и рабочими пространствами. Вам нужно написать код в startupHookв вашем конфигурационном файле, чтобы он выполнялся при загрузке xmonad.

Вам также может понадобиться XMonad.Actions.PhysicalScreens, если вы хотите указать правый или левый экраны вместо идентификаторов экрана.

Я только начал использовать xmonad, и я не сделал именно то, что вы хотите. У меня похожие потребности, но не только при запуске xmonad.Я пытаюсь взломать как процедуру запуска , так и процедуру повторного экрана (новый монитор подключен/отключен ), и надеюсь, что вы найдете некоторые части моей конфигурации полезными при написании своей..https://github.com/subbyte/subXMonad

0
05.11.2019, 11:36
2 ответа

Обработчик прерывания таймера Linux не так уж много делает напрямую . Для x86 вы найдете обработчик прерывания таймера PIT/HPET по умолчанию в arch/x86/kernel/time.c:

.
static irqreturn_t timer_interrupt(int irq, void *dev_id)
{
    global_clock_event->event_handler(global_clock_event);
    return IRQ_HANDLED;
}

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

Как побочный -эффект возникновения прерывания,__scheduleможет закончиться вызовом, поэтому прерывание по таймеру также может привести к переключению задачи (, как и любое другое прерывание ).

Изменение CONFIG _HZ изменяет периодичность прерывания таймера. Увеличение HZозначает, что он срабатывает чаще, поэтому возникает больше накладных расходов, связанных с таймером -, но меньше возможностей ожидания планирования задач (, поэтому интерактивность улучшается ); уменьшение HZозначает, что он срабатывает реже, поэтому меньше накладных расходов, связанных с таймером -, но выше риск того, что задачи будут ждать планирования (, поэтому пропускная способность повышается за счет интерактивного отклика ). Как всегда, лучший компромисс зависит от вашей конкретной рабочей нагрузки. В настоящее время CONFIG_HZв любом случае менее актуален для аспектов планирования; см. Как изменить продолжительность срезов времени -, используемых планировщиком ЦП Linux?

См. также Как обрабатывается прерывание в Linux?

11
28.01.2020, 02:14

what Linux does in the timer interrupt?

Я расцениваю это как просьбу -между действиями.

Копирую отсюда__schedule():

 *   3. Wakeups don't really cause entry into schedule(). They add a
 *      task to the run-queue and that's it.
 *
 *      Now, if the new task added to the run-queue preempts the current
 *      task, then the wakeup sets TIF_NEED_RESCHED and schedule() gets
 *      called on the nearest possible occasion:

Это хорошая отправная точка; это хорошо задокументировано. Это начало длинной истории. Что такое «пробуждение»? Это о состояниях R и S? и блокировка?

У меня есть только одно небольшое возражение против ответа С.К. и против одной из ссылок :о том, что HZ «уже не так важен».

Может быть из-за того, что в прошлом была некоторая путаница, некоторая чрезмерная коррекция от 100 Гц до 1000 Гц, а затем обратно к 300 Гц, поэтому для одновременного соответствия «мультимедиа» (подумайте о происхождении HPET 2005 :«мультимедийный таймер» ).

Может быть с 4 и более ядрами, это тоже имеет меньшее значение. Но в зависимости от того, что вы хотите делать со своим «сервером», это все равно должно иметь значение -такое соотношение между задержкой и пропускной способностью -может быть важным при большой нагрузке.

И если планирование не выполняется в прерываниях по таймеру, то оно выполняется в этих «других» прерываниях.

И почему HZ не настраивается (загрузкой или даже временем выполнения )?

1
28.01.2020, 02:14

Теги

Похожие вопросы