Live chat

sabayonino non ci accedo più da settimnane (29.03.26, 18:12)
sabayonino ci mancava pure la verifica di sicurezza di cloudflare su BS ... (29.03.26, 18:11)
sabayonino @zio : Aldilà del fattore estetico i cambiamenti sono per il 90% sotto al cofano ...per cui non si notano (29.03.26, 18:02)
mindfeed32 @zioriga ok grazie, ora faccio una wu e vedo se una volta finita risulta dal sito (29.03.26, 14:37)
zioriga @mindfeed32 io ieri ho fatto l'upload di un po di wu che evano elaborato. adesso non si riesce ad accedere, è un di settimane che che è in up and down (29.03.26, 14:26)
zioriga grazie saba, avevo perso il link al nuovo sito (29.03.26, 14:23)
mindfeed32 qualcuno sa dirmi come sta andando WCG ora? (29.03.26, 14:07)
sabayonino e per i pochi curiosi ... c'è sempre il buon Bobo che aveva messo a disposizione la preview : https://www.boincitaly.org/forum/boincitaly/115376-campagna-donazioni-2024-2025.html#139522 (29.03.26, 11:06)
sabayonino Stiamo valutando la migrazione a breve termine. ma ci sono delle difficoltà che ci stanno rallentando . Vorremmo mettere UP il sito pienamente funzionale e senza criticità per quanto possibile.Restano da implementare alcune componenti. Comunque quando questo avverrà , e spero nel breve periodo, sarà comunicato. Al massimo troverete il sito in manutenzione con il triangolo a bordo strada e Paolo con la pettorina catarifrangende che chiede aiuto a ChatGPT (29.03.26, 11:02)
zioriga credo che tutti debbano essere informati sullo stato di avanzamento sul nuovo sito (29.03.26, 10:47)
sabayonino https://www.friendsofnasa.org/2026/03/journey-to-young-planetary-system.html?m=1 (29.03.26, 00:38)
sabayonino Hi Entity . I send you a MP (27.03.26, 19:42)
entity Out of curiosity, when are we planning to move to the new portal? (27.03.26, 17:24)
boboviz aggiornate le pubblicazioni, dopo molto tempo (25.03.26, 22:10)
boboviz Io non riesco nemmeno a fare upload di quella wu (23.03.26, 09:42)
mindfeed32 e qui https://www.cs.toronto.edu/~juris/jlab/wcg.html danno indicazioni molto vaghe sullo stato del progetto. Addirittura dicevano che lo stop durava tra 10 e 11 marzo! (22.03.26, 21:19)
mindfeed32 uguale io per WCG, il problema ora è che quelle che mi ha fatto negli 2 giorni non risultano nel mio account, controllando nell'area "results", come se non fossero mai esistite (22.03.26, 21:15)
boboviz Ho beccato una wus di WCG dopo settimane!! (22.03.26, 17:27)
sabayonino ne ho prese tre (12.03.26, 21:36)
zioriga Amministratori !!!! c'è dello spam "erotico" sulla vecchissima SETI WOW discussione (12.03.26, 14:30)
Per usare la chat devi effettuare il login.
Benvenuto, Ospite
Nome utente: Password: Ricordami
  • Pagina:
  • 1

ARGOMENTO:

[bash] Forzare GPUGRID a mandare nuovo lavoro 06/11/2018 16:13 #129474

  • Nubman
  • Avatar di Nubman Autore della discussione
  • Offline
  • RAM 512 KB
  • RAM 512 KB
  • Messaggi: 2304
  • Ringraziamenti ricevuti 279
Già che ci siamo, sulla scia del thread sulla richiesta automatizzata di nuovo lavoro vi fornisco questa "perla".

Adattatelo a vostro uso e consumo. Se avete domande, io sono qui.
Levate quella cacata di xml_grep in favore di sed o awk, ad esempio. :asd:

Codice:
#!/bin/bash

# Usage: /home/luis/script/boinc/forceGPUGRIDSendingWork.sh [interval]


boinc_path="/home/luis/Applicazioni/boinc"
boinccmd="./boinccmd"
gpugrid_url="http://www.gpugrid.net/"

cd $boinc_path
if [[ -z `echo $($boinccmd --get_simple_gui_info)` ]]
then
	echo "BOINC is not running. Exit..."
	exit
fi

start_time=$(date +%s)
iter=0
interval=${1:-3600}

