Est-il possible de voir sous Linux combien de requêtes de lecture et d'écriture à partir de l'espace utilisateur finissent par provoquer des occurrences et des échecs de cache pour les périphériques de bloc?
Vous pouvez développer votre propre script SystemTap . Vous devez tenir compte des deux sous-systèmes suivants:
Le développement de SystemTap prend un certain temps à apprendre. Si vous êtes un développeur modéré et que vous avez une bonne connaissance de Linux, vous devriez avoir terminé en 3-4 jours. Oui, cela prend du temps à apprendre, mais vous serez très satisfait des résultats - SystemTap vous donne la possibilité de placer (en toute sécurité) des sondes à presque n'importe quel endroit du noyau Linux.
Notez que votre noyau doit prendre en charge le chargement et le déchargement des modules du noyau. La plupart des noyaux de stock le supportent aujourd'hui. Vous devrez également installer les symboles de débogage pour votre noyau. Pour mon système Ubuntu, cela a été aussi simple que de télécharger un fichier .deb de plusieurs centaines de Mo, que l'équipe de développement du noyau Ubuntu a compilé pour moi. Cela est expliqué sur la page Wiki SystemtapOnUbuntu , par exemple.
PS N'utilisez l'approche SystemTap que si vous n'avez pas d'autre solution, car c'est un cadre totalement nouveau que vous devez apprendre, et qui coûte du temps / de l'argent et parfois de la frustration.
Je suis allé de l'avant et j'ai écrit un script stap pour cela. Il y en a un sur le wiki systemtap, mais il ne semble pas être correct. Dans les tests de base, cela semble assez précis mais YMMV.
la source
semantic error: unable to find member 'bi_size' for struct bio (alternatives: bi_next bi_bdev bi_flags bi_rw bi_iter bi_phys_segments bi_seg_front_size bi_seg_back_size bi_remaining bi_end_io bi_private bi_ioc bi_css bi_integrity bi_vcnt bi_max_vecs bi_cnt bi_io_vec bi_pool bi_inline_vecs): operator '->' at /usr/share/systemtap/tapset/linux/ioblock.stp:113:20 source: size = $bio->bi_size ^ Pass 2: analysis failed. [man error::pass2]
pouvez-vous aider?/ proc / slabinfo est un bon début, mais ne vous donne pas tout à fait les informations que vous recherchez (ne vous laissez pas berner par les pourcentages de réussite / échec sur les systèmes avec plusieurs cœurs et statistiques activés; ce sont autre chose). Pour autant que je sache, il n'y a aucun moyen d'extraire ces informations particulières du noyau, bien qu'il ne devrait pas être très difficile d'écrire un peu de code à faire.
Modifier: http://www.kernel.org/doc/man-pages/online/pages/man5/slabinfo.5.html
la source
Il y a maintenant l' utilitaire cachestat du paquet perf-tools .
L'auteur énumère également quelques alternatives (peut-être plus grossières) que les gens utilisent:
la source
Si vous êtes intéressé par le rapport IO hit / miss d'un processus spécifique, une approche simple mais très efficace consiste à lire le
/proc/<pid>/io
fichier.Vous trouverez ici 4 valeurs clés:
rchar
: le nombre total d'octets de lecture du point de vue de l' application (c'est-à-dire sans différence entre la lecture satisfaite du stockage physique plutôt que du cache)wchar
: comme ci-dessus, mais sur les octets écritsread_bytes
: les octets lisent vraiment depuis le sous-système de stockagewrite_bytes
: les octets vraiment écrits dans le sous-système de stockageSupposons qu'un processus ait les valeurs suivantes:
Le taux d'échec du cache de lecture (en octets) est
100*200000/1000000 = 20%
, et le taux de réussite est100-20 = 80%
Cependant, il y a un hic: la
rchar
valeur inclut la chose comme tty IO, donc pour les processus qui lisent / écrivent beaucoup depuis / vers un tuyau, le calcul ci-dessus sera faussé, rapportant un taux de réussite plus élevé que le taux effectif.la source