Administrier du mal einen Server und habe ein Programm, welches hin und wieder durchdreht... und jedesmal das gesamte OS mit sich reißt.
Mal davon abgesehen, dass ich genau das für das Problem von Linux halte, ich will ja eher in die Richtung Desktop als Server.
Linux stürzt in den seltensten Fällen komplett ab (wenn, dann sind das Treiberfehler). Wenn du also bei einem Programmabsturz das System mittöten willst, musst du mit panic() reagieren.
Schon klar, aber mangels eines echten Block-Devices in den meisten Embedded-Systemen dürfte da nur ziemlich wenig drin sein (die Flash-File-Systeme arbeiten oft ungecached, die wollen ja schließlich nicht den kostbaren RAM vergeuden) also bringt es auch nur wenig dort etwas weg zu werfen.
Der Plattencache belegt immer jeden frei verfügbaren RAM, auch bei JFFS2 oder UBIFS liegt das unterhalb des Dateisystems. Den wegzuwerfen bringt immer ein paar Pages, die man notfalls benutzen kann.
In dem Moment, wo Swapspace in Anspruch genommen wird, steht der Kernel unter "memory pressure" und verändert sein Verhalten.
Ach und wie merkt das der User? Vor allem bei einem Router? Selbst auf einem Desktop-System dürfte der durchschnittliche User kaum merken was für Befindlichkeiten der OS-Kernel gerade hat.
Naja, es wird ja nicht beliebig viel RAM vorgegaukelt, sondern einmal kann jedes Programm nur so viel RAM anfordern, wie physisch maximal möglich ist (mach mal ein dd mit bs=ramgröße) und zum anderen darf die Summe aller Anforderungen nicht den verfügbaren Speicher (inklusive Swap) überschreiten. Auf einem Embedded-Device ohne Swap heißt das, dass kein Overcommit stattfindet, trotz MAP_LAZY.
Auf einem Desktop-System merkst du sofort, wenn das System mit dem Auslagern anfängt; das dürfte aber am Scheduler liegen.
Der OOM-Killer kommt also nicht unerwartet.
Doch, er kommt unerwartet. Selbst aus Sicht der Programme, die ja problemlos Speicher allozieren konnten, kommt der OOM-Killer unerwartet.
Der OOM-Killer schlägt genau dann zu, wenn nicht mehr genug RAM+Swap verfügbar ist, um weiterzumachen. Da das die Übernutzung nur so weit geht, wie RAM+Swap (mit Reserve) vorhanden ist, passiert das ausschließlich, wenn das System unter totaler Speicherlast steht und ein Treiber im Kernel-Space noch zusätzlichen RAM möchte, der sich nicht mehr durch Sparmaßnahmen im Kernel (einschl. Swapping) beschaffen lässt.
Der OOM-Killer kommt also nur unter Speicherlast, ausgereiztem Swapspace und genau dann, wenn der Kernel selbst Speicher braucht.
Ich kann ehrlich nicht Deine Abneigung gegen das Swapping verstehen. Klar will man das auf jeden Fall vermeiden, z.B. in dem man genug RAM reinsteckt (ist ja heutzutage kein Problem mehr), aber dieses Konzept deswegen gleich ganz ablehnen erscheint mir einfach etwas zu drastisch.
Für mich ist Auslagern die letzte Möglichkeit, den OOM-Killer zu verhindern bzw. dessen Aufruf hinauszuzögern. Das klingt vielleicht etwas hart, aber inzwischen gibt es auf fast allen Systemen genug RAM, um sinnvoll damit arbeiten zu können. (Router mit 8 oder 16 MB RAM gehören nicht dazu, aber mit 32 MB lässt sich schon was anfangen. Neue Router haben meist 32 oder 64 MB.)
Wenn ein Programm gerade so durchläuft nur weil das OS alle anderen Programme auslagert und ich den Computer in der Zeit überhaupt nicht benutzen kann ist das in vielen Fällen zumindest besser als wenn das Programm gar nicht durchläuft. Natürlich ist das keine schöne Situation aber eben doch besser als der OOM-Killer.
Darum lehne ich Swapping ja auch nicht ab, sondern versuche es nur schlechtzumachen.
Es ist besser als keine Lösung, aber eben niemals eine gute Lösung.
Ein OMAP-Board wäre Multimedia-technisch besser, aber ob es eher für PowerVR oder nVidia Grakas Open-Source Treiber gibt, wage ich nicht zu schätzen.
Weder für PowerVR noch für nVidia gibt es Opensource-Treiber (nouveau unterstützt nur die normalen Chips) und meine Erfahrungen mit TI OMAP sind ... mäßig. Der Upstream-Support ist in meinen Augen richtig schlecht, man muss eigentlich einen von TI bereitgestellten Kernel verwenden.Der wiederum ist nicht der aktuellste und wird auch nicht durch neue Versionen ersetzt. Außerdem sind die OMAP-Datenblätter das allerletzte. Dumm ist halt nur, dass TI wirklich gute Chips herstellt und es kaum Alternativen gibt...
Nach langer Suche, habe ich die Preise jetzt gefunden. Ich sag mal so wird das aber nichts mit ARM und Konkurrenz zu AMD/Intel. Viel zu teuer das Zeug
Richtig. Allerdings hinkt dein Vergleich: Erst die allerneusten, noch goldig glänzenden ARM-Bausteine haben hinreichend gute Performance - x86 hatte das schon vor einigen Jahren und damit genug Zeit, die Preise zu senken.
Außerdem habe ich schon ein Tegra 2 Gerät hier (das AC100) und irgendwie gefäält mir der OMAP wesentlich besser. Zu Freescale, Marvel und Qualcomm kann ich nichts sagen, da ich von denen noch keine entsprechenden Boards und Communities gefunden haben.
Ich prügel mich mit einem relativ antiken ARM9 (S3C2410@266 MHz) von Samsung, der mir ziemlich gut gefällt. Allerdings weiß ich nicht, ob Samsung auch modernere Bausteine herstellt...
Gruß,
Svenska