NEWS
ioBroker sehr hohe Diskwrites in Proxmox
-
@dr-bakterius sagte in ioBroker sehr hohe Diskwrites in Proxmox:
mit Notepad++ plus Compare-Plugin verglichen
Danke für den Tipp - soeben installiert!
-
@wildbill sagte in ioBroker sehr hohe Diskwrites in Proxmox:
EDIT: @apollon77 hat das Issue soeben geschlossen, da es wohl eher ein Problem des JS-Controllers ist, der nicht prüft, ob States bereits existieren wenn sie mit setObject upgedated oder neu erstellt werden und auch speichert, wenn es gar keine Änderung gab.
... also wenn das aus meiner Antwort bei Dir angekommen ist dann hast Du es falsch verstanden!
Ein Objekt mit einem neuen "geändert am" Zeitstempel ist ein geändertes Objekt. Die Diskussion ob das so Sinn macht und ob das ein neues schreiben triggern sollte - das ist das was wir diskutieren müssen ... Gibt mehrere Blickrichtungen darauf!
-
@apollon77 sagte: Ein Objekt mit einem neuen "geändert am" Zeitstempel ist ein geändertes Objekt.
Das sehe ich auch so. Es sollte Aufgabe des Adapters sein, nur geänderte oder neue Objekte zu schreiben.
-
@apollon77 sagte in ioBroker sehr hohe Diskwrites in Proxmox:
Ein Objekt mit einem neuen "geändert am" Zeitstempel ist ein geändertes Objekt. Die Diskussion ob das so Sinn macht und ob das ein neues schreiben triggern sollte - das ist das was wir diskutieren müssen ... Gibt mehrere Blickrichtungen darauf!
Keine Frage, aber, die gerade diskutierten Fälle waren solche, bei denen es keinerlei Änderungen in der objects.json gab (also auch keine "ts"-Änderungen), aber trotzdem geschrieben wurde. D.h. objects.json und objects.json.bak sind exakt identisch. Die einzigen "Änderungen" sind in diesem Fall der Zeitstempel der beiden Dateien...
Ich habe verstanden, dass das ursächlich an Adaptern liegen dürfte - die Frage wäre aber imo, ob es nicht "oben drüber" jemanden (Objektdatei-Schreibroutine) gibt, der das abfangen (und verwerfen) könnte? -
@paul53 das ist aber nicht so einfach oder viel Logik in jedem Adapter. Vor allem crib adapter haben dieses Problem weil sie jedes Mal alles prüfen müssen. Deswegen Überlegen wir was wir da tun können das Thema hat’s aber nicht in den 3.2er Controller geschafft. 3.3 dann vllt.
-
@apollon77 OK, möglicherweise habe ich da einen Denkfehler oder ein Verständnissproblem. Aber wie @JLeg schrieb: Wenn es KEINE Änderungen an den Objekten selbst gibt und von einem bestehenden Objekt sich nur der Zeitstempel ändert, weil es 1:1 von einem Adapter oder Skript nochmals "neu" erstellt wurde und sich somit nur der Zeitstempel ändert, dann verstehe ich nicht ganz, warum das dann neu gespeichert werden sollte. Gibt es dafür Anwendungsfälle oder eine schlüssige Begründung oder weil, wie Du geschrieben hast, alles jedes Mal komplett geprüft werden muss und die Systemlast dadurch zu stark steigen könnte? Ansonsten bin ich da auch der Meinung, der Controller sollte das eher abfangen. Etwas mehr Last sehe ich (zumindest auf eine potenten System abseits der Raspi&Co) als unkritischer als zu oft stattfindende (unnötige?!) Schreibzugriff auf die objects.json.
Würde da das Umstellen der Objekte auf redis (die states habe ich schon auf redis) etwas verbessern? Meine objects.json hat aktuell etwas über 15MB, landen da bei redis dann auch nur die "Änderungen" und es werden nur die paar kB geschrieben, die sich geändert haben?Gruss, Jürgen
-
@apollon77 sagte in ioBroker sehr hohe Diskwrites in Proxmox:
Ein Objekt mit einem neuen "geändert am" Zeitstempel ist ein geändertes Objekt. Die Diskussion ob das so Sinn macht und ob das ein neues schreiben triggern sollte - das ist das was wir diskutieren müssen ...
Okay, das erklärt einiges. Was bleibt ist die Frage, warum die Timestamps überhaupt in den objects und nicht in den states gespeichert werden?
-
@dr-bakterius naja weil der timestamp im
Objekt quasi die Version desselben ist (Objekt = die Definition). Der state hat den timestamp
Mit der letzten zustandsänderung des States. -
@wildbill hängt davon ab wie du die persistenz in deiner redis konfig machst. Bei rdb persistenz wird auch alles geschrieben in den definierten Zyklen. Bei aof werden Änderungen nur angehängt und dann regelmäßig konsolidiert.
Effektiv wie gesagt kann man das Setting writeFileInterval bei den Dbs anpassen.
-
@apollon77 sagte in ioBroker sehr hohe Diskwrites in Proxmox:
weil der timestamp im Objekt quasi die Version desselben ist (Objekt = die Definition).
Bedeutet das, dass hier der Adapter jeweils die bereits vorhandenen Objekte neu erstellt und daher der Timestamp der Objekte neu erstellt wird und sich daher unterscheidet? Der Entwickler müsste den Adapter also dahingehend anpassen, dass nur nicht vorhandene Objekte erstellt werden. Habe ich das richtig verstanden?
-
@dr-bakterius wie gesagt aktuell ist das sehr schwer und aus dem Grund nutzen Adapter üblicherweise extendObject. In jedem Adapter hier mega viel Logik einzubauen macht keinen echten Sinn. Aber ja adapter die hier viel so machen könnten etwas ändern.
Generell aber:
Ja, das Thema ist bekannt und seid mindestens 1-2 Jahren genau so es gibt ein issue im js-Controller das zu optimieren und den Work around das writeFileInterval anzupassen (mit kleineren Risiken falls der Controller crasht was eher selten vorkommt). Wir überlegen mal für Controller 3.3 ob wir eine Lösung finden -
Ps: aber ja crib adapter sind in meinen Augen die einzigen die so ein behavior an den Tag legen dürfen ;-). Deamon Adapter sollten es nicht tun. Und wenn doch ist es bei denen ein issue Wert.
-
@apollon77 sagte in ioBroker sehr hohe Diskwrites in Proxmox:
crib adapter sind in meinen Augen die einzigen die so ein behavior an den Tag legen dürfen ;-). Deamon Adapter sollten es nicht tun.
Gut, und jetzt steige ich aus...
-
@dr-bakterius sagte in ioBroker sehr hohe Diskwrites in Proxmox:
@apollon77 sagte in ioBroker sehr hohe Diskwrites in Proxmox:
crib adapter sind in meinen Augen die einzigen die so ein behavior an den Tag legen dürfen ;-). Deamon Adapter sollten es nicht tun.
Gut, und jetzt steige ich aus...
Musst du nicht.
Den Ausdruck kannte ich bis eben auch nicht!
Aber wenn Daemon das Gegenteil ist, müssten crib-Adapter die scheduled Adapter, wie DWD/iCal usw. sein -
Am Ende gibt es zwei Haupt-Typen von adaptersn: Schedule: Die werden zu definierten Zeiten gestartet (meistens Wetter adapter). "Deamon" Adapter sind die die man startet und die dann immer laufen. Die sollen bitte am Anfang einmalig Objekte anlegen und dann nur wenn nötig ist ändern. Da muss im Zweifel der Entwickler ran
-
Da meine objects.json 32mb beträgt und bevor ich diese ebenfalls auf redis umstelle, habe ich nun mal
"writeFileInterval": 3600000,
für objekte hinterlegt, mal sehen wie sich das verhält. Zwischenzeitlich mach ich mir trotzdem mal Gedanken, ob und wenn ja, wie ich das am sinnvollsten umsetzten könnte.
mit aktueller Einstellung ergibt sich bei knapp einem Tag, folgender Wert
-
ich dachte eben noch: och, bei mir sieht das mit JS3.2 aber alles easy aus...nunja, 260 GB in 2 Tagen doch was mehr als ich dachte...schreibe aber auf 4 Platten, normale HDDs - ach kakke...stimmt nicht, ioBroker läuft auf ner SSD O.o
Sieht da für euch irgendwas schlimm aus?
-
@kueppert alles im grünen Bereich
-
Ich hatte testweise den ioBroker auf die Synology (HDD) ausgelagert - war aber leider weniger performant als direkt auf ne SSD ^^ Habs daher wieder zurück gedreht (geht ja bei Proxmox - wenn man weiß wie zumindest - relativ flott -- hat bei mir nen halben Tag gedauert )
-
3,15 TB in 7 Tagen...
Übeltäter schon gefunden: DWD Cronjob stand auf 1 Minute, anstatt 1 Stunde. Mal schauen, was nach weiteren 7 Tagen da steht...
Wearout nach 3 Jahren ioBroker: