[gelöst] .timer soll alle x sekunden einen service/script ausführen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
Lord_Carlos
Beiträge: 5578
Registriert: 30.04.2006 17:58:52
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Dänemark

Re: .timer soll alle x sekunden einen service/script ausführen

Beitrag von Lord_Carlos » 12.06.2019 10:33:08

TomL hat geschrieben: ↑ zum Beitrag ↑
11.06.2019 17:27:34
Mit dem 5-Sekunden-Timer erzeugst Du meiner Meinung nach auf jeden Fall eine unverhältnismäßige Systemlast für den Systemmanager, die permanent die CPU-Last und damit den Stromverbrauch hochhält.
Glaubst du ein 5 Sekunden .timer verursacht messbaren unterschied im Stromverbrauch und/oder load?

Code: Alles auswählen

╔═╗┬ ┬┌─┐┌┬┐┌─┐┌┬┐╔╦╗
╚═╗└┬┘└─┐ │ ├┤ │││ ║║
╚═╝ ┴ └─┘ ┴ └─┘┴ ┴═╩╝ rockt das Forum!

TomL

Re: .timer soll alle x sekunden einen service/script ausführen

Beitrag von TomL » 12.06.2019 10:56:20

Lord_Carlos hat geschrieben: ↑ zum Beitrag ↑
12.06.2019 10:33:08
Glaubst du ein 5 Sekunden .timer verursacht messbaren unterschied im Stromverbrauch und/oder load?
Ich beziehe mich da nur auf meine eigenen Beobachtungen.... insofern kann ich da nicht von "nur glauben" sprechen. Ich habe einen 5-Minuten-Timer und konnte dabei mit htop konkret beobachten, wie die Last bei diesem Prozess mit Laden, Ausführen, Prozess-Verwaltungsoverhead, usw. nachweislich hochgeht. Und weil ich nicht wusste, welche Auswirkung das evtl. auch auf den Sleep der Platte hat, habe ich aus dem Grund und mit gleicher Motivation für diesen Job eine RAM-Disk angelegt, die regelmäßig auf meinen Web-Space gesichert wird, um selbst für diesen langen Zyklus (5 Min.) die Platte (gerade auch die ständig aufgeweckte und neu anlaufende Mechanik) trotzdem rausnehmen zu können. Bei einem so kurzen Zyklus von 5 Sekunden gibts ja faktisch gar keine Entspannungsphasen mehr, deshalb glaube ich also schon, dass solche Überlegungen relevant sind.

Bei einem 5-Sekunden-Zyklus halte ich allenfalls noch den Cache für eine reduzierende Einflussgröße... aber ich kann das nicht greifen, oder beeinflussen, oder erklären... insofern verlass ich mich da lieber nicht auf den Cache. Und soweit es den Stromverbrauch (nicht aktuell, sondern auf die Jahressumme bezogen) angeht, entscheide ich mich immer nach der Devise "jede Möglichkeit zur Minimierung des Verbrauchs wird beachtet" :?

Benutzeravatar
MSfree
Beiträge: 10686
Registriert: 25.09.2007 19:59:30

Re: .timer soll alle x sekunden einen service/script ausführen

Beitrag von MSfree » 12.06.2019 11:16:04

TomL hat geschrieben: ↑ zum Beitrag ↑
12.06.2019 10:56:20
Bei einem so kurzen Zyklus von 5 Sekunden gibts ja faktisch gar keine Entspannungsphasen mehr, deshalb glaube ich also schon, dass solche Überlegungen relevant sind.
Ich halte 5 Sekunden Polling auch für eine unglückliche Idee. Wenn irgendwie möglich, sollte man auf Polling verzichten und versuchen, das ereignisgesteuert umzusetzen (was auch immer mit der Datei überwacht werden soll)

Trotzdem gibt es im Linuxkernel eine Möglichkeit, die Festplatte möglichst selten hochzufahren, das geht allerdings auf Kosten der Datensicherheit. Mit dem Kernelparameter /proc/sys/vm/laptop_mode kann man das System dazu bringen, die Platte nur dann hochzufahren, wenn die benötigen Daten nicht im Cache liegen. Bei einer kleinen Datei, die alle 5 Sekunden abgefragt wird, ist die Wahrscheinlichkeit, daß der Inhalt im Cache liegt, fast 100%. Die Datensicherheit ist bei Stromausfall allerdings gefährdet, weil der Cache möglichst selten auf die Platte geflusht wird.

Setzen des Laptopmodes:

Code: Alles auswählen

echo "1" > /proc/sys/vm/laptop_mode
Abschalten:

Code: Alles auswählen

echo "0" > /proc/sys/vm/laptop_mode
Oder

Code: Alles auswählen

sys.vm.laptop_mode = 1
in der Datei /etc/sysctl.conf permanent eintragen.

