Toon posts:

Proces tijd meten in Linux

Pagina: 1
Acties:

Verwijderd

Topicstarter
Zoun iemand mij kunnen vertellen hoe ik de procestijd van een programma kan meten in Linux?

Het liefst in de vorm van C/C++ of in de vorm van een shell script.

Dit is voor een vergelijking van programmaprestatie bedoeld.

Alvast bedankt :)

  • kieskes
  • Registratie: Juni 1999
  • Laatst online: 18:37
kijk is of 'top' niet wat voor je is

Verwijderd

Topicstarter
Op dinsdag 26 februari 2002 20:17 schreef kieskes het volgende:
kijk is of 'top' niet wat voor je is
Nou, dat had ik misschien even moeten vermelden, het komt nogal exact. Op enkele milliseconden :)..... Dus ik denk niet dat top iets is... Maar toch bedankt voor je reactie.

Verwijderd

code:
1
time <applicatie>

Echt waar ;)

  • kieskes
  • Registratie: Juni 1999
  • Laatst online: 18:37
Op dinsdag 26 februari 2002 20:19 schreef HammerHD het volgende:

[..]

Nou, dat had ik misschien even moeten vermelden, het komt nogal exact. Op enkele milliseconden :)..... Dus ik denk niet dat top iets is... Maar toch bedankt voor je reactie.
is het een proces wat je handmatig start?

dan: time 'proces'

Verwijderd

Topicstarter
Op dinsdag 26 februari 2002 20:20 schreef beelzebubu het volgende:
code:
1
time <applicatie>

Echt waar ;)
Ik zal eens ff kieken.... Iig alvast bedankt :D

Verwijderd

Topicstarter
Weet er toevallig nog iemand een manier om het in C++ te meten?? Dat zou me ook wel heel erg goed van pas komen :).

HammerHD

Verwijderd

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <sys/time.h>

int main()
{
  struct timeval ts1, ts2;

  gettimeofday(&ts1, NULL);

  // nu doe je hier wat je allemaal voor moois wil doen

  gettimeofday(&ts2, NULL);

  printf("This process took %.3lf seconds\n",
    ts2.tv_sec - ts1.tv_sec +
    (ts2.tv_usec - ts1.tv_usec) * 1.0 / 10^6);

  return 0;
}

Zoiets :)

Verwijderd

Topicstarter
Op dinsdag 26 februari 2002 20:43 schreef beelzebubu het volgende:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <sys/time.h>

int main()
{
  struct timeval ts1, ts2;

  gettimeofday(&ts1, NULL);

  // nu doe je hier wat je allemaal voor moois wil doen

  gettimeofday(&ts2, NULL);

  printf("This process took %.3lf seconds\n",
    ts2.tv_sec - ts1.tv_sec +
    (ts2.tv_usec - ts1.tv_usec) * 1.0 / 10^6);

  return 0;
}

Zoiets :)
Mmmmm..... Dat lijkt me C code of niet ??

  • BezurK
  • Registratie: Juni 2001
  • Laatst online: 14-06 09:12
Op dinsdag 26 februari 2002 21:52 schreef HammerHD het volgende:

[..]

Mmmmm..... Dat lijkt me C code of niet ??
Boeit dat?!

Rookworst zonder R is ook worst.


  • BezurK
  • Registratie: Juni 2001
  • Laatst online: 14-06 09:12
Je kan trouwens (ik weet niet of je dat bedoelt) hele gedetailleerde info over een programma verhalen dmb de profiler, moet je een programma compilen met de -p optie en, run dan de executable waardoor de file mon.out gecreerd word, vervolgens de de executable door de profiler halen ('prof <prog>') en je krijgt een heel leuk tabelletje :) (als het goed is ;))

Rookworst zonder R is ook worst.


Verwijderd

Op dinsdag 26 februari 2002 21:52 schreef HammerHD het volgende:

[..]

Mmmmm..... Dat lijkt me C code of niet ??
Je kan C in C++ gebruiken, toch? :Y)

Verwijderd

Topicstarter
Op dinsdag 26 februari 2002 20:43 schreef beelzebubu het volgende:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <sys/time.h>

int main()
{
  struct timeval ts1, ts2;

  gettimeofday(&ts1, NULL);

  // nu doe je hier wat je allemaal voor moois wil doen

  gettimeofday(&ts2, NULL);

  printf("This process took %.3lf seconds\n",
    ts2.tv_sec - ts1.tv_sec +
    (ts2.tv_usec - ts1.tv_usec) * 1.0 / 10^6);

  return 0;
}

Zoiets :)
Bedankt voor de code, maar een klein vraagje. In welke eenheid worden de seconden terug gegeven??? micro, pico, nano of gewoon seconden.. Ik ben er al met drie mensen naar wezen kijken en niemand komt eruit :?

  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

Op dinsdag 26 februari 2002 23:13 schreef HammerHD het volgende:

[..]

Bedankt voor de code, maar een klein vraagje. In welke eenheid worden de seconden terug gegeven??? micro, pico, nano of gewoon seconden.. Ik ben er al met drie mensen naar wezen kijken en niemand komt eruit :?
Die u doet me denken aan de griekse kleine letter 'm' die weer erg doet denken aan de westerse letter u.

