Երկու ամիս զարգացումից հետո Լինուս Տորվալդսը ներկայացրեց միջուկի թողարկում Linux 5.8. Ամենաուշագրավ փոփոխություններից են՝ KCSAN մրցավազքի վիճակի դետեկտոր, օգտատերերի տարածք ծանուցումներ փոխանցելու ունիվերսալ մեխանիզմ, ներկառուցված գաղտնագրման ապարատային աջակցություն, ARM64-ի անվտանգության ուժեղացված մեխանիզմներ, ռուսական Baikal-T1 պրոցեսորի աջակցություն, procfs ատյաններ առանձին տեղադրելու հնարավորություն։ , ստվերային անվտանգության մեխանիզմների ներդրում ARM64 Call Stack-ի և BTI-ի համար։
Kernel 5.8-ը դարձավ ամենամեծը՝ նախագծի գոյության ողջ ընթացքում բոլոր միջուկների փոփոխությունների քանակով։ Ավելին, փոփոխությունները կապված չեն որևէ ենթահամակարգի հետ, այլ ընդգրկում են միջուկի տարբեր մասեր և հիմնականում կապված են ներքին վերամշակման և մաքրման հետ։ Ամենամեծ փոփոխությունները նկատվում են վարորդների մոտ. Նոր տարբերակը ներառում էր 17606 ուղղումներ 2081 մշակողների կողմից, որոնք ազդել են միջուկի կոդերի պահոցի բոլոր ֆայլերի մոտավորապես 20%-ի վրա: Patch-ի չափը 65 ՄԲ է (փոփոխությունները ազդել են 16180 ֆայլերի վրա, ավելացվել է կոդ 1043240 տող, ջնջվել է 489854 տող): Համեմատության համար նշենք, որ 5.7 մասնաճյուղն ուներ 15033 ուղղում և 39 ՄԲ չափի կարկատել: 37-ում ներկայացված բոլոր փոփոխությունների մոտ 5.8%-ը կապված է սարքի դրայվերների հետ, փոփոխությունների մոտավորապես 16%-ը կապված է ապարատային ճարտարապետությանը հատուկ կոդի թարմացման հետ, 11%-ը՝ ցանցային ստեկին, 3%-ը՝ ֆայլային համակարգերին և 4%-ը։ կապված են միջուկի ներքին ենթահամակարգերի հետ:
Տրամադրվում է միջուկի մոդուլների բեռնումը, որոնք ունեն կոդով բաժիններ, որոնցում միաժամանակ դրված են բիթերը, որոնք թույլ են տալիս կատարել և գրել: Փոփոխությունն իրականացվել է որպես ավելի մեծ նախագծի մի մաս՝ միջուկը ազատելու հիշողության էջերի օգտագործումից, որոնք թույլ են տալիս միաժամանակյա կատարում և գրել:
Այժմ հնարավոր է ստեղծել առանձին procfs օրինակներ, որոնք թույլ են տալիս օգտագործել մի քանի procfs մոնտաժային կետեր, որոնք տեղադրված են տարբեր տարբերակներով, բայց արտացոլելով նույն գործընթացի նույնացուցիչի անվանատարածքը (pid namespace): Նախկինում բոլոր procfs մոնտաժային կետերը արտացոլում էին միայն մեկ ներքին ներկայացում, և ամրացման պարամետրերի ցանկացած փոփոխություն ազդել է նույն գործընթացի ID-ի անվան տարածքի հետ կապված բոլոր մյուս ամրացման կետերի վրա: Այն ոլորտներից, որոնցում տարբեր տարբերակներով մոնտաժը կարող է պահանջարկ ունենալ, ներկառուցված համակարգերի համար թեթև մեկուսացման իրականացումն է՝ պրոցեսում որոշակի տեսակի գործընթացներ և տեղեկատվական հանգույցներ թաքցնելու ունակությամբ:
Մեխանիզմի աջակցությունն իրականացվել է ARM64 հարթակի համար Shadow-Call Stack, տրամադրված է Clang կոմպիլյատորի կողմից՝ պաշտպանելու ֆունկցիայի վերադարձի հասցեի վերագրանցումից՝ կույտի բուֆերային արտահոսքի դեպքում։ Պաշտպանության էությունը կայանում է նրանում, որ վերադարձի հասցեն պահպանվի առանձին «ստվերային» կույտում՝ գործառույթի վրա կառավարումը փոխանցելուց և գործառույթից դուրս գալուց առաջ այս հասցեն առբերելուց հետո:
ARM64 հարթակի համար ավելացվել է հրահանգների աջակցություն ARMv8.5-BTI (Branch Target Indicator)՝ պաշտպանելու հրահանգների հավաքածուների կատարումը, որոնք չպետք է ճյուղավորվեն: Կոդերի կամայական բաժինների անցումների արգելափակումն իրականացվում է գաջեթների ստեղծումը կանխելու համար, որոնք օգտագործում են վերադարձի վրա հիմնված ծրագրավորման տեխնիկա (ROP - Return-Oriented Programming; հարձակվողը չի փորձում իր կոդը տեղադրել հիշողության մեջ, այլ գործում է արդեն գոյություն ունեցող կտորների վրա: մեքենայական հրահանգներ, որոնք ավարտվում են վերադարձի կառավարման հրահանգով, որից կառուցվում է զանգերի շղթա՝ ցանկալի ֆունկցիոնալությունը ստանալու համար):
Ավելացվեց ապարատային աջակցություն բլոկային սարքերի ներկառուցված կոդավորման համար (Ներքին գաղտնագրում) Inlinep գաղտնագրման սարքերը սովորաբար ներկառուցված են սկավառակի մեջ, բայց տրամաբանորեն տեղակայված են համակարգի հիշողության և սկավառակի միջև՝ թափանցիկ գաղտնագրելով և վերծանելով I/O-ն՝ հիմնվելով միջուկի հատուկ ստեղների և գաղտնագրման ալգորիթմի վրա:
Ավելացվեց «initrdmem» միջուկի հրամանի տողի տարբերակը, որը թույլ կտա ձեզ նշել initrd-ի ֆիզիկական հիշողության հասցեն RAM-ում սկզբնական բեռնման պատկերը տեղադրելիս:
Ավելացվեց նոր հնարավորություն՝ CAP_PERFMON՝ perf ենթահամակարգ մուտք գործելու և կատարողականի մոնիտորինգ իրականացնելու համար: CAP_BPF, որը թույլ է տալիս որոշակի BPF գործողություններ (օրինակ՝ BPF ծրագրերի բեռնում), որոնք նախկինում պահանջում էին CAP_SYS_ADMIN իրավունքները (CAP_SYS_ADMIN իրավունքները այժմ բաժանված են CAP_BPF, CAP_PERFMON և CAP_NET_ADMIN-ի համակցության):
Ավելացված է նոր virtio-mem սարք, որը թույլ է տալիս տաք միացնել և միացնել հիշողությունը հյուրերի համակարգերին:
Իրականացված քարտեզագրման գործողությունների հետկանչում /dev/mem-ում, եթե սարքի դրայվերն օգտագործում է համընկնող հիշողության տարածքներ:
Ավելացվել է խոցելիության պաշտպանություն CROSSTalk/SRBDS, որը թույլ է տալիս վերականգնել պրոցեսորի մեկ այլ միջուկի վրա կատարված որոշակի հրահանգների արդյունքները:
Հիշողության և համակարգի ծառայություններ
Կոդի ձևաչափման կանոնները սահմանող փաստաթղթում. ընդունված առաջարկություններ ներառական տերմինաբանության օգտագործման վերաբերյալ: Ծրագրավորողներին խորհուրդ չի տրվում առանձին օգտագործել «վարպետ/ստրուկ» և «սև ցուցակ/սպիտակ ցուցակ» համակցությունները, ինչպես նաև «ստրուկ» բառը։ Առաջարկությունները վերաբերում են միայն այս տերմինների նոր օգտագործմանը: Նշված բառերի հիշատակումները, որոնք արդեն գոյություն ունեն առանցքում, կմնան անձեռնմխելի: Նոր օրենսգրքում նշված տերմինների օգտագործումը թույլատրվում է, եթե պահանջվում է օգտագործողի տարածքում բացահայտված API-ին և ABI-ին աջակցելու համար, ինչպես նաև այն ժամանակ, երբ թարմացվում է ծածկագիրը՝ գոյություն ունեցող սարքավորումները կամ արձանագրությունները աջակցելու համար, որոնց բնութագրերը պահանջում են որոշակի տերմինների օգտագործում:
Ներառված է վրիպազերծման գործիք KCSAN (Kernel Concurrency Sanitizer), որը նախատեսված է դինամիկ հայտնաբերման համար մրցավազքի պայմանները միջուկի ներսում: KCSAN-ի օգտագործումը աջակցվում է GCC-ում և Clang-ում կառուցելիս և պահանջում է հատուկ փոփոխություններ կոմպիլյացիայի ժամանակ՝ հիշողության հասանելիությանը հետևելու համար (օգտագործվում են ընդմիջման կետեր, որոնք գործարկվում են, երբ հիշողությունը կարդացվում կամ փոփոխվում է): KCSAN-ի մշակումը կենտրոնանում է կեղծ դրական կանխարգելման, մասշտաբայնության և օգտագործման հեշտության վրա:
Ավելացված է ունիվերսալ մեխանիզմ ծանուցումների առաքում միջուկից օգտվողի տարածք: Մեխանիզմը հիմնված է խողովակի ստանդարտ դրայվերի վրա և թույլ է տալիս արդյունավետ կերպով բաշխել միջուկից ստացվող ծանուցումները օգտատիրոջ տարածքում բաց ալիքներով: Ծանուցումների ընդունման կետերը խողովակներ են, որոնք բացվում են հատուկ ռեժիմով և թույլ են տալիս միջուկից ստացված հաղորդագրությունները կուտակել օղակաձև բուֆերում։ Ընթերցանությունը կատարվում է սովորական read() ֆունկցիայի միջոցով: Ալիքի սեփականատերը որոշում է, թե միջուկի որ աղբյուրները պետք է վերահսկվեն և կարող է զտիչ սահմանել՝ անտեսելու որոշակի տեսակի հաղորդագրություններ և իրադարձություններ: Միջոցառումներից ներկայումս աջակցվում են միայն ստեղներով գործողությունները, ինչպիսիք են բանալիների ավելացումը/հեռացումը և դրանց հատկանիշների փոփոխությունը: Այս իրադարձությունները նախատեսվում է օգտագործել GNOME-ում:
«pidfd» ֆունկցիոնալության շարունակական զարգացում, որը կօգնի կարգավորել PID-ի վերօգտագործման իրավիճակները (pidfd-ը կապված է որոշակի գործընթացի հետ և չի փոխվում, մինչդեռ PID-ը կարող է կապված լինել մեկ այլ գործընթացի հետ՝ այդ PID-ի հետ կապված ընթացիկ գործընթացի ավարտից հետո): Նոր տարբերակն ավելացնում է աջակցություն pidfd-ի օգտագործման համար՝ գործընթացն անվանատարածքներին կցելու համար (թույլ տալով, որ pidfd-ը նշվի setns համակարգային զանգը կատարելիս): Pidfd-ի օգտագործումը թույլ է տալիս մեկ զանգով կառավարել գործընթացի կցումը մի քանի տեսակի անվանատարածքներին՝ զգալիորեն նվազեցնելով անհրաժեշտ համակարգային զանգերի քանակը և կցումը ատոմային ռեժիմում (եթե անունների տարածքներից մեկին կցումը ձախողվի, մյուսները չեն միանա) .
Ավելացվեց նոր համակարգային զանգ faccessat2(), որը տարբերվում է faccessat () լրացուցիչ արգումենտ դրոշներով, որոնք համապատասխանում են POSIX-ի առաջարկություններին (նախկինում այս դրոշները նմանակվում էին C գրադարանում, և նոր faccessat2-ը թույլ է տալիս դրանք ներդնել միջուկում):
Cgroup-ում ավելացրել է memory.swap.high պարամետր, որը կարող է օգտագործվել՝ դանդաղեցնելու այն առաջադրանքները, որոնք չափազանց շատ փոխանակման տարածք են զբաղեցնում:
Դեպի ասինխրոն I/O ինտերֆեյս io_uring ավելացրել է աջակցություն tee() համակարգային զանգի համար:
Ավելացված մեխանիզմ»BPF կրկնող, որը նախատեսված է միջուկի կառուցվածքների բովանդակությունը օգտագործողի տարածություն դուրս բերելու համար:
Տրամադրված է BPF ծրագրերի միջև տվյալների փոխանակման համար զանգի բուֆեր օգտագործելու ունակությունը:
Մեխանիզմի մեջ padata, որը նախատեսված է միջուկում առաջադրանքների զուգահեռ կատարումը կազմակերպելու համար, ավելացրել է բազմաշերտ առաջադրանքների աջակցություն՝ բեռի հավասարակշռմամբ։
pstore մեխանիզմում, որը թույլ է տալիս պահպանել վրիպազերծման տեղեկատվությունը խափանման պատճառի մասին հիշողության տարածքներում, որոնք չեն կորչում վերաբեռնումների միջև, ավելացրեց backend՝ սարքերը արգելափակելու համար տեղեկատվությունը պահելու համար:
PREEMPT_RT միջուկի ճյուղից տեղափոխվել է տեղական կողպեքների իրականացում.
Ավելացված է նոր բուֆերային տեղաբաշխման API (AF_XDP), որն ուղղված է XDP (eXpress Data Path) աջակցությամբ ցանցային դրայվերների գրառման պարզեցմանը:
RISC-V ճարտարապետության համար իրականացվել է KGDB-ի միջոցով միջուկի բաղադրիչների վրիպազերծման աջակցություն:
Մինչև 4.8-ի թողարկումը, ավելացվել են GCC-ի այն տարբերակի պահանջները, որոնք կարող են օգտագործվել միջուկը կառուցելու համար: Հաջորդ թողարկումներից մեկում նախատեսվում է նշաձողը բարձրացնել մինչև GCC 4.9:
Սկավառակի ենթահամակարգ, I/O և ֆայլային համակարգեր
Device Mapper-ում ավելացրեց նոր dm-ebs (բլոկի չափի նմանակում) կարգավորիչ, որը կարող է օգտագործվել ավելի փոքր տրամաբանական բլոկի չափը նմանակելու համար (օրինակ՝ 512K հատվածի չափի սկավառակների վրա 4 բայթ հատվածներ ընդօրինակելու համար):
F2FS ֆայլային համակարգը այժմ աջակցում է սեղմմանը՝ օգտագործելով LZO-RLE ալգորիթմը:
dm-crypt-ում ավելացրել է կոդավորված բանալիների աջակցություն:
Btrfs-ը բարելավել է ընթերցման գործողությունները ուղղակի I/O ռեժիմում: Մոնտաժման ժամանակ արագացված ստուգելով ջնջված ենթաբաժինները և գրացուցակները, որոնք մնացել են առանց ծնողի:
CIFS-ում ավելացվել է «nodelete» պարամետրը, որը թույլ է տալիս նորմալ թույլտվության ստուգումներ կատարել սերվերի վրա, սակայն հաճախորդին արգելում է ջնջել ֆայլերը կամ գրացուցակները:
Ext4-ը բարելավել է սխալների կառավարումը ENOSPC բազմալեզու օգտագործումիս: xattr-ն աջակցություն է ավելացրել gnu.* անվանատարածքի համար, որն օգտագործվում է GNU Hurd-ում:
Ext4-ի և XFS-ի համար միացված է DAX գործողությունների աջակցությունը (ուղիղ մուտք դեպի ֆայլային համակարգ, շրջանցելով էջի քեշը՝ առանց սարքի արգելափակման մակարդակի օգտագործման) առանձին ֆայլերի և գրացուցակների հետ կապված:
Համակարգային զանգի մեջ statx () դրոշը ավելացվել է STATX_ATTR_DAX, որը, երբ նշված է, տեղեկատվություն է առբերում DAX շարժիչի միջոցով:
EXFAT ավելացրել է աջակցություն բեռնման տարածքի ստուգման համար:
FAT-ում բարելավվել է FS տարրերի ակտիվ բեռնում: Դանդաղ 2TB USB կրիչի փորձարկումը ցույց տվեց թեստի ավարտի ժամանակի կրճատում 383-ից մինչև 51 վայրկյան:
Ցանցային ենթահամակարգ
Ցանցային կամուրջների շահագործման վերահսկման օրենսգրքում ավելացրել է արձանագրության աջակցություն MRP (Media Redundancy Protocol), որը թույլ է տալիս սխալների հանդուրժողականություն՝ միացնելով բազմաթիվ Ethernet անջատիչներ:
Երթևեկության կառավարման համակարգ (Tc) ավելացրել է նոր «դարպաս» գործողություն, որը հնարավորություն է տալիս որոշակի փաթեթների մշակման և հեռացման ժամանակային ընդմիջումներ սահմանել:
Միացված ցանցային մալուխի փորձարկման և ցանցային սարքերի ինքնուրույն ախտորոշման աջակցությունն ավելացվել է միջուկին և ethtool ծրագրին:
Աջակցություն MPLS (Multiprotocol Label Switching) ալգորիթմին ավելացվել է IPv6 փաթեթին՝ փաթեթները երթուղավորելու համար՝ օգտագործելով բազմապրոտոկոլի պիտակների փոխարկումը (MPLS-ը նախկինում աջակցվում էր IPv4-ի համար):
Ավելացվել է աջակցություն IKE (Ինտերնետ բանալիների փոխանակում) և IPSec փաթեթներ TCP-ով փոխանցելու համար (RFC 8229) շրջանցելու UDP-ի հնարավոր արգելափակումը:
Ավելացված է ցանցային բլոկ սարք rnbd, որը թույլ է տալիս կազմակերպել հեռահար մուտք դեպի բլոկ սարք՝ օգտագործելով RDMA տրանսպորտը (InfiniBand, RoCE, iWARP) և RTRS արձանագրությունը:
Intel վիդեո քարտերի i915 DRM դրայվերը ներառում է լռելյայն աջակցություն Intel Tiger Lake (GEN12) չիպերին, որոնց համար իրականացվել է SAGV (System Agent Geyserville) համակարգը դինամիկ կերպով կարգավորելու հաճախականությունը և լարումը կախված էներգիայի սպառման կամ կատարողականի պահանջներից:
amdgpu դրայվերն ավելացրել է FP16 պիքսելային ձևաչափի աջակցություն և տեսահիշողության գաղտնագրված բուֆերների հետ աշխատելու հնարավորություն (TMZ, Trusted Memory Zone):
Ավելացվել է AMD Zen և Zen2 պրոցեսորների էներգիայի սենսորների աջակցություն, ինչպես նաև AMD Ryzen 4000 Renoir-ի ջերմաստիճանի տվիչներ: AMD Zen-ի և Zen2-ի համար տրամադրվում է ինտերֆեյսի միջոցով էներգիայի սպառման մասին տեղեկատվության առբերման աջակցություն ՌԱՊԼ (Գործող միջին հզորության սահմանը):
Nouveau-ի վարորդին ավելացվել է NVIDIA փոփոխիչի ձևաչափի աջակցություն: gv100-ի համար ներդրվել է միահյուսված սկանավորման ռեժիմներ օգտագործելու հնարավորությունը: Ավելացվեց vGPU սահմանումը:
Ավելացվել է աջակցություն Adreno A405, A640 և A650 GPU-ների համար MSM (Qualcomm) վարորդին:
Ավելացված է DRM (Direct Rendering Manager) ռեսուրսների կառավարման ներքին շրջանակ:
Ավելացվել է աջակցություն Xiaomi Redmi Note 7 և Samsung Galaxy S2 սմարթֆոնների, ինչպես նաև Elm/Hana Chromebook նոութբուքերի համար։
Ավելացված դրայվերներ LCD վահանակների համար՝ ASUS TM5P5 NT35596, Starry KR070PE2T, Leadtek LTK050H3146W, Visionox rm69299, Boe tv105wum-nw0:
Ավելացվեց աջակցություն ARM տախտակների և պլատֆորմների համար Renesas «RZ/G1H», Realtek RTD1195, Realtek RTD1395/RTD1619, Rockchips RK3326, AMLogic S905D, S905X3, S922XH, Olimex A20-OLinu-Point-Mc
, Beacon i.MX8m-Mini, Qualcomm SDM660/SDM630, Xnano X5 TV Box, Stinger96, Beaglebone-AI.
Ավելացված է աջակցություն MIPS պրոցեսորի Loongson-2K (կրճատ Loongson64): CPU Loongson 3-ի համար ավելացվել է KVM հիպերվիզորի օգտագործմամբ վիրտուալացման աջակցություն:
Ավելացված է
աջակցություն ռուսական Baikal-T1 պրոցեսորին և դրա վրա հիմնված համակարգին BE-T1000. Baikal-T1 պրոցեսորը պարունակում է երկու P5600 MIPS 32 r5 superscalar միջուկներ, որոնք աշխատում են 1.2 ԳՀց հաճախականությամբ: Չիպը պարունակում է L2 քեշ (1 ՄԲ), DDR3-1600 ECC հիշողության կարգավորիչ, 1 10 Գբ Ethernet պորտ, 2 1 Գբ Ethernet պորտ, PCIe Gen.3 x4 կարգավորիչ, 2 SATA 3.0 պորտ, USB 2.0, GPIO, UART, SPI, I2C: Պրոցեսորը ապահովում է վիրտուալացման ապարատային աջակցություն, SIMD հրահանգներ և ինտեգրված ապարատային կրիպտոգրաֆիկ արագացուցիչ, որն աջակցում է ԳՕՍՏ 28147-89: Չիպը մշակվել է MIPS32 P5600 Warrior պրոցեսորային հիմնական միավորի միջոցով, որը լիցենզավորված է Imagination Technologies-ից:
Միաժամանակ Լատինական Ամերիկայի Ազատ Ծրագրային ապահովման հիմնադրամը ձեւավորվել է
տարբերակը ամբողջովին անվճար միջուկ 5.8 - Linux-libre 5.8-gnu, մաքրված որոնվածից և վարորդի տարրերից, որոնք պարունակում են ոչ ազատ բաղադրիչներ կամ ծածկագրի բաժիններ, որոնց շրջանակը սահմանափակված է արտադրողի կողմից: Նոր թողարկումն անջատում է Atom ISP Video-ի, MediaTek 7663 USB/7915 PCIe-ի, Realtek 8723DE WiFi-ի, Renesas PCI xHCI-ի, HabanaLabs Gaudi-ի, ընդլայնված ասինխրոն նմուշի արագության փոխարկիչի, Maxim Integrated MAX98390L, Maxim Integrated MAX38060L, Audio-ի ինտեգրված MAX2L, Mix86L-ի համար վարորդների բլբի բեռնումը: , և I6656C EEPROM Slave: Թարմացված բլբի մաքրման կոդը Adreno GPU-ում, HabanaLabs Goya-ում, xXNUMX սենսորային էկրանով, vtXNUMX և btbcm դրայվերներում և ենթահամակարգերում: