8 Stimmen

Wie erkennt man, ob eine Copy-on-Write-Seite tatsächlich eine Kopie ist?

Wenn ich eine Kopie-bei-Bedarf-Zuordnung (eine MAP_PRIVATE) mithilfe von mmap erstelle, werden einige Seiten dieser Zuordnung sofort kopiert, sobald ich an bestimmten Adressen schreibe. An einem bestimmten Punkt in meinem Programm möchte ich herausfinden, welche Seiten tatsächlich kopiert wurden. Es gibt einen Aufruf namens 'mincore', aber dieser meldet nur, ob sich die Seite im Speicher befindet oder nicht, was nicht dasselbe ist wie die Seite kopiert oder nicht.

Gibt es eine Möglichkeit herauszufinden, welche Seiten kopiert wurden?

1voto

qdot Punkte 6005

Ich erinnere mich nicht daran, dass eine solche API exportiert wurde. Warum möchtest du so etwas tun (Was ist die Wurzel des Problems, das du lösen möchtest?)

Sie sollten sich vielleicht /proc/[pid]/smaps ansehen (das eine ziemlich detaillierte Statistik über verwendete/kopierte/gespeicherte Seiten liefert).

Noch einmal, warum möchtest du das tun? Wenn Sie sicher sind, dass dies der einzige Ansatz ist (normalerweise wird virtueller Speicher verwendet und vergessen), möchten Sie vielleicht in Betracht ziehen, ein Kernelmodul zu schreiben, das eine solche Funktionalität handhabt.

0 Stimmen

Ich implementiere derzeit eine softwarebasierte transaktionale Speicherung, die konsistente Lesezustände erfordert (MAP_SHARED bietet das nicht) und einen atomaren Schreibzugriff. msync könnte funktionieren, garantiert aber nicht, dass eine geschriebene Seite nicht vor dem Aufruf von msync in eine Datei geschrieben wird. Eine Lösung, auf die ich gekommen bin, war, ein MAP_PRIVATE mmap zu verwenden und dann die schmutzigen Seiten selbst auf die Festplatte zu schreiben, wonach ich die eigene Kopie ungültig machen würde.

0 Stimmen

Hallo, die smaps-Datei zählt nur die Anzahl der Seiten. Z. B .: Größe: 112 kB Rss: 96 kB Pss: 1 kB Shared_Clean: 96 kB Shared_Dirty: 0 kB Private_Clean: 0 kB Private_Dirty: 0 kB Referenziert: 96 kB Swap: 0 kB KernelPageSize: 4 kB MMUPageSize: 4 kB

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X