priest91 Δημοσ. 1 Μαρτίου 2011 Share Δημοσ. 1 Μαρτίου 2011 Εχω φτιαξει ενα προγραμματακι που χρονομετραει σε real time σε cpu time σε user time και σε kernel time μια εφαρμογη χρησιμοποιωντας τους ITIMER_REAL ITIMER_VIRTUAL και ITIMER_PROF χρονομετρητες.. Σε ubuntu 10.04 καταφερνω και αυξανω τον kernel time σε debian δε τα καταφερνω καλωντας τα ιδια syscalls.. Ξερετε τι μπορει να φταει γι αυτο; Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
jemadux Δημοσ. 1 Μαρτίου 2011 Share Δημοσ. 1 Μαρτίου 2011 το μηχανημα ειναι το ιδιο ? Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
priest91 Δημοσ. 1 Μαρτίου 2011 Μέλος Share Δημοσ. 1 Μαρτίου 2011 οχι το ubuntu ειναι σε laptop ενω το debian ειναι σε pc της σχολης.. το εχω τρεξει και σε ubuntu σε αλλο pc και κανει κανονικα αυτο που θελω οπως και σε fedora κανει αυτο που θελω Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
NullScan Δημοσ. 2 Μαρτίου 2011 Share Δημοσ. 2 Μαρτίου 2011 Τί kernel τρέχει το debian; Για εκδόσεις πρίν τον 2.6.20 περίπου μπορεί να χρειάζεσαι διαφορετικό κώδικα γιατί τότε ο timer του kernel μέτραγε σε jiffies. Σου επιστρέφει κάποιο errno; Δώσε μας κώδικα, kernel version και libc version. Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
priest91 Δημοσ. 2 Μαρτίου 2011 Μέλος Share Δημοσ. 2 Μαρτίου 2011 πως βρισκω το kernel version και το libc version? δε μου επιστρεφει καποιο errno. αυτο που κανω ειναι να δημιουργω και να διαγραφω εναν φακελο καπου 500 φορες με mkdir() kai rmdir() ωστε να μεγαλωσει το kernel time μιας και ειναι ασκηση καλο θα ηταν να μην γραψω εδω τον κωδικα.. Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
NullScan Δημοσ. 2 Μαρτίου 2011 Share Δημοσ. 2 Μαρτίου 2011 kernel version παίρνεις με uname -r. Για την libc πρέπει να κοιτάξεις τον package manager για να δείς ποιά ειναι εγκατεστημένη. Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
priest91 Δημοσ. 2 Μαρτίου 2011 Μέλος Share Δημοσ. 2 Μαρτίου 2011 libc = 2.3.6 το βρηκα ετσι γιατι δε μπορω να δω τον package manager ζηταει root κωδικο τον οποιο δεν εχω.. #include <stdio.h> #include <gnu/libc-version.h> int main (void) { puts (gnu_get_libc_version ()); return 0; } kernel = 2.6.18-4-686 Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
NullScan Δημοσ. 2 Μαρτίου 2011 Share Δημοσ. 2 Μαρτίου 2011 Χωρίς κώδικα δέν θα βγάλουμε άκρη όμως... Πρέπει να μοιάζει κάπως έτσι: >struct itimerval timer; if (setitimer (ITIMER_REAL, &timer) < 0) exit (-1); Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
priest91 Δημοσ. 2 Μαρτίου 2011 Μέλος Share Δημοσ. 2 Μαρτίου 2011 > signal(SIGALRM,child2_handler); signal(SIGVTALRM,child2_handler); signal(SIGPROF,child2_handler); /* set the child 2 itimers */ if(setitimer(ITIMER_PROF,&c2_proft,NULL) == -1) printf("Child 2 ITIMER_PROF error set\n"); if(setitimer(ITIMER_REAL,&c2_realt,NULL) == -1) printf("Child 2 ITIMER_REAL error set\n"); if(setitimer(ITIMER_VIRTUAL,&c2_virtt,NULL) == -1) printf("Child 2 ITIMER_VIRTUAL error set\n"); /*start yourfunction() at child 2*/ res = increasekerneltime(); /* Read the child 2 itimer values, and report them */ getitimer(ITIMER_PROF,&c2_proft); getitimer(ITIMER_REAL,&c2_realt); getitimer(ITIMER_VIRTUAL,&c2_virtt); printf("\n"); printf("Child 2 res = %ld, real time = %ld sec\n",res, c2_realt_secs); printf("Child 2 res = %ld, cpu time = %ld sec\n",res, c2_proft_secs); printf("Child 2 res = %ld, user time = %ld sec\n",res, c2_virtt_secs); printf("Child 2 res = %ld ,kernel time = %ld sec\n",res, c2_proft_secs - c2_virtt_secs); οπου increasekerneltime(){ >long unsigned int increasekerneltime(){ int i; for(i=0;i<500000;i++){ chdir("/home/Desktop"); mkdir("APOTOPROGRAMMA",777); rmdir("APOTOPROGRAMMA"); } } ο χρονομετρητης ειναι σεταρισμενος ετσι ωστε να μηδενιζεται ανα δευτερολεπτο και οταν μηδενιζεται στελνει το αντιστοιχο σημα το οποιο χειριζομαι για να αυξησω μια static μεταβλητη κατα 1 Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
NullScan Δημοσ. 2 Μαρτίου 2011 Share Δημοσ. 2 Μαρτίου 2011 Οι μεταβλητές c2_realt_secs κτλ με ποιό member του itimer struct ισούνται; Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
priest91 Δημοσ. 2 Μαρτίου 2011 Μέλος Share Δημοσ. 2 Μαρτίου 2011 static long ειναι και αυξανεται οταν σταλει σημα.. Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
NullScan Δημοσ. 2 Μαρτίου 2011 Share Δημοσ. 2 Μαρτίου 2011 Το μόνο που μπορώ να σου δώσω είναι ένα εντελώς sample κώδικα, ελαφρώς διαφορετικό από το δικό σου. Κάτι τέτοιο: >#include <signal.h> #include <stdio.h> #include <string.h> #include <sys/time.h> void thandler (int signal) { static int count = 0; printf ("counter %i\n", ++count); } int main () { struct sigaction sa; struct itimerval timer; memset (&sa, 0, sizeof (sa)); sa.sa_handler = &thandler; sigaction (SIGVTALRM, &sa, NULL); timer.it_value.tv_sec = 0; timer.it_value.tv_usec = 250000; timer.it_interval.tv_sec = 0; timer.it_interval.tv_usec = 250000; setitimer (ITIMER_VIRTUAL, &timer, NULL); while (1); } Το οποίο κάνει expire τον timer κάθε 250 milliseconds. Η διαφορά ουσιαστικά με τον δικό σου είναι η χρήση του sigaction. Λείπουν διάφορα πράγματα από τον δικό σου κώδικα (λογικό, αφού θέλεις να το κάνεις μόνος σου σαν άσκηση) οπότε δέν ξέρω αν ο παραπάνω κώδικας θα σου λύσει το θέμα. Όταν λές οτι στο debian δέν παίζει, τί τιμές σου δίνει δηλαδή; Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
priest91 Δημοσ. 2 Μαρτίου 2011 Μέλος Share Δημοσ. 2 Μαρτίου 2011 τρεχει το φιμπονατσι 42 ωστε να αυξησω το cpu time Child 1 res = 267914296, real time = 6 sec Child 1 res = 267914296, cpu time = 6 sec Child 1 res = 267914296, user time = 6 sec Child 1 res = 267914296, kernel time = 0 sec τρεχει το increasekernel time και εμφανιζει αυτα Child 2 res = 0, real time = 12 sec Child 2 res = 0, cpu time = 0 sec Child 2 res = 0, user time = 0 sec Child 2 res = 0 ,kernel time = 0 sec σε ubuntu στο child2 το kernel time ειναι ισο με το real time οπως θελω να ειναι τελικα καταλαβα τι ειναι λαθος.. για καποιο λογο δεν διαχειριζεται τα signals SIGVALRM και SIGPROF αλλα στο child1 μπορει ενω στο 2 οχι Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
NullScan Δημοσ. 2 Μαρτίου 2011 Share Δημοσ. 2 Μαρτίου 2011 Κοίτα, άν το πρόβλημα είναι μόνο στο child 2 τότε υπάρχει ενδεχόμενο να μήν φταίει το πρόγραμμά σου αλλά το operation που κάνεις και μτρεάς το user και cpu time, δηλαδή το mkdir και rmdir. Από απλή περιέργεια, στο Ubuntu και στο Fedora που λές, κάνε ένα copy εδώ το /etc/fstab αρχείο ή κοίτα μόνος σου να δείς άν υπάρχει κάποιο option από τα atime/realtime/strictatime. Αυτό μπορεί να επηρρεάσει τελικά το kernel time που παίρνεις πίσω από την itimeval. Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
priest91 Δημοσ. 2 Μαρτίου 2011 Μέλος Share Δημοσ. 2 Μαρτίου 2011 οχι δεν υπαρχει καποιο τετοιο option.. Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.