doc/de_DE.ISO8859-1/books/developers-handbook/testing/chapter.sgml
2012-09-14 17:47:48 +00:00

266 lines
9.5 KiB
XML

<?xml version="1.0" encoding="iso-8859-1" standalone="no"?>
<!--
The FreeBSD Documentation Project
The FreeBSD German Documentation Project
$FreeBSD$
$FreeBSDde: de-docproj/books/developers-handbook/testing/chapter.sgml,v 1.10 2010/12/18 13:28:29 jkois Exp $
basiert auf: 1.3
-->
<chapter id="testing">
<chapterinfo>
<authorgroup>
<author>
<firstname>Jürgen</firstname>
<surname>Lock</surname>
<contrib>Übersetzt von </contrib>
</author>
</authorgroup>
</chapterinfo>
<title>Regressions- und Performance-Tests</title>
<para>Regressions-Tests werden durchgeführt, um zu überprüfen,
ob ein bestimmter Teil des Systems wie erwartet funktioniert, und
um sicherzustellen, dass bereits beseitigte Fehler nicht wieder eingebaut
werden.</para>
<para>Die &os;-Regressions-Testwerkzeuge finden Sie im
&os;-Quelltextbaum unter <filename
class="directory">src/tools/regression</filename>.</para>
<section id="testing-micro-benchmark">
<title>Mikro-Benchmark-Checkliste</title>
<para>Dieser Abschnitt enthält Tipps, wie
ordnungsgemäße Mikro-Benchmarks unter &os; oder für
&os; selbst erstellt werden.</para>
<para>Es ist nicht möglich, immer alle der folgenden
Vorschläge zu berücksichtigen, aber je mehr davon,
desto besser wird der Benchmark kleine
Unterschiede nachweisen können.</para>
<itemizedlist>
<listitem>
<para>Schalten Sie <acronym>APM</acronym> und alles andere,
das den Systemtakt beeinflusst, ab
(<acronym>ACPI</acronym>?).</para>
</listitem>
<listitem>
<para>Starten Sie in den Single-User-Modus. &man.cron.8;
und andere Systemdienste verursachen nur Störungen.
Genauso der &man.sshd.8;-Systemdienst.
Falls während des Tests
SSH-Zugriff benötigt wird, schalten Sie entweder die
Neuerstellung des SSHv1-Schlüssels ab oder beenden Sie
den <command>sshd</command>-Elternprozess während der
Tests.</para>
</listitem>
<listitem>
<para>Beenden Sie &man.ntpd.8;.</para>
</listitem>
<listitem>
<para>Falls &man.syslog.3;-Ereignisse erzeugt werden,
starten Sie &man.syslogd.8; mit leerer
<filename>/etc/syslogd.conf</filename> oder beenden Sie
es.</para>
</listitem>
<listitem>
<para>Sorgen Sie für möglichst wenig Disk-I/O;
vermeiden Sie es ganz wenn möglich.</para>
</listitem>
<listitem>
<para>Hängen Sie keine Dateisysteme ein, die Sie nicht
benötigen.</para>
</listitem>
<listitem>
<para>Hängen Sie <filename
class="directory">/</filename>, <filename
class="directory">/usr</filename> und die anderen
Dateisysteme nur lesbar ein wenn möglich. Dies
verhindert, dass atime-Aktualisierungen auf der Festplatte (usw.) das
Ergebnis verfälschen.</para>
</listitem>
<listitem>
<para>Initialisieren Sie das beschreibbare
Test-Dateisystem mit &man.newfs.8; neu und füllen Sie es
aus einer &man.tar.1;- oder &man.dump.8;-Datei vor jedem
Lauf. Hängen Sie es aus und wieder ein, bevor Sie den
Test starten. Dies sorgt für einen konsistenten
Dateisystemaufbau. Bei einem <quote>worldstone</quote>-Test
bezieht sich dies auf <filename
class="directory">/usr/obj</filename> (Initialisieren Sie
es einfach mit <command>newfs</command> neu und hängen Sie
es ein). Um absolut reproduzierbare Ergebnisse zu bekommen,
füllen Sie das Dateisystem aus einer &man.dd.1;-Datei
(d.h. <command>dd
if=<filename>myimage</filename> of=<filename
class="devicefile">/dev/ad0s1h</filename>
bs=1m</command>).</para>
</listitem>
<listitem>
<para>Benutzen Sie malloc-gestützte oder vorbelastete
&man.md.4;-Partitionen.</para>
</listitem>
<listitem>
<para>Starten Sie zwischen den einzelnen
Durchläufen neu, dies sichert einen konsistenteren
Zustand.</para>
</listitem>
<listitem>
<para>Entfernen Sie alle nicht unbedingt benötigten
Gerätetreiber aus dem Kernel. Wenn z.B. USB für
den Test nicht benötigt wird, entfernen Sie es aus dem
Kernel. Gerätetreiber, die sich Hardware zuteilen, haben
oft <quote>tickende</quote> Timeouts.</para>
</listitem>
<listitem>
<para>Konfigurieren Sie nicht Hardware, die
nicht benutzt wird. Entfernen Sie Festplatten
mit &man.atacontrol.8; und &man.camcontrol.8;, wenn diese
für den Test nicht gebraucht werden.</para>
</listitem>
<listitem>
<para>Konfigurieren Sie nicht das Netzwerk, es sei denn es
wird getestet, oder warten Sie, bis der Test fertig ist, wenn
Sie das Ergebnis auf einen anderen Rechner übertragen
wollen.</para>
<para>Falls das System an ein öffentliches Netzwerk
angeschlossen sein muss, achten Sie auf Spitzen im
Broadcast-Verkehr. Obwohl dieser kaum auffällt, wird
er CPU-Zyklen brauchen. Ähnliches gilt für
Multicast.</para>
</listitem>
<listitem>
<para>Legen Sie jedes Dateisystem auf eine eigene Festplatte.
Dies minimiert Jitter durch Optimierungen von
Lesekopfbewegungen.</para>
</listitem>
<listitem>
<para>Minimieren Sie Ausgaben auf serielle oder VGA-Konsolen.
Ausgabenumleitung in Dateien ergibt weniger Jitter
(serielle Konsolen werden leicht zum Flaschenhals).
Benutzen Sie die Tastatur nicht, während der Test
läuft, sogar <keycap>space</keycap> oder
<keycap>back-space</keycap> wirken sich auf die
Ergebnisse aus.</para>
</listitem>
<listitem>
<para>Stellen Sie sicher, dass der Test lang genug
läuft, aber nicht zu lange. Wenn er zu kurz ist, sind
Zeitstempel ein Problem. Wenn er zu lang ist, werden
Temperaturänderungen und Drift die Frequenz von
Quarzkristallen im Rechner beeinflussen. Daumenregel: mehr
als eine Minute, weniger als eine Stunde.</para>
</listitem>
<listitem>
<para>Versuchen Sie, die Temperatur in der Umgebung des
Rechners so stabil wie möglich zu halten. Diese beeinflusst
sowohl Quarzkristalle als auch Festplatten-Algorithmen.
Um einen wirklich stabilen Takt zu erhalten, wäre es auch
möglich, einen stabilisierten Takt anzuschließen.
D.h. besorgen Sie sich einen OCXO + PLL und koppeln Sie das
Ausgangssignal mit den Taktgeberschaltkreisen anstelle des
Quarzkristalls der Hauptplatine. Wenden Sie sich an
&a.phk;, wenn Sie mehr Informationen hierüber
benötigen.</para>
</listitem>
<listitem>
<para>Lassen Sie den Test mindestens drei Mal laufen, besser
mehr als 20 Mal, sowohl
für <quote>vor</quote> als auch für
<quote>nach</quote> dem Code. Versuchen Sie abzuwechseln
(d.h. nicht erst 20 Mal <quote>vorher</quote> und dann 20
Mal <quote>nachher</quote>), dies ermöglicht,
umgebungsbedingte Effekte zu erkennen. Wechseln Sie nicht
1:1 ab, sondern 3:3; dies erlaubt,
Wechselwirkungseffekte zu erkennen.</para>
<para>Ein gutes Muster ist:
<literal>bababa{bbbaaa}*</literal>. Dies gibt Hinweise nach
den ersten 1+1-Läufen (sodass Sie den Test stoppen
können, falls er völlig daneben geht), Sie
können die Standardabweichung nach den ersten 3+3-Läufen
überprüfen (zeigt an, ob sich ein
längerer Lauf lohnt), später
Trends und Wechselwirkungen.</para>
</listitem>
<listitem>
<para>Benutzen Sie &man.ministat.1;, um
festzustellen, ob Ihre Ergebnisse signifikant sind.
Überlegen Sie sich, das Buch <quote>Cartoon guide to
statistics</quote> ISBN: 0062731025 zu kaufen. Es ist sehr
empfehlenswert, falls Sie Dinge wie Standardabweichung und
Studentsche t-Verteilung vergessen oder nie gelernt
haben.</para>
</listitem>
<listitem>
<para>Benutzen Sie keinen Hintergrund-&man.fsck.8;, wenn Sie
ihn nicht selbst testen
wollen. Schalten Sie auch <varname>background_fsck</varname>
in <filename>/etc/rc.conf</filename> aus, es sei denn der
Benchmark wird nicht mindestens 60+<quote>Laufzeit von
<command>fsck</command></quote> Sekunden nach Systemstart
gestartet, da &man.rc.8; startet und prüft, ob
<command>fsck</command> auf irgendeinem der Dateisysteme
laufen muss, wenn Hintergrund-<command>fsck</command>
eingeschaltet ist. Stellen Sie ebenfalls sicher, dass keine
Snapshots herumliegen, falls der Benchmark nicht ein Test
mit Snapshots ist.</para>
</listitem>
<listitem>
<para>Falls der Benchmark unerwartet schlechte Performance
zeigt, überprüfen Sie Dinge wie große Mengen
Interrupts von unerwarteten Quellen. Es gibt Berichte, dass
einige <acronym>ACPI</acronym>-Versionen sich <quote>daneben
benehmen</quote> und ein Übermaß an Interrupts
erzeugen. Um zu helfen, ungewöhnliche Testergebnisse zu
diagnostizieren, machen Sie ein paar Momentaufnahmen von
<command>vmstat -i</command> und suchen Sie nach
Ungewöhnlichem.</para>
</listitem>
<listitem>
<para>Gehen Sie mit Parametern zur Optimierung
von Kernel, Userland und Fehlersuche vorsichtig um.
Es passiert schnell, irgendetwas durchrutschen zu
lassen und dann später festzustellen, dass der Test
nicht das gleiche verglichen hat.</para>
</listitem>
<listitem>
<para>Erstellen Sie nie Benchmarks unter Verwendung der Kernel-Optionen
<literal>WITNESS</literal> und <literal>INVARIANTS</literal>,
wenn der Test nicht diese Merkmale selbst
untersuchen soll. <literal>WITNESS</literal> kann zu 400% und
mehr Performance-Abnahme führen. Ähnliches gilt
für Userland-&man.malloc.3;-Parameter, Voreinstellungen
hierbei unterscheiden sich bei -CURRENT von denen bei
Production-Releases.</para>
</listitem>
</itemizedlist>
</section>
</chapter>