Linux中的调度:在计算机空闲时运行任务(=无用户输入)

问题描述 投票:8回答:7

我想在我的Ubuntu 8.10盒子上运行Folding@home客户端,因为该程序的RAM消耗很大。

“空闲”是指当没有用户活动时的状态(键盘,鼠标或任何其他)。由于F @ H具有最低的CPU优先级,因此当时可以运行其他(可能很重)进程。重点是改善用户体验,并在他离开时做繁重的工作。

怎么做到这一点?

linux scheduling
7个回答
12
投票

当有问题的机器是桌面时,您可以将启动/停止脚本挂钩到屏幕保护程序中,以便在屏幕保护程序处于非活动状态时停止进程,反之亦然。


4
投票

当系统处于空闲状态时,安排该过程仅存在是非常繁琐的。

实际上在这些条件下启动程序并不困难。你必须安排程序干净地关闭,并弄清楚如何以及何时这样做。

您必须能够区分该进程自身的CPU使用率以及可能正在运行的其他程序的CPU使用情况,以便您可以判断系统是否正常“空闲”。

只有在系统处于空闲状态时才能安排进程。只需使用'nice'命令启动Folding @ Home客户端即可。

但是,这不能解决RAM不足的问题。如果您已启用交换空间,系统应该能够交换任何低优先级进程,以便它们不会消耗和实际资源,但要注意每次Folding @ Home客户端时磁盘I / O都会受到重创交换进出RAM。

附: RAM目前非常便宜......

p.p.s.看到这个article


4
投票

可能你需要通过nice设置空闲任务的最低优先级。


2
投票

你想要看一些东西来确定'空闲'并且还要探索sysinfo()调用(链接指出它在不同内核版本之间填充的结构的差异)。

Linux不以典型的方式管理内存。不要只看负载,看看记忆。特别是,/ proc / meminfo有一个很好的行,它以Committed_AS开头,它向你展示了内核实际承诺给其他进程多少内存。将其与您从sysinfo中学到的内容相比较,您可能会发现一分钟的平均负载为0.00并不意味着它需要运行一些想要分配256MB内存的程序,因为内核可能真的过度销售。注意,sysinfo()填充的所有值都可以通过/ proc获得,sysinfo()只是获取它们的一种更简单的方法。

您还需要了解自启动以来每个核心在IOWAIT中花费了多少时间,这是一个更强大的指标,表明您是否应该运行I / O资源。在/ proc / stat中获取该信息,第一行包含所有CPU的聚合计数。 IOWAIT在第6个领域。当然,如果你打算设置单个CPU的亲和力,那么只有那个CPU是有意义的(它仍然是第六个字段,以USER_HZ为单位,或者通常是100秒)。对btime的平均值,也可以在/ proc / stat中找到。

简而言之,不要只看负载平均值。

编辑

你不应该假设缺乏用户输入意味着空闲.. cron工作往往会运行..公共服务不时被征税等等。根据我上面列出的值(或者更多),空闲仍然是你最好的猜测。

编辑2

查看/ proc / sys / vm中的旋钮值还可以很好地指示用户认为闲置的内容,特别是swappiness。我意识到你只在你自己的盒子上这样做,但这是一个权威的维基,问题标题是通用的:)


1
投票

文件/proc/loadavg具有系统当前负载。您可以只编写一个bash脚本来检查它,如果它低,则运行命令。然后,您可以将其添加到/etc/cron.d以定期运行它。

此文件包含有关系统负载的信息。前三个数字表示系统上的活动任务数 - 实际运行的进程 - 在过去的1,5和15分钟内取平均值。下一个条目显示可运行任务的瞬时当前数量 - 当前计划运行而不是在系统调用中被阻止的进程 - 以及系统上的进程总数。最后一个条目是最近运行的进程的进程ID。

示例输出:

0.55 0.47 0.43 1/210 12437

1
投票

如果您正在使用GNOME,请查看以下内容:

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


0
投票

请参阅此线程以获取perl脚本,该脚本检查系统何时处于空闲状态(通过gnome屏幕保护程序)。 您可以在空闲开始和停止时运行命令。 我正在使用这个脚本来在空闲时更改BOINC首选项 (给BOINC更多的内存和CPU使用率)。

perl script on ubuntu forums

© www.soinside.com 2019 - 2024. All rights reserved.