TKperf Installation
Dieser Artikel schildert die Installation des Performance-Werkzeugs TKperf. Es werden die Anforderungen an die Installation selbst, die Installations-Schritte sowie ein erster Aufruf von TKperf erläutert.
Anforderungen
- Es wird eine funktionierende Fio-Installation > Version 2.0.3 vorausgesetzt. Das Python-Tool überprüft mittels 'which fio' ob Fio vorhanden und aufrufbar ist. Ein Howto zur Fio-Installation ist im Artikel Fio kompilieren zugänglich.
- hdparm
- sg3-utils (zum Testen von SAS Devices)
- nvme-cli (zum Testen von nvme Devices)
- rst2pdf
Unter Ubuntu können die Pakete aus den Repositories installiert werden:
sudo apt install hdparm sg3-utils nvme-cli rst2pdf
Zum Ausführen des Python-Programms sind folgende Python Pakete erforderlich:
- logging, json, lxml, subprocess, datetime, argparse, copy, collections, numpy, matplotlib
- Unter Ubuntu ist ausreichend aus den Repositories folgende Pakete zu installieren:
sudo apt install python-argparse python-matplotlib python-lxml python-numpy python-simplejson python-setuptools
Installation unter Ubuntu
Unter Ubuntu gibt es unterschiedliche Möglichkeiten TKperf zu installieren, bei aktuellen Versionen installieren Sie TKperf per Github.
Ubuntu Repository
Nicht mehr empfohlen: TKperf kann beim Einsatz bis zu Ubuntu 14.04 über das Thomas-Krenn Ubuntu Repo installiert werden (s.a. Thomas Krenn Ubuntu-Repo verwenden):
:~$ sudo apt-get install tkperf [sudo] password for gschoenb: Reading package lists... Done Building dependency tree [...]
Git Repository
Bei Ubuntu Versionen ab 16.04 (xenial) ist der Installationsweg über unser Thomas-Krenn Github Repo. Dieser manuelle Download über git wird wie folgt vorgenommen.
- Klonen Sie TKperf in ein beliebiges Verzeichnis, hier wurde Downloads verwendet:
:~/Downloads/tkperf$ git clone https://github.com/thomas-krenn/TKperf.git . Cloning into '.'... remote: Counting objects: 914, done. remote: Compressing objects: 100% (374/374), done. remote: Total 914 (delta 549), reused 878 (delta 529) Receiving objects: 100% (914/914), 180.49 KiB, done. Resolving deltas: 100% (549/549), done.
- Starten Sie das Python Setup Skript:
:~/Downloads/tkperf$ sudo python setup.py install running install running build [...]
- Prüfen Sie die Installation von TKperf:
:~/Downloads/tkperf$ tkperf -v TKperf Version: 2.1 using fio: /usr/local/bin/fio, fio-2.0.13-16-g99db
Hinweis zur Aktualisierung: Bei einer Aktualisierung der Quelldateien (mittels Download oder Git) muss der Aufruf des oben genannten Installation-Befehls (sudo python setup.py install) erneut erfolgen.
- Für die manuelle Installation von Fio verwenden Sie die Anleitung im Artikel Fio kompilieren.
TKperf Testlauf
Achtung: Bei einem Testlauf gehen alle Daten auf dem Device verloren. Das angegebene Device wird mehrmals überschrieben, für SSDs wird außerdem ein Secure Erase durchgeführt.
Wichtige Information: Es empfiehlt sich die Tests, die im Regelfall sehr lange laufen, in einer Screen-Session[1] zu starten, um zu verhindern, dass der Testlauf unbeabsichtigt beendet wird.
Genauere Informationen zu den Testläufen finden Sie auch im Artikel TKperf Testabläufe.
Nach erfolgreicher Installation kann ein Testlauf gestartet werden - dazu werden root-Rechte benötigt.
$ sudo tkperf
Ohne Angabe von Parametern liefert das Script folgenden Fehler zurück:
$ sudo tkperf usage: tkperf [-h] [-v] [-d] [-q] [-nj NUMJOBS] [-iod IODEPTH] [-rt RUNTIME] [-i {sas,nvme,fusion}] [-xml] [-rfb] [-dsc DESC_FILE] [-c CONFIG] [-ft] [-fm FEATURE_MATRIX] [-hddt {iops,tp}] [-ssdt {iops,lat,tp,writesat}] [-m MAIL] [-s SMTP] [-g GEN_REPORT] {hdd,ssd,raid} testname device tkperf: error: too few arguments
Im nächsten Schritt werden Aufruf-Parameter an TKperf übergeben. Zumindest folgende Informationen werden für einen Testlauf benötigt:
- Test-Typ (SSD oder HDD)
- Beschreibender Name des Tests (z.B. Intel320)
- Pfad zum zu testenden Device (z.B. /dev/sda)
Mit diesen drei wesentlichen Informationen kann bereits ein Testlauf gestartet werden. Entweder mit sudo:
$ sudo tkperf ssd Intel320 /dev/sdb !!!Attention!!! All data on /dev/sdb will be lost! Are you sure you want to continue? (In case you really know what you are doing.) Press 'y' to continue, any key to stop:
oder direkt als root:
# tkperf ssd Intel320 /dev/sdb
Wie in der Ausgabe ersichtlich warnt das Performance-Tool davor, dass alle Daten auf dem Device verloren gehen. Eine Einschränkung bezüglich der Auswahl der Devices gibt es - für aktuell gemountete Devices ist es nicht möglich einen Test zu starten.
Zusätzliche nützliche Parameter
Für die meisten SSDs reichen Standard-Parameter für die Anzahl der Prozess und der ausstehenden I/Os nicht aus. Es empfiehlt sich daher folgende Parameter für einen SSD-Test zu verwenden:
-nj 2 -iod 16
Mit diesen Parametern werden zumindest 2 Prozesse und 16 outstanding I/Os pro Prozess von Fio eingesetzt (s.a. Fio Grundlagen).
Zusätzlich wird für SSDs, deren Controller Komprimierung einsetzt, ein Parameter benötigt der die Zufälligkeit der eingesetzten Daten-Puffer garantiert. Über die Option "-rfb" wird dies erreicht (vgl. Welche Art von Daten setzt Fio ein). Abschließend ergeben sich folgende Parameter für einen SSD-Test:
-nj 2 -iod 16 -rfb
Während des Testlaufes
Das Log '[Name-des-gestarteten-Tests].log'
enthält sowohl Fehlermeldungen als auch Informationen über die gestarteten Fio-Jobs.
Neben der Ausgabe des "Terse Outputs" aller Fio Jobs befindet sich am Ende eines Tests im Log File jene Matrix, die später für die Auswertung und Generierung der Graphen und Reports verwendet wird. Außerdem werden bei Tests, die einen Steady State involvieren, die Informationen bezüglich der Erreichung des Steady States in das Log geschrieben.
Bei Unklarheiten im PDF-Report empfiehlt es sich in der Log-Datei die Performance-Werte zu überprüfen. Im Zusammenhang mit dem Fio Terse Output, der geparst wurde, steht im Fio HOWTO[2] eine Beschreibung, an welchen Stellen sich die einzelnen Werte befinden.
Nach dem Testlauf
Nach dem Aufruf befinden sich zusätzlich zu der Log-Datei die Grafiken, ein XML und eine rst-Datei im Verzeichnis:
# ls intel320-avg-LAT-mes2DPlt.png intel320.pdf intel320-IOPS-mes2DPlt.png intel320.rst intel320-IOPS-mes3DPlt.png intel320-TP-mes2DPlt.png intel320-IOPS-stdyStConvPlt.png intel320-TP-RW-stdyStConvPlt.png intel320-IOPS-stdyStVerPlt.png intel320-TP-stdyStVerPlt.png intel320-LAT-mes3DPlt.png intel320-writeSatIOPSPlt.png intel320-LAT-stdyStConvPlt.png intel320-writeSatLatPlt.png intel320-LAT-stdyStVerPlt.png intel320.xml intel320-max-LAT-mes2DPlt.png intel320.log
TKperf XML-Datei
Die xml-Datei enthält wie bereits erwähnt die Testergebnisse der einzelnen Testläufe. Die Datei braucht unter normalen Umständen nicht editiert zu werden. Eine Ausnahme bildet der Umstand, wenn manuell Informationen zum Report hinzugefügt werden sollen. Diese Informationen können nachträglich ins XML eingefügt werden und der Report aus dem XML neu erstellt werden. Hierzu ein kleiner Auszug aus einer XML-Datei (nicht vollständig):
<intel320> <testdate>"2012-09-26"</testdate> <devinfo> "\tModel Number: INTEL SSDSA2CW160G3 \n \tSerial Number: CVPR1462071K160DGN \n\tFirmware Revision: 4PC10362 \n\tdevice size with M = 1000*1000: 160041 MBytes (160 GB)\n" </devinfo> <ioperfversion>"1.0"</ioperfversion> <lat><fioversion>"fio 2.0.7\n"</fioversion><numjobs>2</numjobs><iodepth>16</iodepth> <roundmat> [...] </roundmat> <tp><fioversion>"fio 2.0.7\n"</fioversion><numjobs>2</numjobs><iodepth>16</iodepth> <roundmat> [...] </roundmat> <stdyrounds>[0, 1, 2, 3, 4]</stdyrounds> <stdyvalues>[128655, 122786, 126858, 125772, 126053]</stdyvalues> <stdyslope>[-221.80000000001655, 126468.40000000001]</stdyslope> <stdyavg>126024.8</stdyavg> <reachstdystate>true</reachstdystate> <rndnr>4</rndnr> </tp> </intel320>
TKperf-Report erstellen
Die von TKperf generierte rst-Datei wird zur Erstellung eines pdf-Reports herangezogen. Die Datei enthält den Report als restructured Text (wikipedia.org). Dazu ein kurzer Auszug:
# head -20 intel320.rst .. |logo| image:: TK_Logo_RGB.png :height: 70px .. footer:: |logo| http://www.thomas-krenn.com - Page ###Page### of ###Total### ==================== IO perf test report ==================== .. contents:: .. sectnum:: .. include:: <isonum.txt> Device Information =================== [...]
Mit dem Werkzeug rst2pdf kann daraus eine pdf-Datei erstellt werden:
# rst2pdf intel320.rst
Fehlerbehandlung
- Frozen State
Die SSD befindet sich im Frozen State, das Secure Erase kann daher nicht durchgeführt werden. Ein kurzes herausziehen und wieder einschieben der SSD sollte das Problem lösen. Kontrolle:
# hdparm -I /dev/sdb|grep frozen not frozen
Ausgabe des Hilfe-Textes
Der Hilfe-Text kann über den Parameter '--help' abgerufen werden:
$ tkperf --help usage: tkperf [-h] [-v] [-d] [-q] [-nj NUMJOBS] [-iod IODEPTH] [-rt RUNTIME] [-i {sas,nvme,fusion}] [-xml] [-rfb] [-dsc DESC_FILE] [-c CONFIG] [-ft] [-fm FEATURE_MATRIX] [-hddt {iops,tp}] [-ssdt {iops,lat,tp,writesat}] [-m MAIL] [-s SMTP] [-g GEN_REPORT] {hdd,ssd,raid} testname device positional arguments: {hdd,ssd,raid} specify the test mode for the device testname name of the performance tests, corresponds to the result output filenames device device to run fio test on optional arguments: -h, --help show this help message and exit -v, --version get the version information -d, --debug get detailed debug information -q, --quiet turn off logging of info messages -nj NUMJOBS, --numjobs NUMJOBS specify number of jobs for fio -iod IODEPTH, --iodepth IODEPTH specify iodepth for libaio used by fio -rt RUNTIME, --runtime RUNTIME specify the fio runtime of one test round, if not set this is 60 seconds -i {sas,nvme,fusion}, --interface {sas,nvme,fusion} specify optional device interface -xml, --fromxml don't run tests but load test objects from xml file -rfb, --refill_buffers use Fio's refill buffers option to circumvent any compression of devices -dsc DESC_FILE, --desc_file DESC_FILE use a description file for the tested device if hdparm doesn't work correctly -c CONFIG, --config CONFIG specify the config file for a raid device -ft, --force_test skip checks if the used device is mounted, don't print warnings and force starting the test -fm FEATURE_MATRIX, --feature_matrix FEATURE_MATRIX add a feature matrix of the given device to the report -hddt {iops,tp}, --hdd_type {iops,tp} choose which tests are run -ssdt {iops,lat,tp,writesat}, --ssd_type {iops,lat,tp,writesat} choose which tests are run -m MAIL, --mail MAIL Send reports or errors to mail address, needs -s to be set -s SMTP, --smtp SMTP Use the specified smtp server to send mails, uses port 25 to connect -g GEN_REPORT, --gen_report GEN_REPORT Set and specify command to generate pdf report, e.g. rst2pdf
Einzelnachweise
- ↑ Screen man-Page (linux.die.net)
- ↑ Fio HOWTO (git.kernel.dk)
Autor: Georg Schönberger Georg Schönberger, Abteilung DevOps bei der XORTEX eBusiness GmbH, absolvierte an der FH OÖ am Campus Hagenberg sein Studium zum Bachelor Computer- und Mediensicherheit, Studium Master Sichere Informationssysteme. Seit 2015 ist Georg bei XORTEX beschäftigt und arbeitet sehr lösungsorientiert und hat keine Angst vor schwierigen Aufgaben. Zu seinen Hobbys zählt neben Linux auch Tennis, Klettern und Reisen.
|