[HOWTO] Schnelleres Compilieren auf dem VDR

  • Hallo zusammen,


    vielleicht habt Ihr wie ich auch den Drang, öfters am VDR rumzubasteln.


    Und vielleicht habt Ihr auch nicht die leistungsfähigste CPU im VDR, sondern eher einen Stromspar-Prozzi wie z.B. den VIA Eden.


    Dann habt Ihr bestimmt auch das Problem, dass die make-Vorgänge quälend lange dauern, insbesondere wenn wider mal ein neuer Kernel gebaut werden muss.


    Dann habt Ihr vielleicht Interesse an folgender Lösung:
    Aufsetzen eines Compile-Clusters mit ICECREAM


    Was braucht man dazu?
    Zunächst mal mehrere LINUX-Rechner, es soll ja schliesslich ein Cluster werden.
    Wer wie ich neben dem Compilieren gerne etwas auf seinem Windows-Desktop erledigt, kann hierbei auch zu VMWare greifen und einen virtuellen LINUX-Server aufsetzen.
    Hier also meine Vorgehensweise:


    1. VMWare Server kostenlos hier runterladen und installieren


    2. Eine VM mit einem Minimal-Linux aufsetzen (kein Desktop, kein X, kein sonstiger Schnickschnack). Das Netzwerk der VM habe ich auf "default bridged" gestellt.


    3. Auf allen Rechnern (können beliebig viele physikalische Kisten oder VMs sein) ICECREAM installieren. Für Gentoo sieht das so aus (für andere Distris bitte googlen):


    a) emergen von maskiertem Package für ICECREAM zulassen

    Code
    echo "sys-devel/icecream ~x86" >> /etc/portage/package.keywordsw


    b) ICECREAM installieren

    Code
    emerge -av sys-devel/icecream


    c) /etc/make.conf anpassen
    Anzahl der Prozessoren im Cluster + 1 setzen (=N)

    Code
    MAKEOPTS="-jN"


    portage soll ICECREAM nutzen

    Code
    PREROOTPATH="/usr/lib/icecc/bin"


    d) /etc/profile anpassen
    make soll ICECREAM nutzen

    Code
    PATH="/usr/lib/icecc/bin:${PATH}"


    e) /etc/conf.d/icecream anpassen
    Auf dem Server (es darf nur einen geben!):

    Code
    ICECREAM_RUN_SCHEDULER="yes"


    Auf allen Clients:

    Code
    ICECREAM_RUN_SCHEDULER="no"


    Anzahl der Prozessoren im Cluster + 1 setzen (=N), siehe oben

    Code
    ICECREAM_MAX_JOBS="N"


    Ich musste bei mir noch die IP des ICECREAM-Servers/Schedulers eintragen, da das Broadcasting scheinbar nicht funktioniert hat:

    Code
    ICECREAM_SCHEDULER_HOST="192.168.1.99"


    4. So jetzt noch den ICECREAM-Dienst auf allen Rechnern, inkl. VDR starten

    Code
    /etc/init.d/icecream start


    und ggf. so einstellen, dass der Dienst beim Hochfahren gestartet wird:

    Code
    rc-update add icecream default


    5. make oder emerge starten und sich freuen, wie schnell das geht. :wow
    Ein Kernel make dauert bei mir nur noch ca. 25% der Zeit, da die meiste Arbeit auf meinem DualCore Desktop (innerhalb der VM) verrichtet wird.
    Das schöne an ICECREAM (im Unterschied zu distcc) ist, dass der Server die Last dynamisch verteilt, d.h. die schnellen Rechner bekommen mehr Compile-Jobs.

    Schöne Grüße
    Thomas


    HW: Soltek QBIC SL-B8E-F2, 2.4 GHz Celeron gekühlt mit Cooltek CT8C-48 CU, TT 1.5 ff, 512 MB RAM, 160 GB Samsung SV1604N, DVD AOPEN AAP, FB All-In-One URC7030
    SW: Gentoo mit Kernel 2.6.17-r5 und separaten DVB-Treibern (v4l-dvb-db2b113ea431), VDR 1.4.4 + Big Patch, nvram-wakeup mit reboot via lilo, noad
    PLUGINS: diverse

  • seeeeeehr geil danke hab eindlich die tt 3200er in der s100 drinn und das compilieren war so ätzend lahm


    bis ich da die ehd und den vdr zum laufen bringen würde das würde dauern
    mit der lösung sollte das schneller gehen


    thanks


    gruß

    Einmal editiert, zuletzt von Moorviper ()

  • Morgen


    Mal eine Frage, kann man irgend wie, die Priortät erhöhen?


    Meine, auf der VDR Kiste (icream client / 863 MHz) dauert das Kompilieren länger, als auf dem Server ( 5200 MHz)?


    Es geht schon deutlich "flotter", icemon zeigt auch an das sich was tut, aber wie gesagt auf dem Server selbst, geht es mindestens doppelt so fix?


    Auf dem Server, wie folgt gestartet (SuSE):


    Code
    /usr/sbin/iceccd -d -l /var/log/iceccd --nice 5 -u icecream -b /var/cache/icecream -m 1


    LG Ronny

  • Na das nenn ich mal ne geniale Idee! Compilieren alla SET@home, nur lokal! :welle

  • Zitat

    Original von ilmusy
    was passiert wenn man kompilieren möchte während der Server ausgeschaltet ist? Geht das dann noch?


    Ja, aber ebend nur mit der lokalen Leistung.


    LG Ronny

  • Klasse!


    So etwas sollte es viel oefters geben- nicht nur fuer Compilierorgien, sondern auch fuer andere Anwendungen.


    Es haben doch fast alle hier mehrer Rechner mit mehreren CPUs rumstehen. Warum sollten wir uns einen neuen Desktop kaufen, wenn die Rechenleistung auf den anderne Kisten in der Summe vorhandne ist?


    Naja, dank Multi-Core CPUs haelt ja nun endlich in der Programmierung der Anwendugen Parallelisierung Einzug.


    Und der naechste Schritt zur nicht-lokalen Parellelisierung ist dann nicht mehr weit.


    Gespannt wartend, Christian

    Glotze: yaVDR (ASRock Q1900M, 4GB RAM, DD Cine S2 V6.5, ZOTAC GT630 (Rev. 2)
    Server: HP ProLiant MicroServer G8, VMware ESXi 5.5 :P


  • Morgen


    Glaube es liegt an dem hier ....


    Code
    /usr/sbin/iceccd -d -l /var/log/iceccd --nice 5 -u icecream -b /var/cache/icecream -m 1
                                           ^^^^^^^^


    Habe mal shell> cat /proc/cpuinfo ausgeführt, beide Kerne liefen auf 1000 MHz, dann mal auf KPowersave, das CPU Frequenzverhalten von Dynamisch auf Leistung gesetzt, siehe da beide Töppe auf 2600 MHz.


    Kompilieren, geht nun deutlich flotter, auf den Client.


    Für SuSE:


    Code
    shell> yast2 sysconfig set ICECREAM_NICE_LEVEL=19
    shell> rcicecream restart


    LG Ronny

  • wenn ich 64Bit und 32Bit Linux'e habe, bekomm ich da Probleme?
    Was ist da zu beachten?


    Auf der Icecream Seite steht was, dass ich die Optimierungen (CFlags für den Prozzi) weg lassen soll...


    Was ich eben nicht unbedingt möchte - sonst könnte ich gleich zu Binär-Distros wechseln...


    Hat da jmd. Erfahrungen?

  • Hallo,
    ich versuche es, auf Suse 11.1 (64-bit AMD Athlon 64 X2 Dual Core 4800+ @ 2.50GHz) für Gentoo (i686 Celeron (Coppermine) @ 0.73GHz) zu übersetzen.


    Dazu habe ich die Entwicklungsumgebung (compiler environment) von Gentoo auf Suse geladen.


    Unter Gentoo

    Code
    icecc --build-native


    Unter Suse

    Code
    export ICECC_VERSION=i686-4.1.2.tar.gz


    In der Firewall von Suse habe ich noch die Ports freigegeben.
    http://en.opensuse.org/Icecream


    Wie es aussieht wird unter Gentoo (Installation nach Anleitung von oben) problemlos übersetzt.
    Im Icecream Monitor werden mir die Zwei Plattformen mit eingehenden und ausgehenden Jobs angezeigt.

    Zitat

    Hosts: Plattform i686
    Outgoing jobs: Server Suserechner


    Zitat

    Hosts: Plattform x86_64
    Incomming jobs: Client Gentoorechner


    Kann jemand mit Erfahrungen sagen, ob der Ablauf des Übersetzen so stimmt?


    bis dann,
    Nando

    TEST FOXCONN 560A "Cool`n`Quiet"
    Software: Gen2VDR V2 + vdr-1.6-ext59 + Nvram-Wakeup + KDE
    Hardware: AMD Athlon 64 X2 Dual Core 4800+, 4GB DDR2RAM, SAMSUNG SATA HD501LJ 500 GB, SAMSUNG SP2514N 250 GB, HD SV1604N 160GB, HL-DT-STDVD-RAM GSA-H58N, Cablestar2, TTDVB-C + Scart-out + ASUS-SPDIF


    Activy 300
    Software: Gen2VDR V2 + vdr-1.4.7-ext40 + STR + FreeVo (Browser, Games, ... )
    Hardware: 256MB SDRAM, HD SV1604N 160GB, DVD SD-M1612, FSDVB-C + Scart-out, Technisat Cablestar2, leise

  • Hallo,
    was hat es mit sys-devel/crossdev auf sich? Es ist bei mir nicht installiert.
    http://www.gentoo-wiki.info/HO…cream_and_cross-compiling


    Manchmal steht auch im Icecream Monitor, im Host des Activy, bei State nur LocalOnly und dann Finished (beim Übersetzen).
    Im Host des Scheduler (Suse 11.1) taucht nichts auf.
    Gibt Inecream nur größere Jobs weiter?


    Im Icecream Monitor tauch dann irgendwann wieder Client und Host auf. Im Host des Activy -> Client und im Host des Suse Rechners -> Server. Im System Monitor des Suse Rechners ist der Task cc1 zu finden.


    bis dann,
    Nando

    TEST FOXCONN 560A "Cool`n`Quiet"
    Software: Gen2VDR V2 + vdr-1.6-ext59 + Nvram-Wakeup + KDE
    Hardware: AMD Athlon 64 X2 Dual Core 4800+, 4GB DDR2RAM, SAMSUNG SATA HD501LJ 500 GB, SAMSUNG SP2514N 250 GB, HD SV1604N 160GB, HL-DT-STDVD-RAM GSA-H58N, Cablestar2, TTDVB-C + Scart-out + ASUS-SPDIF


    Activy 300
    Software: Gen2VDR V2 + vdr-1.4.7-ext40 + STR + FreeVo (Browser, Games, ... )
    Hardware: 256MB SDRAM, HD SV1604N 160GB, DVD SD-M1612, FSDVB-C + Scart-out, Technisat Cablestar2, leise


  • Habe auf dem Client, die .bashrc erweitert, aber keinen Plan, wie das bei Gentoo läuft.


    Code
    shell> cat ~/.bashrc
    export PATH=/opt/icecream/bin:$PATH:/usr/local/bin
    alias make="make -j2"


    Also, ohne '-j2' sah ich fast ausschließlich 'State nur LocalOnly'.


    ---------------


    Später ...


    Das Howto ganz oben ist ja für Gentoo, somit wird es wohl nicht an -j2 liegen,


    LG Ronny

    Einmal editiert, zuletzt von ronnykornexl ()

  • Hallo Ronny,
    hier ist eigentlich gut beschrieben, wie es einzurichten ist.
    http://de.gentoo-wiki.com/wiki…schleunigen#Konfiguration


    Allerdings ist bei mir kein Unterschied in der Geschwindigkeit zu bemerken (gerade v4l-dvb-hg übersetzt).
    Icecream-Daemon auf Activy läuft -> zirka 21Minuten
    - Server-Client-Anzeigen im Icecream-Monitor
    - cc1 im System-Monitor des Servers
    - ~20 % CPU-Nutzung des Server


    Icecream-Daemon auf Activy gestoppt -> zirka 20Minuten
    - keine Server-Client-Anzeigen im Icecream-Monitor
    - ~15 % CPU-Nutzung des Server


    (ICECREAM_NICE_LEVEL="5", MAKEOPTS="-j3")


    [edit]
    Ist ccache dafür verantwortlich, dass es beim 2.Versuch ebenso schnell ablief?
    MAKEOPTS="-j3" auskommentiert aus /etc/make.conf bringt eine Dauer von ~50 Minuten ?(
    Was mich nur wundert, ist die niedrige CPU-Last des Servers.
    [edit]


    bis dann,
    Nando

    TEST FOXCONN 560A "Cool`n`Quiet"
    Software: Gen2VDR V2 + vdr-1.6-ext59 + Nvram-Wakeup + KDE
    Hardware: AMD Athlon 64 X2 Dual Core 4800+, 4GB DDR2RAM, SAMSUNG SATA HD501LJ 500 GB, SAMSUNG SP2514N 250 GB, HD SV1604N 160GB, HL-DT-STDVD-RAM GSA-H58N, Cablestar2, TTDVB-C + Scart-out + ASUS-SPDIF


    Activy 300
    Software: Gen2VDR V2 + vdr-1.4.7-ext40 + STR + FreeVo (Browser, Games, ... )
    Hardware: 256MB SDRAM, HD SV1604N 160GB, DVD SD-M1612, FSDVB-C + Scart-out, Technisat Cablestar2, leise

    2 Mal editiert, zuletzt von netz ()

  • Ich hatte es früher schon mal verwendet und hatte damals ein paar Probleme wenn es unterschiedliche gcc und libc Versionen installiert waren.
    Ist das heute kein Problem mehr ?

  • Das gleiche, aus dem Source-Verzeichnis, auf dem Server übersetzt, dauert ~7 Minuten. :(
    Kann man das optimieren?


    decembersoul
    Fehlermeldungen sind mir nicht aufgefallenm, nur etwas wie diese Zeile (Test von eben).

    Code
    ...
     * Preparing dvb module make -j3 HOSTCC=i686-pc-linux-gnu-gcc CROSS_COMPILE=i686-pc-linux-gnu- LDFLAGS= KDIR=/usr/src/linux default scripts/make_makefile.pl
    ...

    TEST FOXCONN 560A "Cool`n`Quiet"
    Software: Gen2VDR V2 + vdr-1.6-ext59 + Nvram-Wakeup + KDE
    Hardware: AMD Athlon 64 X2 Dual Core 4800+, 4GB DDR2RAM, SAMSUNG SATA HD501LJ 500 GB, SAMSUNG SP2514N 250 GB, HD SV1604N 160GB, HL-DT-STDVD-RAM GSA-H58N, Cablestar2, TTDVB-C + Scart-out + ASUS-SPDIF


    Activy 300
    Software: Gen2VDR V2 + vdr-1.4.7-ext40 + STR + FreeVo (Browser, Games, ... )
    Hardware: 256MB SDRAM, HD SV1604N 160GB, DVD SD-M1612, FSDVB-C + Scart-out, Technisat Cablestar2, leise

  • Weiß, nicht mit den unterschiedlichen gcc-versionen, liegen hier zbs. zu nah bei einnander.


    Code
    server: gcc (SUSE Linux) 4.3.2 [gcc-4_3-branch revision 141291]
    client: gcc (GCC) 4.3.3 (CRUX)


    Bei mir lohnt sich das ganze auf jeden Fall.


    Code
    server: 5200 MHz
    client: 863 MHz (vdr)


    Treiber (dvb) verteilt übersetzt:


    Code
    real    6m37.987s
    user    3m45.382s
    sys     1m38.322s


    Hier mal ohne:


    Code
    real    20m18.801s
    user    15m23.618s
    sys     3m43.194s


    Sind doch ein paar Minuten, unterschiedt.


    Wollte mir eigentlich auch schon einen neuen Unterbau für vdr zulegen, da die Distri (Crux) Source basiert ist (bis auf die Basis).


    Dank Icecream, hat das nun noch reichlich Zeit


    LG Ronny

    Einmal editiert, zuletzt von ronnykornexl ()

  • Manuell mit dem gleichen Source-Verzeichnis auf dem Activy.
    - Activy Client Jobs 1
    - Suse Server Jobs 10


    make CC=icecc -j10
    zirka 13 Minuten


    Naja, vllt. braucht man eine Gigabit-Leitung. Ich habe nur 100-MBit. ;)

    TEST FOXCONN 560A "Cool`n`Quiet"
    Software: Gen2VDR V2 + vdr-1.6-ext59 + Nvram-Wakeup + KDE
    Hardware: AMD Athlon 64 X2 Dual Core 4800+, 4GB DDR2RAM, SAMSUNG SATA HD501LJ 500 GB, SAMSUNG SP2514N 250 GB, HD SV1604N 160GB, HL-DT-STDVD-RAM GSA-H58N, Cablestar2, TTDVB-C + Scart-out + ASUS-SPDIF


    Activy 300
    Software: Gen2VDR V2 + vdr-1.4.7-ext40 + STR + FreeVo (Browser, Games, ... )
    Hardware: 256MB SDRAM, HD SV1604N 160GB, DVD SD-M1612, FSDVB-C + Scart-out, Technisat Cablestar2, leise

    Einmal editiert, zuletzt von netz ()


  • Hier auch nur 100 MBit LAN.


    LG Ronny

  • :lol2


    Dachte immer mit -j<N> waren die CPUs gemeint, dabei geht es im die Jobs.


    Jetzt mal auf 10 gesetzt, geht noch eine Ecke fixer (dvb komplett):


    Code
    real    4m34.671s
    user    3m30.069s
    sys     0m58.360s


    LG Ronny

  • Das geht jetzt aber in die falsche Richtung.
    Bei mir sollte es schneller werden, nicht bei dir. ;)

    TEST FOXCONN 560A "Cool`n`Quiet"
    Software: Gen2VDR V2 + vdr-1.6-ext59 + Nvram-Wakeup + KDE
    Hardware: AMD Athlon 64 X2 Dual Core 4800+, 4GB DDR2RAM, SAMSUNG SATA HD501LJ 500 GB, SAMSUNG SP2514N 250 GB, HD SV1604N 160GB, HL-DT-STDVD-RAM GSA-H58N, Cablestar2, TTDVB-C + Scart-out + ASUS-SPDIF


    Activy 300
    Software: Gen2VDR V2 + vdr-1.4.7-ext40 + STR + FreeVo (Browser, Games, ... )
    Hardware: 256MB SDRAM, HD SV1604N 160GB, DVD SD-M1612, FSDVB-C + Scart-out, Technisat Cablestar2, leise

Jetzt mitmachen!

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