Linux 5.8 միջուկի թողարկում

Երկու ամիս զարգացումից հետո Լինուս Տորվալդսը ներկայացրեց միջուկի թողարկում 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 արձանագրությունը:
    • TCP փաթեթում ավելացրել է ընդգրկույթի սեղմման աջակցություն ընտրովի ճանաչման (SACK) պատասխաններում:
    • IPv6-ի համար իրականացվել է TCP-LD աջակցություն (RFC 6069, Երկար կապի խանգարումներ):
  • սարքավորում
    • 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 դրայվերներում և ենթահամակարգերում:

Source: opennet.ru

Добавить комментарий