В служебных файлах systemd можно установить следующие параметры, относящиеся к планированию (на systemd.exec
странице руководства исправьте меня, если я ошибаюсь):
Nice Устанавливает уровень Nice по умолчанию (приоритет планирования) для выполняемых процессов. Принимает целое число от -20 (самый высокий приоритет) до 19 (самый низкий приоритет). Смотрите setpriority (2) для деталей.
Какой знакомый хороший уровень. Кажется, что его эффект несколько «подорван» из-за функции «автогруппы» в последних ядрах Linux. Таким образом, параметры, приведенные ниже, могут быть тем, что я действительно хочу установить, чтобы процессы работали хорошо для моего рабочего стола.
CPUSchedulingPolicy Устанавливает политику планирования ЦП для выполняемых процессов. Принимает одно из другого, пакетное, простаивающее, fifo или рр. Смотрите sched_setscheduler (2) для подробностей.
CPUSchedulingPriority Устанавливает приоритет планирования ЦП для выполняемых процессов. Доступный диапазон приоритетов зависит от выбранной политики планирования ЦП (см. Выше). Для политик планирования в реальном времени может использоваться целое число от 1 (самый низкий приоритет) до 99 (самый высокий приоритет). Смотрите sched_setscheduler (2) для подробностей.
CPUSchedulingResetOnFork Принимает логический аргумент. Если это правда, повышенные приоритеты и политики планирования ЦП будут сброшены, когда выполненные процессы разветвляются, и, следовательно, не могут проникнуть в дочерние процессы. Смотрите sched_setscheduler (2) для подробностей. По умолчанию false.
Я понимаю последний вариант. Из объяснения первых двух я понял, что могу выбрать политику планирования, а затем, учитывая эту политику, приоритет. Мне не совсем ясно, что я должен выбрать для каких задач. Например, безопасно ли выбирать «простаивающий» для задач резервного копирования (относительно интенсивно использующий процессор, потому что дедупликация), или другой вариант лучше подходит?
В общем, я хочу получить понятный обзор каждой политики с каждым из ее приоритетов и пригодностью для конкретных целей. Также интересно взаимодействие с хорошим уровнем.
Рядом с планированием ЦП есть планирование ввода-вывода. Я думаю, это соответствует ionice
(поправьте меня, если я ошибаюсь).
IOSchedulingClass Устанавливает класс планирования ввода / вывода для выполняемых процессов. Принимает целое число от 0 до 3 или одну из строк none, в режиме реального времени, с максимальным усилием или в режиме ожидания. Смотрите ioprio_set (2) для подробностей.
IOSchedulingPriority Устанавливает приоритет планирования ввода-вывода для выполняемых процессов. Принимает целое число от 0 (самый высокий приоритет) до 7 (самый низкий приоритет). Доступные приоритеты зависят от выбранного класса планирования ввода / вывода (см. Выше). Смотрите ioprio_set (2) для подробностей.
Здесь мы видим ту же структуру, что и при планировании процессора. Я ищу такую же информацию.
Для всех опций «Планирование» упомянутые справочные страницы не достаточно ясны для меня, в основном при переводе вещей в несколько технически склонную точку зрения пользователя настольного компьютера.
nice
применяется значение).Ответы:
CPUScheduling {Политика | Приоритет}
Ссылка говорит вам, что
CPUSchedulingPriority
должны быть установлены только дляfifo
илиrr
("в режиме реального времени") задач. Вы не хотите принудительно планировать услуги в режиме реального времени.CPUSchedulingPolicy=other
по умолчанию.Это оставляет
batch
иidle
. Разница между ними актуальна только в том случае, если у вас есть несколько задач с приоритетом простоя, потребляющих процессор одновременно. Теоретическиbatch
дает более высокую пропускную способность (в обмен на более длительные задержки). Но это не большая победа, поэтому в данном случае это не очень актуально.idle
буквально голодает, если что-то еще хочет процессор. Приоритет ЦП несколько менее значим, чем раньше, для старых систем UNIX с одним ядром. Я был бы счастлив, начиная сnice
хорошего уровня 10 или 14, прежде чем прибегать к помощиidle
. Смотрите следующий раздел.Однако большинство настольных компьютеров в большинстве случаев простаивают. И когда у вас есть процессор, который может предотвратить фоновую задачу, обычно он использует только один из ваших процессоров. Имея это в виду, я не чувствовал бы себя слишком рискованным, используя
idle
обычный рабочий стол или ноутбук. Если только он не оснащен процессором Atom / Celeron / ARM мощностью около 15 Вт или ниже ; тогда я хотел бы посмотреть на вещи немного более тщательно.Хороший уровень "подорван" функцией ядра "autogroup"?
Да.
Автогруппировка немного странная. Автору
systemd
не понравилась эвристика даже для десктопов. Если вы хотите проверить отключение автоматической группировки, вы можете установить sysctlkernel.sched_autogroup_enabled
в0
. Я думаю, что лучше всего протестировать, установив sysctl в постоянной конфигурации и перезагрузившись, чтобы убедиться, что вы избавились от всех автогрупп.Тогда вы сможете без проблем получать хорошие уровни для своих услуг. По крайней мере, в текущих версиях systemd - см. Следующий раздел.
Например, хороший уровень 10 уменьшит вес каждого потока в планировщике ЦП Linux, примерно до 10%. Хороший уровень 14 ниже 5%. (Ссылка: полная формула )
Приложение: является ли хороший уровень "подорванным" системными cgroups?
Текущий
DefaultCPUAccounting=
параметр по умолчанию отключен, если он не может быть включен без включения управления ЦП для каждой услуги. Так должно быть хорошо. Вы можете проверить это в вашей текущей документации:man systemd-system.conf
Имейте в виду, что управление ЦП для каждой службы также будет включено, когда любая служба устанавливает CPUAccounting / CPUWeight / StartupCPUWeight / CPUShares / StartupCPUShares.
Следующий фрагмент блога устарел (но все еще онлайн). С тех пор поведение по умолчанию изменилось, и справочная документация была соответствующим образом обновлена.
источник
Классический совет по настройке - «Не оптимизируй, эталон».
Вместо того, чтобы беспокоиться об общих рекомендациях, начните с конкретного случая, который вас интересует, и который был оценен как конкретный вопрос производительности. Пусть данные позволят вам правильную директиву для настройки. С данными может быть ясно, если ваш процесс страдает от плохого приоритета, загружает процессор или имеет другую проблему.
Современные настольные компьютеры часто работают очень быстро, без каких-либо настроек.
источник
systemd-analyze
сblame
иplot
я был в состоянии сократить время загрузки на старом RPi более чем на минуту. Конечно, когда дело доходит до анализа проблемы, необходимо проводить измерения вместо того, чтобы преждевременно начинать «оптимизацию».