Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Festplattenstress erzeugen (https://www.delphipraxis.net/39158-festplattenstress-erzeugen.html)

emsländer 29. Jan 2005 15:52


Festplattenstress erzeugen
 
Hallo,

für ein Testprogramm muss ich einen Plattenstress erzeugen.

10,30,60 sekunden Step by Step read
Messungen: Time for Step by Step, Bytes Read

10,30,60 sekunden ramdom seek:
Messungen: Time for Track to Track, Bytes Read

DMA - Lesegeschwindigkeit ausmessen.


und nu wie? :gruebel:

Gruss

EL

mael 29. Jan 2005 19:43

Re: Festplattenstress erzeugen
 
Falls das Programm nur unter NT aufwärts laufen soll, kann man CreateFile, FileRead verwenden um direkt Sektoren auszulesen.

Damit läßt sich dann analog zu Dateien eine Reihe von aufeinanderfolgenden Sektoren auslesen.
Diese Sache sollte auch ungecacht (von der Windows-Seite her) sein, also für Performance-Messungen geeignet.
Random-Access muß halt durch möglichst unregelmäßigen Zugriff gemessen werden. Also nicht aufeinanderfolgende Daten, sondern "zufällig" verteilt.


Mit
Delphi-Quellcode:
DeviceHandle := CreateFile('\\.\PHYSICALDRIVE0', GENERIC_READ,
    FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING,
    FILE_FLAG_RANDOM_ACCESS, 0);
kann man auf die erste physische Festplatte zugreifen.

Delphi-Quellcode:
FileSeek(DeviceHandle, Position, ord(soBeginning));
Position ist die BytePosition (also nicht Sektor basiert).

Delphi-Quellcode:
FileRead(DeviceHandle, SectorBuffer^, Count);
liest dann einfach Daten in einen Puffer.

Delphi-Quellcode:
DeviceIoControl(DeviceHandle, IOCTL_DISK_GET_DRIVE_GEOMETRY, nil, 0,
    @DiskGeometry, sizeof(DiskGeometry), Dummy, nil)
liefert alle wichtigen Informationen zum Aufbau der Festplatte, z.B. Bytes pro Sektor.

Delphi-Quellcode:
CloseHandle(DeviceHandle);
sollte am Ende nicht vergessen werden!

Ein Paar Sachen sind zu beachten: Man kann nur an Sektorgrenzen mit dem Lesen beginnen und man braucht Administratorrechte.

Unter 9X geht das auch ist aber aufwändiger: Bin gerade dabei dafür eine DLL zu entwickeln; man muß auf BIOS-Aufrufe zurückgreifen und das geht nur von einer 16-Bit DLL oder einem Treiber (noch komplizierter und nicht in Delphi machbar) aus.

Ein Blick in die Windows-API Hilfe (MSDN) zu diesen Funktionen ist für weitere Details sicher sinnvoll.

Zur DMA Lesegeschwindigkeit:
Ich wüßte nicht wie man das machen soll, außer daß man es abstellt im Gerätemanager, wofür man (soweit ich mich erinnere) einen Neustart braucht.

Hoffe das hilft,
Gruß Maël.

P.S.: Aus Neugierde: Was ist das für ein Testprogramm?

mael 29. Jan 2005 19:45

Re: Festplattenstress erzeugen
 
Ach so, noch etwas:

Die Windows-API Funktionen QueryPerformanceCounter zusammen mit QueryPerformanceFrequency erlauben dann natürlich die Zeitmessung.

emsländer 29. Jan 2005 19:52

Re: Festplattenstress erzeugen
 
Erstmal Danke,

da soll mal ein Proggi bei rauskommen, welches zunächst die Performance testet. Auch Temperatur soll dabei gemessen werden etc.

Dann soll auch jeweils eine Platte einer Reihe einem Dauerstresstest unterzogen werden. (evtl. bis zum dadurch provozierten Ableben)


Gruss

EL


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:17 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz