Berechne die durchschnittliche Zeit zum Lesen von Bytes auf einer Platte

359
Charlie_K

Frage gibt mir folgende Parameter:

Spurensuchzeit = 10 ms (Millisekunde).

Die Umdrehungsgeschwindigkeit der Scheibe beträgt 9000 Umdrehungen pro Minute

Sektoren auf jeder Spur = 600

Jeder Sektor kann 512 Byte Daten speichern.

Die Frage fordert mich auf, die durchschnittliche Zeit zum Lesen von 1024 Bytes zu berechnen.

Ich muss wissen, ob ich es richtig gemacht habe. Ich wäre dankbar, wenn sich jemand meine Lösung ansehen könnte.

solution

equation for seek time from William Stallings, Computer Architecture and Organization 10e

1
Wir machen keine Hausaufgaben. DavidPostill vor 5 Jahren 0

2 Antworten auf die Frage

1
Akina

Zum Lesen von 1024 Bytes (1024/512 = 2 Sektoren) benötigen Sie:

  • suche mit dem ersten Sektor auf die Strecke. 10 ms
  • Warten Sie, bis der Start des ersten Sektors die Kopfposition erreicht hat. Warten Sie darauf - 0 ms min, 60 * 1000/9000 = max. 6,67 ms, durchschnittlich 3,33 ms
  • Sektor lesen. 1 / (600 * (9000/60)) = 0,011 ms. Vernachlässigen.
  • Der zweite Sektor kann sich auf derselben Spur oder auf einer anderen Spur befinden. Suchzeit - 0 ms min, 10 ms max, 5 ms Durchschnitt
  • Warten Sie, bis der 2. Sektorstart die Kopfposition erreicht hat. Warten Sie darauf - 0 ms min, maximal 6,67 ms, durchschnittlich 3,33 ms
  • Sektor lesen. Vernachlässigen.

Insgesamt: 10 + 3,33 + 5 + 3,33 ~ 21,7 ms

PS. Denken Sie nicht "Wenn keine Suche zwischen Sektoren ist, ist die Wartezeit 0". Niemand sagt, dass die Sektoren benachbart sind.

0
DaaBoss

Ich werde im Moment davon ausgehen, dass Sie wirklich versuchen, ein Verständnis dafür zu erlangen, was die Datenraten in der realen Welt bestimmen und nicht nur theoretisch. Im Allgemeinen sind alle diese Details heute etwas banal, es sei denn, Sie schreiben Gerätetreiber für das Betriebssystem, wie es meine Firma einmal getan hat, oder das Datenbankmodul selbst. Diese tatsächlichen Details werden meist durch viele Faktoren der Hardware und des Betriebssystems maskiert, gefiltert, kompensiert und verborgen, sodass Sie normalerweise nicht beobachten können, was direkt passiert.

Noch immer zu verstehen, was die Ursachen verursacht und keine Leistungsprobleme verursacht, kann wichtig sein.

Die durchschnittliche "Lesedatenrate" für Datenbanken hängt hauptsächlich von der Größe der E / A ab, die Sie auf einmal verschieben, und davon, ob sie zusammenhängend ist oder nicht. Sie ist auch von der Festplatte selbst abhängig und meldet ihre wahren Hardware-Parameter, die oft nur simuliert werden. (Gibt es beispielsweise wirklich 600 Sektoren pro Spur? Da die Außenspur einer Platte viel größer ist, werden in den letzten 30 Jahren bei jeder Festplatte wesentlich mehr Sektoren auf der Außenspur vorhanden sein als auf der Innenseite.) Hier einige Leistungsbeispiele Das waren die wahren Parameter:

Datenbank-Lesevorgänge: Normalerweise bedeutet das, dass die Sektornummern auf der gesamten Festplatte zufällig gelesen werden (von vermutlich 1024 Bytes von 2 aufeinanderfolgenden 512 Sektoren) und sich keiner der Sektoren im Speicher oder in einem anderen Cache befindet. In diesem Fall beträgt Ihre durchschnittliche Datenrate werde sein:

10 MS = Head Seek Neupositionierung: (Beachten Sie, dass Sie nur 100 Suchvorgänge in einer Sekunde ausführen können. Daher werden 100 KB / Sek. Die schnellsten sein, die Sie je nach Zufall 1024 lesen können.)

1? MS = Command Overhead = unbekannt: Dies war bisher signifikant, bis zu 8 MS. Heute ist es wahrscheinlich mehr abhängig von Ihrem Betriebssystem, das Ihre Anfragen effizient verarbeitet. Wenn Ihr System auch viele MB auf die Festplatte auslagert, führt dies zu einer erheblichen Verlangsamung. Die IO von und zu den Festplatten sind heute wahrscheinlich weniger als eine MS. Dies kann leicht mit einer SSD getestet werden, um den Bus- und Firmware-Overhead einer sich drehenden HD zu simulieren. Hier eingeschlossen ist normalerweise die Zeit zum Wechseln der Leseköpfe, vorausgesetzt, Sie waren bereits auf der richtigen Spur oder dem richtigen Zylinder. Dies beinhaltet auch die Rückgabe der verschobenen Daten an das Betriebssystem. Achten Sie darauf, dass die Gesamtunterbrechungszeit der CPU <1% bleibt, was auf ein Problem mit der Festplattenhardware hinweisen kann. Wilde Vermutung? <1 MS, was noch signifikant sein könnte.

3,3 MS = Drehen, bis sich der Sektor unter den Köpfen befindet: 9000 U / min / 60 s = 6,67 MS. Die Wahrscheinlichkeit, am nächsten oder am weitesten entfernt zu sein, beträgt 50%. Daher beträgt die Verzögerung für jede IO 3,33 MS. Hinweis: Das bedeutet, dass ein zufälliger Lesevorgang, wenn der Kopf bereits über der korrekten Spur positioniert ist, immer noch 3,33 MS beträgt und dass Ihre maximale Datenrate bei 1k IO niemals 300 KB / Sek.

0,022 MS = Kopflesezeit: 6,67 MS / 600 Sektoren * 2 = 1024 Lesen ==> 0,022 MS. Dies bedeutet, dass die maximale Datenrate dieser Platte 1 / 0,022 MS = 45.000 * 1024 = 46 MB / Sek beträgt. Für Datenbanklesevorgänge / -abfragen ist dies völlig unerheblich. Wenn Sie jedoch die gesamte Datenbank verschieben, ist dies der wichtigste Faktor.

In diesem Fall liegt Ihre "Datenbank-Lesegeschwindigkeit" bei ~ 14.355 MS = 70 KB / Sek. Beachten Sie, dass die Rate die Hälfte ist, wenn der IO 512 war (die 022-MS ignoriert). Mit 2.048 ist der Preis doppelt. Der wichtigste Parameter ist also die Größe der zusammenhängenden Sektoren, bis Sie eine vollständige Spurablesung erhalten (vorausgesetzt, alle Plattensektoren selbst sind zusammenhängend.)