Boinc Scheduler

Aus Planet 3DNow! Distributed Computing Wiki
Zur Navigation springen Zur Suche springen

Der Boinc Scheduler ist zuständig zum Abarbeiten der Projekte gemäß der eingestellten Ressourcen Anteile.

Ressourcenanteil

Diese können von 1% bis 1000% eingestellt werden, stellen jedoch keine echten % Anteile dar. Die Summe der eingestellten Ressourcen aller Projekte entspricht dann dem Nenner, die Ressource des Projekts dem Zähler. Beispiel:

Projekt A ist auf 100% gesetzt; Projekt B ist auf 50% gesetzt; Projekt C ist auf 250% gesetzt -> A+B+C = 400

Projekt A bekommt 100/400 = 25%; Projekt B bekommt 50/400 = 12,5%; Projekt C bekommt 250/400 = 62,5%

Ohne die zusätzlichen Faktoren bedeutet diese, das Projekt C 2,5x mehr gerechnet wird als Projekt A, welches jedoch 2x mehr als Projekt B gerechnet wird.

Boinc Zeit Statistik

Boinc speichert in der client_state.xml unter dem abschnitt <time_stats> den Anteil in denen Boinc gestartet und aktiv ist.

<time_stats>
 <on_frac>0.XXX</on_frac>
 <active_frac>0.XXX</active_frac>
</time_stats>

Der Wert <on_frac> ist der Zeitanteil seit dem Boinc installiert wurde im Verhältnis zur Laufzeit des Boinc Clients, unabhängig davon ob er Berechnungen durchführt oder angehalten ist, sprich pausiert.

Beispiel: Boinc wurde vor genau 14 Tagen (14x24h) installiert, in dieser Zeit wurde der PC mit Boinc als Service Installation (Boinc startet automatisch mit dem OS) immer 8h lang eingeschaltet (10x8h). Dies ergibt 80 / 336 = <on_frac>0.238095238</on_frac> = ~24% Laufzeit des Boinc Clients

Der Wert <active_frac> ist der Zeitanteil seit dem Boinc installiert wurde im Verhältnis zur aktiven Laufzeit des Boinc Clients, also die Zeit in der WUs abgearbeitet/berechnet werden.

Beispiel: Boinc wurde vor genau 14 Tagen (14x24h) installiert, in dieser Zeit wurde der PC mit Boinc als Service Installation (Boinc startet automatisch mit dem OS) immer 8h lang eingeschaltet und davon durfte 4h am Tag der Boinc Client seine Berechnungen durch führen. Dies ergibt 40 / 336 = <active_frac>0.119047619</active_frac> = ~12% aktive Laufzeit des Boinc Clients, in der Berechnungen durchgeführt wurden.

STD und LTD Wert

Boinc speichert in der client_state.xml unter dem abschnitt <project> den jeweiligen Anteil in denen Boinc die Projekte rechnen lässt / aktiv ist.

<project>
 <short_term_debt>XXX</short_term_debt>
 <long_term_debt>XXX</long_term_debt>
</project>

Der Wert <short_term_debt>, übersetzbar mit "Kurzzeit Schuld" liegt im Bereich von 0-86400 (Sekunden/Tag). Dieser Werte soll die Abarbeitung der WUs im Zeitraum <24h gewährleisten. Beim nächsten Umschalten gemäß der Ressourcenaufteilung wird das Projekt mit dem höchsten <short_term_debt> Wert bevorzugt. Es zeigt sozusagen die Schuld des Clients bei den jeweiligen Projekt/24h an. Ist der Wert 0 hat Boinc seine Arbeit, gemäß der Ressorcen einstellung geleistet.

Der Wert <long_term_debt>, übersetzbar mit "Langzeit Schuld" liegt im Bereich von +-1000000 Sekunden. Dieser ist einer der Faktoren zur WU Anforderung durch Boinc bei dem entsprechenden Projekt. Bei einem negativen Wert wird keine Arbeit angefordert. Boinc hat "zuviel" an diesen Projekt gemäß Ressourcen einstellung gerechnet. Bei einem positiven Wert, wird je nach Höhe und Ressourcenanteil Arbeit angefordert unter Berücksichtigung des <active_frac> Wertes. Stehen die Werte alle im negativen Bereich, so erscheint unter Meldungen overcomitted und no new work fetch allowed. Boinc ist dann überarbeitet (overcomitted) und fordert keine neuen WUs (no new work fetch allowed). Dieser Modus wird dann auch earliest-deadline-first (EDF) genannt.

EDF (Panik) Modus

Neben den genannten Werten, beachtet Boinc auch die Deadline der WUs. Wenn es merkt das es "zuviel" Arbeit angefordert hat oder der <active_frac> Wert sinkt (Urlaub -> PC ist mehr aus, es wird mehr gearbeitet -> Boinc darf weniger rechnen) werden die WUs mit der nächsten Deadline bevorzugt gerechnet um ein "brauchbares" Ergebnis zu gewährleisten. In dieser Zeit fordert Boinc keine Arbeit mehr an. Mittlerweile prüfen auch die Projekt Server die Zeitstatistiken und verweigern die Zuteilung von WUs, wenn gemäß der Werte, in der geforderten Zeit nicht berechnet werden können. Beispiel:

