Ist es unter Linux möglich zu sehen, wie viele Lese- und Schreibanforderungen aus dem Benutzerbereich Cachetreffer und -fehler für Blockgeräte verursachen?
Sie können Ihr eigenes SystemTap- Skript entwickeln. Sie müssen die folgenden zwei Subsysteme berücksichtigen:
Die Entwicklung von SystemTap nimmt einige Zeit in Anspruch. Wenn Sie ein moderater Entwickler sind und gute Linux-Kenntnisse haben, sollten Sie in 3-4 Tagen fertig sein. Ja, es dauert eine Weile, bis Sie es gelernt haben, aber Sie werden mit den Ergebnissen sehr zufrieden sein. Mit SystemTap haben Sie die Möglichkeit, Tests (sicher) an fast jeder Stelle im Linux-Kernel zu platzieren.
Beachten Sie, dass Ihr Kernel Unterstützung für das Laden und Entladen von Kernel-Modulen haben muss. Die meisten Aktienkerne unterstützen dies heutzutage. Sie müssen auch die Debugsymbole für Ihren Kernel installieren. Für mein Ubuntu-System war dies so einfach wie das Herunterladen einer .deb-Datei mit mehreren hundert MB, die das Ubuntu-Kernel-Entwicklungsteam für mich kompiliert hat. Dies wird beispielsweise auf der SystemtapOnUbuntu- Wiki-Seite erklärt .
PS: Verwenden Sie den SystemTap-Ansatz nur, wenn Sie keine andere Lösung haben, da es sich um ein völlig neues Framework handelt, das Sie lernen müssen und das Zeit / Geld und manchmal Frust kostet.
Ich ging voran und schrieb ein Stap-Skript dafür. Es gibt eines im Systemtap-Wiki, aber es scheint nicht korrekt zu sein. Im Basistest scheint dies ziemlich genau zu sein, aber YMMV.
quelle
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]
können Sie helfen?/ proc / slabinfo ist ein guter Anfang, bietet aber nicht die gewünschten Informationen. Soweit ich weiß, gibt es keine Möglichkeit, diese bestimmten Informationen aus dem Kernel zu ziehen, obwohl es nicht fürchterlich schwierig sein sollte, ein bisschen Code zu schreiben, um dies zu tun.
Bearbeiten: http://www.kernel.org/doc/man-pages/online/pages/man5/slabinfo.5.html
quelle
Jetzt gibt es das Dienstprogramm cachestat aus dem Paket perf-tools .
Der Autor listet auch einige (möglicherweise grausamere) Alternativen auf, die von Menschen verwendet werden:
quelle
Wenn Sie sich für das E / A-Treffer / Fehler-Verhältnis eines bestimmten Prozesses interessieren, ist das Lesen der
/proc/<pid>/io
Datei ein einfacher, aber sehr effektiver Ansatz .Hier finden Sie 4 Schlüsselwerte:
rchar
: Die Gesamtzahl der gelesenen Bytes aus Sicht der Anwendung (dh, es wird kein Unterschied zwischen dem Lesen aus dem physischen Speicher und nicht aus dem Cache gemacht).wchar
: wie oben, aber über geschriebene Bytesread_bytes
: Die tatsächlich aus dem Speichersubsystem gelesenen Byteswrite_bytes
: Die tatsächlich in das Speichersubsystem geschriebenen BytesAngenommen, ein Prozess hat die folgenden Werte:
Die Read Cache Miss Ratio (in Bytes) ist
100*200000/1000000 = 20%
und die Hit Ratio ist100-20 = 80%
Es gibt jedoch einen Haken: Der
rchar
Wert enthält den Wert "tty IO". Bei Prozessen, die viel von einer Pipe lesen / in eine Pipe schreiben, wird die obige Berechnung verzerrt und weist eine höhere Trefferquote auf als die effektive.quelle