10
votes

Mesurer les défauts de la page d'un programme C

Je comparais quelques appels système où je lis / écrivez de / à la mémoire. Y a-t-il une API définie pour mesurer les défauts de page (pages in / out) dans C ?

J'ai trouvé cette bibliothèque libperfstat.a mais c'est pour aix , je n'ai rien trouvé pour Linux.

edit: Je suis au courant de & Perf-Stat Commandes de Linux, explorez simplement s'il y a quelque chose de disponible pour que je puisse utiliser dans le programme C .


5 commentaires

Ceci n'est pas une bibliothèque C, mais vous pouvez utiliser Time -V A.out pour afficher une pléthore d'informations sur votre programme, y compris les défauts de page.


Dans la 1ère ligne du lien, il dit "Collection de C Programmation Language Subroutines". Je connais la commande , mais explorait si quelque chose peut être effectué à l'intérieur du programme C . Merci quand même!


"Disponible pour moi à l'intérieur du programme C." - Pouvez-vous tolérer l'inexactitude? Il n'y a probablement pas une grande partie d'une API pour cela, car il est si mal défini (les défauts peuvent se passer de votre choix dans ce système, de sorte que lorsque vous voulez que cela signalait?).


@Briancain: D'accord, mais après avoir vu la bibliothèque Aix, j'ai eu curieux si quelque chose de similaire existe pour Linux. Je suppose que je devrai utiliser statiste .


Ne perdez pas l'espoir, la raison pour laquelle il n'ya pas de bibliothèque de Linux, c'est qu'il est trivial de le faire sans, s'il vous plaît voir ma réponse ci-dessous.


3 Réponses :


3
votes

Ce n'est pas une API en tant que telle, mais j'ai eu beaucoup de succès en roulant ma propre et en lisant / procurez-vous / mypid / stat de mon programme C comprenant des statistiques de défaut de page pour mon processus, cela me permet de surveiller compte en temps réel que mon programme fonctionne et les stocke, mais j'aime bien.

N'oubliez pas que cela peut causer des défauts de page en soi afin qu'il y aura une certaine inexactitude, mais vous obtiendrez une idée générale.

voir ici pour plus de détails sur le format du fichier: https://access.redhat.com/site/documentation/en-us/red_hat_enterprise_mrg/1.3/html/realtime_reference_guide/chap-realtime_reference_guide-memory_allocation.html


0 commentaires

6
votes

Si vous exécutez sur Linux, vous pouvez utiliser l'appel système PERF_EVENT_OPEN SYSTÈME (utilisé par PERF STAT STAT). C'est un peu délicat pour obtenir les bons paramètres, regarder la page man http: // Web .eece.maine.edu / ~ vweaver / Projets / perf_events / perf_event_open.html et voir le code ci-dessous.

Il n'y a pas d'emballage Lib C pour que vous puissiez appeler cela comme suit: < Pré> xxx

puis pour compter les défauts de page: xxx


2 commentaires

C'est un bon, vous voudrez peut-être noter que cela n'a pas de contraignation C cependant.


Oui, je n'ai pas encore eu le temps d'écrire le code wrapper ici.



3
votes

Il y a GetRusage fonction (SVR4, 4.3 BSD. POSIX.1-1-2001; mais tous les champs ne sont pas définis en standard). À Linux, il y a plusieurs Champs brisés , mais man goisage répertorie plusieurs champs intéressants: xxx

le rusion est Aussi signalé dans wait4 (uniquement utilisable dans le programme externe) . Celui-ci est utilisé par / usr / bin / time programme (IT imprime des numéros mineurs / majorsFault).


3 commentaires

Travaillé magnifiquement :)! Merci!


Est-ce que ru_inblock / ru_oublock comptez votre lecture () Demandes après la vidange de pagecache?


Oui, cela a été mis à l'échelle linéairement. Bloquer les opérations d'entrée = 8 (Taille du fichier 1K) sur Opérations d'entrée de bloc = 2234992 (Taille du fichier 1G): )