Zeitmessung mit copy-on-write
Der Aufwand für das Klonen eines Prozesses verteuert sich, wenn einzelne Kacheln durch den Copy-on-Write-Mechanismus dupliziert werden müssen.
Das lässt sich austesten mit einem Array, auf das wir kachelweise zugreifen. Die Kachelgröße lässt sich bekanntlich mit dem Systemaufruf getpagesize ermitteln:
volatile char global[1048576];
Fragen
-
Warum wurde das Array mit volatile deklariert?
-
Warum reicht ein kachelweiser Zugriff?
Aufgabe
Sei \(G\) die Größe des globalen Arrays global und \(P\) die Kachelgröße. Erweitern Sie das Programm dahingehend, dass
-
\(\lfloor \frac{G}{P} \rfloor\) Messungen durchgeführt werden,
-
wobei bei der \(i\)-ten Messung (ab 0 gezählt) jeder Kindprozess \(i\) Kacheln im Array global verändert und
-
für jede Messung die Zahl der veränderten Kacheln und die gemessene Zeit in us auf einer Zeile ohne weiteren Text ausgegeben wird.
Dann können Sie anschließend das Ergebnis mit gnuplot visualisieren.