LINUX.ORG.RU

Как менять текущий планировщик задач

 ,


0

1

Ситуация такая: я хочу сравнить работу разных планировщиков, типа CFS, DEADLINE, EAS и т.п. Насколько я понял из документации, в ядре есть несколько планировщиков и в определённый момент времени ядром может быть выбран один планировщик, который отвечает за распределение всех тасков по ядрам.

Но я не могу понять, как переключаться между этими алгоритмами: можно ли это в рантайме через kernel api сделать или каждый раз нужно пересобирать ядро (в это я мало верю, конечно, но вдруг).

В любом случае, я буду рад любой информации о переключении планировщиков. Да и о самих планировщиках, потому что я не уверен, что понял принцип их работы верно. (Спустя 2 месяца гуглежа я понял, что мои навыки меня подводят, что и привело меня сюда)

P.S.: не знаю, насколько это подходит к теме администрирования, поэтому наверняка пишу в general


Погодь, ты про планировщик ввода/вывода, или все таки про планировщик задач?

Просто CFS, DEADLINE это планировщики ввода/вывода.

Vochatrak-az-ezm ★★
()
Ответ на: комментарий от Vochatrak-az-ezm

Я может что-то не так понял, но здесь про CFS не особо очевидно написано, что это планировщик ввода/вывода, здесь про deadline тоже, как и здесь про EAS

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

thofyb
() автор топика
Ответ на: комментарий от Vochatrak-az-ezm

Тащемта, если Deadline или CFS не планировщики задач, то всё равно. (Возможно вы даже перепутали CFS с CFQ) Но EAS вроде как раз планировщик задач и мне нужно понять, как поменять его.

thofyb
() автор топика
Ответ на: комментарий от anonymous

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

thofyb
() автор топика
Ответ на: комментарий от thofyb

Да извини, прочитал невнимательно.

Планировщик задач «выбирается» при компиляции ядра. Насколько мне известно, иного способа переключать их нет.

Vochatrak-az-ezm ★★
()
Ответ на: комментарий от Vochatrak-az-ezm

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

thofyb
() автор топика
Ответ на: комментарий от anonymous

Спасибо Хотел уточнить, правильно ли я понял, что с помощью системного вызова для данного процесса можно выбрать политику его обработки? То есть в один момент времени выполнение разных процессов может планироваться разными алгоритмами.

Если так, то этот системный вызов разве производится для каждого процесса? То есть в какой момент процессу назначается планировщик, по которому он будет выполняться на процессоре?

Просто мне кажется, что есть какое-то место, в котором написано, что по дефолту все процессы планируются вот таким планировщиком. Вот где это место и как его изменить?

thofyb
() автор топика
Ответ на: комментарий от thofyb

Каждому процессу можно назначить ту или иную политику, по которой ядро и встроенные в него планировщики будут выделять процессу процессорное время. Политики меняются через API ядра, через т.н. системные вызовы. Из определения вызова

int sched_setscheduler(pid_t pid, int policy, const struct sched_param *param);

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

Все политики делятся на два класса: обычные и реального времени. Для «обычных» используется алгоритм CFS, учитывающий nice-значение каждого процесса. Для «реального времени» — другие алгоритмы, более простые, но более детерминированные, учитывающие приоритет процесса.

У вновь создаваемых процессов и тредов по умолчанию устанавливается политика SCHED_NORMAL (она же SCHED_OTHER), относящаяся к классу «обычных». Кроме этой политики, CFS отвечает ещё за SCHED_BATCH и SCHED_IDLE.

Что касается EAS, то он является надстройкой над CFS, дополнительно учитывающей энергоэффективность и асимметричность CPU. Для его работы необходимо соблюдение нескольких условий: https://www.kernel.org/doc/html/latest/scheduler/sched-energy.html#dependencies-and-requirements-for-eas

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.