Message from server: No work sent
(won't finish in time) Computer on 50% of time, BOINC on 25% of that, this project gets 20% of that
No work from project

Der Server sagt damit, das der PC 50% der Zeit an ist, 25% davon Boinc rechnen darf und das Projekt von dieser Zeit 20% nur bekommt.

Problem "No work sent" Lösungen

Nachfolgend verschieden Möglichkeiten um an Wus zu kommen, obwohl Boinc keine "will" bzw. bekommt.

Verhaltensänderung

Es ist einfacher als man denkt und auch logisch: Mehr Rechenleistung gibt mehr Arbeit :-) Sofern der PC leistungsfähig genug ist, kann man den Client einstellen, das er immer arbeitet, auch wenn der PC in Nutzung ist. Wenn Boinc dabei die normale Arbeit am PC stört, kann man z.B. über die Werte:

On multiprocessors, use at most (< Version 5.10) X processors
On multiprocessors, use at most (> Version 6.1)  X % of the processors
Use at most (> Version 5.6)	X percent of CPU time

Boinc "begrenzen". Genauer Erklärung dazu siehe [Konfiguration] Der weitergehende Weg währe den PC "durchlaufen" zulassen, ist der PC mehr an steigen die Werte <on_frac> und <active_frac> von alleine. Je nach dem wie stark die Nutzungsänderung über den Zeitraum ist, kann das dauern. Zu Beachten ist dabei die stärker Belastung des PCs durch Boinc siehe dazu [Nachteile|DC Nachteile]

Der letzte Möglichkeit ist eine entsprechende Aufrüstung oder Übertaktung der Hardware, bitte auf eigene Gefahr und/oder Kosten achten.

manuelle Steuerung der Projekt

Boinc macht einen Unterschied zwischen Projekt "Anhalten" und "Keine neuen Aufgabe". Bei Anhalten wird das Projekt Pausiert und die "Kurzzeit Schuld" wird weiter aufsummiert. Wenn das Projekt keine neuen Aufgaben rechnen darf, werden keine neuen Angefordert und der Wert der "Langzeit Schuld" wird nicht weiter geändert, nach Beendigung der verbleibenden WUs. Dementsprechend sollten alle Projekte die nicht berechnet werden sollen, auf "Keine neue Arbeit" gestellt werden und um den Vorgang zu beschleunigen alle nicht angefangenen WUs abgebrochen werden. Bereits angefangene WUs abzubrechen bedeutet die damit bisher geleistete Arbeit wegzuschmeißen und ist nicht empfohlen. Es gibt einige Projekte (welche?) die abgebrochene WUs wieder zurücksenden, statt sie an andere Clients zu verteilen. In diesen Fall sollte man nach Senden der fertiggestellten WUs die Funktion "Zurücksetzen" verwenden. Alternativ kann man sich auch von den "unerwünschten" Projekten abmelden. Bei wieder Anmeldung wird der STD/LTD Wert auf 0 gesetzt. Zu beachten ist bei Projekten mit kurzer Deadline, das der Arbeitspuffer (zusätzlicher + verbinde all X Tage) nicht grösser als die Deadline sein darf. Beispiel:

Projekt Deadline 7 Tage / Verbinden alle 1T / Zusätzlich 5T = 7>1+5 -> Server sendet WUs 
Projekt Deadline 5 Tage / Verbinden alle 1T / Zusätzlich 5T = 5<1+5 -> Server sendet keine WUs

Man fordert sonst mehr Arbeit an als in der Zeit berechnet werden kann und damit automatisch über die Deadline überschreitet

direkte Manipulation client_state.xml

Durch direkte Änderung der entsprechenden Werte in der client_state.xml kann Boinc davon überzeugt werden WUs anzufordern. Dazu muss Boinc komplett beendet werden. Bei Installation als Service geht das ab Windows XP über den Befehl "net stop boinc" ("net start boinc" aktiviert den Service wieder). Bei PCs die eher selten an sind, bzw. die aktive Zeit entsprechend gering war, ist als erstes empfehlenswert, die Werte <on_frac> und <active_frac> hochzusetzen. Beispiel:

<time_stats>
<on_frac>0.99</on_frac>
<active_frac>0.99</active_frac>
</time_stats>

Dabei ist zu beachten, dass nun Boinc denkt, 0.99 = 99% der Zeit laufen zu dürfen und in dieser Zeit auch 99% rechnen darf. Um ein Verfallen der WUs durch die Deadline zu vermeiden sollte, dann der PC auch die notwendige Zeit laufen, bzw. rechnen dürfen!

Um ein Projekt durch Manipulation der client_state.xml einen höherer Priorität zu geben sucht man in den entsprechenden <projekt> Abschnitt nach den Werten <short_term_debt> und <long_term_debt>und ändert sie entsprechend Beispiel:

<project>
<short_term_debt>85999</short_term_debt>
<long_term_debt>999999</long_term_debt>
</project>

Es ist zu empfehlen, an dieser Stelle nicht zu übertreiben und auch die Werte der anderen "unerwünschten" Projekte zu beachten. Am besten setzt man alle Werte auf 0 und lässt Boinc gemäß der Ressourcen bzw. Keine neuen Aufgaben entscheiden welches Projekt genommen werden soll. Einfacher sind diese Werte mit BoincDV zu manipulieren

BoincDV

Weblinks