ืื•ืจืงืœ ืžืชื›ื•ื•ื ืช ืœืขืฆื‘ ืžื—ื“ืฉ ืืช DTrace ืขื‘ื•ืจ ืœื™ื ื•ืงืก ื‘ืืžืฆืขื•ืช eBPF

ื—ื‘ืจืช ืื•ืจืงืœ ื“ื•ื•ื— ืขืœ ื”ืขื‘ื•ื“ื” ืขืœ ื”ืขื‘ืจืช ืฉื™ื ื•ื™ื™ื ื”ืงืฉื•ืจื™ื ืœ-DTrace ืœ-upstream ื•ืžืชื›ื ื ืช ืœื™ื™ืฉื ื˜ื›ื ื•ืœื•ื’ื™ื™ืช ื ื™ืคื•ื™ ื‘ืื’ื™ื ื“ื™ื ืžื™ืช ืฉืœ DTrace ืขืœ ื’ื‘ื™ ืชืฉืชื™ืช ืœื™ื‘ืช ืœื™ื ื•ืงืก ื”ืกื˜ื ื“ืจื˜ื™ืช, ื›ืœื•ืžืจ ื‘ืืžืฆืขื•ืช ืชืช-ืžืขืจื›ื•ืช ื›ื’ื•ืŸ eBPF. ื‘ืชื—ื™ืœื”, ื”ื‘ืขื™ื” ื”ืขื™ืงืจื™ืช ื‘ืฉื™ืžื•ืฉ ื‘- DTrace ื‘ืœื™ื ื•ืงืก ื”ื™ื™ืชื” ื—ื•ืกืจ ืชืื™ืžื•ืช ื‘ืจืžืช ื”ืจื™ืฉื™ื•ืŸ, ืืš ื‘-2018 ืื•ืจืงืœ ืžื•ืจืฉื” ืžื—ื“ืฉ ืงื•ื“ DTrace ืชื—ืช GPLv2.

DTrace ื›ื‘ืจ ื”ืจื‘ื” ื–ืžืŸ ืžื•ืฆืข ื›ื—ืœืง ืžืงืจื ืœ ืžื•ืจื—ื‘ ืœื”ืคืฆืช Oracle Linux, ืืš ืœืฉื™ืžื•ืฉ ื‘ื”ืคืฆื•ืช ืื—ืจื•ืช ื”ื•ื ืžืฆืจื™ืš ืฉื™ืžื•ืฉ ื‘ืชื™ืงื•ื ื™ ืœื™ื‘ื” ื ื•ืกืคื™ื, ืžื” ืฉืžื’ื‘ื™ืœ ืืช ื”ืฉื™ืžื•ืฉ ื‘ื˜ื›ื ื•ืœื•ื’ื™ื” ื–ื•. ื›ื“ื•ื’ืžื”, ืื•ืจืงืœ ืžื•ึผื›ึธืŸ ื”ื•ืจืื•ืช ืžืคื•ืจื˜ื•ืช ืœื”ืชืงื ื” ื•ืฉื™ืžื•ืฉ ื‘- DTrace ื‘-Fedora Linux. ื ื“ืจืฉืช ื”ืจื›ื‘ื” ืœื”ืชืงื ื” ื›ืœื™ื ื•ื”ืฉื™ืžื•ืฉ ื‘ืœื™ื‘ืช ืœื™ื ื•ืงืก ืฉื ื‘ื ืชื” ืžื—ื“ืฉ ืž ื˜ืœืื™ื. ื›ื“ื™ ืœื”ืคื•ืš ืืช ื”ื‘ื™ืฆื•ืข ืฉืœ ื‘ื ื™ื™ืช ืœื™ื‘ื” ืœืื•ื˜ื•ืžื˜ื™ืช ืขื ืชื™ืงื•ื ื™ ืื•ืจืงืœ ื•ืคื“ื•ืจื”, ื–ื” ืžื•ืฆืข ืชึทืกืจึดื™ื˜.