while true; do
	# Time vars
	time=$(date +%H':'%M':'%S)
	now_time=$(date +%s)
	script_time=$(echo "$now_time - $start_time" | bc)
	script_time_str=$(printf '%03dd:%02dh:%02dm:%02ds\n' $(($script_time/86400)) $(($script_time%86400/3600)) $(($script_time%3600/60)) $(($script_time%60)))
	iter=$((iter+1))
	reset
	echo -e "Time: ${time} | Execution time: ${script_time_str} | Iteration N.${iter}\n" # "| Interval: ${interval}s\n"
	###

	# BOINC vars
	project_url=(`echo $($boinccmd --get_tasks | grep 'project URL' | awk '{print $3}') | cut -d " " -f 1-`)
	fraction_done=(`echo $($boinccmd --get_tasks | grep 'fraction done' | awk '{print $3}') | cut -d " " -f 1-`)
	#current_cpu_time=(`echo $($boinccmd --get_tasks | grep 'current CPU time' | awk '{print $4}') | cut -d " " -f 1-`)
	state=(`echo $($boinccmd --get_tasks | grep -v 'active_task_state' | grep -v 'scheduler state' | grep 'state' | awk '{print $2}') | cut -d " " -f 1-`)
	###

	# Loop vars
	ntasks=${#project_url[@]}
	task_not_found=1
	###

	# Loop
	for (( i = 0; i < ntasks; i++ )) do
		if [ ${project_url[$i]} == $gpugrid_url ]; then
			
			if [ ${state[$i]} == "uploading" ]; then # Caso: task in upload

				interval=60
				echo -e "GPUGRID: \e[1;33m1 uploading task found\e[0m. Setting interval=${interval}s. Continuing loop."
				continue

			else

				#total_cpu_time=$(echo "${current_cpu_time[$i]} / ${fraction_done[$i]}" | bc)
				#remaining_cpu_time=$(echo "$total_cpu_time - ${current_cpu_time[$i]}" | bc)

				active_task_url=($(xml_grep '//active_task/project_master_url' "$boinc_path/client_state.xml" --text_only))
				active_task_slot=($(xml_grep '//active_task/slot' "$boinc_path/client_state.xml" --text_only))
				for (( j = 0; j < ${#active_task_url[@]}; j++ )) do
					if [ ${active_task_url[$j]} = $gpugrid_url ]; then
						gpugrid_slot=${active_task_slot[$j]}
						break
					fi
				done

				current_gpu_time=$(xml_grep 'checkpoint_elapsed_time' "$boinc_path/slots/$gpugrid_slot/boinc_task_state.xml" --text_only)
				total_gpu_time=$(echo "scale=6; $current_gpu_time / ${fraction_done[$i]}" | bc)
				remaining_gpu_time=$(echo "$total_gpu_time - $current_gpu_time" | bc)

				if [ $(echo "${fraction_done[$i]} >= 0" | bc) -eq 1 -a $(echo "${fraction_done[$i]} < 0.1" | bc) -eq 1 ]; then # Casi: non iniziato o errore di calcolo precoce; miglior stima tempo totale
					interval=1800
				elif [ $(echo "${fraction_done[$i]} >= 0.1" | bc) -eq 1 -a $(echo "$remaining_gpu_time > 600" | bc) -eq 1 ]; then
					interval=$(echo "$remaining_gpu_time / 2" | bc)
				else
					interval=300
				fi

	 			task_not_found=0
				echo -e "GPUGRID: \e[1;32m1 running task found\e[0m. Setting interval=${interval}s. Breaking loop."
				# DEBUG
				#	echo "fd=${fraction_done[$i]}; cct=$current_gpu_time; tct=$total_gpu_time; rct=$remaining_gpu_time"
				###
				break
			fi
		fi
	done
	###

	# Work request
	if [ "$task_not_found" == "1" ]; then
		interval=60
		# /home/luis/script/boinc/refreshBoincProject.sh $gpugrid_url $interval # Looping work request
		$boinccmd --project $gpugrid_url update
		echo -e "GPUGRID: \e[1;31mNo running tasks found\e[0m. Setting interval=${interval}s. Requesting new work."
	fi
	###

	sleep $interval
done

Esempio di output:


Il codice gira ciclicamente, per interromperlo basta il solito Ctrl+C.
COVID-19

Si prega Accedi o Crea un account a partecipare alla conversazione.

[bash] Forzare GPUGRID a mandare nuovo lavoro 06/11/2018 20:26 #129478

  • sabayonino
  • Avatar di sabayonino
  • Offline
  • Administrator
  • Administrator
  • Gentoo||KDE
  • Messaggi: 5830
  • Ringraziamenti ricevuti 355
Io ottengo URL doppi
~ $ project_url=($(echo $(boinccmd --get_tasks | grep 'project URL' | awk '{print $3}' )))
~ $ echo ${project_url[@]}
http://setiathome.berkeley.edu/ http://setiathome.berkeley.edu/ http://setiathome.berkeley.edu/ http://setiathome.berkeley.edu/ http://setiathome.berkeley.edu/ http://setiathome.berkeley.edu/ http://universeathome.pl/universe/ http://universeathome.pl/universe/ http://universeathome.pl/universe/ http://universeathome.pl/universe/ http://universeathome.pl/universe/ http://universeathome.pl/universe/ http://universeathome.pl/universe/ http://universeathome.pl/universe/ http://wuprop.boinc-af.org/ http://setiathome.berkeley.edu/ http://setiathome.berkeley.edu/ http://setiathome.berkeley.edu/ http://setiathome.berkeley.edu/ http://universeathome.pl/universe/ http://setiathome.berkeley.edu/


Aggiungici un "uniq -u" per scrupolo
project_url=($(echo $(boinccmd --get_tasks | grep 'project URL' | uniq -u | awk '{print $3}')))

il "cut" puoi ometterlo dato che la variabile è all'interno di una matrice e viene salvata solo la stringa (in pratica non tiene conto dello spazio o del "carridge" se c'è)
~ $ echo ${project_url[@]}
http://wuprop.boinc-af.org/ http://universeathome.pl/universe/ http://setiathome.berkeley.edu/
$ echo "#### ${project_url[1]} ####"
#### http://universeathome.pl/universe/ ####
~ $ echo ${project_url[0]}
http://wuprop.boinc-af.org/
~ $ echo ${project_url[1]}
http://universeathome.pl/universe/
~ $ echo ${project_url[2]}
http://setiathome.berkeley.edu/

I cicli "for" in bash possono essere scritti anche con la sintassi del C , ma puoi utilizzare quella sua... utilizzando l'intera ampiezza della matrice
for i in "${URL[@]}"  ; do 
<codice>
done

E i doppi apici nelle variabili sono sempre ben accetti in caso nella variabile ci siano parole divise dallo spazio
A="Oh My Boinc ! "
echo "${A}"

anche nel paragone delle stringhe...

echo $($boinccmd --get_simple_gui_info)`
potrebbe restituire un "Can't connect to localhost" se cerca un servizio ... anche se poi riporta un eventuale status "1"

Devia lo standard error ...
echo $($boinccmd --get_simple_gui_info 2>/dev/null)


Nell' elenco progetti , se devi utilizzare uno o "N" progetti specifici puoi utilizzare "case" "in un ciclo degli URL trovati
Quindi puoi adattarlo per uno o più progetti
for URL in ${project_url[@]}" ; do
case "${URL}" in 
"${gpugrid_url}" ) <codice per questo url>
;;
"${opzionale_altro_URL}") <codice>
;;
[...]
;;
*) < altro codice per tutti gli altri URL non interessati>
;;
esac
done

se i codici sono uguali per tutti si può creare una funzione generale da richiamare ,
funzione1 () {
<codice funzione1 >
}

se "case" richiede prj1+proj2 con funzione1 e prj3 con funzione2
[...]
case "${URL}" in
"${URL1}"|"${URL2}") funzione1
;;
"${URL3}")funzione2
;;
*) <tutto il resto altro codice o funzione >
;;
esac
[...]
Ringraziano per il messaggio: Nubman

Si prega Accedi o Crea un account a partecipare alla conversazione.

Ultima Modifica: da sabayonino.

[bash] Forzare GPUGRID a mandare nuovo lavoro 08/11/2018 10:18 #129486

  • Nubman
  • Avatar di Nubman Autore della discussione
  • Offline
  • RAM 512 KB
  • RAM 512 KB
  • Messaggi: 2304
  • Ringraziamenti ricevuti 279
Grazie saba, quando posso ci do un occhio.

Segnalo un baco, indicatomi da StefanR5R/xii5ku di AnandTech, che non ho ancora corretto nello script, ma che per fortuna non crea problemi nell'esecuzione vista la rarità della sua occorrenza.
Praticamente all'inizio dello script richiamo "boinccmd --get_tasks" 3 volte. C'è la remota possibilità che la lista dei task cambi in quegli instanti. In tal caso gli elementi degli array project_url, fraction_done e state non corrisponderebbero. La soluzione ovviamente è di eseguirlo una sola volta e poi creare gli array.
COVID-19

Si prega Accedi o Crea un account a partecipare alla conversazione.

Ultima Modifica: da Nubman.

[bash] Forzare GPUGRID a mandare nuovo lavoro 08/11/2018 12:15 #129487

  • sabayonino
  • Avatar di sabayonino
  • Offline
  • Administrator
  • Administrator
  • Gentoo||KDE
  • Messaggi: 5830
  • Ringraziamenti ricevuti 355
Senza che mi metta ad interpretare lo script , puoi farmi un riassunto di cosa fa , magari provo a mettere del mio :asd: vediam che ne esce...

Si prega Accedi o Crea un account a partecipare alla conversazione.

[bash] Forzare GPUGRID a mandare nuovo lavoro 08/11/2018 12:41 #129488

  • Nubman
  • Avatar di Nubman Autore della discussione
  • Offline
  • RAM 512 KB
  • RAM 512 KB
  • Messaggi: 2304
  • Ringraziamenti ricevuti 279
Certamente.

Problema: per GPU come la 750Ti o più lente è fondamentale mantenere la riserva minima/massima di lavoro a valori pressoché nulli. Questo comporta che quando consegni una wu, non è detto che ne ricevi subito un'altra. BOINC in automatico ritenta la richiesta di nuovo lavoro con intervalli di tempo, a mio avviso, troppo larghi. Si finisce per ritrovarsi con la GPU in idle per mezza giornata o più. Come dicevo, è meglio non avere una riserva elevata perché poi perdi facilmente i bonus delle 24h/48h. L'obiettivo che si pone lo script è di prendere anche quelli delle 24h.

Soluzione: uno script che martella il server di richieste in maniera intelligente, cioè quando non ha più task. La ragionevolezza di questa insistenza è soggettiva. :asd:

Il codice fa questo:
-se trova un task di GPUGRID in stato "uploading", setta l'intervallo a 60s
-altrimenti:
*se trova task di GPUGRID già cominciato con percentuale di completamento tra 0 e 10%, setta l'intervallo a 1800s (per beccare task che sono andati in errore di calcolo nel giro di qualche ora sostanzialmente)
*se la percentuale di completamento è maggiore o uguale a 10% oppure il tempo di elaborazione rimanente stimato è maggiore di 10 minuti, setta l'intervallo a un valore pari alla metà del tempo rimanente (per i task in corso da 2-3 ore sino a poche decine di minuti dal completamento);
*altrimenti setta l'intervallo a 300s (per i task prossimi al completamento).

Poi c'è anche una variabile che indica se occorre chiedere al server nuovo lavoro oppure no. Se il client è senza lavoro, chiede nuovo lavoro ogni minuto.

P.S.1 codice è fatto per un client dedicato a GPUGRID, per quanto riguarda la GPU e ci si aspetta che ci sia un solo task di GPUGRID alla volta (riserva di lavoro nulla o quasi).
P.S.2 i tempi degli intervalli sono tarati per la mia 750Ti.
COVID-19

Si prega Accedi o Crea un account a partecipare alla conversazione.

[bash] Forzare GPUGRID a mandare nuovo lavoro 08/11/2018 19:31 #129496

  • sabayonino
  • Avatar di sabayonino
  • Offline
  • Administrator
  • Administrator
  • Gentoo||KDE
  • Messaggi: 5830
  • Ringraziamenti ricevuti 355
facevo prima a leggere il codice :asd:

ok. provo a buttare giù qualcosa appena posso

Ho pure io delle 750ti (2 x 3 mobo)

Si prega Accedi o Crea un account a partecipare alla conversazione.

Ultima Modifica: da sabayonino.

[bash] Forzare GPUGRID a mandare nuovo lavoro 08/11/2018 19:37 #129497

  • sabayonino
  • Avatar di sabayonino
  • Offline
  • Administrator
  • Administrator
  • Gentoo||KDE
  • Messaggi: 5830
  • Ringraziamenti ricevuti 355

Grazie saba, quando posso ci do un occhio.

Segnalo un baco, indicatomi da StefanR5R/xii5ku di AnandTech, che non ho ancora corretto nello script, ma che per fortuna non crea problemi nell'esecuzione vista la rarità della sua occorrenza.
Praticamente all'inizio dello script richiamo "boinccmd --get_tasks" 3 volte. C'è la remota possibilità che la lista dei task cambi in quegli instanti. In tal caso gli elementi degli array project_url, fraction_done e state non corrisponderebbero. La soluzione ovviamente è di eseguirlo una sola volta e poi creare gli array.



Riguardo a questo :

semplicemente puoi provare a salvare tutto l'output in una variabile (richiamando --get_tasks una sola volta) nuda e cruda (non in una matrice) e poi filtrare la variabile come indicato provando a fare dei controlli per vedere se c'è qualche carattere/spazio o altro che possa creare intralcio)

I comandi sono molto vicini , ma nella remota possibilità che uno (o tutti) di questi comandi ci impieghi molo tempo allora si , l'analisi può essere sfalsata.

Si prega Accedi o Crea un account a partecipare alla conversazione.

Ultima Modifica: da sabayonino.
  • Pagina:
  • 1
Tempo creazione pagina: 0.205 secondi
Powered by Forum Kunena