Loaʻa iā GCC kahi backend no ka hōʻuluʻulu ʻana i ka eBPF

Hoʻokomo ʻia i loko o ka GCC compiler suite fcaiitaia code no ka hōʻuluʻulu ʻana i nā papahana no ka unuhi ʻōlelo bytecode i kūkulu ʻia i loko o ka kernel Linux ʻO eBPF. Mahalo i ka hoʻohana ʻana o JIT compilation, ua unuhi ʻia ka kernel bytecode ma ka lele i nā ʻōlelo aʻoaʻo mīkini a hoʻokō ʻia me ka hana o ke code maoli. Hoʻopili me ke kākoʻo eBPF ʻae ʻia i ka lālā i hoʻomohala ʻia ai ka hoʻokuʻu GCC 10.

Ma waho aʻe o kahi backend no ka hanauna bytecode, ua loaʻa iā GCC kahi awa libgcc no ka eBPF a me nā mea hana no ka hana ʻana i nā faila ELF e hiki ai ke hoʻokō i ke code ma ka mīkini virtual eBPF me ka hoʻohana ʻana i nā mea hoʻoili i hāʻawi ʻia i ka kernel. Ua hoʻomākaukau ʻia nā ʻāpana e kākoʻo i ka eBPF ma GCC e nā ʻenekinia mai Oracle, nāna i hana mua hāʻawi ʻia Kākoʻo eBPF ma GNU binutils. Ke kūkulu ʻia nei kahi simulator a me nā pākia no GDB, kahi e hiki ai iā ʻoe ke hoʻopau i nā polokalamu eBPF me ka ʻole o ka hoʻouka ʻana iā lākou i loko o ka kernel.

Hiki ke wehewehe ʻia nā papahana no ka eBPF ma kahi ʻāpana o ka ʻōlelo C, i hui ʻia a hoʻouka ʻia i loko o ka kernel. Ma mua o ka hoʻokō ʻana, nānā ka unuhi ʻōlelo eBPF i ka bytecode no ka hoʻohana ʻana i nā ʻōlelo kuhikuhi i ʻae ʻia a kau i kekahi mau lula ma ke code (no ka laʻana, ʻaʻohe puka lou).
I ka wā mua, ua hoʻohana ʻia nā mea hana LLVM e hōʻuluʻulu i ka eBPF ma Linux. He mea hoihoi ke kākoʻo eBPF ma GCC no ka mea hiki iā ʻoe ke hoʻohana i hoʻokahi pahu hana e kūkulu i ka Linux kernel a me nā polokalamu eBPF, me ka ʻole o ka hoʻokomo ʻana i nā mea hilinaʻi hou.

Ma ke ʻano o nā polokalamu eBPF, hiki iā ʻoe ke hana i nā mea lawelawe ʻoihana pūnaewele, kānana kaʻa, hoʻokele i ka bandwidth, nā ʻōnaehana nānā, nā kelepona ʻōnaehana intercept, ka hoʻokele ʻana, helu i ka pinepine a me ka manawa o nā hana, a hana i ka ʻimi ʻana me ka hoʻohana ʻana i nā kprobes/uprobes/tracepoints.

Source: opennet.ru

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