Bibliothèque de mesure du temps d'exécution dans les applications Linux C

Récemment, je fais souvent des choses comme intégrer des journaux de mesure des performances et les désactiver à chaque fois, j'ai donc décidé de créer une bibliothèque. Puisque je l'ai fait avec beaucoup d'efforts, c'est un mémorandum.

2017/4/23 Corrigé car il y avait une différence dans la définition du type et la configuration

Comment est-ce?

Si vous l'utilisez avec une image printf, il enregistrera un journal avec le temps. Le journal n'est pas sorti immédiatement lorsque la fonction est exécutée, mais est sauvegardé dans la mémoire réservée et déchargé à la fin.

Comme il ne crache pas de journaux à chaque fois que le traitement est exécuté, il crache des journaux avec memcpy, donc je pense que cela a moins d'effet sur la vitesse que la simple insertion de journaux. Je pense qu'il peut être suffisamment utilisé au niveau applicatif du middleware.

Comment utiliser

Les bases sont les suivantes.

  1. Exécutez la fonction d'initialisation timeestlog_init
  2. Ajoutez la fonction timeestlog_store_printf au lieu de printf à l'endroit où vous souhaitez placer le journal.
  3. Exécutez la fonction de terminaison timeestlog_exit et sortez le journal

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);

timeestlog_init: fonction d'initialisation - input --delimiter [in] Timestamp Il est possible de spécifier un délimiteur entre les journaux. Si NULL, "". --maxloglen [in] Longueur maximale d'une ligne de journal de sortie. Les journaux plus longs que cette longueur seront tronqués. --maxstoresize [in] Nombre maximum de journaux à stocker. Plus de journaux que ce nombre seront tronqués. - return --Handle à utiliser dans les API suivantes. NULL est une erreur

timeestlog_store_printf: fonction d'enregistrement du journal. Spécifiez simplement le handle obtenu par timeestlog_init dans le premier argument de printf.

timeestlog_exit: Quitter la fonction. Spécifiez le handle obtenu par timeestlog_init.

code

Il est répertorié ci-dessous sur github. https://github.com/developer-kikikaikai/speedtest

Après le clonage ou le téléchargement du code


cd speedtest/lib
make

Construisez avec. Libtimelog.so et libtimelog.a seront créés dans le même dossier.

Environnement d'exploitation

Confirmé pour fonctionner avec Ubuntu 14.04 Desktop 64bit Je pense que cela fonctionnera sous Linux OS.

Autre

-Bien que je sois attentif à ce que la surcharge soit petite, comme l'attribution uniquement à init, je ne me soucie pas de la surcharge pour les fonctions ordinaires telles que va_start et memcpy.

Recommended Posts

Bibliothèque de mesure du temps d'exécution dans les applications Linux C
Obtenir son propre nom de processus lors de l'exécution en C / C ++ (pour Linux)
Windows → Linux Conseils pour importer des données
MongoDB avec Python pour la première fois
Conseils pour créer de grandes applications avec Flask
Pilotes d'horloge en temps réel (RTC) pour Linux
Essayons Linux pour la première fois
Communiquez avec les périphériques I2C sous Linux C
Modèle pour créer des applications de ligne de commande en Python
Comment utiliser la bibliothèque C en Python
Linux C / C ++ Créez votre propre environnement de création de bibliothèque
[Linux] [C] Obtenir le temps CPU par processus / thread
Création d'un outil de gestion de bibliothèque d'en-tête uniquement pour C / C ++
Tutoriel Boost.NumPy pour l'extension de Python en C ++ (pratique)
Comment limiter la publication de l'API dans la bibliothèque partagée en langage C de Linux