Планирование в Linux: запускать задачу, когда компьютер не используется (= нет ввода пользователя) - PullRequest
8 голосов
/ 07 марта 2009

Я хочу запускать Folding @ home клиент на моем Ubuntu 8.10 только тогда, когда он простаивает из-за большого потребления памяти программой.

Под «бездействием» я подразумеваю состояние, когда нет активности пользователя (клавиатура, мышь или любое другое). Это нормально для других (возможно тяжелых) процессов, запускаемых в это время, так как F @ H имеет самый низкий приоритет ЦП. Суть в том, чтобы просто улучшить пользовательский опыт и выполнять тяжелую работу, когда его нет дома.

Как это сделать?

Ответы [ 7 ]

12 голосов
/ 07 марта 2009

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

4 голосов
/ 12 марта 2009

может быть. Вам нужно установить на холостом ходу наименьший приоритет с помощью nice.

4 голосов
/ 07 марта 2009

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

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

Вы должны иметь возможность различать использование ЦП этого процесса и других программ, которые могут быть запущены, чтобы вы могли определить, правильно ли система "простаивает".

Процесс много проще для процесса запланирован , когда система в противном случае простаивает. Просто используйте команду nice для запуска клиента Folding @ Home.

Однако это не решит проблему нехватки оперативной памяти. Если у вас включено пространство подкачки, система должна иметь возможность выгружать любые процессы с низким приоритетом, чтобы они не потребляли и использовали реальные ресурсы, но остерегались большого попадания на дисковый ввод-вывод каждый раз, когда ваш клиент Folding @ Home Поменяет и из ОЗУ.

p.s. Оперативная память сейчас очень дешевая ...

p.p.s. см. статью

2 голосов
/ 07 марта 2009

Вы захотите взглянуть на несколько вещей, чтобы определить 'простоя', а также изучить вызов sysinfo () (ссылка указывает на разницу в структуре, которую она заполняет между различными версиями ядра) .

Linux не управляет памятью обычным образом. Не просто смотрите на нагрузки, смотрите на память. В частности, / proc / meminfo имеет замечательную строку, начатую с Committed_AS, которая показывает, сколько памяти ядро ​​фактически пообещало другим процессам. Сравните это с тем, что вы узнали из sysinfo, и вы, возможно, поймете, что среднее значение загрузки за одну минуту в 0,00 не означает, что пришло время запустить какую-то программу, которая хочет выделить 256 МБ памяти, поскольку ядро ​​может быть действительно перепродано. Обратите внимание, что все значения, заполненные sysinfo (), доступны через / proc, sysinfo () - это просто более простой способ их получить.

Вы также хотели бы посмотреть, сколько времени каждое ядро ​​потратило в IOWAIT с момента загрузки, что является еще более сильным показателем того, стоит ли запускать загрузку ресурсов ввода-вывода. Соберите эту информацию в / proc / stat, первая строка содержит общее количество всех процессоров. IOWAIT находится в 6-м поле. Конечно, если вы намереваетесь установить привязку к одному ЦП, будет интересен только этот ЦП (это все еще шестое поле, в единицах USER_HZ или обычно в сотых долях секунды). Среднее, что против btime, также можно найти в /proc/stat.

Короче, не просто смотрите на средние нагрузки.

EDIT

Вы не должны предполагать, что отсутствие пользовательского ввода означает бездействие .. Задания cron имеют тенденцию выполняться .. государственные службы время от времени облагаются налогом и т. Д. Бездействие остается вашим лучшим предположением, основанным на чтении значений (или, возможно, больше), что Я перечислил выше.

РЕДАКТИРОВАТЬ 2

Просмотр значений регуляторов в / proc / sys / vm также дает хорошее представление о том, что пользователь считает бездействующим, в частности, о перестановке. Я понимаю, что вы делаете это только на своем собственном ящике, но это авторитетная вики и заголовок вопроса общий:)

1 голос
/ 05 октября 2009

Если вы используете GNOME, посмотрите на это:

https://wiki.gnome.org/Attic/GnomeScreensaver/FrequentlyAskedQuestions

1 голос
/ 07 марта 2009

Файл / proc / loadavg содержит текущую загрузку системы. Вы можете просто написать скрипт bash, чтобы проверить его, и если он низкий, то запустить команду. Затем вы можете добавить его в /etc/cron.d для периодического запуска.

Этот файл содержит информацию о загрузка системы. Первые три числа представляют количество активных задачи в системе - процессы, которые на самом деле работает - в среднем по последние 1, 5 и 15 минут. следующая запись показывает мгновенный текущее количество выполняемых задач - процессы, которые в настоящее время запланированы бежать, а не быть заблокированным в системный вызов - и общее количество процессы в системе. Финал запись - это идентификатор процесса последний раз бежал.

Пример вывода:

0.55 0.47 0.43 1/210 12437
0 голосов
/ 08 августа 2009

См. Эту ветку для скрипта perl, который проверяет, когда система бездействует (через заставку gnome).
Вы можете запускать команды, когда холостой ход начинается и останавливается.
Я использую это с некоторыми скриптами, чтобы изменить настройки BOINC при работе на холостом ходу
(чтобы дать BOINC больше памяти и ресурсов процессора).

скрипт perl на форумах Ubuntu

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...