Prozessorkerne werden nicht gleichmäßig belastet

Hinweis: In dem Thema Prozessorkerne werden nicht gleichmäßig belastet gibt es 3 Antworten. Der letzte Beitrag () befindet sich ganz unten auf dieser Seite.
  • Nabend zusammen,
    sitze mal wieder vor meinem Homeserver und lasse gerade Nightingale 64bit die Datenbank erstellen. Diese ist zwar groß aber nicht unlösbar. In der Leistungsanzeige des Prozessors sehe ich das immer nur ein Kern, ganz selten mal kurzzeitig zwei Kerne mit 100% ausgelastet werden und die anderen tümpeln so zwischen 4 und 13 % herum. Kann man da noch irgendwo dran drehen um eine gleichmäßigere Verteilung hinzu bekommen ? Ich nehme jetzt zwar an das dies an der Software liegt und diese Mehrkernprozessoren nicht so unterstützt, aber diese CPUs gibt es doch nun schon so lange das diese auch von aller Software unterstützt werden müßten.
    Weiß jemand Rat ?


    Das Board ist ein Asrock J3710-ITX
    Kingston 8GB DDR3

  • Als Nachtrag wäre noch zu erwähnen das alle 4 Kerne bei einem Aufruf z.B. von Hardwareinfo für die Zeit des Auslesens hoch gehen sogar kurzzeitig alle 4 auf 100 %. Daraus würde ich schließen das es an dem Programm liegen muß.
    Befehlssätze werden ja auch alle unterstützt :
    AES
    MMX
    SSE
    SSE2
    SSE3
    SSE4
    Supplemental SSE3

  • Die Prozessor- Befehlssätze spielen da erst mal gar keine Rolle.


    Das liegt klar an der Software.
    Und dass jede Software das können müsse, ist eine kapitale Fehleinschätzung.


    Zwar können die Linuxkernel, die openSUSE verwendet, ganz gut mehrere Prozessoren auslasten, aber die Software selbst muss das unterstützen.
    Und sehr viele Softwarepakete tun das einfach nicht.


    Das hat einige Gründe.
    Manche Pakete sind so hoch komplex, dass sie letztlich eine sehr lange Entwicklungsgeschichte haben.
    openSSL wäre da so ein Beispiel, oder SSH*.


    Viele Projekte kämpfen mit so viel uraltem, langsam gereiften Code, dass eine Umstellung gar nicht leicht möglich ist.
    Oft wird dann ein kompletter Rewrite vorgezogen, statt den alten Code instabil zu verhunzen.


    Bei vielen Programmen macht es auch gar keinen Sinn, dass man die Last auf mehrere Kerne verteilt.
    Interaktive Programme warten meist auf irgendeine Eingabe des Users. Da ist es nicht gerechtfertigt die sehr hohen Anforderungen für sauberes Multiprocessing den Programmierer aufzubürden.
    Macht einfach keinen Sinn.
    Das die GUI- Programme ausführende DE und all seine Schichten können das, da macht das auch Sinn.
    Und bei manchen Programmen kommen sich das DE und das Programm genau deshalb in die Quere.


    Und dann gibt es noch viele Interpreter, die ihrerseits kein sauberes Multiprocessing bieten.
    Python 2.x wäre da unter vielen anderen zu nennen.
    Auch das wird noch einige Jahre brauchen, bis das Multiprocessing wirklich für alle einfach verfügbar ist.
    Heute kann sogar ein Python- Programm, das man explizit für Multiprocessing geschrieben hat, auf einem Kern schneller laufen, als wenn es, wie eigentlich vorgesehen, auf mehreren Kernen laufen würde.
    Kannst mal nach "Global Interpreter Lock" googlen.
    Es zeigt sich, dass da manche Programme bei geringer Last um den Faktor zwanzig langsamer sind, wenn es auf mehreren Kernen läuft.
    Wird das Programm aber richtig mit aberwitzig vielen Requests richtig ausgelastet, läuft es auf mehreren Kernen aber wesentlich schneller. Ungefähr die (15 * GIL ) * Anzahl Prozessoren. (Ganz grobe Pi mal Daumen Regel)
    Völlig wirre Teile.
    Das hocheffiziente Multiprocessing bremst unter geringer Last, wie eine dreifach angezogene Handbremse mit Anker und Bremsfallschirm.


    Es gäbe noch einige Themen, die da genannt werden sollten,
    aber ich denke, jetzt hast du ein Vorstellung, warum dieser Gedanke, dass "alle Programme alle Kerne beschäftigen können sollten" ziemlich abwegig ist.


    Natürlich geht jeder Kern bei hwinfo kurz auf Vollast.
    Er wird ja gecheckt, ob alle seine Funktionen auch verfügbar sind.


    Es ist normal, dass ein Kern auf 100% geht.
    Das ist über die Zeit gemittelt.
    Wenn eine Task läuft, dann IST er IMMER auf 100%.
    Kein Task läuft mit weniger als 100%.
    Ganz, oder gar nicht.


    Solche Spitzen sagen also gar nichts.
    Aber muss man natürlich monitoren.
    Sieht ja auch so verdammt geeky aus.
    Braucht man unbedingt.

  • Das man diese Aufteilung auf die Kerne auch seperat steuern und verteilen muß ist mir klar und das das auch wieder Rechenzeit benötigt ist mir auch klar. Da aber die Vorsortierung und Verteilung in manchen Fällen schneller geht als die Verarbeitung von manchen Befehlen wird Multiprozessing erst sinnvoll. Ähnlich ging das ja früher schon auf dem Amiga wo es die Turbokarten mit Mathematischem Co-Prozessor gab. Auch wenn es damals etwas anderes war ist aber das Prinzip des ganzen das gleiche nur das heute alles schön in einem Prozessor verpackt ist und man nicht her von Blitter und Trap usw. sprechen muß.
    Vorhin hat er einfach nur 2h lang das Verzeichnis gescannt und dies lief nur mit einem Kern. Jetzt gerade ist er dabei die Datenbank zu schreiben und jetzt laufen 3 Kerne auf 100% und der 4. mit 8%.
    Ich denke der wird da auch nochmal 2 - 3h rum rödeln bis er es geschafft hat, schade nur das man das nicht besser ausnutzt, wenn die Möglichkeit der 4 Herzen besteht. Es könnte ein Kern zum scannen einer für die Verteilung und einer für die Erstellung der Datenbank gleichzeitig genutzt werden, von mir aus der 4. für den Bildaufbau. Jetzt läuft das alles nacheinander ab und schluckt richtig Zeit. Es ist ja auch wirklich nur ein kleiner Prozessor der nicht für hohe Rechenleistungen steht, aber für die simple Datenbankerstellung würde sogar ein Risk Prozessor genügen, der könnte zwar wesentlich weniger aber dafür schneller.
    Naja ich denke mal das Thema ist gegessen und werde dieses als gelöst abhaken.
    Vielen Dank übrigens für die ausschweifende Antwort, ist aber gut erklärt gewesen. Aber um die blinkenden Graphen geht es mir bestimmt nicht sondern eigentlich nur um maximale Ausnutzung der Resourcen wenn die kleine CPU sogar noch Reserver hätte warum soll ich diese dann noch verschenken.