Anzeige:
Ergebnis 1 bis 6 von 6

Thema: Zeits seit kernel start

  1. #1
    Registrierter Benutzer
    Registriert seit
    27.04.2005
    Beiträge
    33

    Zeit seit kernel start

    Hallo,

    ich suche eine(n) Funktion/Syscall/... mit hilfe dessen ich die Zeit seit start des linux-kernels bekomme. ich brauche aber eine höhere auflösung als in /proc/uptime. ideal wäre die form wie sie im syslog von vielen distributionen steht:
    Code:
    [    1.320709] TCP cubic registered
    gruß iluminat23
    Geändert von iluminat23 (03-01-2011 um 12:01 Uhr)

  2. #2
    Registrierter Benutzer Avatar von jeebee
    Registriert seit
    01.01.2005
    Ort
    Bern || Zürich
    Beiträge
    540
    Code:
    #include <time.h>
    #include <errno.h>
    #include <stdio.h>
    
    int main() {
    	struct timespec t;
    	if (clock_gettime(CLOCK_MONOTONIC, &t) < 0) {
    		perror("clock_gettime");
    		return 1;
    	}
    	printf("%u.%lu\n", (unsigned)t.tv_sec, t.tv_nsec);
    }
    Kompilieren mit
    Code:
    gcc -lrt -o clk clk.c
    my very own 128 bit integer
    C4 D3 B8 A8 9E A0 C6 EC 7D EC A8 15 28 D1 92 58
    more information

  3. #3
    Registrierter Benutzer
    Registriert seit
    27.04.2005
    Beiträge
    33
    Hallo jeebee,

    danke für den tipp. leider hinkt die zeit die ich mit clock_gettime(CLOCK_MONOTONIC, ...) bekomme ungefähr 10s hinter der zeit im vergleich zum syslog her. die manpage schreibt folgendes:
    CLOCK_MONOTONIC
    Clock that cannot be set and represents monotonic time since some unspecified starting point.
    dies ist für mich leider nicht brauchbar. ich brauche eine festen startpunkt. am besten bootzeit des kernels oder einschlatzeitpunkt der CPU.

    ein wenig mehr zum hintergrund:
    ich schreibe aktuell einen init-prozess für eine embedded platform. diese Zeiten sollen hinweise für die startzeit der verschiedenen services und aktionen bieten. ich weiß, dass dies keine gute profiling methode darstellt.

    gruß iluminat23

  4. #4
    Registrierter Benutzer Avatar von jeebee
    Registriert seit
    01.01.2005
    Ort
    Bern || Zürich
    Beiträge
    540
    Also bei mir hat's jetzt (zufällig?) ziemlich genau die gleichen Werte wie im syslog gegeben

    Code:
    $ ./clk 
    26959.132885839
    Segmentation fault
    Code:
    [26959.132975] clk[1286]: segfault at 0 ip 0000000000400645 sp 0007fff8b5f5f40 error 4 in clk[400000+1000]
    my very own 128 bit integer
    C4 D3 B8 A8 9E A0 C6 EC 7D EC A8 15 28 D1 92 58
    more information

  5. #5
    Registrierter Benutzer
    Registriert seit
    27.04.2005
    Beiträge
    33
    hier:
    Code:
    ./time 
    18844.81925274
    Segmentation fault
    und:
    Code:
    [18847.986850] time[7454]: segfault at fffffffd ip 0017fe91 sp bf9eddf8 error 4 in libc-2.11.1.so[110000+153000]
    gruß iluminat23

  6. #6
    Registrierter Benutzer Avatar von jeebee
    Registriert seit
    01.01.2005
    Ort
    Bern || Zürich
    Beiträge
    540
    hmm, hab mal ein bisschen im Kernel rumgestöbert und folgendes gefunden:

    start_kernel() -> timekeeping_init() liest die aktuelle Zeit zum Aufruf-Zeitpunkt oder Architektur-Spezifisch den Bootzeitpunkt aus.

    Dieser Timestamp wird dann als 0 für CLOCK_MONOTONIC verwendet.

    printk (also das syslog) verwendet cpu_clock(), die je nach Architektur auf einem HW-Timer oder sonstwas basiert.
    my very own 128 bit integer
    C4 D3 B8 A8 9E A0 C6 EC 7D EC A8 15 28 D1 92 58
    more information

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •