Kann die Verschmutzung von Seiten einer mmap aus dem Userspace gefunden werden?

Lesezeit: 2 Minuten

Benutzeravatar von fadedbee
verblasste Biene

Kann unter Linux 2.6.30+ vom Userspace aus auf die Verschmutzung von Seiten einer (nicht freigegebenen) mmap zugegriffen werden? Plattformspezifische Hacks und Kludges sind willkommen.

Im Idealfall suche ich nach einem Array von Bits, eines pro Seite (4 kB?) der Mmap-Region, die gesetzt werden, wenn auf diese Seite geschrieben wurde, seit die Region Mmap’ed wurde.

(Mir ist bewusst, dass der Prozess, der das Schreiben durchführt, diese Informationen verfolgen könnte – aber es scheint albern, dies zu tun, wenn der Kernel dies sowieso tut.)

Vielen Dank,

Chris.

Siehe /proc/*/pagemap und /proc/kpageflags-Schnittstellen. Erstens sagt Ihnen PFN für eine Adresse, zweitens sagt Ihnen Dirty Bit PFN gegeben.

Siehe fs/proc/task_mmu.c , Documentation/vm/pagemap.txt, Documentation/vm/page-types.c .

Die traditionelle Lösung besteht darin, mprotect nur zum Lesen zu verwenden und dann sigsegv zu behandeln und als schmutzig zu markieren, bevor der Schutz erneut ausgeführt wird, um Schreibvorgänge zuzulassen. Genau aus diesem Grund haben wir das bei ObjectStore vor langer Zeit getan.

  • Bitte geben Sie ein Beispiel, wie Sie zu diesem Zweck mit SIGSEGV umgehen und sich von ihm erholen.

    – Matt Tischler

    8. Dezember 2011 um 9:50 Uhr

  • Welcher Teil von „sigaction“ und „mprotect“ erscheint Ihnen schwierig?

    – bmargulies

    9. Dezember 2011 um 14:14 Uhr

  • Das OP weiß, dass dies auf diese Weise möglich ist, möchte diesen Overhead jedoch vermeiden.

    – pythonisch

    23. April 2012 um 17:00 Uhr

generische_schreibseiten und balance_dirty_pages_ratelimited_nr scheinen die Einstiegspunkte in den Kernel (2.6.20) zu sein, die sich auf schmutzige Seiten beziehen. Ich hoffe, sie funktionieren auch in 2.6.30+. Interessante Frage, darf ich fragen, was Sie schreiben, das eine solche Kontrolle über die Seiten erfordert?

  • Danke, ich werde einen Blick auf die Verwendung von generic_writepages werfen. Ich habe mich nur beiläufig gefragt, ob mmap als grobkörniges Pseudo-STM-System missbraucht werden könnte. Es kann sein, dass die bestehenden STM-Systeme das bereits tun, ich muss etwas Code durchgehen, wenn ich eine Minute Zeit habe.

    – verblasste Biene

    17. Juni 2010 um 12:17 Uhr

Diese Daten wären ständig veraltet – es ist möglich, dass die Seite zurückgeschrieben wird, nachdem Ihr Prozess feststellt, dass die Seite fehlerhaft ist.

Das heißt, der Tonweg besteht darin, es in Blöcken von einer Seite abzubilden und es sich dann anzusehen /proc/pid/smaps um zu sehen, ob die Chunks schmutzig sind – das kann allerdings fehlschlagen, wenn der Kernel die Seiten zusammenführt.

Da die Seitentabellen für den Benutzerbereichsprozess nicht sichtbar sind, ist dies leider das Beste, was Sie ohne einen Kernel-Patch tun können.

Wenn Ihr Array von Bits klein genug ist, können Sie vielleicht die Debug-Register auf Intel verwenden (obwohl ich nicht sicher bin, wie es unter Linux gemacht wird).

1432390cookie-checkKann die Verschmutzung von Seiten einer mmap aus dem Userspace gefunden werden?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy