AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Festplattenzugriff messen

Ein Thema von flattman · begonnen am 6. Jun 2003 · letzter Beitrag vom 15. Sep 2003
Antwort Antwort
Seite 1 von 2  1 2      
flattman

Registriert seit: 2. Nov 2002
Ort: Oldenburg (Oldenburg)
39 Beiträge
 
Delphi 2009 Professional
 
#1

Festplattenzugriff messen

  Alt 6. Jun 2003, 18:01
hallo,
ich habe vor mir ein kleiens diagnosetool zubasteln, welches mir verrät wie schnell der PC einen gewisse anzahl von bytes auf die festplatte schreiben kann. Wie mache ich das am besten? Soll ich die Timer Komponente mit verwenden und wie kann ich schnell die datei speichern bzw. viele Zeichen in kurzer Zeit erzeugen? ich denke die datei sollte dann max. 2 MB groß werden.

MFG & thx
Flattman
  Mit Zitat antworten Zitat
Benutzerbild von Specialwork
Specialwork

Registriert seit: 10. Jan 2003
Ort: Schwall
71 Beiträge
 
Delphi 8 Professional
 
#2

Performance Test der Festplatte

  Alt 7. Jun 2003, 01:09
Hallo Flatman,

Am besten, Du speicherst die gemessene Zeit direkt in Deine Testdatei und wertest Sie dann später aus.

Gruß, Tom
Thomas van Veen
Es gibt keine Probleme, nur Lösungen, auf die man nicht gleich kommt !
  Mit Zitat antworten Zitat
flattman

Registriert seit: 2. Nov 2002
Ort: Oldenburg (Oldenburg)
39 Beiträge
 
Delphi 2009 Professional
 
#3
  Alt 7. Jun 2003, 09:14
jp, so hatte ich mir das auch schon gedacht, nur muss ic ja irgendwo datenherbekommen und das immmer schnellst möglich. die datei soll ja um die 2MB haben damit das messen überhaupt richtig geht.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4
  Alt 7. Jun 2003, 09:42
Schreib doch die Daten mit BlockRead und mess jeweils, wie lange er für einen Block gebraucht hat und zum Schluß erstellst du die Statistik. Ob das jetzt aber so genau ist, weiß ich auch nicht das es auch stark von der Blockgröße abhängt. Idealerweise sollte sie ein Vielfaches von der Sektorgröße sein.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
tommie-lie
(Gast)

n/a Beiträge
 
#5
  Alt 7. Jun 2003, 14:00
Nicht zu vergessen ist der Cache. Zum einen der Windows-Softwarecache, und zum anderen der Hardwarecache in der Festplatte. Der Cache ist in jedem fall viel schneller als die Festplatte selbst.
Du müsstest den Controller (den IDE-, bzw SCSI-Controller natürlich) direkt ansprechen (Assembler) und ihm zufällige Datenfolgen an die Festplatte schicken lassen. Und selbst das ist noch zu ungenau, weil die Festplatte selbst mittlerweile ja auch Caches im Megabyte-Bereich hat. Ob man die Festplatte direkt zum Schreiben bewegen kann, entzieht sich meines Wissens. Am Sichersten ist es, extrem große Datenblöcke zu nehmen, die in keinen Cache mehr passen
  Mit Zitat antworten Zitat
Benutzerbild von eddy
eddy

Registriert seit: 4. Jan 2003
Ort: Sachsen
573 Beiträge
 
Delphi 5 Professional
 
#6
  Alt 7. Jun 2003, 23:09
Hallo flattman,

zu Assembler- und Turbo-Pascal-Zeiten konnte man, wenn ich mich recht entsinne, mit Interupt 14 direkt auf den Datenträger zugreifen.

Für ein Test-Tool ist das aber sicherlich nicht sinnvoll, weil die "normalen" Schreib-Lese-Zugriffe von Anwender-Software ja auch über die standardisierten Schnittstellen erfolgt. Cache würde ich auch nicht ausschalten, schließlich ist der ja dafür da, das System zu beschleunigen.

