1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Was ist DTrace?

Dieses Thema im Forum "macOS & OS X" wurde erstellt von Juuro, 18.10.07.

  1. Juuro

    Juuro Schafnase

    Dabei seit:
    07.11.05
    Beiträge:
    2.255
    Hallo allerseits!

    Mac OS 10.5 Leopard bringt ja auch eine Funktion namens DTrace mit sich. In diversen anderen Threads haben sich schon einige andere Leute speziell auf dieses Feature sehr gefreut. Ich wollt mich mal darüber schlau machen, aber das einzige was ich bei Wikipedia gefunden hab, war ein Satz im Solaris-Artikel:
    Und dann eben noch die Info de bei Apple steht:
    Irgendwie kann man damit das Betriebssystemverhalten beobachten oderso...

    Kann mir hier jemand erklären wie das genau funktioniert?

    Viele Grüße, Juuro
     
  2. DukeNuke2

    DukeNuke2 Wagnerapfel

    Dabei seit:
    17.01.06
    Beiträge:
    1.559
    grob gesagt ist dtrace ein tool um vorgänge im betriebssystem sichtbar zu machen. und das völlig wertfrei, also nicht aussagen wie: "das geht nicht" sondern nur messwerte erfassen die dann interpretiert werden müssen. das geht los mit dem zählen von paketen die zu einer bestimmten zeit über einen bestimmten port des netzes kommen und geht bis zum auslesen der kernelparameter und auch welche funktion aus einem programm die änderung der arbeitsspeicherauslastung hervorgerufen hat.
    dtrace kommt von sun und ist in solaris 10 schon seit längerem integriert. um dtrace nutzen zu können sind im ganzen system die sogenannten dtrace-provider implementiert. man könnte diese provider als eine art sensorpunkte sehen an denen messdaten abgefragt werden können. die messungen beeinträchtigen NICHT die leistung des systems und die dtrace scripte können ein laufendes system nicht zum absturz bringen da sie keinerlei aktiven inhalt haben.
    mehr zu thema dtrace gibt es bei sun:
    http://www.sun.com/bigadmin/content/dtrace/

    was man mit dtrace alles machen kann ist gelinde gesagt DER WAHNSINN... man kann tastatureingaben von usern monitoren oder von einer ssh anmeldung sogar die passworteingabe in klartext lesen. wichtiger sind natürlich das auslesen von speicher und performancedaten von festplatten und memory.
    wichtig dabei ist das nur der user root dtrace nutzen kann! um allerdings dtrace nutzen zu können, muss man schon einen tiefen einblick in die funktionen des os/kernel/treiber haben. oder man nutzt die scripte anderer leute die es (jedenfalls für soalris) mittlerweile recht häufig gibt (ich nutze da das dtrace-toolkit).

    hth,
    DN2
     
    #2 DukeNuke2, 18.10.07
    Zuletzt bearbeitet: 18.10.07
  3. Juuro

    Juuro Schafnase

    Dabei seit:
    07.11.05
    Beiträge:
    2.255
    Okay, dann mal sehen wie das in OS X dann aussieht und ob mir das mal was nützt. Dankesehr.

    PS: Ja der Beitrag ist verständlich! :)
     
  4. Hobbes_

    Hobbes_ Gast

    Vielen Dank für die Infos. Bei einem so mächtigen Info-Tool kommen einem schon Bedenken bzgl Datensicherheit, die offensichtlich (wie man an root erkennt) berücksichtigt wurden...
     
  5. Bier

    Bier Pomme au Mors

    Dabei seit:
    24.08.07
    Beiträge:
    867
    Da hat ja gleich der Richtige geantwortet - arbeitest Du bei Sun?
     
  6. DukeNuke2

    DukeNuke2 Wagnerapfel

    Dabei seit:
    17.01.06
    Beiträge:
    1.559
    in eingien der vorgefertigten scripte wird extra darauf hingewiesen das man sie nicht zu "bösen" zwecken nutzen soll! sowas sollte man mal allen bombenlegern und anderen verbrechern sagen: "och komm... mach doch nix böses mit der bombe..." ;)
    es bleibt auch noch abzuwarten wie die implementierung in 10.5 aussieht. denn alleine das schreiben von dtrace scripten ist nicht ganz ohne! dafür gibt es sogar eine eigene "programmiersprache" namens : d.
    das sieht dann, mal in auszügen, so aus:

    Code:
     /*
      * Print header
      */
     dtrace:::BEGIN 
     {
            last_event[""] = 0;
    
            /* starting values */
            counts = COUNTER;
            secs = INTERVAL;
            disk_r = 0;
            disk_w = 0;
    
            printf("Tracing... Please wait.\n");
     }
    
     /*
      * Check event is being traced
      */
     io:genunix::start,
     io:genunix::done 
     { 
            /* default is to trace unless filtering, */
            this->ok = FILTER ? 0 : 1;
    
            /* check each filter, */
            (OPT_device == 1 && DEVICE == args[1]->dev_statname)? this->ok = 1 : 1;
            (OPT_file == 1 && FILENAME == args[2]->fi_pathname) ? this->ok = 1 : 1;
            (OPT_mount == 1 && MOUNT == args[2]->fi_mount)  ? this->ok = 1 : 1;
     }
    
    für leute die in c ode c++ träumen ist das sicher nichts schlimmes aber für den normalo user bestimmt nicht ohne weiteres zu nutzen. es gibt aber auch grafische ansätze um sich scripte "zusammenzuklicken" und ich kann mir vorstellen das apple so einen weg schon eher beschreitet.
    mal abwarten...

    gruss,
    DN2

    @ Juuro: freut mich :)
     
    #6 DukeNuke2, 18.10.07
    Zuletzt bearbeitet: 19.10.07
  7. Utz Gordon

    Utz Gordon Schöner von Nordhausen

    Dabei seit:
    15.07.07
    Beiträge:
    316
    Selbst wenn - er hat's dann trotzdem sehr verständlich erklärt ;)



    Aber psc hat's angesprochen: könnte man mit dtrace wirklich Daten ausspähen?
    Edit: Mal ein Beispielfall: Jemand geht an deinen Rechner und weist dtrace an, fürs Netzwerk zugänglich bestimmte Protokolle abzulegen. Geht das?
    Okay, du hast gesagt man weiß noch nicht wie's in 10.6 konkret aussieht. Aber sagt die Theorie etwas?
     
  8. DukeNuke2

    DukeNuke2 Wagnerapfel

    Dabei seit:
    17.01.06
    Beiträge:
    1.559
    richtiger wäre: für sun... genauer geasgt bei einem sun partner. aber meistens direkt im auftrag von sun. also eigentlich: ja ;)
     
  9. Hobbes_

    Hobbes_ Gast

    Solche Dinge muss man auch beim Kauf gewisser Computer bestätigen (zB. Dell). Man muss bestätigen, dass man sie nicht für terroristische Zwecke oder anderes illegales verwendet. Deshalb kann ein Besitzer eines solchen Computers unmöglich böse sein... :)

    [OT]Gibt es so eine Regel für Macs auch? Oder wählen Verbrecher/Terroristen legalerweise bevorzugt Macs? :)[/OT]

    Daneben vielen Dank für die weiteren Erklärungen. Wirklich cool! Wie wäre es später mal mit einem kleinen Tutorial für alle Neulinge in dieser Technologie? :innocent:

    Daneben scheint mir interessant, dass das ganze ohne Kosten von Ressourcen gehen soll. Liegt das daran, dass diese ganzen Dokumentationsroutinen sowieso immer ausgeführt werden (auch wenn man sie nicht ausliest) und so generell der Computer in der Arbeit etwas "gebremst" wird und nur der Ausleseprozess nicht mehr viel kostet? Letztlich gibt es ja eigentlich nur die allerwenigsten Dinge umsonst, nicht wahr?
     
  10. DukeNuke2

    DukeNuke2 Wagnerapfel

    Dabei seit:
    17.01.06
    Beiträge:
    1.559
    wenn man als root auf der maschine ist, dann ja. aber als root hat man ja eh schon alle möglichkeiten. dtrace macht es einem... etwas einfacher. wenn man weiss wie es geht!
    es ist also wichtig ein sicheres root kennwort zu haben (was aber ja schon immer so war) ;)
     
  11. Hobbes_

    Hobbes_ Gast

    Genau. Das ist der Sicherheitsaspekt, der jedoch sowieso im OS konsequent durchgezogen werden muss. Ich nehme an, dass das ganze auch als Admin per sudo geht, so dass ich mein liebes root Passwort weiterhin inaktiv lassen kann :)
     
  12. Bier

    Bier Pomme au Mors

    Dabei seit:
    24.08.07
    Beiträge:
    867
    Um das zu können muss der böse Fatzke aber lokal root sein. Das wird in der Regel nicht vorkommen. Bzw, wenn das so ist, ist Dtrace das geringste Problem.

    Dtrace macht dem Admin das Leben leichter (oder sogar länger). ;) Ein Hoch auf Sun, oder Dtrace ;)
     
  13. DukeNuke2

    DukeNuke2 Wagnerapfel

    Dabei seit:
    17.01.06
    Beiträge:
    1.559
    ein tutorial kann man sicher mal in angriff nehmen ;)
    die ressourcen werden NICHT durch dtrace belastet daher kommt es auch nicht zu performanceeinbussen. sowas kann nur passieren wenn man dtrace anweisst zu viele provider auszulesen und dann diese daten wegzuschreiben. auf meiner x86 soalris 10 installation sind über 70000 datenquellen auswählbar. da kann sich jeder vorstellen das man ein system mit dem auslesen ALLER daten überlastet. aber wenn man ganz gezielt vorgeht ist der einfluss von dtrace nicht einmal messbar...
     
  14. Hobbes_

    Hobbes_ Gast

    Vielen Dank fürs Angebot und vielen Dank für die Information, die in etwa bestätigt, wie ich mir das vorstellte.
     
  15. DukeNuke2

    DukeNuke2 Wagnerapfel

    Dabei seit:
    17.01.06
    Beiträge:
    1.559
    bei brendan gregg gibt es viele infos zum thema dtrace und auch den download für das schon genannte dtrace toolkit (eine sammlung von an die 100 nützlichen scripten aus allen bereichen). da kann man sich ja schonmal einfummeln damit alle bis zum 26. fit sind ;)

    http://www.brendangregg.com/dtrace.html

    ich wünsche einen schönen abend,
    DN2 (der JETZT feierabend macht)
     
    Bier gefällt das.
  16. AgentSmith

    AgentSmith Hochzeitsapfel

    Dabei seit:
    15.07.07
    Beiträge:
    9.361
    Toller Thread! Ich hatte über DTrace auch schonmal was gelesen und es unter "Ui, das sieht ja sehr interessant aus, ist sicher praktisch, kanns kaum erwarten, das mal auszuprobieren." abgespeichert.. was man jetzt hier so liest, klingt ja noch viel besser. Wirklich ein sehr vielversprechendes Tool!
     
  17. Bier

    Bier Pomme au Mors

    Dabei seit:
    24.08.07
    Beiträge:
    867
    Jepp... cool!

    Mach bitte rechtzeitig das Tutorial ;)
     
  18. tomsie

    tomsie Bismarckapfel

    Dabei seit:
    25.11.06
    Beiträge:
    76
  19. DukeNuke2

    DukeNuke2 Wagnerapfel

    Dabei seit:
    17.01.06
    Beiträge:
    1.559
    Guten Morgen,
    aufgrund der Nachfrage nach einem "Tutorial" werde ich hier mal Auszüge aus einer Schulung die ich dieses Jahr gehalten habe mit einigen DTrace Beispielen posten.
    Ich möchte aber nochmal wiederholen das DTrace nur sinnvoll eingesetzt werden kann, wenn man das Betriebssystem mit seinen "Messpunkten" kennt und die gelieferten Daten auch interpretieren kann! Aber das ist ja bei jedem Analyse-Tool so...

    --------------


    Was ist DTrace?
    DTrace ist ein umfassendes Framework für die dynamische Ablaufverfolgung im Betriebssystem Solaris und ab der Version 10.6 auch bei Mac OS X.
    DTrace bietet eine leistungsfähige Infrastruktur, die es Administratoren, Entwicklern und Wartungspersonal ermöglicht, beliebige Fragen zum Verhalten des Betriebssystems und der Benutzerprogramme zu beantworten.

    Was leistet DTrace?
    - Sehr sicheres tracen von Informationen auf Live-Systemen
    - Durch die Nutzung von DTrace können keine Abstürze verursacht werden
    - Es können Kernel- und Userdaten getraced werden
    - Sehr geringer Overhead während des tracing, kein Overhead wenn tracing nicht ausgelesen wird

    Was kann "getraced" werden?
    - Alle Argumente die an eine Funktion übergeben werden
    - Jede globale Variable des Kernels
    - Zeitstempel im Nanosekunden(!) Bereich
    - Welcher Code hat welche Funktion aufgerufen
    - Welche Prozesse liefen als die Funktion aufgerufen wurde
    - Welcher Prozess hat die Funktion aufgerufen

    Wie arbeitet DTrace?
    Das dtrace Kommando benutzt die Libary libdtrace als Einstiegspunkt zu den verschieden “DTrace Providern” innerhalb des Kernels, von dem jeder unterschiedliche Daten aus dem Kernel liefert.
    Alle DTrace Operationen werden durch das Dienstprogramm dtarce aufgerufen. Das Kommando kann direkt, mit Kommandline Optionen oder in einem “D” Script genutzt werden. D ist der Programmiersprache C sehr ähnlich und wird “on the fly” bei der Ausführung durch einen in den Kernel integrierten Code-Interpreter kompiliert. Der Code wird vor dem Ausführen im Kernel in einer “virtuellen Maschine” auf Sicherheit getestet. Wenn der Test bestanden wurde und ausreichende Rechte für die Ausführung vorhanden sind, wird der Code in den Kernel gepatcht und auf Kernelebene ausgeführt.


    Prüfpunkte:
    Der Prüfpunkt kann mit einem Messpunkt in der Technik verglichen werden. An diesen Punkten im Kernel können die Daten ausgelesen und den “Konsumenten” zur Verfügung gestellt werden. Jeder dieser Messpunkte hat zwei (2) eindeutige Kennzeichnungen.
    - eine ID (z.B. 21223)
    - einen Namen nach dem Modell provider:module:function:name

    Provider:
    Der Name des DTrace-Providers, der diesen Prüfpunkt veröffentlicht. Der Name des Providers stimmt bezeichnenderweise mit dem Namen des DTrace-Kernelmoduls überein, das die Instrumentation zur Aktivierung des Prüfpunkts durchführt.
    Module:
    Bei Prüfpunkten für eine bestimmte Programmposition der Name des Moduls, in dem sich der Prüfpunkt be?ndet. Dabei handelt es sich entweder um den Namen eines Kernelmoduls oder einer Benutzerbibliothek.
    Function:
    Bei Prüfpunkten für eine bestimmte Programmposition der Name der Programmfunktion, in der sich der Prüfpunkt be?ndet.
    Name:
    Der letzte Bestandteil des Prüfpunktnamens gibt, wie beispielsweise BEGIN oder END, in gewissem Maße Aufschluss über die semantische Bedeutung des Prüfpunkts.

    Mit dem Befehl “dtrace –l” werden ALLE Messpunkte des Systems angezeigt. Die Anzahl der Punkte ist je nach Ausstattung (Hardware) und der Art der Installation (Software) für jedes System unterschiedlich.
    Beim aufrufen eines Messpunktes werden bestimmte Daten übertragen (execname, pid, arg[], timestamp, probemod, probefunc) die angezeigt werden können und durch Argumente, die sogenannten z.B. gezählt oder summiert werden können.

    Beispiele:

    Code:
    # New processes with arguments
    dtrace -n 'proc:::exec-success { trace(curpsinfo->pr_psargs); }'
     
    # Files opened by process
    dtrace -n 'syscall::open*:entry { printf("%s %s",execname,copyinstr(arg0)); }'
     
    # Syscall count by program
    dtrace -n 'syscall:::entry { @num[execname] = count(); }'
     
    # Syscall count by syscall
    dtrace -n 'syscall:::entry { @num[probefunc] = count(); }'
     
    # Syscall count by process
    dtrace -n 'syscall:::entry { @num[pid,execname] = count(); }'
     
    # Read bytes by process
    dtrace -n 'sysinfo:::readch { @bytes[execname] = sum(arg0); }'
     
    # Write bytes by process
    dtrace -n 'sysinfo:::writech { @bytes[execname] = sum(arg0); }'
     
    # Read size distribution by process
    dtrace -n 'sysinfo:::readch { @dist[execname] = quantize(arg0); }'
     
    # Write size distribution by process
    dtrace -n 'sysinfo:::writech { @dist[execname] = quantize(arg0); }'
     
    # Disk size by process
    dtrace -n 'io:::start { printf("%d %s %d",pid,execname,args[0]->b_bcount); }'
    
    Links und Quellen:
    http://www.sun.com/bigadmin/content/dtrace/
    http://docs.sun.com/app/docs/doc/819-6956
    http://www.sun.com/bigadmin/scripts/indexDtrace.html

    --------------

    Tja, soviel von mir zum Thema DTrace. Jetzt heisst es warten auf 10.5 um es auch ausprobieren zu können (oder Solaris 10 installieren).

    Gruss,
    DN2
     
    #19 DukeNuke2, 19.10.07
    Zuletzt bearbeitet: 21.10.07
  20. DukeNuke2

    DukeNuke2 Wagnerapfel

    Dabei seit:
    17.01.06
    Beiträge:
    1.559
    Hallo,
    nachdem ja die Ersten jetzt schon 10.5 installiert haben, mal meine Nachfrage. wie ist die DTrace Implementierung geworden? Gibt es eine GUI oder ist DTrace ein reines Kommandline Tool?
    Was gibt "dtrace -l | wc -l" aus? Bin doch ein wenig Neugierig wie Apple das umgesetzt hat...

    tia,
    DN2
     

Diese Seite empfehlen