Das Unternehmen Oracle hat DTrace fĂŒr Linux 2.0.0-1.14 veröffentlicht.

Eine experimentelle Version des Werkzeugsets fĂŒr dynamisches Debugging DTrace fĂŒr Linux 2.0.0-1.14 wurde vorgestellt, die als Benutzerprozessor arbeitet und das eBPF-Subsystem sowie die vom Linux-Kernel bereitgestellten nativen Tracing-Mechanismen nutzt. In Bezug auf die FunktionalitĂ€t Ă€hnelt die DTrace-Implementierung auf Basis von eBPF der ersten DTrace-Implementierung fĂŒr Linux, die als Kernelmodul realisiert wurde. Der Projektcode wird unter der GPLv2-Lizenz veröffentlicht.

Das Werkzeugset kann mit standardmĂ€ĂŸigen Linux-Kernen verwendet werden, die BPF unterstĂŒtzen. FĂŒr den Betrieb wird die Bibliothek libctf benötigt, welche die UnterstĂŒtzung des Debugging-Formats CTF (Compact Type Format) implementiert und Teil des Pakets binutils ist, beginnend mit der Version 2.40, oder die von Solaris portierte Bibliothek libdtrace-ctf. Optional werden zwei Patches fĂŒr den Kernel 6.7 angeboten, die erweiterte Funktionen zur Erfassung zusĂ€tzlicher Daten ĂŒber Module und den Kernel bereitstellen.

Die DTrace-Technologie wurde entwickelt, um Aufgaben der dynamischen Trennung von Kerneln und Endanwendungen im Betriebssystem Solaris zu lösen. DTrace ermöglicht es dem Benutzer, das Verhalten des Systems detailliert zu verfolgen und in Echtzeit Probleme zu diagnostizieren. WĂ€hrend des Debugging hat DTrace keinen Einfluss auf den Betrieb der untersuchten Anwendungen und wirkt sich nicht auf deren Leistung aus, was die Analyse laufender Systeme „on-the-fly“ ermöglicht. Zu den StĂ€rken von DTrace gehört die hochgradige D-Sprache, die AWK Ă€hnlich ist, und die es wesentlich einfacher macht, Tracing-Skripte zu erstellen als bei der Verwendung der vorgeschlagenen Mittel zur Erstellung von Handlern fĂŒr eBPF in C, Python und Lua mit externen Bibliotheken.

Hauptfunktionen:

  • VerfĂŒgbare Anbieter:
    • cpc (CPU Performance Counter) — Erfassung von Leistungsinformationen.
    • dtrace — Handler fĂŒr BEGIN, END und ERROR, die vor oder nach anderen PrĂŒfungen sowie bei Fehlern ausgelöst werden.
    • fbt (Function Boundary Tracing) — Verfolgung von Funktionsaufrufen im Kernel.
    • lockstat — Verfolgung des Zustands von Sperren.
    • pid — Verfolgung von Funktionsaufrufen in Prozessen, die im Benutzerraum arbeiten.
    • proc — Verfolgung von ProzessenaktivitĂ€ten wie Start und Beendigung (fork, exec, exit, fault).
    • Profil — Speicherung von Leistungsstatistiken ĂŒber definierte Zeitspannen.
    • sdt, rawtp — statisches Kernel-Tracking (SDT — Statically Defined Tracing).
    • usdt: statisches Anwendungs-Tracking (USDT — Userspace Statically Defined Tracing)
    • sched — Verfolgung der CPU-Ressourcenzuteilung.
    • sycall — Verfolgung des Zugangs zu Systemaufrufen und deren RĂŒckkehr.
  • Aggregation der gesammelten Daten: Möglichkeit der Anwendung aggregierter Funktionen (avg, count, llquantize, lquantize, max, min, quantize, stddev und sum) sowie aggregierter Aktionen (clear, normalize, normalize, printa). UnterstĂŒtzung der Speicherung von Ergebnissen der Anwendung aggregierter Funktionen in normalen und assoziativen Arrays.
  • UnterstĂŒtzung von spekulativem Tracking, das es ermöglicht, Daten vorĂŒbergehend zu verfolgen und zu entscheiden, welche im Tracking-Puffer festgehalten und welche verworfen werden sollen. VerfĂŒgbare Funktionen: speculation, speculate, commit und discard.
  • UnterstĂŒtzung fĂŒr globale und lokale Variablen, TLS (Thread-Local Storage), assoziative Arrays und Strings.
  • Bereitstellung eingebauter Variablen: arg0 — arg9, args[], caller, curcpu, curthread, epid, errno, execname, gid, id, pid, ppid, probefunc, probemod, probename, probeprov, stackdepth, tid, timestamp, ucaller, uid, uregs[], ustackdepth, walltimestamp.
  • UnterstĂŒtzung von Aktionen: exit, freopen, ftruncate, mod, printa, printf, raise, setopt, stack, sym, system, trace, tracemem, uaddr, umod, ustack und usym.
  • VerfĂŒgbarkeit eingebauter Funktionen: alloca, basename, bcopy, copyin, copyinstr, copyinto, copyout, copyoutstr, dirname, getmajor, getminor, htonl, htonll, htons, index, inet_ntoa, lltostr, mutex_owned, mutex_owner, mutex_type_adaptive, mutex_type_spin, ntohl, ntohll, ntohs, progenyof, rand, rindex, rw_iswriter, rw_read_held, rw_write_held, strchr, strjoin, strlen, strrchr, strstr, strtok, substr.
  • VerfĂŒgbarkeit von ZĂ€hlern fĂŒr Daten, die nicht in die Tracking-Puffer gelangen.
  • UnterstĂŒtzung fĂŒr die Kompilierung von Tracking-Skripten in D zur Form von BPF-Programmen.
  • Vorkompilierung von BPF-Funktionen fĂŒr Bibliotheksaufrufe.
  • bpflog-Option fĂŒr das Protokollieren der Verifizierung von geladenen BPF-Programmen.
  • Dynamische Codegenerierung und Vorkompilierung von Code zur Wiederverwendung in BPF-Programmen.

Änderungen in der neuen Version:

  • Im Provider pid, der zur Verfolgung von Prozessen im Benutzerspeicher verwendet wird, wurde die UnterstĂŒtzung fĂŒr die Verfolgung der AusfĂŒhrung von Befehlen durch deren Offset im Code hinzugefĂŒgt.
  • UnterstĂŒtzung der Verwendung von Funktionen stack() und ustack() zur Aggregation gesammelter Daten.
  • Möglichkeit, Elemente beliebiger Typen aus assoziativen Arrays durch Zuweisung des Literals 0 zu entfernen.
  • Die print-Funktion wurde hinzugefĂŒgt, um strukturierte Daten mit Typanmerkungen auszugeben.
  • Neue integrierte Funktionen cleanpath(), d_path() und link_ntop() wurden hinzugefĂŒgt.
  • Der Parameter „-xcpu“ wurde hinzugefĂŒgt, um PrĂŒfungen an bestimmte CPUs zu binden.
  • Der Parameter „-xlockmem“ wurde hinzugefĂŒgt, um die Speichermenge zu begrenzen.
  • Es wurde die Möglichkeit geschaffen, Prozess-Trace-Daten (USDT) zwischen Neustarts von dtprobed zu speichern.
  • UnterstĂŒtzung fĂŒr das BTF-Format (BPF Type Format), das Informationen zur TypprĂŒfung im BPF-Pseudocode bereitstellt.
  • Die Möglichkeit, ein configure-Skript zum Erstellen zu verwenden.

Quelle: opennet.ru

60GB SSD 8Gb DDR4