TomL

Re: [gelöst] .timer soll alle x sekunden einen service/script ausführen

Beitrag von TomL » 12.06.2019 11:23:53

Ich habe aus Neugier mal ein bisschen gesucht und was interessantes gefunden:
https://www.computerbase.de/2018-08/cpu ... amd-intel/
Zitat:
"Intels aktuelle Definition der TDP
Intel definiert die TDP aktuell als „die durchschnittliche Leistungsaufnahme (in Watt), die der Prozessor beim Betrieb auf Basisfrequenz ableitet, wenn alle Kerne bei einer von Intel definierten, hochkomplexen Arbeitslast aktiv sind“.


Und wenn ich mir jetzt die TDP-Werte von Intel-CPUs anschaue, dann muss man doch zu dem Schluß kommen, dass hohe CPU-Aktivität aufs Jahr bezogen auch einen hohen Stromverbrauch verursacht:
https://de.wikipedia.org/wiki/Liste_der ... en#Desktop

BTW: häufig wird ja genau darauf auch als Nebeneffekt nach einem Cryptojacking hingewiesen.
MSfree hat geschrieben: ↑ zum Beitrag ↑
12.06.2019 11:16:04
...und versuchen, das ereignisgesteuert umzusetzen (was auch immer mit der Datei überwacht werden soll)
Das ist auch meine Meinung.

Benutzeravatar
MSfree
Beiträge: 10686
Registriert: 25.09.2007 19:59:30

Re: [gelöst] .timer soll alle x sekunden einen service/script ausführen

Beitrag von MSfree » 12.06.2019 11:47:55

TomL hat geschrieben: ↑ zum Beitrag ↑
12.06.2019 11:23:53
Und wenn ich mir jetzt die TDP-Werte von Intel-CPUs anschaue, dann muss man doch zu dem Schluß kommen, dass hohe CPU-Aktivität aufs Jahr bezogen auch einen hohen Stromverbrauch verursacht:
https://de.wikipedia.org/wiki/Liste_der ... en#Desktop
Nicht wird so heiß gegessen, wie es gekocht wird :wink:

Ich habe alle meine Rechner bisher mit einem Wattmeter untersucht:
Core2-Quad Q9300 (lüfterlos), 95W TDP, Leerlauf 56W, maximale Auslastung 110W
i7-2600, 95W TDP (lüfterlos), Leerlauf 26W, maximale Auslastung 95W
i5-3450, 77W TDP (quasi lüfterlos), durchschnittlich 25W, maximal nicht gemessen
i3-7100, 51W TDP (quasi lüfterlos), Leerlauf 15W, maximale Last 50W

Jeweils ab Steckdose gemessen. Bei (optimistischen) 80% Netzteilwirkungsgrad und abzüglichen Leistungen von Festplatten, Mainboard, RAM etc. komme ich also nicht einmal in die Nähe der von Intel angegebenen TDP.

Ich schätze, daß der
Q9300 maximal 70W
i7-2600 maximal 60W
i3-7100 maximal 30W
verbrauchen. Die TDP-Werte werden vermutlich nur mit Burn-In Werkzeugen erreicht, die alle Rechenwerke und die Onboard-Graphik gleichzeitig maximal Auslasten können.

TomL

Re: [gelöst] .timer soll alle x sekunden einen service/script ausführen

Beitrag von TomL » 12.06.2019 12:04:02

MSfree hat geschrieben: ↑ zum Beitrag ↑
12.06.2019 11:47:55
Nicht wird so heiß gegessen, wie es gekocht wird
Ja, das hatte ich auch so interpretiert... als einen Wert bei maximaler Auslastung. Aber nehmen wir mal Deine CPU
i7-2600, 95W TDP (lüfterlos), Leerlauf 26W, maximale Auslastung 95W
und projizieren das auf meine Anwendung: Meine CPU dümpelt außerhalb des 5-Min-Takts so zwischen 0,7% bis 3% CPU-Last vor sich hin... da laufen im Hintergrund 2 VMs. Im Moment meines 5-Minuten-Zyklus schnellt die CPU-Last allerdings auf 40-60% hoch, was aber wiederum nur 1 Sekunde dauert, wenn "ereignislos" die Grundlage war.

Und da stell ich nun die Frage, wie sich möglicherweise 0,7-3% von 95W im Vergleich zu 40-60% von 95W auf den Stromverbrauch auswirken, wenn das im 5-Sekunden-Takt das ganze Jahr über passiert. Ich betrachte das jetzt mangels Sachkenntnis mit Milchmädchen-Logik... und insofern weiss ich natürlich nicht, inwieweit ich das falsch interpretiere... :roll: ... aber irgendeinen Zusammenhang mit gemessener CPU-Last und Watt-Leistung und deswegen Einfluss auf Betriebskosten (und damit zwangläufig auch auf die Umwelt) muss es ja geben.