eBPF ื”ื•ื ืžืชื•ืจื’ืžืŸ ื‘ืชื™ื ืžื•ื‘ื ื” ื‘ืœื™ื‘ืช ืœื™ื ื•ืงืก ื”ืžืืคืฉืจ ืœืš ืœื™ืฆื•ืจ ืžื˜ืคืœื™ ืคืขื•ืœื•ืช ื‘ืจืฉืช, ืœื ื˜ืจ ืืช ืคืขื•ืœืช ื”ืžืขืจื›ืช, ืœื™ื™ืจื˜ ืงืจื™ืื•ืช ืžืขืจื›ืช, ืœืฉืœื•ื˜ ื‘ื’ื™ืฉื”, ืœืขื‘ื“ ืื™ืจื•ืขื™ื ืขื ืฉืžื™ืจืช ื–ืžืŸ (perf_event_open), ืกืคื™ืจืช ืชื“ื™ืจื•ืช ื•ื–ืžืŸ ื‘ื™ืฆื•ืข ืฉืœ ืคืขื•ืœื•ืช, ืœื‘ืฆืข ืžืขืงื‘ ื‘ืืžืฆืขื•ืช kprobes /uprobes /tracepoints. ื”ื•ื“ื•ืช ืœืฉื™ืžื•ืฉ ื‘ืงื•ืžืคื™ืœืฆื™ื” ืฉืœ JIT, bytecode ืžืชื•ืจื’ื ืชื•ืš ื›ื“ื™ ืชื ื•ืขื” ืœื”ื•ืจืื•ืช ืžื›ื•ื ื” ื•ืžื‘ื•ืฆืข ืขื ื‘ื™ืฆื•ืขื™ื ืฉืœ ืงื•ื“ ืžืงื•ืจื™. ื ื™ืชืŸ ืœื™ื™ืฉื DTrace ืขืœ ื’ื‘ื™ eBPF, ื‘ื“ื•ืžื” ืœืื•ืคืŸ ืฉื‘ื• ื”ื™ื ืžื™ื•ืฉืžืช ืขืœ ื’ื‘ื™ eBPF ื”ื ืขื•ื‘ื“ื™ื ื›ืœื™ ืื™ืชื•ืจ ืงื™ื™ืžื™ื.

ื˜ื›ื ื•ืœื•ื’ื™ื™ืช DTrace ืคื•ืชื—ื” ืขื‘ื•ืจ ืžืขืจื›ืช ื”ื”ืคืขืœื” Solaris ื›ื“ื™ ืœืคืชื•ืจ ืืช ื‘ืขื™ื™ืช ื”ืžืขืงื‘ ื”ื“ื™ื ืžื™ ืฉืœ ืœื™ื‘ืช ื”ืžืขืจื›ืช ื•ื™ื™ืฉื•ืžื™ ื”ืงืฆื”, ืžื” ืฉืžืขื ื™ืง ืœืžืฉืชืžืฉ ืืช ื”ื™ื›ื•ืœืช ืœื ื˜ืจ ืืช ื”ืชื ื”ื’ื•ืช ื”ืžืขืจื›ืช ื‘ืคื™ืจื•ื˜ ื•ืœืื‘ื—ืŸ ื‘ืขื™ื•ืช ื‘ื–ืžืŸ ืืžืช. ื‘ืžื”ืœืš ืชื”ืœื™ืš ืื™ืชื•ืจ ื”ื‘ืื’ื™ื, DTrace ืื™ื ื• ืžืฉืคื™ืข ืขืœ ืคืขื•ืœืช ื”ื™ื™ืฉื•ืžื™ื ื”ื ื‘ื“ืงื™ื ื•ืื™ื ื• ืžืฉืคื™ืข ื‘ืฉื•ื ืื•ืคืŸ ืขืœ ื”ื‘ื™ืฆื•ืขื™ื ืฉืœื”ื, ืžื” ืฉืžืืคืฉืจ ืœืš ืœืืจื’ืŸ ืืช ื”ื ื™ืชื•ื— ืฉืœ ืžืขืจื›ื•ืช ืคื•ืขืœื•ืช ืชื•ืš ื›ื“ื™ ืชื ื•ืขื”. ืื—ืช ื”ื™ืชืจื•ื ื•ืช ืฉืœ DTrace ื”ื™ื ืฉืคืช D ื‘ืจืžื” ื’ื‘ื•ื”ื”, ื‘ื“ื•ืžื” ืœ-AWK, ืฉื‘ื” ื”ืจื‘ื” ื™ื•ืชืจ ืงืœ ืœื™ืฆื•ืจ ืกืงืจื™ืคื˜ื™ื ืœืžืขืงื‘ ืžืืฉืจ ืœื”ืฉืชืžืฉ ื‘ื›ืœื™ื ื”ืžื•ืฆืขื™ื ืœื›ืชื™ื‘ืช ืžื˜ืคืœื™ eBPF ื‘-C, Python ื•-Lua ืขื ืกืคืจื™ื•ืช ื—ื™ืฆื•ื ื™ื•ืช.

