Bibliothek zum Messen der Ausführungszeit in Linux C-Anwendungen

In letzter Zeit bettele ich häufig Leistungsmessprotokolle ein und deaktiviere sie jedes Mal. Deshalb habe ich beschlossen, eine Bibliothek zu erstellen. Ich habe es so sehr gemacht, so ein Memorandum.

2017/4/23 Korrigiert, da es einen Unterschied in der Typdefinition und Konfiguration gab

Wie ist es?

Wenn Sie es mit einem printf-Bild verwenden, wird mit der Zeit ein Protokoll gespeichert. Das Protokoll wird nicht sofort bei Ausführung der Funktion ausgegeben, sondern im reservierten Speicher gespeichert und am Ende entladen.

Da es das Protokoll nicht jedes Mal ausspuckt, wenn der Prozess ausgeführt wird, spuckt es das Protokoll mit memcpy aus, sodass ich denke, dass es weniger Einfluss auf die Geschwindigkeit hat als das einfache Einfügen des Protokolls. Ich denke, dass es auf Anwendungsebene der Middleware ausreichend verwendet werden kann.

Wie benutzt man

Die Grundlagen sind wie folgt.

  1. Führen Sie die Initialisierungsfunktion timetestlog_init aus
  2. Fügen Sie die Funktion timetestlog_store_printf anstelle von printf an der Stelle hinzu, an der Sie das Protokoll ablegen möchten.
  3. Führen Sie die Beendigungsfunktion timetestlog_exit aus und geben Sie das Protokoll aus

timetestlog.h


void * timetestlog_init(char *delimiter, size_t maxloglen, unsigned long maxstoresize);
int timetestlog_store_printf(void * handle, const char *format, ...);
void timetestlog_exit(void * handle);

timetestlog_init: Initialisierungsfunktion - input --delimiter [in] Timestamp Es ist möglich, ein Trennzeichen zwischen Protokollen anzugeben. Wenn NULL, "". --maxloglen [in] Maximale Länge einer Ausgabeprotokollzeile. Protokolle, die länger als diese Länge sind, werden abgeschnitten. --maxstoresize [in] Maximale Anzahl der zu speichernden Protokolle. Mehr Protokolle als diese Nummer werden abgeschnitten. - return --Handle zur Verwendung in nachfolgenden APIs. NULL ist ein Fehler

timetestlog_store_printf: Protokollspeicherfunktion. Geben Sie einfach das von timetestlog_init erhaltene Handle im ersten Argument von printf an.

timetestlog_exit: Funktion beenden. Geben Sie das von timetestlog_init erhaltene Handle an.

Code

Es ist unten auf Github aufgeführt. https://github.com/developer-kikikaikai/speedtest

Nach dem Klonen oder Herunterladen des Codes


cd speedtest/lib
make

Bauen mit. Libtimelog.so und libtimelog.a werden im selben Ordner erstellt.

Betriebsumgebung

Bestätigt für die Arbeit mit Ubuntu 14.04 Desktop 64bit Ich denke, es wird unter Linux funktionieren.

Andere

-Obwohl ich darauf achte, einen kleinen Overhead zu haben, wie z. B. nur bei init zuzuweisen, ist mir der Overhead für normale Funktionen wie va_start und memcpy egal.

Recommended Posts

Bibliothek zum Messen der Ausführungszeit in Linux C-Anwendungen
Eigenen Prozessnamen zur Laufzeit in C / C ++ (für Linux) abrufen
Windows → Linux Tipps zum Einbringen von Daten
MongoDB mit Python zum ersten Mal
Tipps zum Erstellen großer Anwendungen mit Flask
RTC-Treiber (Real Time Clock) für Linux
Versuchen wir zum ersten Mal Linux
Kommunizieren Sie mit I2C-Geräten unter Linux C.
Vorlage zum Erstellen von Befehlszeilenanwendungen in Python
Verwendung der C-Bibliothek in Python
Linux C / C ++ Erstellen Sie Ihre eigene Bibliothekserstellungsumgebung
[Linux] [C] CPU-Zeit pro Prozess / Thread abrufen
Erstellt ein Bibliotheksverwaltungstool nur für Header für C / C ++
Boost.NumPy Tutorial zum Erweitern von Python in C ++ (Übung)
So beschränken Sie die API, die in der gemeinsam genutzten Linux-Bibliothek in C-Sprache veröffentlicht werden soll