Dus ik denk microseconden :)

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


Verwijderd

Op dinsdag 26 februari 2002 23:13 schreef HammerHD het volgende:

[..]

Bedankt voor de code, maar een klein vraagje. In welke eenheid worden de seconden terug gegeven??? micro, pico, nano of gewoon seconden.. Ik ben er al met drie mensen naar wezen kijken en niemand komt eruit :?
struct timeval ts1 en ts2 zijn timevals:
code:
1
2
3
4
struct timeval {
  tv_sec; /* seconds */
  tv_usec; /* milliseconds */
}

Dus als je ts2.tv_sec - ts1.tv_sec doet en daarbij optelt (ts2.tv_usec - ts1.tv_usec)*10^-6 dan heb je het aantal seconden tussen de twee tijdmetingen :)

Verwijderd

Topicstarter
Op dinsdag 26 februari 2002 23:51 schreef beelzebubu het volgende:

[..]

struct timeval ts1 en ts2 zijn timevals:
code:
1
2
3
4
struct timeval {
  tv_sec; /* seconds */
  tv_usec; /* milliseconds */
}

Dus als je ts2.tv_sec - ts1.tv_sec doet en daarbij optelt (ts2.tv_usec - ts1.tv_usec)*10^-6 dan heb je het aantal seconden tussen de twee tijdmetingen :)
Sorry dat ik weer aan kom zetten, maar usec staat volgens mij toch echt voor microseconden. Overigens mijn grote dank voor uw uitleg. Het heeft mij een stuk verder geholpen.

HammerHD :)

Verwijderd

Op woensdag 27 februari 2002 00:21 schreef HammerHD het volgende:

[..]

Sorry dat ik weer aan kom zetten, maar usec staat volgens mij toch echt voor microseconden. Overigens mijn grote dank voor uw uitleg. Het heeft mij een stuk verder geholpen.

HammerHD :)
Ja, ik ben weer lekker wakker, het is idd microseconds (vandaar ook de 10^6) |:( :P

  • Thijsch
  • Registratie: Februari 2002
  • Laatst online: 09-08 17:29
Op woensdag 27 februari 2002 00:21 schreef HammerHD onder iedere post het volgende:
HammerHD
Wij tweakers doen elkaar permanent de groeten. Het is dus niet nodig om steeds ruimteverspillende "greetz [user]" of iets dergelijks onder je post te plakken. Als je perse zoiets wilt kun je daar je signature voor gebruiken.
;)

Verwijderd

Topicstarter
Op woensdag 27 februari 2002 10:10 schreef Goedkoop het volgende:

[..]


[..]

;)
Aaaah, je bedoel dat ik dit niet meer moet doen:

Greetz Hammerhead :)

Verwijderd

Op donderdag 28 februari 2002 16:06 schreef HammerHD het volgende:

[..]

Aaaah, je bedoel dat ik dit niet meer moet doen:

Greetz Hammerhead :)
Juist ja ;)

Verwijderd

Topicstarter
Op dinsdag 26 februari 2002 20:43 schreef beelzebubu het volgende:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <sys/time.h>

int main()
{
  struct timeval ts1, ts2;

  gettimeofday(&ts1, NULL);

  // nu doe je hier wat je allemaal voor moois wil doen

  gettimeofday(&ts2, NULL);

  printf("This process took %.3lf seconds\n",
    ts2.tv_sec - ts1.tv_sec +
    (ts2.tv_usec - ts1.tv_usec) * 1.0 / 10^6);

  return 0;
}

Zoiets :)
Wanneer ik meerdere metingen verricht met bovenstaande code krijg ik
edit:
soms
negatieve resultaattijden in usec...???
Ik wist dat mijn PC snel was, maar zo snel ;)

Weet iemand de oorzaak hiervan??.. Zou ik zeer op prijs stellen.

Verwijderd

Topicstarter
Niemand een idee??

  • odysseus
  • Registratie: Augustus 2000
  • Laatst online: 23:41

odysseus

Debian GNU/Linux Sid

Kijk anders eens naar de source van 'time', misschien dat je daar iets uit kunt halen. Dat is wel C, maar omzetten naar C++ zou niet zo erg lastig moeten zijn...en anders roep je gewoon vanuit je eigen programma time aan :) . Time gebruikt zelf overigens wait3 om de informatie te berekenen, misschien met je eens kijken of je daar iets mee kunt.

Leven is het meervoud van lef | In order to make an apple pie from scratch, you must first create the universe.


Verwijderd

Op donderdag 28 februari 2002 16:46 schreef HammerHD het volgende:

[..]

Wanneer ik meerdere metingen verricht met bovenstaande code krijg ik
edit:
soms
negatieve resultaattijden in usec...???
Ik wist dat mijn PC snel was, maar zo snel ;)

Weet iemand de oorzaak hiervan??.. Zou ik zeer op prijs stellen.
Als je "(ts2.tv_sec - ts1.tv_sec) * 10^6 + (ts2.tv_usec - ts1.tv_usec)" doet, geeft ie dan negatieve waarden :?

