fix do reboot on oom and lower vm min free to 4M on 64M hardware #151
No reviewers
Labels
No Label
RFC
RFT
WIP
blocked
bsp
bug
build/scripts/tools
duplicate
feature
fixed
layer3
mantis
more details required
needs changes
node
packages/fff
rejected
security
trivial
upstream
No Milestone
No Assignees
3 Participants
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: freifunk-franken/firmware#151
Loading…
Reference in New Issue
No description provided.
Delete Branch "fwiessner/firmware:master"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
This patch sets reboot on OOM as default to ensure we never have half-working nodes and lowers the OOM limit to 4M on 64M hardware.
Sowas können wir auch selber pflegen, das muss nicht in OpenWrt gepatcht werden.
Ansonsten habe ich zwecks der minfree Limits nachgefragt und folgende Antwort erhalten:
http://lists.openwrt.org/pipermail/openwrt-devel/2021-February/034062.html
Ich kann zwar verstehen, warum das gemacht wird, allerdings ist es meiner Meinung nach nicht sinnvoll. Im Prinzip ist es doch egal ob der node wegen OOM Killer kaputt geht aber noch bridgen/routen kann, oder ob er panict weil er zum bridgen/routen nix mehr allocaten kann.
Ich habe fblaese gefragt wie und wo, damit war er zufrieden. Ansonsten kann ich es auch einfach sein lassen, oder man möge mir mitteilen wo es den besser aufgehoben wäre.
Ich zitiere einfach nochmal meine Antwort: "ich denke wir sollten das nicht über openwrt-patches umsetzen, sondern lieber passende sysctl.conf anlegen. ich bin mir nur noch nicht sicher wo, deshalb hab ich bisher noch nichts gebaut"
Ich bin ebenfalls der Meinung, dass das nicht als OpenWrt Patch umgesetzt werden sollte, da das erhöhten Pflegeaufwand bedeutet und die Änderung weniger nachvollziehbar macht. Bei
min_free_kbytes
kann man darüber noch diskutieren, damit die Unterscheidung nach Arbeitsspeichergröße weiterhin erfolgen kann.Danke fürs nachfragen. Ich bin davon ausgegangen, dass es dafür irgendeinen Grund geben wird. Ich würde das Speicherlimit nicht verändern, solange wir damit nicht tatsächlich ein Problem lösen können. Und da bei 64MB RAM (ohne 5 GHz) normalerweise knapp die Hälfte frei ist sieht mir das eher nach einem Memleak aus und wird mit 4MB zusätzlichem RAM auch nicht gelöst.
panic_on_oom
hingegen sollten wir in jedem Fall einbauen. Ich frage mich, warum das bei OpenWrt nicht Standard ist, denn da läuft ja normalerweise quasi nichts nicht-essentielles; der Router ist nach OOM Killer auf jeden Fall auf die ein oder andere Art kaputt."ich denke wir sollten das nicht über openwrt-patches umsetzen, sondern lieber passende sysctl.conf anlegen" - genau das macht doch package/base-files/files/etc/sysctl.d/20-oom_reboot.conf - oder was sonst muss man patchen damit das file beim build erzeugt wird?
Ah, jetzt verstehe ich, woher die Verwirrung kommt. Da hätte ich genauer sein können, sorry.
Wir versuchen unsere Änderungen - soweit irgendwie möglich - in OpenWrt Packages zu halten, und möglichst wenig bis nichts am OpenWrt zu verändern. Die findest du in src/packages/fff. Dadurch werden Änderungen nachvollziehbarer und Modularisierung möglich.
Ich bin mir nur wie gesagt selbst noch nicht ganz sicher, in welches Paket die Änderungen am besten passen.
Ich habe das schon vor ein paar Monaten mal mit einem Archer C60 getestet (64MB RAM und ath10k). Der bleibt (im Rahmen dessen, was man "messen" kann) immer gleich instabil, egal ob man da 2, 4, 6 oder 8 MiB reserviert.
Der Grund, warum restart nicht automatisch durchgeführt wird, ist derselbe, warum man das generell nicht gerne macht: Man verliert so die Gelegenheit, sich auf dem "kaputten" Gerät einzuloggen. Im schlimmsten Fall (z.B. 32 MB RAM) komme ich so ggf. nie mehr in einen Zustand, in dem ich das Gerät überhaupt verwenden kann, und habe effektiv eine Reboot-Loop.
Was man für den konkreten Fall unserer Firmware vorzieht ist aber sicherlich eine Design-Entscheidung, ich glaube nicht das hier ein Ansatz "richtiger" ist als der andere.
Für mich ist ein Gerät, das sich alle paar Tage wegen OOM neu starten muss, aber ohnehin "kaputt" und sollte durch ein ordentliches ersetzt werden.
Auf Systemen die produktiv laufen ist es mir lieber, das System heilt sich selbst durch reboot und panic und macht ein notify, als dass man irgendwohin anfahren muss. Logs kann man per udp remote sysloggen, das ist also kein Argument. Wenn sshd durch OOM stirbt kommt man auch nicht mehr drauf und kann auch nix "sehen", also auch kein Argument.
Das ist Quatsch. Es ist ja kein Hardwareproblem. Das Problem tritt irgendwie seit der 2021er Firmware auf. Mir wäre es lieber die Ursache zu finden und zu beheben, anstatt einfach zu sagen man braucht mehr RAM oder andere HW.
Mit #195 (dort wird die sysctl Änderung in einem Package gemacht, statt als build_patch) obsolet.
Dennoch bleibt hier möglicherweise das Problem, dass irgendetwas Speicher leaked. Falls dem so ist, bitte noch mal separat ein Issue dazu anlegen.
Pull request closed