Планирование в Linux: запуск задачи при бездействии компьютера (= без ввода пользователем)

Я хочу бежать складывание@home клиент на моем Ubuntu 8.10 box только тогда, когда он простаивает из-за большого потребления ОЗУ программы.

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

Как выполнить это?

7 ответов


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


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

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

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

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

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

p.s. RAM очень дешев на данный момент...

п.С. С. увидеть это статьи


может быть, вам нужно установить на холостом ходу задачу с наименьшим приоритетом через nice.


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

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

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

короче говоря, не просто смотреть на нагрузку средняя величина.

редактировать

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

EDIT 2

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


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

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

пример:

0.55 0.47 0.43 1/210 12437

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

http://live.gnome.org/GnomeScreensaver/FrequentlyAskedQuestions#head-ac43c8f33bc700a5e298e6a82ded0e8bb9b33043


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

Perl скрипт на форумах ubuntu