Можно ли заранее установить значение приоритета (niceness) для программы?

Вопрос или проблема

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

Итак, есть ли способ задать уровень niceness программе до ее запуска? Например, я хочу, чтобы программа Steam всегда запускалась с уровнем niceness -20, чтобы дать ей приоритет над всем остальным. Я не хочу запускать ее из командной строки каждый раз вот так: “nice -n -20 steam”.

Скрипт, наверное, подошел бы достаточно хорошо для этих программ, но это не решает проблему с такими вещами, как службы. Например, я могу хотеть изменить значение nice моего оконного менеджера, который запускается дисплейным менеджером, который, в свою очередь, запускается службой.

Это цель команд nice и renice. Вы на правильном пути.

Вы можете создать программу-запускалку с такой опцией в зависимости от того, в какой среде рабочего стола вы работаете.

Вот пример для Gnome-desktop:
https://linuxconfig.org/how-to-create-desktop-shortcut-launcher-on-ubuntu-18-04-bionic-beaver-linux

С наилучшими пожеланиями, не стесняйтесь спрашивать меня, если нужны дополнительные подробности.

Предложение: реалийте команды, которые выполняются интерактивно.

Это можно сделать для каждого пользователя (в вашем файле .bashrc), например: alias slow_command="nice -n 16 command" или системно.
Например, в настройке наподобие Debian вы можете добавить свой файл с директивами alias в /etc/profile.d/.

Вот как: Как я могу preset aliases для всех пользователей?

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

Если вы хотите установить niceness на уровне службы, системные юниты могут быть настроены таким образом. См. директивы юнитов.
Я понимаю, что директива Nice должна быть в разделе [Service]

Ответ или решение

Вопрос о возможности задать значение "niceness" для программ до их запуска имеет несколько аспектов, связанных с приоритетом выполнения процессов в системе Linux. Настройка приоритетов позволяет управлять выделением процессорного времени, что может быть полезно для улучшения производительности важных приложений, например, игр или программ вроде WINE.

Теория

Значение "niceness" определяет приоритет процесса. Оно варьируется от -20 (наивысший приоритет) до 19 (наименьший). Процессы с низким значением "niceness" чаще будут получать доступ к процессорным ресурсам, чем те, у которых это значение выше. Изменение приоритета процессов возможно с использованием команд nice и renice. Команда nice применяется при запуске нового процесса, а renice — для изменения приоритета уже запущенного процесса.

Основной вопрос состоит в том, как автоматизировать этот процесс для программ, запускаемых через интерфейс пользователя или автоматически, например, в случае сервисов или системных процессов.

Пример

  1. Создание скрипта-обертки: Для программ, таких как Steam, можно создать скрипты-запускатели, которые автоматически устанавливают необходимое значение "niceness". Например, скрипт run_steam.sh может выглядеть следующим образом:

    #!/bin/bash
    nice -n -20 steam

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

  2. Алиасы в оболочке: Другой подход заключается в создании алиасов для команд, которые выполняются в интерактивном режиме. Это делается в файле .bashrc (для Bash):

    alias steam="nice -n -20 steam"

    Для более глобальной настройки можно добавить такие алиасы в /etc/profile.d/ для всех пользователей.

  3. Настройка systemD для сервисов: Для изменения "niceness" системных сервисов, которые управляются через systemd, необходимо отредактировать соответствующие unit-файлы. Директива Nice= должна находиться в разделе [Service].

    Пример конфигурации может выглядеть так:

    [Service]
    ExecStart=/usr/bin/your-window-manager
    Nice=-10

    Эту настройку можно задать в собственном unit-файле, либо добавить с помощью systemctl edit:

    sudo systemctl edit your-service.service

    И затем в открывшемся редакторе добавить необходимые изменения под [Service].

Применение

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

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

Кроме того, стоит рассмотреть возможность мониторинга работы процессов с помощью утилит, таких как top, htop, которые предоставляют информацию о текущих значениях "niceness" и общей загрузке системы. Это поможет в дальнейшем оптимизировать настройки.

Таким образом, есть несколько методов задать значение "niceness" для программ и сервисов до их запуска, включая создание скриптов, настройку системного уровня с помощью systemd и использование алиасов в среде командной строки. Это помогает в автоматизации и улучшении производительности, особенно в пользовательских сценариях.

Оцените материал
Добавить комментарий

Капча загружается...