ืžื”ื ื“ืกื™ื ืž-Oracle ืขื•ื‘ื“ื™ื ื’ื ืขืœ ื™ืฆื™ืจืช eBPF backend ืขื‘ื•ืจ GCC ื•ื›ื‘ืจ ืคืจืกืžื• ืกื˜ ืชื™ืงื•ืŸ ืœืฉืœื‘ ืชืžื™ื›ืช eBPF ื‘-GCC ื• ื”ื•ืฉื’ ื›ื•ืœืœ ืงื•ื“ ืœืชืžื™ื›ื” ื‘-eBPF ื‘-GNU binutils. ื‘ืชื—ื™ืœื”, ื”ืงืฆื” ื”ืื—ื•ืจื™ ืœืชืžื™ื›ื” ื‘-eBPF ืžื‘ื•ืกืก ืขืœ ื˜ื›ื ื•ืœื•ื’ื™ื•ืช LLVM, ืืš ืื•ืจืงืœ ืžืขื•ื ื™ื™ื ืช ื‘ื”ื•ืคืขื” ื‘-GCC ืฉืœ ื™ื›ื•ืœืช ืกื˜ื ื“ืจื˜ื™ืช ืœื™ืฆื•ืจ ืชื•ื›ื ื™ื•ืช ืขื‘ื•ืจ eBPF, ืฉืชืืคืฉืจ ืฉื™ืžื•ืฉ ื‘ืขืจื›ืช ื›ืœื™ื ืื—ืช ื”ืŸ ืœื‘ื ื™ื™ืช ืœื™ื‘ืช ืœื™ื ื•ืงืก ื•ื”ืŸ ืœื‘ื ื™ื™ืช ืชื•ื›ื ื™ื•ืช ืขื‘ื•ืจ eBPF.

ื‘ื ื•ืกืฃ ืœ-backend ืฉืœ ื™ืฆื™ืจืช bytecode, ื”ืชื™ืงื•ื ื™ื ื”ืžื•ืฆืขื™ื ืขื‘ื•ืจ GCC ื›ื•ืœืœื™ื ื’ื ื™ืฆื™ืืช libgcc ืขื‘ื•ืจ eBPF ื•ื›ืœื™ื ืœื”ืคืงืช ืงื‘ืฆื™ ELF, ื”ืžืืคืฉืจื™ื ืœื‘ืฆืข ืงื•ื“ ื‘ืžื›ื•ื ื” ื”ื•ื•ื™ืจื˜ื•ืืœื™ืช eBPF ื‘ืืžืฆืขื•ืช ืžืขืžื™ืกื™ื ื”ืžืกื•ืคืงื™ื ืขืœ ื™ื“ื™ ืœื™ื‘ื”. ืœืขืช ืขืชื” ื ื™ืชืŸ ืœืชืจื’ื ืงื•ื“ ื‘ืฉืคืช C ืœื‘ื™ื™ื˜ืงื•ื“ (ืœื ื›ืœ ืชื›ื•ื ื•ืช ื”ืฉืคื” ื–ืžื™ื ื•ืช), ืืš ื‘ืขืชื™ื“ ืฆืคื•ื™ ืœื”ืจื—ื™ื‘ ืืช ื™ื›ื•ืœื•ืช ืฉืคืช C ื”ื–ืžื™ื ื•ืช ืœืฉื™ืžื•ืฉ, ืœื”ื•ืกื™ืฃ ืชืžื™ื›ื” ื‘ืฉืคื•ืช ืื—ืจื•ืช, ืœื™ืฆื•ืจ ืกื™ืžื•ืœื˜ื•ืจ, ื•ื›ืŸ ื”ื•ืกืฃ ืชืžื™ื›ืช GCC ืœืื™ืชื•ืจ ื‘ืื’ื™ื ื‘ืชื•ื›ื ื™ื•ืช eBPF ืžื‘ืœื™ ืœื˜ืขื•ืŸ ืœืชื•ืš ื”ืœื™ื‘ื”.

ืžืงื•ืจ: OpenNet.ru

ื”ื•ืกืคืช ืชื’ื•ื‘ื”