Tsja.... :?

Verwijderd

Topicstarter
Op vrijdag 01 maart 2002 00:08 schreef beelzebubu het volgende:

[..]

Als je "(ts2.tv_sec - ts1.tv_sec) * 10^6 + (ts2.tv_usec - ts1.tv_usec)" doet, geeft ie dan negatieve waarden :?

Tsja.... :?
Ik heb de code op een foutieve wijze aangepast geloof ik :'(

De waardes die hieruit komen zijn in seconden of niet??

Dan heb ik namelijk onmogelijke uitkomsten zoals: 145.127 seconden. (Dat zou veeeeeeel te groot zijn).

Verwijderd

Topicstarter
Op vrijdag 01 maart 2002 01:08 schreef HammerHD het volgende:

[..]

Ik heb de code op een foutieve wijze aangepast geloof ik :'(

De waardes die hieruit komen zijn in seconden of niet??

Dan heb ik namelijk onmogelijke uitkomsten zoals: 145.127 seconden. (Dat zou veeeeeeel te groot zijn).
Laat maar hangen. 'k Heb al een hele onnauwkeurige meetmethode gevonden :(....
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//Main.cc
#include <sys/time.h>
#include <sys/resource.h>

int main() {
  rusage r;
  getrusage(RUSAGE_SELF, &r);
  long beginTijd = (r.ru_utime.tv_sec * 1000 +  r.ru_utime.tv_usec / 1000);
      
  //Hier de dingen die je wilt doen..

  getrusage(RUSAGE_SELF, &r);
  long eindTijd = (r.ru_utime.tv_sec * 1000 +     r.ru_utime.tv_usec / 1000);
  cout << eindTijd - beginTijd << "\n";
  return 0;
}

Verwijderd

Op vrijdag 01 maart 2002 01:08 schreef HammerHD het volgende:

[..]

Ik heb de code op een foutieve wijze aangepast geloof ik :'(

De waardes die hieruit komen zijn in seconden of niet??

Dan heb ik namelijk onmogelijke uitkomsten zoals: 145.127 seconden. (Dat zou veeeeeeel te groot zijn).
Nee, microseconden :P

Eerst kwamen er seconden uit, maar als ik seconden * 10^6 doe en microseconden * 1 dan komen er microseconden uit ;)

Verwijderd

Topicstarter
Op donderdag 28 februari 2002 16:46 schreef HammerHD het volgende:

[..]

Wanneer ik meerdere metingen verricht met bovenstaande code krijg ik
edit:
soms
negatieve resultaattijden in usec...???
Ik wist dat mijn PC snel was, maar zo snel ;)

Weet iemand de oorzaak hiervan??.. Zou ik zeer op prijs stellen.
De oorzaak van de negatieve tijden is de volgende: (ik zal proberen het uit te leggen :))....

Je hebt de volgende waarde:
- Begintijd seconden
- Eindtijd seconden
- Begintijd microseconden
- Eindtijd microseconden

Wanneer je op een bepaald moment een meting doet, heeft de begintijd seconden bijvoorbeeld de waarde 1000002 en begintijd microseconden de waarde 1003.
Wanneer je vervolgens de eindtijden op gaat vragen, dan kan het zo zijn dat je eindtijd seconden in de "volgende" seconde zit. Dus de waarde 1000003 heeft. Wanneer je dan de waarde eindtijd microseconden opvraagt, kan deze een kleinere waarde hebben, bijvoorbeeld 500, dan de begintijd microseconden, omdat je in een "volgende" seconde zit.Dit levert dan een negatieve waarde op, want:

eindtijd microseconden - begintijd microseconden = 500 - 1003 = -503.

|:(

Ik hoop dat het een beetje begrijpelijk is.... :)

Hier een voorbeeld van de uitkomst zoals ik die kreeg in Linux aan de hand van de formule van Beelzebubu ;)

ts1.tv_sec = 1015180659
ts2.tv_sec = 1015180660
ts1.tv_usec = 949435
ts2.tv_usec = 48504
De tijdsduur is : -75076.6

Verwijderd

Topicstarter
Op vrijdag 01 maart 2002 08:44 schreef beelzebubu het volgende:

[..]

Nee, microseconden :P

Eerst kwamen er seconden uit, maar als ik seconden * 10^6 doe en microseconden * 1 dan komen er microseconden uit ;)
Je moet toch de seconden delen door 10^6 om op microseconden te komen en de microseconden vermenigvuldigen met 10^6 om op de seconden te komen. Of ben ik nou gek :? |:(

Verwijderd

Op zondag 03 maart 2002 23:14 schreef HammerHD het volgende:

[..]

Je moet toch de seconden delen door 10^6 om op microseconden te komen en de microseconden vermenigvuldigen met 10^6 om op de seconden te komen. Of ben ik nou gek :? |:(
1 seconde is 1 miljoen microseconden, toch? ;)

Of wil jij zeggen dat 1 miljoen seconden (da's een stuk of wat honderd uur) gelijk staat aan 1 microseconde? :P
Pagina: 1