Benutzeravatar
MSfree
Beiträge: 10686
Registriert: 25.09.2007 19:59:30

Re: [gelöst] .timer soll alle x sekunden einen service/script ausführen

Beitrag von MSfree » 12.06.2019 12:23:53

TomL hat geschrieben: ↑ zum Beitrag ↑
12.06.2019 12:04:02
und projizieren das auf meine Anwendung: Meine CPU dümpelt außerhalb des 5-Min-Takts so zwischen 0,7% bis 3% CPU-Last vor sich hin... da laufen im Hintergrund 2 VMs. Im Moment meines 5-Minuten-Zyklus schnellt die CPU-Last allerdings auf 40-60% hoch, was aber wiederum nur 1 Sekunde dauert, wenn "ereignislos" die Grundlage war.
Alle paar Sekunden einen 50%-Last für vielleicht 0.1s bringt den durchschnittlichen Stromverbrauch nicht siginifikant nach oben. Statt (meiner) 26W im Leerlauf, kommt man dann vielleicht auf 27-28W. Viel problematischer ist, wenn eine rotierenden Platte dann nie mehr abschaltet. Platten ziehen etwa 5-7W aus dem Netzteil, bzw. 7-10W aus der Steckdose.

10W Mehrverbrauch durch Platte und 5 Sekunden Polling kosten dann halt bei 24/7-Betrieb rund 26 Euro pro Jahr.

TomL

Re: [gelöst] .timer soll alle x sekunden einen service/script ausführen

Beitrag von TomL » 12.06.2019 15:12:30

MSfree hat geschrieben: ↑ zum Beitrag ↑
12.06.2019 12:23:53
Alle paar Sekunden einen 50%-Last für vielleicht 0.1s bringt den durchschnittlichen Stromverbrauch nicht siginifikant nach oben.
Das ist natürlich jetzt eine optimistische Annahme, dass der Prozess nur 0.1 Sekunde dauert. Klar, das denke ich auch, dann wird das wirklich kaum den Stromverbrauch nach oben triggern.

Aus Neugier habe ich mir gerade mal nen Test-Script angelegt... und ja, ich weiss, nen Loop ist auch nicht der wahre Jakob... brauchst also gar nicht erst zu meckern ... :lol: ... also, ich war einfach nur mal Neugierig... ob sich das für Rückschlüsse eignet, weiss ich nicht... ich leite aber daraus ab, dass man dem Programm-Design durchaus mehr Beachtung schenken sollte. Der loop simuliert einfach nur mal einen kurzen Job (, mit der Genauigkeit eines Schätzeisens ... :mrgreen:)

Meine CPU: Intel(R) Core(TM) i5-7500 CPU @ 3.40GHz
Das Script:

Code: Alles auswählen

#!/bin/bash

a=0
for (( c=0; c<=40000; c++ ))
do  
   a=$a+1
done

echo "Programm gestartet!" | systemd-cat -t "thlu:`basename $0`" -p info
exit 0
Bei dem Beispiel marschierte ein Kern mehr als die Hälfte des Timer-Zyklus-Zeitraums (subjektive Beobachtung) konstant auf 100%, dann noch mal kurz zurück auf 50%, dann wieder auf <1% Die Entspannung zwischen 2 Zyklen beträgt (wieder subjektive Beobachtung) ca. 1 Sekunde. Am Ende sah es so aus, als wäre annähernd 4/5 der Zyklus-Zeit CPU-Action angesagt. Ich denke schon, aufs gesamte Jahr betrachtet, würde man das merken. Jetzt ist natürlich klar, man wird davon nicht arm... aber an vielen Punkten im Haushalt eben auch bei solchen kleinen Verbraucher effektiv den Verbrauch reduziert, ergeben in Summe dann m.M.n. wieder einen deutlichen persönlichen Vorteil. Die Frage ist natürlich offen, was passiert überhaupt in so einem Prozess...?... wie lange braucht er dafür, wie hoch ist die CPU tatsächlich beansprucht? Ohne diese Angaben kann man eh nur Schätzungsszenarien entwerfen. Aber da genauer hinzuschauen lohnt sich allemal.

Benutzeravatar
MSfree
Beiträge: 10686
Registriert: 25.09.2007 19:59:30

Re: [gelöst] .timer soll alle x sekunden einen service/script ausführen

Beitrag von MSfree » 12.06.2019 15:33:04

TomL hat geschrieben: ↑ zum Beitrag ↑
12.06.2019 15:12:30
... wie lange braucht er dafür,
Zumindest das kann man messen:

Code: Alles auswählen

time NameDesScriptes
liefert die CPU-Zeit für die Ausführung. Das ist auf jeden Fall zuverlässiger als (h)top, xosview und Konsorten.

Antworten