Ang isang hanay ng mga patch ay nai-publish na nagpapabilis sa pagbuo ng Linux kernel ng 50-80%

Si Ingo Molnar, isang kilalang Linux kernel developer at may-akda ng CFS (Completely Fair Scheduler) task scheduler, ay iminungkahi para sa talakayan sa Linux kernel developer mailing list ng isang serye ng mga patch na nakakaapekto sa higit sa kalahati ng lahat ng mga file sa kernel source at magbigay ng pagtaas sa bilis ng isang kumpletong muling pagtatayo ng kernel ng 50-80% depende sa mga setting. Ang ipinatupad na pag-optimize ay kapansin-pansin dahil nauugnay ito sa pagdaragdag ng pinakamalaking hanay ng mga pagbabago sa kasaysayan ng pag-unlad ng kernel - 2297 na mga patch ang iminungkahi para sa pagsasama nang sabay-sabay, na nagbabago ng higit sa 25 libong mga file (10 libong mga file ng header sa "kasama /” at β€œarch/*/include/” directories "at 15 thousand file na may source texts).

Nakakamit ang performance gain sa pamamagitan ng pagbabago ng paraan ng pagproseso ng mga file ng header. Ito ay nabanggit na sa loob ng tatlumpung taon ng kernel development, ang estado ng mga file ng header ay nagkaroon ng isang mapagpahirap na hitsura dahil sa pagkakaroon ng isang malaking bilang ng mga cross-dependencies sa pagitan ng mga file. Ang muling pagsasaayos ng header file ay tumagal ng higit sa isang taon at nangangailangan ng makabuluhang reworking ng hierarchy at dependencies. Sa panahon ng muling pagsasaayos, ginawa ang trabaho upang paghiwalayin ang mga kahulugan ng uri at mga API para sa iba't ibang mga subsystem ng kernel.

Kabilang sa mga pagbabagong ginawa: paghihiwalay ng mga high-level na file ng header sa isa't isa, pag-aalis ng mga inline na function na nag-uugnay sa mga file ng header, paghihiwalay ng mga file ng header para sa mga uri at API, pagtiyak ng hiwalay na pagpupulong ng mga file ng header (mga 80 file ay may mga hindi direktang dependency na nakakasagabal sa pagpupulong, nakalantad sa pamamagitan ng iba pang mga file ng header), awtomatikong pagdaragdag ng mga dependency sa ".h" at ".c" na mga file, sunud-sunod na pag-optimize ng mga file ng header, paggamit ng mode na "CONFIG_KALLSYMS_FAST=y", piling pagsasama-sama ng mga C file sa mga bloke ng pagpupulong upang bawasan ang bilang ng mga object file.

Bilang resulta, ginawang posible ng gawaing ginawa na bawasan ang laki ng mga file ng header na naproseso sa yugto ng post-preprocessing ng 1-2 order ng magnitude. Halimbawa, bago ang pag-optimize, ang paggamit ng header file na "linux/gfp.h" ay nagresulta sa pagdaragdag ng 13543 na linya ng code at ang pagsasama ng 303 dependent na mga header na file, at pagkatapos ng pag-optimize ay nabawasan ang laki sa 181 na linya at 26 na mga dependent na file. O isa pang halimbawa: kapag preprocessing ang file na "kernel/pid.c" nang walang patch, 94 libong linya ng code ang kasama, karamihan sa mga ito ay hindi ginagamit sa pid.c. Ang paghihiwalay sa mga file ng header ay naging posible upang mabawasan ang dami ng naprosesong code ng tatlong beses, na binabawasan ang bilang ng mga naprosesong linya sa 36 na libo.

Kapag ang kernel ay ganap na itinayong muli gamit ang command na "make -j96 vmlinux" sa isang test system, ang application ng mga patch ay nagpakita ng pagbawas sa build time ng v5.16-rc7 branch mula 231.34 hanggang 129.97 seconds (mula 15.5 hanggang 27.7 builds. bawat oras), at pinataas din ang kahusayan ng paggamit ng mga core ng CPU sa panahon ng mga pagtitipon. Sa isang incremental build, ang epekto ng pag-optimize ay mas kapansin-pansin - ang oras upang muling itayo ang kernel pagkatapos gumawa ng mga pagbabago sa mga file ng header ay makabuluhang nabawasan (mula 112% hanggang 173% depende sa header file na pinapalitan). Kasalukuyang available lang ang mga pag-optimize para sa mga arkitektura ng ARM64, MIPS, Sparc at x86 (32- at 64-bit).

Pinagmulan: opennet.ru

Magdagdag ng komento