Je voudrais suivre combien de mémoire différents programmes touchent dans des états spécifiques. Par exemple, disons que j’ai un programme graphique. Il peut consumr beaucoup moins de mémoire lorsqu’il est réduit, car il ne redessine pas la fenêtre, ce qui nécessite la lecture des images et des fonts et l’exécution d’un grand nombre de fonctions de bibliothèque. Ces objects sont toujours accessibles en mémoire, mais ils ne sont pas réellement utilisés.
Les outils tels que top
ont une utilité limitée, car ils indiquent simplement la quantité de mémoire mappée dans l’espace d’adressage d’un programme et la quantité de mémoire résidant dans la RAM physique. De même, les détecteurs de fuites ne diront que lorsque la mémoire est inaccessible, pas si elle n’est pas utilisée.
Existe-t-il un outil existant capable de suivre de cette manière la mémoire activement utilisée / inutilisée? Si possible, je voudrais suivre l’utilisation non seulement sur le tas, mais aussi dans la mémoire stockant le code du programme / bibliothèque.
EDIT: Je voudrais clarifier: je veux savoir beaucoup de mémoire, un programme lit, écrit ou exécute réellement après un certain point, c.-à-d. Une fois qu’il atteint un certain état. Bien que le nombre de pages dans l’espace d’adressage et le nombre de pages résidentes soient des mesures importantes, ce n’est pas ce que je recherche.
Je poursuis trois approches en ce moment:
Cela peut être dérivé des données dans / proc / pid / smaps. Cela décompose une valeur RSS pour chaque zone mappée (y compris la stack, le texte / les données et les régions mappées de manière anonyme), afin que vous puissiez voir exactement ce qui est résident pour chaque object chargé, ainsi que la stack et le segment de mémoire.
Quelques liens utiles:
L’outil de mise en cache de l’outil Valgrind effectue un bon travail de suivi de l’utilisation de la mémoire.
Il y a aussi quelques outils qui montrent la sortie de cachegrind graphiquement.
Modifier pour répondre aux informations mises à jour:
Avant l’émergence de valgrind, j’ai utilisé un projet appelé mpatrol.
Il utilise mprotect () pour rendre les pages en lecture seule et pour suivre l’access aux pages.
pages. Il permet également de spécifier quand commencer et arrêter le reporting,
comme après le nième malloc, entre autres spécifications.
Il peut faire beaucoup, ou toutes les fonctionnalités que vous recherchez.
Une mise en garde, il est beaucoup plus lent que le valgrind.