Entwickler-Ecke

Windows API - Festplatten-Zugriffszeit messen


AndrewPoison - Mo 19.05.08 10:51
Titel: Festplatten-Zugriffszeit messen
Hallo,
ich bin an der Entwicklung eines kleinen Tools, mit Hilfe dessen man die Zugriffszeit (speziell für SSDs) besser messen können soll.

Im Grunde ist dies ein total einfaches Unterfangen, dient am Ende auch eigentlich nur der eigenen Wissenserweiterung (falls interesse an dem Programm besteht, kann ich es natürlich auch zugänglich machen). Trotzdem bin ich dafür nun auf der Suche nach der optimalsten Funktion, mit Hilfe derer ich einen Zugriff auf eine beliebige Stelle der Festplatte/SSD durchführen kann?

Ich vermute mal das es sich um Windows-API-Funktionen handelt, deswegen hier der Thread.

Wäre für Vorschläge dankbar ;)


hazard999 - Mo 19.05.08 14:51

Am besten wäre es die Platte als physical Device zu öffnen.

Normales FileOpen verfälscht mit Cachen und Latenzen das Messergebnis


AndrewPoison - Mo 19.05.08 15:06

Mit PhysicalDevices hab ich bisher noch garnicht gearbeitet. Ich guck mal was die W32 SDK dazu ausspuckt. Aber wie ich den "Head" dann positionieren kann weiss ich immernoch nicht ;D

/edit:

so...

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
function GetReadings(Device: PChar; var Return: extended): boolean;
var
 hDevice: THandle;
 bResult: boolean;
 dJunk: dword;
begin
  hDevice := CreateFile(Device,
              0,FILE_SHARE_READ OR FILE_SHARE_WRITE,
              nil,OPEN_EXISTING,0,0);

  if hDevice = Invalid_Handle_Value then bResult := false
  else
  begin
    bResult := DeviceIoControl(hDevice,
              <IOCTL-BEFEHL HIER>, nil, 0,
              nil, 0, dJunk, nil);
    Return := dJunk;
  end;
  CloseHandle(hDevice);
  result := bResult;
end;


hab mir erstmal ne Funktion gebastelt mit der ich denke, dass ich erstmal zurechtkommen sollte.

Zum testen der (Lese-)Zugriffszeit sollte sich der Befehl IOCTL_DISK_READ eigenen, oder? Also damit könnt ich dann an bestimmte Stellen "springen" und die dafür benötigte Zeit messen? Der Referenzparameter "Return" dient mir nur um evtl. bissel was auszulesen was die Funktion zurückgegeben hat, in der finalen Version wird das nicht mehr gebraucht.