Oracle telah menerbitkan DTrace untuk Linux 2.0.0-1.14

Keluaran percubaan kit alat penyahpepijat dinamik DTrace untuk Linux 2.0.0-1.14 dibentangkan, dilaksanakan sebagai proses ruang pengguna yang menggunakan subsistem eBPF dan mekanisme pengesanan standard yang disediakan oleh kernel Linux. Dari segi kefungsian, pelaksanaan DTrace berasaskan eBPF adalah hampir dengan pelaksanaan DTrace pertama untuk Linux, dilaksanakan dalam bentuk modul kernel. Kod projek diedarkan di bawah lesen GPLv2.

Kit alat boleh digunakan dengan kernel Linux stok yang menyokong BPF. Untuk berfungsi, anda memerlukan perpustakaan libctf dengan pelaksanaan sokongan untuk format penyahpepijatan CTF (Format Jenis Padat), yang disertakan dalam pakej binutils bermula dari keluaran 2.40, atau perpustakaan libdtrace-ctf yang dialihkan daripada Solaris. Secara pilihan, dua patch ditawarkan untuk kernel 6.7, yang membolehkan anda menggunakan ciri lanjutan untuk mendapatkan data tambahan mengenai modul dan kernel.

Teknologi DTrace telah dibangunkan untuk menyelesaikan masalah mengesan secara dinamik kernel dan aplikasi akhir dalam sistem pengendalian Solaris. DTrace memberikan pengguna keupayaan untuk memantau tingkah laku sistem secara terperinci dan mendiagnosis masalah dalam masa nyata. Semasa proses penyahpepijatan, DTrace tidak menjejaskan operasi aplikasi yang sedang dikaji dan tidak dalam apa-apa cara menjejaskan prestasinya, yang membolehkan anda mengatur analisis sistem berjalan dengan cepat. Salah satu kekuatan DTrace ialah bahasa D peringkat tinggi, serupa dengan AWK, di mana lebih mudah untuk mencipta skrip pengesanan daripada menggunakan alatan yang ditawarkan untuk menulis pengendali eBPF dalam C, Python dan Lua dengan perpustakaan luaran.

Ciri-ciri utama:

  • Pembekal yang tersedia:
    • cpc (CPU Performacne Counter) - mendapatkan maklumat prestasi.
    • dtrace - pengendali BEGIN, END dan ERROR dijalankan sebelum atau selepas semakan lain, serta apabila ralat berlaku.
    • fbt (Function Boundary Tracing) - menjejaki panggilan ke fungsi kernel.
    • lockstat - menjejak status kunci.
    • pid - Menjejaki panggilan fungsi dalam proses yang berjalan dalam ruang pengguna.
    • proc - memantau aktiviti berkaitan proses seperti permulaan dan penutupan (fork, exec, exit, fault).
    • profil - menyimpan statistik prestasi pada selang waktu tertentu.
    • sdt, rawtp - pengesanan kernel statik (SDT - Pengesanan Ditakrifkan Statik).
    • usdt: pengesanan aplikasi statik (USDT - Pengesanan Ditakrifkan Secara Statik Ruang Pengguna)
    • jadual - memantau peruntukan sumber CPU.
    • sycall - Menjejaki masuk dan keluar panggilan sistem.
  • Pengagregatan data yang dikumpul: keupayaan untuk menggunakan fungsi agregat (purata, kiraan, llkuantasi, lkuantum, maks, min, kuantiti, stddev dan jumlah) dan tindakan agregat (jelas, normalkan, normalisasi, cetak). Sokongan untuk menyimpan hasil penggunaan fungsi agregat dalam tatasusunan biasa dan bersekutu.
  • Sokongan untuk pengesanan spekulatif, yang membolehkan anda memantau data secara sementara, memutuskan yang mana antaranya harus ditangkap dalam penimbal jejak dan yang harus dibuang. Fungsi yang ada ialah spekulasi, spekulasi, komit dan buang.
  • Sokongan untuk pembolehubah global dan tempatan, TLS (Thread-Local Storage), tatasusunan dan rentetan bersekutu.
  • Menyediakan pembolehubah terbina dalam: arg0 - arg9, args[], pemanggil, curcpu, curthread, epid, errno, execname, gid, id, pid, ppid, probefunc, probemod, probename, probeprov, stackdepth, tid, timestamp, ucaller, uid, uregs[], ustackdepth, walltimestamp.
  • Tindakan yang disokong: exit, freopen, ftruncate, mod, printa, printf, raise, setopt, stack, sym, system, trace, tracemem, uaddr, umod, ustack dan usym.
  • Ketersediaan fungsi terbina dalam: alloca, basename, bcopy, copyin, copyinstr, copyinto, copyout, copyoutstr, dirname, getmajor, getminor, htonl, htonll, htons, index, inet_ntoa, lltostr, mutex_owned, mutex_owner, mutex_type_ntohl_type, mutex_type_ntohl_type , ntohll, ntohs, progenyof, rand, rindex, rw_iswriter, rw_read_held, rw_write_held, strchr, strjoin, strlen, strrchr, strstr, strtok, substr.
  • Kehadiran pembilang data yang tidak termasuk dalam penimbal surih.
  • Sokongan untuk menyusun skrip pengesanan D ke dalam borang program BPF.
  • Prapengumpulan fungsi BPF untuk panggilan perpustakaan.
  • Pilihan bpflog untuk mendapatkan log pengesahan program BPF yang dimuatkan.
  • Penjanaan kod dinamik dan prakompilasi kod untuk digunakan semula dalam program BPF.

Perubahan dalam versi baharu:

  • Pembekal pid, yang digunakan untuk menjejaki proses dalam ruang pengguna, telah menambah sokongan untuk menjejaki pelaksanaan arahan dengan mengimbanginya dalam kod.
  • Menambahkan sokongan untuk menggunakan fungsi stack() dan ustack() untuk mengagregat data yang dikumpul.
  • Keupayaan untuk mengalih keluar unsur apa-apa jenis daripada tatasusunan bersekutu dengan memberikan literal 0.
  • Menambah tindakan cetakan untuk mengeluarkan data berstruktur dengan anotasi jenis.
  • Menambahkan fungsi terbina dalam baru cleanpath(), d_path() dan link_ntop().
  • Menambahkan parameter "-xcpu", yang membolehkan anda mengikat semakan ke CPU tertentu.
  • Menambahkan pilihan "-xlockmem" untuk mengehadkan saiz memori.
  • Menyediakan keupayaan untuk menyimpan data jejak proses (USDT) antara dtprobed mula semula.
  • Sokongan untuk mekanisme BTF (BPF Type Format), yang menyediakan maklumat semakan jenis dalam pseudokod BPF.
  • Keupayaan untuk menggunakan skrip konfigurasi untuk membina.

Sumber: opennet.ru

Tambah komen