Manaʻo ʻo Oracle e hana hou iā DTrace no Linux me ka hoʻohana ʻana i ka eBPF

Hui Oracle hōʻike ʻia e pili ana i ka hana ma ka hoʻoili ʻana i nā loli pili i DTrace i ka upstream a me nā hoʻolālā e hoʻokō i ka ʻenehana debugging dynamic DTrace ma luna o ka ʻōnaehana kernel Linux maʻamau, ʻo ia hoʻi ka hoʻohana ʻana i nā subsystem e like me eBPF. I ka wā mua, ʻo ka pilikia nui me ka hoʻohana ʻana iā DTrace ma Linux ʻaʻole i kūpono i ka pae laikini, akā ma 2018 Oracle laikini hou DTrace code ma lalo o GPLv2.

Ua loaʻa iā DTrace manawa lōʻihi hāʻawi ʻia ma ke ʻano he ʻāpana o ka kernel lōʻihi no ka hāʻawi ʻana iā Oracle Linux, akā no ka hoʻohana ʻana i nā māhele ʻē aʻe e pono ai ka hoʻohana ʻana i nā ʻāpana kernel hou, e kaupalena ana i ka hoʻohana ʻana i kēia ʻenehana. E like me ka laʻana, Oracle hoomakaukauia nā ʻōlelo kikoʻī no ka hoʻokomo ʻana a me ka hoʻohana ʻana iā DTrace ma Fedora Linux. Pono ka hui no ka hoʻouka ʻana mea paahana a me ka hoʻohana ʻana i kahi kernel Linux i kūkulu hou ʻia mai nā pā. No ka hoʻomaʻamaʻa ʻana i ka hoʻokō ʻana i ka hale kernel me Oracle a me Fedora patch, ua manaʻo ʻia palapala.

ʻO ka eBPF kahi unuhi ʻōlelo bytecode i kūkulu ʻia i loko o ka Linux kernel e hiki ai iā ʻoe ke hana i nā mea lawelawe ʻoihana pūnaewele, nānā i ka hana ʻōnaehana, nā kelepona ʻōnaehana intercept, ka hoʻokele ʻana, ka hana ʻana i nā hanana me ka mālama manawa (perf_event_open), helu pinepine a me ka manawa hoʻokō o nā hana, hana i ka hoʻohana ʻana i nā kprobes /uprobes /tracepoints. Mahalo i ka hoʻohana ʻana o JIT compilation, ua unuhi ʻia ka bytecode ma ka lele i nā ʻōlelo aʻoaʻo mīkini a hoʻokō ʻia me ka hana o ke code maoli. Hiki ke hoʻokō ʻia ʻo DTrace ma luna o ka eBPF, e like me ke ʻano o ka hoʻokō ʻana ma luna o ka eBPF работают mea paahana e ku nei.

Ua hoʻomohala ʻia ka ʻenehana DTrace no ka ʻōnaehana hana Solaris e hoʻoponopono i ka pilikia o ka huli ʻana i ka kernel system a me ka hoʻopau ʻana i nā noi, hāʻawi i ka mea hoʻohana i ka hiki ke nānā i ka ʻōnaehana ʻōnaehana me ka kikoʻī a me ka ʻike i nā pilikia i ka manawa maoli. I ka wā o ke kaʻina hana debugging, ʻaʻole pili ʻo DTrace i ka hana o nā noi ma lalo o ke aʻo ʻana a ʻaʻole i pili i kā lākou hana, hiki iā ʻoe ke hoʻonohonoho i ka nānā ʻana o nā ʻōnaehana holo ma ka lele. ʻO kekahi o ka ikaika o DTrace ʻo ia ka ʻōlelo D kiʻekiʻe, e like me AWK, kahi i maʻalahi loa ka hana ʻana i nā palapala hōʻailona ma mua o ka hoʻohana ʻana i nā mea hana i hāʻawi ʻia no ke kākau ʻana i nā mea lawelawe eBPF ma C, Python a me Lua me nā hale waihona puke waho.

Ke hana nei nā ʻenekinia mai Oracle i ka hana ʻana i kahi backend eBPF no GCC a ua paʻi mua hoʻonohonoho ʻia e hoʻohui i ke kākoʻo eBPF i loko o GCC a loaa me ke code e kākoʻo i ka eBPF ma GNU binutils. I ka hoʻomaka ʻana, hoʻokumu ʻia ka backend no ke kākoʻo eBPF i nā ʻenehana LLVM, akā makemake ʻo Oracle i ka ʻike ʻana i ka GCC o kahi mana maʻamau e hana i nā papahana no eBPF, e ʻae ai i ka hoʻohana ʻana i hoʻokahi mea hana no ke kūkulu ʻana i ka kernel Linux a no ke kūkulu ʻana i nā papahana. no ka eBPF.

Ma waho aʻe o ka bytecode generation backend, ua hoʻokomo pū ʻia nā pā i manaʻo ʻia no GCC i kahi awa libgcc no ka eBPF a me nā mea hana no ka hoʻokumu ʻana i nā faila ELF, e hiki ai ke hoʻokō i ke code i ka mīkini virtual eBPF me ka hoʻohana ʻana i nā mea hoʻoili i hāʻawi ʻia i kernel. I kēia manawa, hiki ke unuhi ʻia ke code ma ka ʻōlelo C i bytecode (ʻaʻole i loaʻa nā hiʻohiʻona ʻōlelo āpau), akā i ka wā e hiki mai ana e manaʻo ʻia e hoʻonui i nā mana ʻōlelo C i hiki ke hoʻohana, hoʻohui i ke kākoʻo no nā ʻōlelo ʻē aʻe, hana i kahi simulator, a hoʻohui i ke kākoʻo GCC no ka hoʻopau ʻana i nā polokalamu eBPF me ka ʻole o ka hoʻouka ʻana i loko o ka kernel.

Source: opennet.ru

Pākuʻi i ka manaʻo hoʻopuka