Scheduling in Linux: Ausführen einer Aufgabe, wenn der Computer im Leerlauf ist (= keine Benutzereingabe)

8

Ich möchte Folding @ home Client auf meiner Ubuntu 8.10-Box ausführen, nur weil es im Leerlauf ist der hohe RAM-Verbrauch des Programms.

Unter "Leerlauf" verstehe ich den Zustand, wenn keine Benutzeraktivität besteht (Tastatur, Maus oder sonst etwas). Es ist in Ordnung für andere (wahrscheinlich schwere) Prozesse zu dieser Zeit zu laufen, da F @ H die niedrigste CPU-Priorität hat. Der Punkt ist nur, um die Benutzererfahrung zu verbessern und schwere Arbeit zu machen, wenn er weg ist.

Wie erreiche ich das?

    
wheleph 07.03.2009, 19:51
quelle

7 Antworten

12

Wenn es sich bei dem betreffenden Computer um einen Desktop handelt, könnten Sie ein Start / Stopp-Skript in den Bildschirmschoner einhängen, so dass der Prozess gestoppt wird, wenn der Bildschirmschoner inaktiv ist und umgekehrt.

    
Jan Jungnickel 07.03.2009, 20:19
quelle
4

Es ist fummelig, dafür zu sorgen, dass der Prozess nur dann vorhanden ist, wenn sich das System sonst im Leerlauf befindet.

Das Starten des Programms in diesen Bedingungen ist nicht das harte Bit. Sie müssen dafür sorgen, dass das Programm sauber heruntergefahren wird, und herausfinden, wie und wann das gemacht wird.

Sie müssen in der Lage sein, zwischen der CPU-Auslastung dieses Prozesses und derjenigen der anderen möglicherweise laufenden Programme zu unterscheiden, damit Sie erkennen können, ob das System ordnungsgemäß "inaktiv" ist.

Es ist eine Menge einfacher für den Prozess, nur geplant werden , wenn das System sonst im Leerlauf ist. Verwenden Sie einfach den Befehl 'nice', um den Folding @ Home-Client zu starten.

Das löst jedoch nicht das Problem von zu wenig RAM. Wenn der Swap-Speicher aktiviert ist, sollte das System in der Lage sein, alle Prozesse mit niedriger Priorität auszutauschen, so dass sie keine Ressourcen verbrauchen, sondern sich bei jedem Folding @ Home-Client vor einem großen Festplatten-I / O-Fehler in Acht nehmen tauscht den RAM aus und aus.

ps. RAM ist im Moment sehr günstig ...

pp.s. siehe Artikel

    
Alnitak 07.03.2009 20:06
quelle
4

kann sein. Sie müssen im Leerlauf die niedrigste Priorität über nice setzen.

    
vitaly.v.ch 12.03.2009 09:11
quelle
2

Sie wollen sich ein paar Dinge ansehen, um 'Leerlauf' zu bestimmen und auch die sysinfo () Aufruf (der Link zeigt den Unterschied in der Struktur, die er zwischen verschiedenen Kernel-Versionen auffüllt).

Linux verwaltet Speicher nicht auf eine typische Weise. Schau dir nicht nur Lasten an, sieh dir die Erinnerung an. Insbesondere hat / proc / meminfo eine wunderbare Zeile, die mit Committed_AS begonnen wurde, die zeigt, wie viel Speicher der Kernel anderen Prozessen tatsächlich versprochen hat. Vergleichen Sie das mit dem, was Sie von sysinfo gelernt haben, und Sie werden vielleicht feststellen, dass ein Lastminimum von 0.00 nicht bedeutet, dass es Zeit ist, ein Programm auszuführen, das 256MB Speicher reservieren möchte, da der Kernel wirklich überverkauft ist. Beachten Sie, dass alle Werte, die mit sysinfo () gefüllt werden, über / proc verfügbar sind, sysinfo () ist nur ein einfacher Weg, sie zu bekommen.

Sie möchten auch sehen, wie viel Zeit jeder Kern seit dem Booten in IOWAIT verbracht hat, was ein noch stärkerer Indikator dafür ist, ob Sie ein I / O-Ressourcen-Hog ausführen sollten. Ergreifen Sie diese Information in / proc / stat, die erste Zeile enthält die Gesamtanzahl aller CPUs. IOWAIT ist im 6. Feld. Wenn Sie die Affinität zu einer einzelnen CPU festlegen möchten, ist natürlich nur diese CPU von Interesse (sie ist immer noch das sechste Feld in Einheiten von USER_HZ oder in der Regel in 100stel Sekunden). Durchschnitt das gegen btime, fand auch in / proc / stat.

Kurz gesagt, schauen Sie sich nicht nur die Durchschnittswerte an.

BEARBEITEN

Sie sollten nicht davon ausgehen, dass ein Mangel an Benutzereingaben Leerlauf bedeutet. Cron-Jobs neigen dazu, zu laufen. Öffentliche Dienste werden von Zeit zu Zeit besteuert usw. Leerlauf bleibt Ihre beste Schätzung basierend auf dem Lesen der Werte (oder vielleicht mehr) Ich habe oben aufgeführt.

BEARBEITEN 2

Wenn Sie sich die Werte des Knotens in / proc / sys / vm ansehen, erhalten Sie auch einen guten Hinweis darauf, was der Benutzer für untätig hält, insbesondere Swappiness. Ich realisiere, dass du das nur auf deiner eigenen Box machst, aber dies ist ein autoritatives Wiki und der Fragetitel ist generisch:)

    
Tim Post 07.03.2009 20:20
quelle
1

Die Datei / proc / loadavg enthält die aktuelle Auslastung des Systems. Sie können einfach ein Bash-Skript schreiben, um es zu überprüfen, und wenn es niedrig ist, dann führen Sie den Befehl aus. Dann können Sie es zu /etc/cron.d hinzufügen, um es regelmäßig auszuführen.

  

Diese Datei enthält Informationen über   die Systemlast. Die ersten drei   Zahlen repräsentieren die Anzahl der aktiven   Aufgaben auf dem System - verarbeitet das   laufen tatsächlich - gemittelt über   die letzten 1, 5 und 15 Minuten. Das   nächster Eintrag zeigt das Momentane   aktuelle Anzahl lauffähiger Aufgaben -   Prozesse, die derzeit geplant sind   eher laufen als blockiert werden   Systemaufruf - und die Gesamtzahl von   Prozesse auf dem System. Das endgültige   Eintrag ist die Prozess-ID des Prozesses   das zuletzt gelaufen ist.

Beispielausgabe:

%Vor%     
Hawk Kroeger 07.03.2009 19:54
quelle
1

Wenn du Gnome benutzt, dann schau dir das an:

Ссылка

    
Strudel 05.10.2009 15:59
quelle
0

Sehen Sie sich diesen Thread für ein Perl-Skript an, das prüft, ob das System im Leerlauf ist (über den Gnome-Bildschirmschoner).
Sie können Befehle ausführen, wenn der Leerlauf startet und stoppt.
Ich benutze dies mit einigen Skripten, um die BOINC-Einstellungen im Leerlauf zu ändern (um BOINC mehr Speicher und CPU-Nutzung zu geben).

perl script auf ubuntu-foren

    
joe shmoe 08.08.2009 07:18
quelle

Tags und Links