Skripte rund um BOINC

koschi

Grand Admiral Special
Mitglied seit
11.11.2001
Beiträge
5.713
Renomée
705
Standort
0511
  • Spinhenge ESL
  • BOINC Pentathlon 2016
  • BOINC Pentathlon 2017
  • BOINC Pentathlon 2018
  • BOINC Pentathlon 2019
  • SETI@Home Intel-Race II
  • BOINC Pentathlon 2020
  • THOR Challenge 2020
  • BOINC Pentathlon 2021
  • BOINC Pentathlon 2022
  • BOINC Pentathlon 2023
Ich hatte verstreut an anderer Stellen schon meine Auswertungsskripte für WU Laufzeiten und Credits sowie den Instanzverwalter gezeigt, wollte das aber hier nun an zentraler Stelle nochmal zusammenführen.

In meinem Github repository habe ich bisher 3 von unzähligen Skripten veröffentlicht die ich selbst, aber auch andere User hier regelmäßig nutzen.

get_validated

Dieses Skript liest die ersten 100 WUs eines hosts aus und ermittelt daraus die durchschnittliche Laufzeit und Credits pro WU und Tag.
Aktuell keine Unterstützung für Einstein und Yoyo, letzteres sollte aber ohne großen Aufwand noch nachzuholen sein.


Code:
./get_validated "https://www.sidock.si/sidock/results.php?hostid=1045&offset=0&show_names=0&state=0&appid=2"
0 20 40 60 80 - download complete. Calculating...
Application:               CurieMarieDock on BOINC
CPU:           AMD Ryzen 9 3900X 12-Core Processor
OS:                Linux Ubuntu Ubuntu 20.04.1 LTS
Results fetched:                               100
Average duration (s):                       1662.8
Average credit:                              22.32
Number of reported cores:                       24
Per core per day:                             1158
Per system per day:                          27792

get_wcg_averages

Da WCG ja leider nicht die übliche BOINC Serveroberfläche anbietet, muss hier ein eigenes Skript herhalten.
Nach Anpassung von 3 Variablen im Skript erzeugt es eine Übersicht wie die folgende:

Code:
R9-3900x_Linux64 (24 threads)
            Project: #WUs: ~Runtime: ~Credits: C/d/Core: C/d/Host:
                BETA   328    590.18     22.70   3323.05  79753.20
                HST1    33  28067.64    425.21   1305.39  31329.36
                MCM1   294   7816.95     95.91   1059.80  25435.20
                OPN1   179   6845.46     80.72   1018.68  24448.32
                SCC1  1000   3182.12     61.01   1656.42  39754.08

Odroid_XU4_2_4xA15+4xA7 (8 threads)
            Project: #WUs: ~Runtime: ~Credits: C/d/Core: C/d/Host:
                OPN1     3  41142.55     75.24    158.00   1264.00

boinc_instancer.sh

Wenn mal wirklich langfristig gebunkert werden muss, dann helfen Instanzen. Auf großen Systemen helfen viele Instanzen. Irgendwann wird es dann unübersichtlich, wo läuft noch was, ist der Netzwerkzugriff pausiert, wie sind die CPU Einstellungen, und überhaupt.
Nachdem ein Konfigurationsgrundgerüst abgelegt wurde (darin cc_config.xml, global_prefs_override.xml, gui_rpc_auth.cfg, remote_hosts.cfg sowie etwaige account_project.url.xml Dateien, keine ist Pflicht), kann der Instanzierer innerhalb von Sekunden neue Instanzen anlegen, anzeigen, stoppen, starten und auch wieder geordnet löschen. Über alle Instanzen hinweg wird die Anzahl der bereitstehenden, laufenden und fertigen WUs angezeigt. CPU/GPU und Netzzugriff, ncpu,CPU% sowie der Arbeitspuffer können pro Instanz aus dem Skript heraus gesteuert werden.

