Festplattengeschwindigkeit messen
-
Übrigens ist das Programm auch mit einer Blockgröße von 1 bei mir nicht sehr lahm (0.67 Sekunden für die 10 MB). Keine Ahnung, woran es da bei dir hakt, probier erstmal meinen Code...
Vielleicht kommt Windows nicht so recht damit klar, wer weiß :p
[ Dieser Beitrag wurde am 16.06.2003 um 23:28 Uhr von RTC editiert. ]
-
Danke erstmal, nach gleich probieren!
hier meine zeitmessung. ist ziemlich 1:1 aus der Hilfe von Borland übernommen, wobei die nen fehler drinne hatten...
#include <stdio.h> #include <stdlib.h> #include <time.h> #include <sys\timeb.h> /* Speichern der Tageszeiten des pazifischen Standards */ char *tzstr = "TZ=PST8PDT"; int difftime(void) { struct timeb t1; struct timeb t2; putenv(tzstr); tzset(); ftime(&t1); printf("Seconds since 1/1/1970 GMT: %ld\n", t1.time); printf("Thousandths of a second: %d\n", t1.millitm); ftime(&t2); printf("Seconds since 1/1/1970 GMT: %ld\n", t2.time); printf("Thousandths of a second: %d\n", t2.millitm); getchar(); return ((t2.time*1000+t2.millitm)-(t1.time*1000+t1.millitm)); }
wobei ich das eigentlich noch soweit erweitern wöllte, dass ich im main zum beispiel mit...
dauer=difftime(write_hdd_file(groesse));
..aufrufen kann, so dass ich halt in dauer den rückgabewert von difftime speichern kann. und write_hdd_file(groesse) soll halt von difftime aus aufgerufen werden. ich hoffe das geht!
Ich merk schon wieder, C gefällt mir nirgendwie nicht wirklich. in pascal (ist aber zu lange her) hab ich wenigstens alles geblickt und Java macht auch nen schöneren Eindruck (kann ich abeer noch nicht viel)...
[ Dieser Beitrag wurde am 16.06.2003 um 23:58 Uhr von CyberTim editiert. ]
-
@RTC:
*zeit=(ende-start)/(double)CLOCKS_PER_SEC
blöde frage?! was bedeutet dieses CLOCKS_PER_SEC ???
was bewirkt mir das hier?
was würde rauskommen, wenn ich es weglassen würde?
-
ihr messt nicht wirklich mit clock(), wie schnell die platte ist, oder?
(sagt am besten "nein, tun wir natürlich nicht".)
-
@volkard: nein, tun wir natürlich nicht
Nee, ich wollte nur die Ablaufgeschwindigkeit testen, wie lang das Programm für den kompletten Schreibdurchlauf braucht. Was andres ist mir auf die Schnelle nicht eingefallen. Wie hättest du es gemacht?
-
Original erstellt von RTC:
Was andres ist mir auf die Schnelle nicht eingefallen. Wie hättest du es gemacht?zB aut intel architekturen kann man den ASM Befehl 'rdtsc' (Read Time Stamp Counter) nehmen - der ist ziemlich genu.
unter Windows kann man auch noch mit QueryPerformanceCounter() arbeiten und unter Unix bin ich mir nicht sicher, aber gettimeofday() hat eine aufloesung von millisekunden, das geht auch noch.
-
Hi,
gettimeofday() hat sogar eine Aufloesung auf microsekunden
mfg
v R
-
nur theoretisch oder auch praktisch unter jedem os?
-
nur unter unix
-
Original erstellt von CyberTim:
**@RTC:*zeit=(ende-start)/(double)CLOCKS_PER_SEC
blöde frage?! was bedeutet dieses CLOCKS_PER_SEC ???
was bewirkt mir das hier?
was würde rauskommen, wenn ich es weglassen würde?**Es würden die Ticks der CPU in dieser Zeit herauskommen. Da du aber keine CPU-Zeit, sondern normale Sekunden haben willst, musst du das Ganze durch die Ticks pro Sekunde (CLOCKS_PER_SEC) dividieren...
-
Original erstellt von RTC:
@volkard: nein, tun wir natürlich nicht
Nee, ich wollte nur die Ablaufgeschwindigkeit testen, wie lang das Programm für den kompletten Schreibdurchlauf braucht. Was andres ist mir auf die Schnelle nicht eingefallen. Wie hättest du es gemacht?ich hätte mich daran erinnert, daß clock die von meinem prozess verbraucte rechenezit misst, und dass das warten auf die platte da nicht dazugehören muss.
weitere folgerungen hätte ich noch geschlossen, aber das überlasse ich dem geneigten leser.
-
Original erstellt von <vr>:
nur unter unixBringt also nix unter Windows
-
Original erstellt von volkard:
**ich hätte mich daran erinnert, daß clock die von meinem prozess verbraucte rechenezit misst, und dass das warten auf die platte da nicht dazugehören muss.
**Nicht dazu gehören MUSS oder nicht dazu gehört? Ich habe Bücher gelesen, da wurde auch die Zeit von Schreibvorgängen so gemessen.
Ich meinte eher, wie DU die Zeit eines Schreibvorganges auf die Festplatte messen würdest?!
-
gettimeofday ist für meine zwecke aber auch nicht wirklich geeignet! da kommen werte bei raus, die zu gut sind! außerdrm brauch ich ne win32-exe wenns fertsch ist, da nützen mir die unix-erweiterungen gar nix...
-
Original erstellt von RTC:
Ich meinte eher, wie DU die Zeit eines Schreibvorganges auf die Festplatte messen würdest?!als uhr nem ich am liebsten rdtsc.
-
auf die nanosekunde genau brauch ich bei ner 100MB-File nicht die Zeit, ist auch egal...
Hab die Frage schon in der borland-Abteilung gestellt. kann man irgendwie die compile-optimierung abstellen?! hab nämlich das prob, wenn ich ne file shreibe und scnhließen gleich wieder einlesen will, der compi zum lesen 0,00... sekunden braucht. man betone bei 100 MB!
-
Original erstellt von CyberTim:
**auf die nanosekunde genau brauch ich bei ner 100MB-File nicht die Zeit, ist auch egal...Hab die Frage schon in der borland-Abteilung gestellt. kann man irgendwie die compile-optimierung abstellen?! hab nämlich das prob, wenn ich ne file shreibe und scnhließen gleich wieder einlesen will, der compi zum lesen 0,00... sekunden braucht. man betone bei 100 MB!**
summiere doch die jeweisl ersten bytes einer speicherseite und gibt die summe mit cout aus. dann kann er nix "wegoptimieren".
aber optimierungen einfach auszumachen, ist immer der falsche weg, wen man speed messen will, weil man dann unter ganz anderen bedingunen mißt, als man mal einsetzen würde.
-
Original erstellt von volkard:
[quote]als uhr nem ich am liebsten rdtsc.zum Thema: FAQ- Beitrag