Oracle pinnu lati tun DTrace ṣe apẹrẹ fun Lainos ni lilo eBPF

Ile-iṣẹ Oracle royin nipa iṣẹ lori gbigbe awọn ayipada ti o ni ibatan DTrace si oke ati awọn ero lati ṣe imuse imọ-ẹrọ n ṣatunṣe aṣiṣe agbara DTrace lori oke awọn amayederun ekuro Linux boṣewa, eyun ni lilo awọn ọna ṣiṣe bii eBPF. Ni ibẹrẹ, iṣoro akọkọ pẹlu lilo DTrace lori Lainos jẹ aibaramu ni ipele iwe-aṣẹ, ṣugbọn ni 2018 Oracle relicensed DTrace koodu labẹ GPLv2.

DTrace tẹlẹ o to ojo meta ti funni gẹgẹbi apakan ti ekuro ti o gbooro fun pinpin Oracle Linux, ṣugbọn fun lilo rẹ ni awọn ipinpinpin miiran o nilo lilo awọn abulẹ ekuro, eyiti o fi opin si lilo imọ-ẹrọ yii. Fun apẹẹrẹ, Oracle pese sile awọn ilana alaye fun fifi sori ati lilo DTrace lori Fedora Linux. Apejọ ti a beere fun fifi sori irinṣẹ ati lilo ekuro Linux ti a tun kọ lati awọn abulẹ. Lati ṣe adaṣe adaṣe ti ile kernel pẹlu Oracle ati awọn abulẹ Fedora, o daba akosile.

eBPF jẹ onitumọ bytecode ti a ṣe sinu ekuro Linux ti o fun ọ laaye lati ṣẹda awọn olutọju iṣẹ nẹtiwọọki, ṣe atẹle iṣẹ eto, awọn ipe eto idilọwọ, iraye si iṣakoso, awọn iṣẹlẹ ilana pẹlu ṣiṣe akoko (perf_event_open), ka igbohunsafẹfẹ ati akoko ipaniyan ti awọn iṣẹ, ṣe wiwa kakiri nipa lilo kprobes /upprobes /tracepoints. Ṣeun si lilo akopọ JIT, bytecode ti tumọ lori fo sinu awọn ilana ẹrọ ati ṣiṣe pẹlu iṣẹ ti koodu abinibi. DTrace le ṣe imuse lori oke eBPF, iru si bii o ṣe ṣe imuse lori oke eBPF аботают awọn irinṣẹ wiwa tẹlẹ.

Imọ-ẹrọ DTrace ti ni idagbasoke fun ẹrọ iṣẹ Solaris lati yanju iṣoro ti wiwa kakiri eto ekuro ati awọn ohun elo ipari, fifun olumulo ni agbara lati ṣe atẹle ihuwasi eto ni awọn alaye ati ṣe iwadii awọn iṣoro ni akoko gidi. Lakoko ilana n ṣatunṣe aṣiṣe, DTrace ko ni ipa lori iṣẹ ti awọn ohun elo ti o wa labẹ iwadi ati pe ko ni ipa ni eyikeyi ọna ti iṣẹ wọn, eyiti o fun ọ laaye lati ṣeto itupalẹ ti awọn ọna ṣiṣe ṣiṣe lori fo. Ọkan ninu awọn agbara ti DTrace ni ede D ti o ga, ti o jọra si AWK, ninu eyiti o rọrun pupọ lati ṣẹda awọn iwe afọwọkọ wiwa ju lilo awọn irinṣẹ ti a nṣe fun kikọ awọn olutọju eBPF ni C, Python ati Lua pẹlu awọn ile-ikawe ita.

Awọn onimọ-ẹrọ lati Oracle tun n ṣiṣẹ lori ṣiṣẹda ẹhin eBPF fun GCC ati pe wọn ti ṣe atẹjade tẹlẹ alemo ṣeto lati ṣepọ atilẹyin eBPF sinu GCC ati waye pẹlu koodu lati ṣe atilẹyin eBPF ni GNU binutils. Ni ibẹrẹ, ẹhin fun atilẹyin eBPF da lori awọn imọ-ẹrọ LLVM, ṣugbọn Oracle nifẹ si hihan ni GCC ti agbara boṣewa lati ṣe agbekalẹ awọn eto fun eBPF, eyiti yoo gba laaye lilo ohun elo irinṣẹ kan mejeeji fun kikọ ekuro Linux ati fun awọn eto kikọ. fun eBPF.

Ni afikun si ẹhin iran bytecode, awọn abulẹ ti a dabaa fun GCC tun pẹlu ibudo libgcc kan fun eBPF ati awọn irinṣẹ fun ṣiṣẹda awọn faili ELF, ṣiṣe ki o ṣee ṣe lati ṣiṣẹ koodu ni ẹrọ foju eBPF ni lilo awọn agberu ti a pese ekuro. Ni bayi, koodu ni ede C le tumọ si bytecode (kii ṣe gbogbo awọn ẹya ede wa), ṣugbọn ni ọjọ iwaju o nireti lati faagun awọn agbara ede C ti o wa fun lilo, ṣafikun atilẹyin fun awọn ede miiran, ṣẹda simulator, ati ṣafikun atilẹyin GCC fun ṣiṣatunṣe awọn eto eBPF laisi ikojọpọ sinu ekuro.

orisun: opennet.ru

Fi ọrọìwòye kun