Code:
INSTANCE        PID    State   CPU  GPU  NET NCPU  CPU%   BUFFER PRJ  WUs READY DL* ACT  UPL  RTR boincmgr call                                                     
boinc_20002 2149420  Running  SUSP  ATP  ATP  24  100.0 10.0/5.0   1  390  390  0    0    0    0 boincmgr -m -g 20002 &
boinc_20008 2149421  Running  SUSP  ATP  ATP  24  100.0 10.0/5.0   1  277  277  0    0    0    0 boincmgr -m -g 20008 &
boinc_29315 2155415  Running   ACT ATP  SUSP  24  100.0 10.0/5.0   1    0    0  0    0    412  0 boincmgr -m -g 29315 &
boinc_31416 2120013  Running   ACT  ACT  ACT   24  92.0 10.0/0.0  16 1918 1893  0   23    0    2 boincmgr -m -g 31416 &
boinc_39106             Down
Load average: 22.80/23.02/23.20                                      2585   0   23        412   2


ACT = Active (Run always)
ACP = Run based on preferences
ATP = Network access based on preferences
SUSP = suspended
RTR = Ready to report


Ich würde dann zukünftig auf diesen Thread verweisen und Diskussionen hierher leiten, auf dass die Informationen nicht in den anderen Threads untergehen.
 
Zuletzt bearbeitet:

Hab eine neue Version vom Instanzierskript hochgeladen.
Über -U boinc_20002 lassen sich ja zb. CPU, GPU und Netzwerkmodus, die ncpus und CPU% einstellen.
Hier wird jetzt geprüft ob ncpus in der cc_config.xml existiert, ist es noch nicht drin, dann wird eine <ncpus> Zeile hinzugefügt. Wurden zuvor neue Instanz ohne vordefinierte Konfigurationsdateien gestartet, dann haben diese eine fast leere default cc_config.xml erstellt, eine ncpu Anpassung war dann nicht möglich.

Die Anpassung des CPU, GPU und Netzwerkmodus erfolgt jetzt über Nummern, das geht schneller...
 

Über -U boinc_PORT lassen sich ja zb. CPU, GPU und Netzwerkmodus, die ncpus und CPU% einstellen.
Hier wird jetzt geprüft ob ncpus in der cc_config.xml existiert, ist es noch nicht drin, dann wird eine <ncpus> Zeile hinzugefügt. Wurden zuvor neue Instanz ohne vordefinierte Konfigurationsdateien gestartet, dann haben diese eine fast leere default cc_config.xml erstellt, eine ncpu Anpassung war dann nicht möglich.

Uh, natürlich hat sich hier ein Fehler eingeschlichen und es hat im abschließenden </ncpus> tag das s gefehlt, darum gibt es jetzt wieder eine neue Version.

Darin ist auch die Instanzauflistung umstrukturiert worden, damit kann nach Instanzerstellung oder Anpassung auch nur eine Instanz angezeigt werden, das ist übersichtlicher und schneller.-
 
Mal wieder ein Update:
- das boincmgr Kommando hab ich durch hostname: port ersetzt, irgendwie kam doch meist die Abfrage wohin er verbinden soll
- bei der Erstellungen von Instanzen (-n) oder deren Bearbeitung (-U) lässt sich jetzt eine Beschreibung ablegen die es vereinfacht die Instanz zuzuordnen

Code:
boinc-instancer.sh -l
INSTANCE        PID    State   CPU  GPU  NET NCPU  CPU%   BUFFER PRJ  WUs READY  DL* ACT  UPL  RTR boincmgr        purpose                       
boinc_29315    5994  Running   ACT  ACT SUSP  100 100.0  5.0/5.0   2  233   233   0    0    0    0 localhost:29315 Asteroids                           
boinc_31416    8774  Running   ACT SUSP SUSP  100  15.0  4.0/0.1  13 1008   983   0   13   12    0 localhost:31416 Amicable,SiDock         
boinc_38726    6211  Running   ACT  ACT SUSP  100   6.0  8.0/2.0   2 1034   600   0    6  428    0 localhost:38726 Asteroids                           
boinc_43448    6862  Running   ACT  ACT  ACT  100   4.0  8.0/2.0   1    0     0   0    0    0    0 localhost:43448                               
boinc_49094    8047  Running   ACT  ACT  ACT  100   8.0  8.0/2.0   2    0     0   0    0    0    0 localhost:49094                               
boinc_58222    8234  Running   ACT  ACT  ACT  100  22.0  1.0/2.0   2    0     0   0    0    0    0 localhost:58222                               
boinc_58223    8413  Running   ACT  ATP  ATP  100 100.0 10.0/5.0   1  293   292   0    1    0    0 localhost:58223 Asteroids                           
boinc_58224    8599  Running   ACT  ACT SUSP  100  16.0 10.0/5.0   1  483   481   0    1    1    0 localhost:58224 Asteroids                           
boinc_58225  810703  Running   ACT  ACT SUSP  100 100.0  7.0/3.0   1  228   167   0    2   47   12 localhost:58225 Amicable                       
boinc_58227    9193  Running   ACT  ACT SUSP  100  25.0  7.0/3.0   1 1007   808   0    2  197    0 localhost:58227 Amicable                       
Load average: 22.26/22.54/22.26                                      4286  3564   0   25  685   12
 
