ebi72
Anmeldungsdatum: 4. April 2008
Beiträge: 113
Wohnort: bei Augsburg
|
Seit einigen Jahren lasse ich Boinc (genauer gesagt SETI) nebenbei rechnen. Bisher hat es bei mir - und auch bei eigentlich allen anderen Boincbenutzern - nie geklappt, dass auch die Grafikkarte mitrechnen kann. Durch meine Recherche u.a. bei Launchpad - bin ich auf folgende Fehlerbeschreibung aufmerksam geworden: https://bugs.launchpad.net/ubuntu/+source/boinc/+bug/587426 Dort wird am Ende der Seite ein Workaround beschrieben, mit dem man auch die Grafikkarte (sofern diese unterstützt wird) zum Rechnen benutzen kann. Denn beim Systemstart startet Boinc automatisch und erkennt niemals direkt die Grafikkarte (die ausgegebene Fehlermeldung lautet: "no GPU found"). Durch das Neustarten des Boincclients mittels "$sudo /etc/init.d/boinc-client restart" wird jedoch die Grafikkarte (bei mir eine ATI Radeon HD4830) erkennt. Somit kann ich jetzt erstmals unter Ubuntu auch die Grafikkarte zum Mitrechnen benutzen. Wäre es nicht möglich, wenn man den Boincclient nicht unmittelbar beim Systemstart mitstarten läßt, sondern erst mit einer kleinen Verzögerung von etwa einer Minute. Könnte sich daher nicht jemand erbarmen, der vielleicht auch noch Boinc benutzt, ein Startscript zu schreiben, damit Boinc mit einer Zeitverzögerung (vielleicht eine oder zwei Minuten) nach dem Systemstart startet und somit die Grafikkarte erkennt. Leider habe ich nicht genügend Wissen, um ein solches Script zu schreiben. Es sollte jedoch ganz genau erklärt werden, wohin ich das Script kopieren bzw. einfügen soll, da ich nicht wirklich viel (eigentlich gar nichts) von Scripten weiss. Eventuell könnte das Script ja auch auf der Boincseite im Wiki http://wiki.ubuntuusers.de/BOINC veröffentlicht werden. Herzlichen Dank
|
theinlein
Anmeldungsdatum: 29. Dezember 2007
Beiträge: 1279
|
Hi, ich nix boinc, aber... wenn es sich tatsächlich nur darum handelt, dass da etwas zu früh gestartet wird, sollte es lösbar sein. Es wäre hilfreich, wenn du mal dein /etc/init.d/boinc.... hier ins Forum stellst.
|
ebi72
(Themenstarter)
Anmeldungsdatum: 4. April 2008
Beiträge: 113
Wohnort: bei Augsburg
|
Die Datei /etc/init.d/boinc-client lautet: #! /bin/sh
### BEGIN INIT INFO
# Provides: boinc
# Required-Start: $all
# Required-Stop: $local_fs $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: BOINC core client
# Description: core client for the BOINC distributed computing
# infrastructure
### END INIT INFO
# Debian init.d script for the BOINC core client
# Copyright © 2005, 2006, 2007, 2008
# Debian BOINC Maintainers <pkg-boinc-devel@lists.alioth.debian.org>
#
# This file is licensed under the terms of the GNU General Public License,
# Version 2 or any later version published by the Free Software Foundation.
set -e
. /lib/lsb/init-functions
# Default values for the variables that are also set in the defaults file.
ENABLED=0
SCHEDULE=0
BOINC_USER=boinc
BOINC_DIR=/var/lib/boinc-client
BOINC_CLIENT=/usr/bin/boinc
BOINC_OOM_ADJ=15
# Source defaults file. Edit that file to configure this script.
if [ -e /etc/default/boinc-client ]; then
. /etc/default/boinc-client
fi
# Quit quietly, if $ENABLED is 0.
test "$ENABLED" != "0" || exit 0
if [ "$BOINC_CLIENT" = "/usr/bin/boinc" ]; then
test -x "$BOINC_CLIENT" || exit 0
elif [ ! -x "$BOINC_CLIENT" ]; then
log_failure_msg "BOINC client '$BOINC_CLIENT' does not exist or is not" \
"executable."
exit 5
fi
if [ ! -d "$BOINC_DIR" ]; then
log_failure_msg "BOINC data directory '$BOINC_DIR' does not exist."
exit 6
fi
if [ -z "$BOINC_USER" ]; then
log_failure_msg "BOINC_USER variable is empty. Set it to a user to run" \
"the BOINC core client."
exit 6
fi
if [ ! -z "$BOINC_OPTS" ]; then
(echo $BOINC_OPTS | grep -- '--daemon' 1>/dev/null) &&
log_warning_msg "\`--daemon' option detected \
on /etc/default/boinc-client, this \
can cause problems on boinc. The option \
will be suppressed"
BOINC_OPTS=`echo "$BOINC_OPTS" | sed 's/--daemon//g'`
fi
PIDFILE=/var/run/boinc.pid
DESC="BOINC core client"
NAME=`basename $BOINC_CLIENT`
BOINC_OPTS="--check_all_logins --redirectio --dir $BOINC_DIR $BOINC_OPTS"
is_running()
{
retval=1
if [ -r $PIDFILE ]; then
pid=`cat $PIDFILE`
if [ -e /proc/$pid ]; then
procname=`/bin/ps h -p $pid`
[ -n "$procname" ] && retval=0
fi
fi
return $retval
}
start()
{
log_begin_msg "Starting $DESC: $NAME"
if is_running; then
log_progress_msg "already running"
else
if [ -x /usr/bin/xhost ]; then
# grant the boinc client to perform GPU computing
xhost local:boinc || echo -n "xhost error ignored, GPU computing may not be possible"
fi
start-stop-daemon --start --quiet --background --pidfile $PIDFILE \
--make-pidfile --user $BOINC_USER --chuid $BOINC_USER \
--chdir $BOINC_DIR --exec $BOINC_CLIENT -- $BOINC_OPTS
fi
log_end_msg 0
if [ "$SCHEDULE" = "1" ]; then
schedule
fi
}
stop()
{
log_begin_msg "Stopping $DESC: $NAME"
if ! is_running; then
log_progress_msg "not running"
else
start-stop-daemon --stop --quiet --oknodo --pidfile $PIDFILE \
--user $BOINC_USER --exec $BOINC_CLIENT
# Wait until really stopped - $pid is set from is_running
# (waiting for max 60s (600 cycles at 100ms))
i=0
while kill -0 "$pid" 2> /dev/null; do
if [ $i = '600' ]; then
break;
else
if [ $i = '0' ]; then
echo -n " ... waiting "
elif [ $(($i%10)) = 0 ]; then
echo -n "."
fi
i=$(($i+1))
sleep .1
fi
done
fi
rm -f "$BOINC_DIR/lockfile"
rm -f $PIDFILE
log_end_msg 0
}
chrt_many()
{
POLICY="$1"
PRIO="$2"
NICE="$3"
shift 3
for i in "$@"; do
chrt -p $POLICY $PRIO $i || return
# increasing compatibility with older versions of renice
# in reaction to bug report #600134
renice $NICE -p $i > /dev/null || renice -n $NICE -p $i
done
}
schedule()
{
log_begin_msg "Setting up scheduling for $DESC and children:"
if ! is_running; then
log_progress_msg "$NAME not running"
else
if [ ! -x "`which ionice 2>/dev/null`" ]; then
log_progress_msg "ionice not found,"
else
if ionice -c 3 -p $pid 2>/dev/null; then
log_progress_msg "idle,"
else
log_progress_msg "ionice failed,"
fi
fi
children=`ps --ppid $pid -o pid= | tr '\n' ' '`
if [ ! -x "`which chrt 2>/dev/null`" ]; then
log_progress_msg "chrt not found"
else
(chrt_many --idle 0 19 $pid $children >/dev/null \
&& log_progress_msg "idleprio") || \
(chrt_many --batch 0 19 $pid $children >/dev/null \
&& log_progress_msg "batch") || \
(chrt_many --other 0 19 $pid $children >/dev/null \
&& log_progress_msg "normal") || \
log_progress_msg "chrt failed"
fi
for BPID in ${pid} ${children}; do
echo ${BOINC_OOM_AD} > /proc/${BPID}/oom_adj 2>/dev/null || true
done
fi
log_end_msg 0
}
status()
{
STATUS="Status of $DESC:"
if is_running; then
log_success_msg "$STATUS running"
children=`ps --ppid $pid -o pid= | tr '\n' ' '`
if [ -x "`which chrt 2>/dev/null`" ]; then
log_success_msg "Scheduling of $DESC: $pid"
chrt -p $pid
if [ -n "$children" ]; then
log_success_msg "Scheduling of $DESC's children: $children"
for i in $children; do
chrt -p $i
done
fi
fi
log_success_msg "OOM killer status for $DESC:"
for BPID in ${pid} ${children}; do echo PID ${BPID}: adj `cat /proc/${BPID}/oom_adj`, score `cat /proc/${BPID}/oom_score`; done
# Display $BOINC_USER's cpu_share:
uid=`id -u $BOINC_USER`
cpu_share_file="/sys/kernel/uids/$uid/cpu_share"
if [ -f "$cpu_share_file" ]; then
log_success_msg "cpu_share: `cat "$cpu_share_file"`"
fi
else
log_success_msg "$STATUS stopped"
fi
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart|force-reload)
stop
sleep 1
start
;;
status)
status
;;
schedule)
schedule
;;
*)
log_success_msg "Usage: $0 {start|stop|restart|force-reload|status|schedule}" >&2
exit 1
;;
esac
exit 0 Hoffe, dass dies genügt. Vielleicht schafft hier jemand, dass das Problem mit der nichterkannten Grafikkarte gelöst wird, denn auf dem bugreport von Launchpad https://bugs.launchpad.net/ubuntu/+source/boinc/+bug/587426 beissen die sich anscheinend die Zähne aus.
|
theinlein
Anmeldungsdatum: 29. Dezember 2007
Beiträge: 1279
|
Hi, sieht erst mal gut aus, denn im 'Required-Start' steht '$all'. Das Ding scheint aber vom X-Server abhängig zu sein und das ist beim Booten natürlich nix gut. du kannst z.B. hinter der Zeile 'log_begin_msg .... ' ein 'sleep 60' einbauen (das wäre eine Minute) start()
{
log_begin_msg "Starting $DESC: $NAME"
if is_running; then
log_progress_msg "already running"
else
if [ -x /usr/bin/xhost ]; then
# grant the boinc client to perform GPU computing
xhost local:boinc || echo -n "xhost error ignored, GPU computing may not be possible"
fi
start-stop-daemon --start --quiet --background --pidfile $PIDFILE \
--make-pidfile --user $BOINC_USER --chuid $BOINC_USER \
--chdir $BOINC_DIR --exec $BOINC_CLIENT -- $BOINC_OPTS
fi
|
ebi72
(Themenstarter)
Anmeldungsdatum: 4. April 2008
Beiträge: 113
Wohnort: bei Augsburg
|
Habs jetzt versucht mit einem sleep 60, aber leider findet er die GPU immer noch nicht direkt selbst beim Systemstart. Da ich von Programmieren eigentlich überhaupt keine Ahnung habe, habe ich das sleep 60 so reinkopiert:
log_begin_msg "Starting $DESC: $NAME" 'sleep 60'
if is_running; then Okay? Oder hätte ich die nächste Zeile dafür nehmen sollen? Falls ich es falsch gemacht haben sollte, bitte genau sagen, damit ich es auch schön in die Datei kopieren kann. Danke für den Tip
|
theinlein
Anmeldungsdatum: 29. Dezember 2007
Beiträge: 1279
|
neu Zeile bitte und ohne die Hochkomma ...
log_begin_msg "Starting $DESC: $NAME"
sleep 60
...
|
ebi72
(Themenstarter)
Anmeldungsdatum: 4. April 2008
Beiträge: 113
Wohnort: bei Augsburg
|
Habs jetzt so probiert, wie Du geschrieben hast. Boinc ist - wie ich aus der Systemüberwachung gesehen habe - allerdings wieder direkt mit dem Systemstart gestartet, aber zu Rechnen hat er erst mit einer Minute Verzögerung begonnen. Anscheinend ist die Fehlerbehebung doch etwas schwieriger, da auch der Bugreport auf Launchpad schon recht lange ist. Jetzt hab ich es wieder zurückgestellt (ohne sleep 60) und werde also weiterhin manuell den Boincclient nach jeden Boot neu starten. Aber trotzdem danke für die Hilfe. Ich lass diesen Topic noch mit Absicht auf ungelöst, denn vielleicht fällt einem ja noch eine absolute Superidee ein. Danke nochmals für die Tip mit sleep 60. Christian
|
clocker
Anmeldungsdatum: 25. August 2006
Beiträge: 371
Wohnort: ::1
|
Hi Hab das Problem auch auf Xubuntu 12.10 mit Ati Karte. Datei aufm Desktop anlegen: "boincreset.sh", ausführbar machen (Eigenschaften, Berechtigungen, als Programm ausführen - Hacken setzen) Das reinschreiben: | #!/bin/bash
gksu /etc/init.d/boinc-client restart
|
oder das: | #!/bin/bash
gksu /etc/init.d/boinc-client stop
gksu /etc/init.d/boinc-client start
|
speichern. Und läuft... 😬
|
ebi72
(Themenstarter)
Anmeldungsdatum: 4. April 2008
Beiträge: 113
Wohnort: bei Augsburg
|
ich behelf mich nach wie vor mit dem Terminal und "sudo etc/init.d/boinc-client restart". Klappt auch. Werde aber deinen Vorschlag mal austesten. Danke
|
clocker
Anmeldungsdatum: 25. August 2006
Beiträge: 371
Wohnort: ::1
|
Machst du bei Seti mit? Kennste das Ubuntuusers Team? Gruss
|
ebi72
(Themenstarter)
Anmeldungsdatum: 4. April 2008
Beiträge: 113
Wohnort: bei Augsburg
|
Ich mach u.a. bei Seti mit, allerdings in einem kleineren privaten Team. Das ubuntuusers-Team ist mir bekannt. Unser Team ist das Team: 0SSS 2000X http://setiathome.berkeley.edu/team_display.php?teamid=128828
Dort bin ich Christian. Wenn Du willst kannst Du ja bei uns Mitglied werden.
|
clocker
Anmeldungsdatum: 25. August 2006
Beiträge: 371
Wohnort: ::1
|
Hi nettes angebot, aber bin grad auf Platz 3 ☺. Aber wie ich sehe kennst du ja Tux von ubuntuusers. (Freund) http://setiathome.berkeley.edu/team_members.php?teamid=132665&offset=0&sort_by=expavg_credit
|
juerschens
Anmeldungsdatum: 8. November 2009
Beiträge: 6
Wohnort: Im schönen Wald
|
Ich hätte aber einen Lösungsansatz für euch. Zuerst ein Skript "boinc-client.sh" anlegen. | #!/bin/bash
/etc/init.d/boinc-client restart
|
Dann verschieben und ausführbar machen.
sudo mv ~/boinc-client.sh /usr/local/sbin/boinc-client.sh
sudo chown root:root /usr/local/sbin/boinc-client.sh
sudo chmod u+x /usr/local/sbin/boinc-client.sh Nun muss in /etc/rc.local direkt vor exit 0 folgendes eingefügt werden: /usr/local/sbin/boinc-client.sh
ggfs. noch ein "/bin/sleep 60 &&" einfügen. Eine weitere Möglichkeit wäre die Links der Startskripte zu entfernen. Dafür müssen alle Links die in den Ordner /etc/rc*.d (*= 1-6 & S) enthalten sind umbenannt werden. Hierzu alle Dateien mit "S" am Anfang zu "K" ändern. Anschließend muss im Skript aus dem "restart" ein "start" gemacht werden. Davon würde ich aber abraten, da es sein kann, dass der Kill den Start unterbricht.
|