Привязка задачи к процессору
Если у вас многоядерная или многопроцессорная машина, есть смысл некоторые задачи раскидать по процессорам принудительно. Для этих целей есть программа taskset.
# taskset -p 1 5907Получаем в ответ:
pid 5907's current affinity mask: 1Задача, таким образом, перекинута на второй процессор.
pid 5907's new affinity mask: 2
Изменение приоритета процессов
Чтобы задача получила приоритет реального времени, следует выполнить команду:
# chrt -p 6091В ответ должны получить:
pid 6091's current scheduling policy: SCHED_OTHERЭто значит, что задача теперь будет выполняться неотложно, с минимально возможными задержками (важно при точной синхронизации событий - например, открывание и закрывание затвора фотокамеры при работе с импульсным лазером).
pid 6091's current scheduling priority: 0
Изменение приоритета ввода-вывода
Много задач требуют не только точного интервала исполнения (открывание\закрывание затвора), но и чтобы данные перекачивались как можно быстрее. Для этого можно отдать приоритет ввода-вывода наиболее критичной задаче. Другим задачам можно, наоборот, зарезать на время приоритет обращения к дисковой подсистеме.
Возможно выставить следующие типы приоритетов: Бездействие (Idle), Наилучшая работа (Best effort) и Реальное время (Real time).
Приоритет Idle
Программа с приоритетом idle получит диступ к диску только тогда, когда никакие другие программы к диску не обращаются в течение определённого времени.
Приоритет Best effort
Этот приоритет выбирается по умолчанию для любого процесса, который не требует иного приоритета ввода-вывода. Программы наследуют установки процессорного приоритета для приоритета ввода-вывода, можно так же передавать аргумент от 0 (высокий приоритет) до 7 (низкий приоритет). Ресурсы между приложения с одинаковым приоритетом best effort распределяются по принципу "каждой сестре по серьге".
Приоритет Real time
Задачам с приоритетом реального времени выделяется доступ к диску в первую очередь и вне зависимости от происходящего в системе. Поэтому приоритет реального времени следует использовать осторожно, чтобы не перекрыть кислород другим процессам. Как и в случае приоритета best effort, предусмотрено 8 уровней приоритета, от 0 (высокий приоритет) до 7 (низкий приоритет).
Для выбора приоритета следует указывать параметр -с и значения:
-с1 --- реальное время (real time)Для указания параметра приоритета используется ключ -nM, где M - число от 0 (высокий приоритет) до 7 (низкий приоритет).
-с2 --- наилучшая работа (best effort)
-с3 --- бездействие (idle)
Например, чтобы задать приоритет реального времени с высшим приоритетом для ввода-вывода приложения с идентификатором
# ionice -c1 -n0 -p5812После этого приложению уже никто не помешает монопольно использовать ввод-вывод.
Тут вспоминается такая проблема: при активной работе винчестера (IDE) начинают притормаживать (а то и конкретно лагать) устройства ввода (мышь, клавиатура).
ОтветитьУдалитьПоэтому вопрос — ionice и в самом деле только приоритетом дисковой подсистемы управляет или всем I/O (в т.ч. устройствами ввода)?
* Вижу, выше написан перевод man'а, в котором это так же неясно :)
Вот интересно, если есть загруженный хостинг, наиболее ресурсоемкий процесс - mysqld. Что будет, если ему поставить приоритет реального времени?
ОтветитьУдалитьchrt -p `pidof mysqld`
2 HoverHell пишет...
ОтветитьУдалитьпри активной работе винчестера (IDE) начинают притормаживать (а то и конкретно лагать) устройства ввода (мышь, клавиатура).
Для этого RT режим и есть - поставил приоритет реального времени, и никто на вашу мышь вместе с иксами больше не покушается.
Поэтому вопрос — ionice и в самом деле только приоритетом дисковой подсистемы управляет или всем I/O
Насколько я понимаю, только I/O связанным с дисковой подсистемой.
Вижу, выше написан перевод man'а, в котором это так же неясно :)
А вы никогда не задумывались о том, что многие маны написаны очень дурно и по этой причине их никто не читает?
Вот интересно, если есть загруженный хостинг, наиболее ресурсоемкий процесс - mysqld. Что будет, если ему поставить приоритет реального времени?
Остальные процессы рискуют поседеть до того, как получат доступ к ресурсам. :-)
а нет ли какой либо программы, которая сама бы равномерно загружала оба процессора? Ну или хотя бы пыталась это сделать
ОтветитьУдалитьну вы про маны загнули батенька - тяжело конечно бывает, но это в любой документация IMHO бывает, да и на блоге у Вас тоже встречается
ОтветитьУдалитьа не подскажете какому конкретно процессу надо поставить приоритет реального времени, что бы мышь не лагала?
ОтветитьУдалить@librarian
ОтветитьУдалитьа нет ли какой либо программы, которая сама бы равномерно загружала оба процессора?
Есть. Это ядро Linux :-) И оно с этим прекрасно справляется.
@mariuple,
ну вы про маны загнули батенька - тяжело конечно бывает, но это в любой документация IMHO бывает
Оно не бывает, это постоянная практика. Типа у автора всё работает, а остальные идут лесом.
да и на блоге у Вас тоже встречается
Ссылки в студию. Я серьёзно. Перепишу пост, если халтура.
@Анонимный,
а не подскажете какому конкретно процессу надо поставить приоритет реального времени, что бы мышь не лагала?
Я не настолько телепат, чтобы PID-ы процессов по анонимным комментам угадывать. :-) Но в комменте я прозреваю убунтовца, а если я прав, то RT тут не поможет. Я не знаю, что они в Каноникле делают с Гномом, но по крайней мере Убунта 10.10 тормозит безбожно (запуск гимпа 40 секунд, запуск Kile больше минуты)...
имеет ли смысл на системе с установленным ядром реального времени давать привязку задачи к процессору , если процессор одноядерный но с технологией Hyper Threading?
ОтветитьУдалить@Анонимный комментирует...
ОтветитьУдалитьимеет ли смысл на системе с установленным ядром реального времени давать привязку задачи к процессору
А он всё равно один - смысла я в этом не вижу. Этот пост был написан с прицелом (и сейчас вот как раз используется мной) для многоядерных\многопроцессорных систем.
если процессор одноядерный но с технологией Hyper Threading?
ГиперТреадинг, на мой скромный взгляд, это самая большая ложь и обман, который вообще можно себе позволить высказать на публике. Мне не известно ни одно реальное применение или задача, где гипертреадинг реально улучшали производительность. Речь не идёт о синтетических тестах (которые Интел как раз и пиарила). Сейчас на Core i7 что-то все про HyperThreading не вспоминают и вообще стараются о нём в приличном обществе не говорить.
Многоядерные процессоры это, собственно, и есть HyperThreading который работает. И то не так уж много приложений, которые реально используют Dual/Quadrcore на всю катушку (сжатие видео\аудио, компиляция, виртуализация).