Ich weiß nicht was ich falsch mache.

Nehme ich die get_validated.sh:
Code:
root@P3D-7763:~# ./get_validated.sh "https://asteroidsathome.net/boinc/show_host_detail.php?hostid=719673"
0 - No result data loaded from project server, exiting...

Nehme ich die get_validated:
Code:
root@P3D-7763:~# ./get_validated "https://asteroidsathome.net/boinc/show_host_detail.php?hostid=719673"
./get_validated: Zeile 7: Syntaxfehler beim unerwarteten Wort »newline«
./get_validated: Zeile 7: `<!DOCTYPE html>'
 
Wie so oft, sitzt der Fehler vor der Tastatur. :(

A) Mit der get_valited.sh und
B) Auf "Gültige WUs" gehen

dann klappt es auch. :--)
 
Betreff: boinc-instancer.sh

Übernehme ich die Zeile aus unserer DC-Wiki:
boinc-instancer.sh -E https://raw.githubusercontent.com/MBlenn/BOINC/master/BOINC instancer/bic.tar
bekomme ich die Rückmeldung:
The specified file does not exist, try again with correct path.
Gehe ich in dein GitHub-Content und übernehme die Adresse von der tar-Datei:
boinc-instancer.sh -E https://github.com/MBlenn/BOINC/blob/master/BOINC instancer/bic.tar
bekomme ich die gleiche Rückmeldung.
Wo mache ich den Fehler?
 
Öhm ja, hätte ich das mal lieber getestet. Der kommt mit dem Freizeichen in der URL nicht klar, lade später eine neue Version hoch...
 
Puh, hat bissl gedauert alles zu finden :-D
- Mit Leerzeichen in der URL kann er jetzt um, dafür muss die URL aber in "Gänsefüßchen", oder Leerzeichen durch %20 ersetzt werden.
- https hatte ich zuvor nicht berücksichtigt, klappt jetzt
- Der Link selbst war natürlich auch falsch und muss auf https://raw.githubusercontent.com/MBlenn/BOINC/master/BOINC instancer/bic.tar zeigen :-D

Größte Änderung ist aber dass der boinc-instancer jetzt unter einem non-root Nutzer laufen kann. Der Nutzer ist konfigurabel, auch existierende BOINC Instanzen werden diesem Benutzer während des Starts zugeordnet. Der Benutzer muss eine valide Login shell haben, dies ist bei "boinc" idR. nicht der Fall. Das Skript setzt daher dessen shell auf die bash.
 
Vor meinem geistigem Auge habe ich einen Beitrag von Dir, in dem Du beschrieben hast, in welcher Datei es Sinn macht, die Instanzen-Nummer/-Bezeichnung zu hinterlegen, damit der Eintrag auf der Projektseite in der Spalte "Model" erscheint

In der Datei client_state_prev.xml und client_state.xml finde ich den folgenden Eintrag. Habe aber keine Ahnung, woher das rangezogen wird:

<product_name>BOINC_31419</product_name>
 
Das wird über ${BOINCCMD} --set_host_info BOINC_${INSTANCE_PORT} gesetzt bei der Erstellung der Instanz.
 
So Freunde, ich war nicht ganz untätig und habe das Handling von device_name in cc_config.xml mit eingebaut. Bei neuen Instanzen wird dies automatisch gesetzt, bei bestehenden lässt es sich über -U boinc_$PORT hinzufügen.
Start & stop der default Instanz ist jetzt auch unterstützt. Die Instanzübersicht zeigt jetzt auch die Speicherauslastung mit an.

So sieht das ganze dann bei mir aus:
Code:
INSTANCE    DEVICE_NAME             PID    State   CPU  GPU  NET NCPU  CPU%    BUFFER PRJ  WUs READY  DL*  ACT  UPL  RTR boincmgr          purpose
boinc_29315 fb_29315    3918285  Running   ACT  ACT  ACT  100   4.0   5.0/1.0   2    0     0   0     0    0    0 frickelbude:29315 OPNG
boinc_31416 fb_31416    56842    Running   ACT SUSP  ACT  100  21.0   3.0/1.0  18   19     0   0    19    0    0 frickelbude:31416 default
boinc_31427 fb_31427    3918476  Running   ACT  ACT  ACT   -1  50.0   0.1/0.1   1    0     0   0     0    0    0 frickelbude:31427 GPUGrid
boinc_38726 fb_38726    3918980  Running   ACT  ACT  ACT  100   4.0   5.0/1.0   4    0     0   0     0    0    0 frickelbude:38726 OPNG
boinc_58223 fb_58223    3919199  Running   ACT  ACT  ACT  100   4.0   5.0/1.0   1    0     0   0     0    0    0 frickelbude:58223 OPNG
boinc_58224 fb_58224    3919909  Running   ACT  ACT  ACT  100   4.0  10.0/5.0   5    0     0   0     0    0    0 frickelbude:58224 Numberfields
boinc_58225 fb_58225    3920110  Running   ACT  ACT  ACT  100 100.0 10.0/10.0   1    0     0   0     0    0    0 frickelbude:58225 Einstein
boinc_58228 fb_58228    3920525  Running   ACT  ACT  ACT  100 100.0   0.0/0.0   1    0     0   0     0    0    0 frickelbude:58228 Einstein
boinc_58229 fb_58229    3921343  Running   ACT  ACT  ACT  100 100.0   0.0/0.0   1    0     0   0     0    0    0 frickelbude:58229 Einstein
boinc_58230 fb_58230    3921630  Running   ACT  ACT  ACT  100 100.0 10.0/10.0   1    0     0   0     0    0    0 frickelbude:58230 Einstein_nnw
boinc_58231 fb_58231     508942  Running   ACT  ACT SUSP  100 100.0   1.0/1.0   2   94    70   0     2   22    0 frickelbude:58231 PrimeGrid
boinc_58233 fb_58233    3922978  Running   ACT  ACT  ACT  100   4.0 10.0/10.0   2    0     0   0     0    0    0 frickelbude:58233 Universe
boinc_58234 fb_58234    3923173  Running   ACT  ACT  ACT  100  10.0  10.0/3.0   2    0     0   0     0    0    0 frickelbude:58234 Universe
boinc_58235 fb_58235    1889721  Running   ACT  ACT  ACT  100   1.0 10.0/10.0   3   48    48   0     0    0    0 frickelbude:58235 SrBase
boinc_58236 fb_58236    3924513  Running   ACT  ACT  ACT  100  10.0 10.0/10.0   4    0     0   0     0    0    0 frickelbude:58236 yoyo_ecm
boinc_58241 fb_58241    3925214  Running   ACT  ACT SUSP  100 100.0 10.0/10.0   1 1009     0   0     0 1009    0 frickelbude:58241 geheim_12.05.
boinc_58242 fb_58242    3926059  Running   ACT SUSP SUSP  100 100.0 10.0/10.0   1 1012    82   0     0  930    0 frickelbude:58242 geheim_12.05.
boinc_58243 fb_58243    3926361  Running   ACT SUSP SUSP  100   1.0 10.0/10.0   1 1049   903   0     0  146    0 frickelbude:58243 geheim_12.05.
boinc_58244 fb_58244    3927291  Running   ACT SUSP  ACT  100 100.0 10.0/10.0   1 1019  1019   0     0    0    0 frickelbude:58244 geheim_13.05.
boinc_58245 fb_58245    3928129  Running   ACT  ACT  ATP  100 100.0 10.0/10.0   1    0     0   0     0    0    0 frickelbude:58245 Einstein
boinc_58246 fb_58246    3928418  Running  SUSP  ATP  ATP  100 100.0 10.0/10.0   1    0     0   0     0    0    0 frickelbude:58246 Einstein
boinc_58247 fb_58247    3929379  Running   ACT  ACT  ACT  100 100.0 10.0/10.0   1    0     0   0     0    0    0 frickelbude:58247 Einstein
boinc_58248 fb_58248                Down
boinc_58251 fb_58251    2890013  Running   ACT  ACT SUSP  100 100.0 10.0/10.0   1  281     0   0     0  281    0 frickelbude:58251 Primegrid_10.05.
time: 00:25:12, load average: 18.80/18.33/19.04, memory: 18.8%                            4531  2122   0*   21 2388    0

Anlegen, starten, stoppen, neustarten, updaten und wieder entfernen, dauert alles nur wenige Sekunden.



boinc-instancer.sh -s lässt sich zB. auch über cron automatisch nach Systemstart aufrufen, dann fahren die Instanzen direkt mit hoch, kein manuelles Gefummel nötig.
 
@koschi

Langsam, wie Kompiliere ich open Source Code auf meinem System ?
cmake ?
 
Garnicht, das ist einfach nur ein klobiges Shell Skript, du brauchst dafür Linux (bzw. WSL, aber das hab ich nicht getestet).
 
Dein Script ?
Ja das habe ich soweit vernommen.

Wenn du nicht Kompilierst, wer dann ?

Linus T. ?
 
Shellskripte sind keine Programme, da muss keiner was kompilieren. Die bash führt das Skript aus. Die bash shell ist ein kompiliertes Programm.

Letztendlich arbeitet das Skript ja nur mit schon existierenden Programmen (zb. boinccmd, boinc, awk, sed, etc...) und verwurstet deren Output. Alles was das Skript macht kannst du auch so im Terminal machen.
 
Shellskripte sind keine Programme, da muss keiner was kompilieren. Die bash führt das Skript aus. Die bash shell ist ein kompiliertes Programm.

Letztendlich arbeitet das Skript ja nur mit schon existierenden Programmen (zb. boinccmd, boinc, awk, sed, etc...) und verwurstet deren Output. Alles was das Skript macht kannst du auch so im Terminal machen.
Alles gut, ich brauche kein Grund Kurs...

Jeder Quell Code ist Individuell.
So wie auch jedes System.

Spiele Konsolen sind da nicht anders. :)

Den Source Code auf dem Ziel System Kompilieren.
Das ist nicht schwer zu Verstehen.
 
Shellskripte sind keine Programme, da muss keiner was kompilieren. Die bash führt das Skript aus. Die bash shell ist ein kompiliertes Programm.

Letztendlich arbeitet das Skript ja nur mit schon existierenden Programmen (zb. boinccmd, boinc, awk, sed, etc...) und verwurstet deren Output. Alles was das Skript macht kannst du auch so im Terminal machen.
Oha, es gibt doch noch welche, die awk kennen ;-)
 
Ich hab wieder bissl gefrickelt, die wichtigsten Änderungen sind folgende:
  • boinc-instancer -w (für watch) ruft intern watch -n 10 boinc-instancer -l auf, damit kann man die Instanzen bequem überwachen ohne sich an watch und dessen Syntax erinnern zu müssen
  • in der Übersicht wird jetzt die Anzahl der allokierten CPUs angezeigt, die fand ich für Multithreaded Anwendungen hilfreich

Beispiel:
Code:
INSTANCE    DEVICE_NAME             PID    State   CPU  GPU  NET NCPU  CPU%  CPUalloc    BUFFER PRJ  WUs READY  DL  ACT  UPL  RTR boincmgr          purpose
boinc_29315 fb_29315              16187  Running   ACT  ACT  ACT  100   4.0         0   5.0/1.0   3    0     0   0    0    0    0 frickelbude:29315 OPNG
boinc_31416 fb_default             2026  Running   ACT  ACT  ACT  100  18.0     21.99   1.0/0.0  19  319   311   0    7    1    0 frickelbude:31416 default
boinc_31427 fb_31427              16408  Running   ACT  ACT  ACT   -1  50.0         0   0.1/0.1   1    0     0   0    0    0    0 frickelbude:31427 GPUGrid
boinc_38726 fb_38726              16551  Running   ACT  ACT  ACT  100   4.0         0   5.0/1.0   4    0     0   0    0    0    0 frickelbude:38726 OPNG
boinc_58223 fb_58223              16792  Running   ACT  ACT  ACT  100   4.0         0   5.0/1.0   1    0     0   0    0    0    0 frickelbude:58223 OPNG
boinc_58224 fb_58224              17025  Running   ACT SUSP  ACT  100  17.0         0  10.0/5.0   5    0     0   0    0    0    0 frickelbude:58224 Numberfields_CPU
boinc_58225 fb_58225              17249  Running   ACT  ACT  ACT  100 100.0         0 10.0/10.0   2    0     0   0    0    0    0 frickelbude:58225 Numberfields_GPU
boinc_58228 fb_58228              17555  Running   ACT  ACT  ACT  100 100.0         0   0.0/0.0   1    0     0   0    0    0    0 frickelbude:58228 Einstein
boinc_58229 fb_58229              17877  Running   ACT  ACT  ACT  100 100.0         0   0.0/0.0   1    0     0   0    0    0    0 frickelbude:58229 Einstein
boinc_58230 fb_58230              18189  Running   ACT  ACT  ACT  100 100.0         0 10.0/10.0   1    0     0   0    0    0    0 frickelbude:58230 Einstein
boinc_58231 fb_58231              18505  Running   ACT  ACT  ACT  100 100.0         0   1.0/1.0   2    0     0   0    0    0    0 frickelbude:58231 PrimeGrid
boinc_58233 fb_58233              18827  Running   ACT SUSP  ACT  100   4.0         0 10.0/10.0   3    0     0   0    0    0    0 frickelbude:58233 Primegrid
boinc_58234 fb_58234              19084  Running   ACT  ACT  ACT  100  10.0         0  10.0/3.0   2    0     0   0    0    0    0 frickelbude:58234 Universe
boinc_58235 fb_58235              19315  Running   ACT  ACT  ACT  100   6.0         0 10.0/10.0   3    0     0   0    0    0    0 frickelbude:58235 SrBase
boinc_58236 fb_58236              19536  Running   ACT  ACT  ACT  100  20.0         0  10.0/3.0   4    0     0   0    0    0    0 frickelbude:58236 yoyo_ecm
boinc_58241 fb_58241              19775  Running   ACT SUSP  ACT  100 100.0         0 10.0/10.0   1    0     0   0    0    0    0 frickelbude:58241 Einstein
time: 16:56:21, load average: 20.24/19.82/19.23, memory: 13.9%                  21.99                319   311   0    7    1    0
Doppelposting wurde automatisch zusammengeführt:

Es braucht BOINC 7.24 (zB. aus dem Ubuntu PPA) damit die Zählung der CPUalloc klappt. Mit älteren Versionen gibt es Fehler. ggf. muss ich die Version nochmal vorher abfragen und das entsprechend abfangen...
 
Zuletzt bearbeitet:
Soeben in einem Update die Abhängigkeit von 7.24 entfernt
 

Klappt jetzt auch (wieder?) mit PrimeGrid, musste den ganzen (1^st), [Main task]) und [Proof task] Extrakrempel rausfiltern, sonst kam die Auswertung durcheinander.

Bei ARM Prozessoren wird aber der Name / Typ nicht richtig angezeigt, da sie oft nur einen String wie "[Impl 0x41 Arch 8 Variant 0x3 Part 0xd0c Rev 1]" anzeigen, ich aber alle Family, Model, Stepping in [] ignoriere um die Ausgabe nicht zu überladen. Denn ist das eben so...
 
Zurück
Oben Unten