Verständnisfrage zu Jobs beim maken

  • Hallo Zusammen,


    ich habe eine i7 CPU und baue i.d.R mit "make -j10 ....". Im Grunde habe ich damit auch keine Probleme, nur wenn ich xbmc mit Webserver Support baue, bricht der Compiler ab, baue ich ohne den Parameter "j", läuft der Compiler ohne zu murren durch.


    Die Frage ist nun, was ist anders, wenn simultan mit mehreren Jobs gebaute wird?

  • Wie bricht der Compiler denn ab, crasht er einfach so oder gibt es Fehlermeldungen?


    Bei -j laufen ja mehrere Compiler-Instanzen parallel, dadurch ist das "Timing" des Build-Prozesses anders (und möglicherweise bei jedem Start unterschiedlich). Evt. gibt es eine Abhängigkeit, die make nicht erkennt und es wird versucht, ein File zu übersetzen, für das eine Abhängigkeit noch nicht gelöst ist.


    Wolfgang

    MSI C847MS-E33, Cine S2 6.0, Zotac GT630 (GK208), dual boot
    Work: yaVDR 0.7 ansible Ubuntu 20.04. Backup: yaVDR 0.5 Ubuntu 12.06


  • Ehrlich gesagt, habe ich die Fehlermeldung(en) gar nicht weiter verfolgt, da ich mir für xbmc ein build Script gebastelt habe.


    "make" wird darin so aufgerufen:


    Code
    ....
    JOBS=$(($(grep -c "^processor" /proc/cpuinfo) +2))
    make -j"$JOBS"
    ....


    Damit hat der Compiler nicht durchcompiliert.
    Dann, habe ich im Sourceverzeichnis ein "make" ausgeführt und dann ging es auf einmal anstandslos.


    Ich habe dann nochmal gecleant, weil es mich interessiert hat, ob der Fehler reproduzierbar ist und habe dann halt festgestellt, dass so ist, wie im Eingangsposting beschrieben, ohne "Jobs" geht es, mit Jobs geht es nicht.


    im Grund genommen ist es mir ja egal, denn es funktioniert ja, es würde mich halt nur interessieren, woher der Fehler kommt. ;)
    Ich habe auch (noch) nicht getestet, ob das Phänomen auch mit weniger parallelen "Jobs" auftritt.

  • im Grund genommen ist es mir ja egal, denn es funktioniert ja, es würde mich halt nur interessieren, woher der Fehler kommt. ;)


    Ich kann dir auch nicht sagen, woher der Fehler kommt. Diese Fehler sind oft trivial, aber schwer zu finden.


    Ein Beispiel aus meiner Praxis. Über ein Makefile werden folgende Shell-Befehle angestoßen:

    Code
    ...
    if [ ! -e $DIR ]; then
      mkdir $DIR
    fi
    ...


    Was völlig bescheuert ist. Der erste Job prüft ob das Directory schon da ist, findet es nicht und geht in das if. Der zweite Job prüft ob das Directory schon da ist, findet es nicht und geht in das if. Der erste Job erzeugt das Directory. Der zweite Job versucht das Gleiche, geht aber nicht, weil schon da. Der Make bricht ab.
    Die Lösung ist natürlich ganz einfach:

    Code
    ...
    mkdir -p $DIR
    ...


    Aber das muss man eben erstmal finden. Bei dir kann es natürlich ganz was anderes sein.


    Gerald


    HP Proliant MicroServer Gen8, Xeon E3-1230, 12 GB RAM, 3xWD red 2TB im RAID 5, 2xSundtek MediaTV Home DVB-C/T, L4M TWIN-C/T, Ubuntu Server 14.04.1, Plex Media Server
    Samsung UE55H6470

  • Danke für die Erklärungen. :tup


    Ich werde dann eben mein Script so anpassen, dass wenn im configure der Webserver enabled ist, xbmc eben ohne "jobs" gebaut wird.


    Allerdings hätte ich nicht erwartet, dass der Compiler für ein simples


    Code
    [ ! -e $DIR ] && mkdir $DIR


    sich mehrere Jobs gönnt, das ist ja fast wie in deutschen Amtsstuben. :)

  • Allerdings hätte ich nicht erwartet, dass der Compiler für ein simples
    sich mehrere Jobs gönnt, das ist ja fast wie in deutschen Amtsstuben. :)


    Du hast es leider überhaupt nicht verstanden. Das macht doch nicht der Compiler, das ist doch bash. Der Jobs-Parameter startet nicht mehrere Compiler sondern mehrere Makes die alle parallel laufen. Diese Makes können dann Compiler aufrufen, müssen sie aber nicht. Hier war es die bash.
    Die Makefiles die nur den Compiler und Linker brauchen haben nie Probleme mit dem parallelen Laufen.


    Gerald


    HP Proliant MicroServer Gen8, Xeon E3-1230, 12 GB RAM, 3xWD red 2TB im RAID 5, 2xSundtek MediaTV Home DVB-C/T, L4M TWIN-C/T, Ubuntu Server 14.04.1, Plex Media Server
    Samsung UE55H6470

  • Das Problem liegt an den Makefile Bauern. Wenn die unfähig sind, dann geht es nicht.


    Johns

    Sag mir, wo die Developer sind. Wo sind sie geblieben? . . . . . . . . . . . . . . . . . . . . SoftHdDevice - A software and GPU emulated HD output device plugin.
    Sag mir, wo die Developer sind. Was ist geschehn?


    Client0: Crown CW02 MSI_C847MS-E33 Zotac_GT640_passiv Cine-S2 iMon-MCE / streamdev softhddevice
    Client1: Lian_Li_PC-Q09FB ASRock_H67M-ITX/HT I3-2100 ASUS_ENGT520_passiv / streamdev softhddevice
    Test: Lian_Li_PC-Q09R Asus C60M1-I / streamdev
    Server0: Dockstar TT-S2-3600-USB / streamdev
    Server2: Lian_Li_PC-Q07R Intel_DH61DL G620 WD20EARX 90W PicoPSU Cine-S2+DuoFlex-S2+DuoFlex-CT / streamdev / 22 Watt Verbrauch

  • Das Problem liegt an den Makefile Bauern. Wenn die unfähig sind, dann geht es nicht.


    Das sowieso, aber was willst du denn von den Entwicklern von heute erwarten, die nur noch Visual Studio, oder Eclipse kennen und allenfalls schon mal ant gesehen haben?


    Gerald


    HP Proliant MicroServer Gen8, Xeon E3-1230, 12 GB RAM, 3xWD red 2TB im RAID 5, 2xSundtek MediaTV Home DVB-C/T, L4M TWIN-C/T, Ubuntu Server 14.04.1, Plex Media Server
    Samsung UE55H6470

  • [ ! -e $DIR ] && mkdir $DIR


    Übrigens ist das genauso wenig atomar und würde auch schief gehen.


    Gerald


    HP Proliant MicroServer Gen8, Xeon E3-1230, 12 GB RAM, 3xWD red 2TB im RAID 5, 2xSundtek MediaTV Home DVB-C/T, L4M TWIN-C/T, Ubuntu Server 14.04.1, Plex Media Server
    Samsung UE55H6470


  • Übrigens ist das genauso wenig atomar und würde auch schief gehen.


    Gerald


    Nicht anderes habe ich ja auch nicht behauptet.


    Aber da ja der "Schuldige", bzw. die Ursache gefunden ist und kein "C" kann, werde ich mit der o.g. Lösung leben und mein build Script eben entsprechend anpassen. ;)

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!