000
27.06.2004, 07:40
common
|
system ist linux 2.6.foo
ich hab getrusage() in mein programm foo.cpp implementiert, und es laeuft ansich auch aber long ru_ixrss; /* integral shared memory size */ long ru_idrss; /* integral unshared data size */ long ru_isrss; /* integral unshared stack size */
sind generell 0 ist das nun ein zeichen herrausragender performance, oder ist das nicht sauber implementiert
wenn das ein fehler meinerseits sein sollte, wie nutze ich die zahlen sinnvoll, ich hab in einem ircd die folgende umsetzung gefunden
struct rusage rus; time_t secs; time_t rup;
#ifdef hz # define hzz hz #else # ifdef HZ # define hzz HZ # else int hzz = 1; # endif #endif
rup = (CurrentTime - me.since) * hzz; if (0 == rup) rup = 1; secs = rus.ru_utime.tv_sec + rus.ru_stime.tv_sec; if (0 == secs) secs = 1; rup = (CurrentTime - me.since) * hzz; if (0 == rup) rup = 1; sendto_one(cptr, ":%s %d %s :CPU Secs %d:%d User %d:%d System %d:%d", me.name, RPL_STATSDEBUG, nick, secs/60, secs%60, rus.ru_utime.tv_sec/60, rus.ru_utime.tv_sec%60, rus.ru_stime.tv_sec/60, rus.ru_stime.tv_sec%60);
sendto_one(cptr, ":%s %d %s :RSS %d ShMem %d Data %d Stack %d", me.name, RPL_STATSDEBUG, nick, rus.ru_maxrss, rus.ru_ixrss / rup, rus.ru_idrss / rup, rus.ru_isrss / rup);
sendto_one(cptr, ":%s %d %s :Swaps %d Reclaims %d Faults %d", me.name, RPL_STATSDEBUG, nick, rus.ru_nswap, rus.ru_minflt, rus.ru_majflt); sendto_one(cptr, ":%s %d %s :Block in %d out %d", me.name, RPL_STATSDEBUG, nick, rus.ru_inblock, rus.ru_oublock); sendto_one(cptr, ":%s %d %s :Msg Rcv %d Send %d", me.name, RPL_STATSDEBUG, nick, rus.ru_msgrcv, rus.ru_msgsnd); sendto_one(cptr, ":%s %d %s :Signals %d Context Vol. %d Invol %d", me.name, RPL_STATSDEBUG, nick, rus.ru_nsignals, rus.ru_nvcsw, rus.ru_nivcsw);
um das 2te sendto_one() geht es konkret in meinen augen macht es wenig sinn rechenoperationen mit 2 struct timeval zu machen ... ich hab den ircd mal testweise kompiliert, und auch dort sind alle fraglichen werte =0 die ausgabe ist
--- CPU Secs 0:03 User 0:02 System 0:01 --- RSS 0 ShMem 0 Data 0 Stack 0 --- Swaps 0 Reclaims 1104 Faults 731 --- Block in 0 out 0 --- Msg Rcv 0 Send 0 --- Signals 0 Context Vol. 0 Invol 0
wenn da jemand eine erlaeuterung hat die nicht aus nem header kopiert ist oder nen direktlink auf google waere ich sehr dankbar getrusage ist in google total unterrepraesentiert
zwotes problem ist etwas einfacherer natur -hoffe ich- wenn man
const char foostruct[] { "bert" "lisa" }
hat, kann man mit
rand()%(sizeof(foostruct)/sizeof(*foostruct))
nen existierenden index fuer das struct gewinnen
nun haben bert und lisa allerdings nicht nur nen namen, sondern auchnoch ne addresse, bert hat sogar noch ne telefonnummer wir beschraenken die gesamtmoeglichen informationen pro eintrag auf 4 der erste eintrag zeigt auf, wieviel informationen wir ueber den user haben
const char fooextstruct[][5]{ { "3", "bert", "barstrasse", "2342", "" } { "2", "lias", "schluchtenweg", "", "" } }
wie kann man nun ein existierenden index auf ein user mittels rand() bekommen, ohne zu wissen wieviel user in dem struct sind
frage 2 ist trivial da analog, ich zieh sie zurueck
--
Dieser Beitrag wurde am 27.06.2004 um 09:45 von common bearbeitet.
|