2 MB Daten erscheint aber doch arg wenig. Je mehr Daten, desto genauer dürfte der Durchschnittswert ausfallen.

Ich würde die Datenmenge einstellbar machen 1 MB bis 20 GB oder was immer so auf einer Partition frei ist.

Der Buffer mit den zu schreibenden Daten wäre bei mir ein Vielfaches von 1024 Byte, ich würde 64 k nehmen. Ob mit Nullen oder Einsen gefüllt dürfte egal sein, da diese sich beim Schreiben wohl nur in der Ausrichtung der Magnetschicht auswirken. Für jedes geschrieben Bit muß aber eine Magnetisierung erfolgen. Ob Nullen oder Einsen länger dauern ließe sich ja dann testen.

Startzeit und Endzeit zum Füllen des Puffers merken, den Vorgang einige Male wiederholen, dann dürften die Durchschnittswerte ziemlich genau ausfallen und unterschiedliche Systeme vergleichbar werden.

mfg
eddy
  Mit Zitat antworten Zitat
flattman

Registriert seit: 2. Nov 2002
Ort: Oldenburg (Oldenburg)
39 Beiträge
 
Delphi 2009 Professional
 
#7
  Alt 8. Jun 2003, 08:21
hallo eddy

Code:
zu Assembler- und Turbo-Pascal-Zeiten konnte man, wenn ich mich recht entsinne, mit Interupt 14 direkt auf den Datenträger zugreifen.
Ja das waren noch zeiten heute sperrt windows ja alle interrrupszugriffe. Leider. Ich habe schon oft das Problem gehabt.

Aber du hast recht der Anwender muss ja auch den Cache benutzen, denn will ich ja nicht mit ausschließen. Ich werde das so machen wie du vorgeschlagen hast, erstmal einen Stream mit 1em oder 0en füllen so auf 16 MB und dann schreiben lasssen. das dürfte ganz gut gehen, das ganze dann 10 mal hintereinander und dan den mittelwert, den meist dauert das speichern nur 1 sekunde. Deshalb ist es ein wenig unglücklich sich die STart und Endzit zu merken und dann die Differenz davon auszugeben. Gibt es denn nicht ne andere möglichkeit die zeit zumessen? ICh habe es mal mit timer versucht aber derstartet nicht, der gibt immer nur 0 aus und fertig ist obwohl der milisekunden ausgeben sollte.

MFG
Flattman
  Mit Zitat antworten Zitat
MadMason

Registriert seit: 9. Nov 2002
Ort: Altenburg
126 Beiträge
 
Delphi 2005 Architect
 
#8
  Alt 8. Jun 2003, 10:24
ich glaube für windows stellt ne ziemlich genaue methode bereit, bin mir aber nicht ganz sicher:
such mal nach gettickcount hier im forum.

MfG
Einstein ist tot
Newton ist tot
und mir ist auch schon ganz schlecht
  Mit Zitat antworten Zitat
Sebastian Nintemann
(Gast)

n/a Beiträge
 
#9
  Alt 8. Jun 2003, 12:29
Hallo flattman, MadMason hat Recht:
Mit GetTickCount kriegst du die Anzahl der vergangenen Millisekunden seit Systemstart. So kannst du ziemlich genau die verlaufene Zeit messen.

Delphi-Quellcode:
var
  start, ms: integer;
begin
  start := GetTickCount;
  
  { mach deine Aktionen... }
 
  ms := GetTickCount - start; //jetzt steht in ms die vergangene Zeit in Millisekunden.
end;
MfG, Sebastian
  Mit Zitat antworten Zitat
flattman

Registriert seit: 2. Nov 2002
Ort: Oldenburg (Oldenburg)
39 Beiträge
 
Delphi 2009 Professional
 
#10
  Alt 8. Jun 2003, 15:00
ok thx
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:38 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