Linux միջուկ 5.14

Linux միջուկ 5.14

Երկու ամիս զարգացումից հետո Լինուս Տորվալդսը ներկայացրեց միջուկի թողարկում Linux 5.14. Ամենաուշագրավ փոփոխություններից են՝ նոր quotactl_fd() և memfd_secret() համակարգերի զանգեր, ide և raw դրայվերների հեռացում, նոր I/O առաջնահերթ կարգավորիչ cgroup-ի համար, SCHED_CORE առաջադրանքների պլանավորման ռեժիմ, հաստատված BPF ծրագրի բեռնիչներ ստեղծելու ենթակառուցվածք:

Նոր տարբերակը ներառում է 15883 ուղղում 2002 ծրագրավորողների կողմից, patch-ի չափը 69 ՄԲ է (փոփոխությունները ազդել են 12580 ֆայլերի վրա, ավելացվել է 861501 կոդ, ջնջվել է 321654 տող): 47-ում ներկայացված բոլոր փոփոխությունների մոտ 5.14%-ը կապված է սարքի դրայվերների հետ, փոփոխությունների մոտավորապես 14%-ը կապված է ապարատային ճարտարապետությանը հատուկ կոդի թարմացման հետ, 13%-ը կապված է ցանցային փաթեթի հետ, 3%-ը՝ ֆայլային համակարգերի և 3%-ը: կապված են միջուկի ներքին ենթահամակարգերի հետ:

Հիմնական նորամուծություններ:

  • սկավառակի ենթահամակարգ, մուտքային/ելքային և ֆայլային համակարգեր.
    • cgroup-ի համար իրականացվել է նոր I/O առաջնահերթ կարգավորիչ՝ rq-qos, որը կարող է վերահսկել յուրաքանչյուր cgroup-ի անդամների կողմից ստեղծված սարքերի արգելափակման հարցումների մշակման առաջնահերթությունը: Նոր առաջնահերթ կարգավորիչի աջակցությունը ավելացվել է mq-deadline I/O ժամանակացույցին.
    • ext4 ֆայլային համակարգում իրականացվել է նոր ioctl հրաման EXT4_IOC_CHECKPOINT, որը ստիպում է բոլոր սպասող գործարքները գրանցամատյանից և հարակից բուֆերներից դեպի սկավառակ, ինչպես նաև վերագրանցում է պահեստում օգտագործվող մատյանի տարածքը: Փոփոխությունը պատրաստվել է ֆայլային համակարգերից տեղեկատվության արտահոսքը կանխելու նախաձեռնության շրջանակներում.
    • Բտրֆսում մտել է Կատարման օպտիմիզացում. fsync-ի կատարման ընթացքում ընդլայնված ատրիբուտների անհարկի գրանցումը բացառելով՝ ընդլայնված ատրիբուտներով ինտենսիվ գործողությունների կատարումն աճել է մինչև 17%-ով: Բացի այդ, չափերի վրա չազդող գործողություններ կատարելիս ամբողջական համաժամացումը անջատված է, ինչը նվազեցրել է շահագործման ժամանակը 12% -ով: sysfs-ին ավելացվել է կարգավորում՝ FS-ը ստուգելիս I/O թողունակությունը սահմանափակելու համար: Ավելացվել է ioctl զանգեր՝ սարքի չափափոխման և ջնջման գործողությունները չեղարկելու համար.
    • XFS-ում վերամշակված բուֆերային քեշի իրականացում, որը փոխանցվում է խմբաքանակի ռեժիմում հիշողության էջերի տեղաբաշխմանը: Բարելավված քեշի արդյունավետություն;
    • F2FS-ն ավելացրել է միայն կարդալու ռեժիմում աշխատելու տարբերակ և ներդրել է սեղմված բլոկի քեշավորման ռեժիմ (compress_cache)՝ պատահական ընթերցման կատարումը բարելավելու համար: Աջակցությունն իրականացվել է հիշողության մեջ քարտեզագրված ֆայլերը սեղմելու համար, օգտագործելով mmap() գործողությունը: Դիմակի միջոցով ֆայլերի սեղմումը ընտրողաբար անջատելու համար առաջարկվել է առանց սեղմման նոր տեղադրման տարբերակ;
    • աշխատանք է կատարվել exFAT դրայվերում՝ բարելավելու համատեղելիությունը որոշ թվային տեսախցիկների պահեստավորման հետ.
    • ավելացված համակարգային զանգ quotactl_fd (), որը թույլ է տալիս կառավարել քվոտաները ոչ թե հատուկ սարքի ֆայլի միջոցով, այլ նշելով ֆայլի նկարագրիչ, որը կապված է ֆայլային համակարգի հետ, որի համար կիրառվում է քվոտան.
    • IDE ինտերֆեյսով բլոկ սարքերի հին դրայվերները հեռացվել են միջուկից, դրանք վաղուց փոխարինվել են libata ենթահամակարգով: Հին սարքերի աջակցությունն ամբողջությամբ պահպանվել է, փոփոխությունները վերաբերում են միայն հին դրայվերների օգտագործման հնարավորությանը, որոնց օգտագործման ժամանակ կրիչներն անվանվել են /dev/hd*, այլ ոչ թե /dev/sd*;
    • «Հում» դրայվերը հեռացվել է միջուկից՝ ապահովելով չբուֆերային մուտք դեպի արգելափակված սարքեր՝ /dev/raw ինտերֆեյսի միջոցով: Այս ֆունկցիոնալությունը վաղուց արդեն ներդրվել է O_DIRECT դրոշակ օգտագործող հավելվածներում;
  • հիշողության և համակարգի ծառայություններ.
    • առաջադրանքների ժամանակացույցում ներդրվել է պլանավորման նոր ռեժիմ SCHED_CORE, որը թույլ է տալիս վերահսկել, թե որ գործընթացները կարող են միասին աշխատել նույն պրոցեսորի միջուկում: Յուրաքանչյուր գործընթացին կարող է վերագրվել թխուկների նույնացուցիչ, որը սահմանում է գործընթացների միջև վստահության շրջանակը (օրինակ՝ նույն օգտագործողին կամ կոնտեյներին պատկանող): Կոդի կատարումը կազմակերպելիս ժամանակացույցը կարող է ապահովել, որ մեկ պրոցեսորի միջուկը համօգտագործվի միայն միևնույն սեփականատիրոջ հետ կապված գործընթացների միջև, որոնք կարող են օգտագործվել Specter-ի որոշ հարձակումները արգելափակելու համար՝ կանխելով վստահելի և անվստահելի առաջադրանքների գործարկումը նույն SMT (Hyper Threading) թեմայում: ;
    • cgroup մեխանիզմի համար ներդրվել է kill գործողության աջակցությունը, որը թույլ է տալիս միանգամից սպանել խմբի հետ կապված բոլոր գործընթացները (ուղարկել SIGKILL)՝ cgroup.kill վիրտուալ ֆայլում գրելով «1»;
    • ընդլայնված հնարավորություններ՝ կապված պառակտված կողպեքների («բաժանված կողպեքներ») հայտնաբերմանը արձագանքելու հետ, որոնք տեղի են ունենում հիշողության մեջ չհավասարեցված տվյալներ մուտք գործելիս, քանի որ ատոմային հրահանգը կատարելիս տվյալները հատում են երկու պրոցեսորի քեշի տողերը: Նման արգելափակումը հանգեցնում է կատարողականի զգալի անկման, ուստի նախկինում հնարավոր էր բռնի կերպով դադարեցնել արգելափակման պատճառ դարձած հավելվածը։ Նոր թողարկումն ավելացնում է միջուկի հրամանի տող «split_lock_detect=ratelimit:N» պարամետրը, որը թույլ է տալիս սահմանել մեկ վայրկյանում արգելափակման գործողությունների արագության ամբողջ համակարգի սահմանը, որը գերազանցելուց հետո ցանկացած գործընթաց, որը դարձել է պառակտման կողպման աղբյուր: դադարեցնելու փոխարեն ստիպված լինել կանգ առնել 20 ms-ով.
    • cgroup թողունակության վերահսկիչ CFS (CFS bandwidth controller), որը որոշում է, թե որքան պրոցեսորի ժամանակ կարող է հատկացվել յուրաքանչյուր cgroup-ին, ունի գործողության որոշակի տևողությամբ սահմանափակված սահմաններ սահմանելու հնարավորություն, ինչը թույլ է տալիս ավելի լավ կարգավորել ուշացման նկատմամբ զգայուն բեռները: Օրինակ, cpu.cfs_quota_us-ը 50000-ի և cpu.cfs_period_us-ի 100000-ի սահմանելը թույլ կտա մի խումբ պրոցեսներ վատնել պրոցեսորի ժամանակի 100ms-ը յուրաքանչյուր 50ms-ում;
    • ավելացրել է BPF ծրագրերի բեռնիչներ ստեղծելու նախնական ենթակառուցվածքը, որը հետագայում թույլ կտա ներբեռնել միայն վստահելի թվային բանալիով ստորագրված BPF ծրագրերը.
    • ավելացրել է FUTEX_LOCK_PI2 նոր ֆուտեքս օպերացիան, որն օգտագործում է միապաղաղ ժմչփ՝ ժամանակի վերջը հաշվարկելու համար, որը հաշվի է առնում համակարգի կողմից քնի ռեժիմում անցկացրած ժամանակը;
    • RISC-V ճարտարապետության համար, մեծ հիշողության էջերի աջակցություն (Transparent Huge-Pages) և օգտագործելու հնարավորություն KFENCE հիշողության հետ աշխատելիս սխալները հայտնաբերելու համար.
    • madvise() համակարգի կանչի մեջ, որն ապահովում է գործընթացի հիշողության կառավարումը օպտիմալացնելու միջոց, ավելացրել է MADV_POPULATE_READ և MADV_POPULATE_WRITE դրոշներ՝ «էջի սխալ» առաջացնելու համար բոլոր հիշողության էջերում, որոնք քարտեզագրված են կարդալու կամ գրելու գործողությունների համար, առանց իրական կարդալու կամ գրելու (նախնական): Դրոշակների օգտագործումը կարող է օգտակար լինել ծրագրի կատարման ձգձգումները նվազեցնելու համար՝ բոլոր չբաշխված էջերի համար «էջի սխալ» կառավարչի ակտիվ գործադրման շնորհիվ միանգամից՝ չսպասելով դրանց իրական մուտքին.
    • միավորի փորձարկման համակարգում կունիտ ավելացրել է QEMU միջավայրում թեստերի իրականացման աջակցություն;
    • նոր հետագծեր են ավելացվել.osnoise«Հետևել հավելվածների ուշացումներին, որոնք առաջանում են ընդհատումների մշակման հետևանքով, և «timerlat»-ը՝ ժամանակաչափի ազդանշանից արթնանալիս մանրամասն տեղեկություններ ցուցադրելու ուշացումների մասին.
  • վիրտուալացում և անվտանգություն.
    • ավելացրեց համակարգային զանգ memfd_secret (), որը թույլ է տալիս ստեղծել մասնավոր հիշողության տարածք մեկուսացված հասցեների տարածքում, որը տեսանելի է միայն սեփականատիրոջ գործընթացին, չի արտացոլվում այլ գործընթացներում և անմիջականորեն հասանելի չէ միջուկին.
    • seccomp համակարգի զանգերի զտման համակարգում, երբ կողպեքի մշակիչները տեղափոխում են օգտագործողի տարածք, հնարավոր է օգտագործել մեկ ատոմային գործողություն՝ մեկուսացված առաջադրանքի համար ֆայլի նկարագրիչ ստեղծելու և համակարգային զանգը մշակելիս այն վերադարձնելու համար: Առաջարկվող գործողությունը լուծում է խնդիրը Օգտագործողի տարածքում կարգավորիչի ընդհատումով, երբ ազդանշան է գալիս.
    • ավելացրեց նոր մեխանիզմ կառավարել ռեսուրսների սահմանափակումը օգտվողի ID-ի անվանատարածքում, որը կապում է առանձին rlimit հաշվիչներ «օգտատիրոջ անվանատարածքում» գտնվող օգտատիրոջ հետ: Փոփոխությունը լուծում է ընդհանուր ռեսուրսների հաշվիչների օգտագործման խնդիրը, երբ մեկ օգտատեր գործընթացներ է իրականացնում տարբեր կոնտեյներներում.
    • ARM64 համակարգերի համար KVM հիպերվիզորը ավելացրել է հյուրի համակարգերում MTE (MemTag, Memory Tagging Extension) ընդլայնման օգտագործման հնարավորությունը, որը թույլ է տալիս պիտակները կապել յուրաքանչյուր հիշողության բաշխման գործողության հետ և կազմակերպել ցուցիչների ճիշտ օգտագործումը` արգելափակելու շահագործումը: խոցելիություններ, որոնք առաջացել են արդեն ազատված հիշողության բլոկներին մուտք գործելու, բուֆերների հորդառատ բուֆերների, մուտքերը նախքան սկզբնավորումը և ընթացիկ համատեքստից դուրս օգտագործելու հետևանքով.
    • ARM64 պլատֆորմի կողմից տրամադրվող ցուցիչի նույնականացումը այժմ կարող է կազմաձևվել առանձին միջուկի և օգտագործողի տարածքի համար: Տեխնոլոգիան թույլ է տալիս օգտագործել ARM64 մասնագիտացված հրահանգներ՝ ստուգելու վերադարձի հասցեները՝ օգտագործելով թվային ստորագրությունները, որոնք պահվում են հենց ցուցիչի չօգտագործված վերին բիթերում.
    • Օգտագործողի ռեժիմում Linux-ում ավելացրել է աջակցություն PCI սարքերի համար վարորդների օգտագործման համար վիրտուալ PCI ավտոբուսով, որն իրականացվում է PCI-over-virtio վարորդի կողմից.
    • x86 համակարգերի համար ավելացվել է virtio-iommu paravirtualized սարքի աջակցությունը, որը թույլ է տալիս ուղարկել IOMMU հարցումներ, ինչպիսիք են ATTACH, DETACH, MAP և UNMAP, virtio transport-ի միջոցով՝ առանց հիշողության էջերի աղյուսակների նմանակման;
    • Intel պրոցեսորների համար՝ Skylake ընտանիքից մինչև Coffee Lake, Intel TSX-ի (Transactional Synchronization Extensions) օգտագործումը, որն ապահովում է գործիքներ բազմաշերտ հավելվածների աշխատանքը բարելավելու համար՝ դինամիկ կերպով վերացնելով անհարկի համաժամացման գործողությունները, լռելյայն անջատված է: Ընդլայնումները անջատված են հարձակումների հնարավորության պատճառով Zombieload, շահարկելով տեղեկատվության արտահոսքը երրորդ կողմի ալիքների միջոցով, որը տեղի է ունենում գործողությունների ասինխրոն ընդհատման մեխանիզմի շահագործման ընթացքում (TAA, TSX Asynchronous Abort);
  • ցանցային ենթահամակարգ.
    • շարունակական ինտեգրումը MPTCP-ի միջուկին (MultiPath TCP), որը TCP արձանագրության ընդլայնումն է՝ TCP կապի գործարկումը կազմակերպելու համար՝ փաթեթների առաքումը միաժամանակ մի քանի երթուղիներով տարբեր ցանցային ինտերֆեյսների միջոցով՝ կապված տարբեր IP հասցեների հետ: Նոր համարում ավելացրեց IPv4-ի և IPv6-ի համար ձեր սեփական երթևեկության հեշավորման քաղաքականությունը սահմանելու մեխանիզմ (բազմուղիների հաշման քաղաքականություն), որը հնարավորություն է տալիս օգտվողի տարածքից որոշել, թե փաթեթների որ դաշտերը, ներառյալ պարփակվածները, կօգտագործվեն ուղու ընտրությունը որոշող հեշը հաշվարկելիս: փաթեթի համար;
    • վարդակների աջակցությունը ավելացվել է վիրտուալ տրանսպորտի virtio-ին SOCK_SEQPACKET (datagrams-ի կանոնավոր և հուսալի փոխանցում);
    • Ընդլայնվել են SO_REUSEPORT վարդակից մեխանիզմի հնարավորությունները, ինչը թույլ է տալիս մի քանի լսողական վարդակներ միանգամից միանալ մեկ պորտին՝ մուտքային հարցումների բաշխմամբ միացումներ ստանալու համար SO_REUSEPORT-ի միջոցով միացված բոլոր վարդակներում, ինչը հեշտացնում է բազմաշերտ սերվերային հավելվածների ստեղծումը: . Նոր տարբերակում ավելացրել է ի սկզբանե ընտրված վարդակի կողմից հարցումը մշակելիս ձախողման դեպքում հսկողությունը մեկ այլ վարդակից փոխանցելու միջոց (լուծում է ծառայությունների վերագործարկման ժամանակ անհատական ​​կապերի կորստի խնդիրը).
  • սարքավորումներ:
    • amdgpu դրայվերում իրականացվել է աջակցություն նոր AMD Radeon RX 6000 պրոցեսորների շարքին, որոնք կրում են «Beige Goby» (Navi 24) և «Yellow Carp» ծածկանունները, ինչպես նաև բարելավված աջակցություն Aldebaran GPU-ի (gfx90a) և Van Gogh APU-ի համար: Ավելացվել է մի քանի eDP վահանակների հետ միաժամանակ աշխատելու հնարավորություն: APU Renoir-ի համար իրականացվել է տեսահիշողության գաղտնագրված բուֆերների հետ աշխատելու աջակցություն (TMZ, Trusted Memory Zone): Ավելացվեց տաք անջատված գրաֆիկական քարտերի աջակցություն: Radeon RX 6000 (Navi 2x) GPU-ների և ավելի հին AMD GPU-ների համար լռելյայն միացված է ASPM (Active State Power Management) էներգախնայողության մեխանիզմի աջակցությունը, որը նախկինում միացված էր միայն Navi 1x, Vega և Polaris GPU-ների համար;
    • AMD չիպերի համար ավելացվել է համօգտագործվող վիրտուալ հիշողության (SVM, համօգտագործվող վիրտուալ հիշողություն) աջակցություն՝ հիմնված HMM (Հետերոգեն հիշողության կառավարում) ենթահամակարգի վրա, որը թույլ է տալիս օգտագործել հիշողության կառավարման սեփական միավորներով սարքեր (MMU, հիշողության կառավարման միավոր), որը կարող է մուտք գործել հիմնական հիշողություն: Ներառյալ HMM-ի օգտագործումը, դուք կարող եք կազմակերպել ընդհանուր հասցեային տարածք GPU-ի և CPU-ի միջև, որտեղ GPU-ն կարող է մուտք գործել գործընթացի հիմնական հիշողություն;
    • ավելացվել է նախնական տեխնոլոգիական աջակցություն դրամ Smart Shift, որը դինամիկ կերպով փոխում է պրոցեսորի և GPU-ի էներգիայի սպառման պարամետրերը չիպսեթով և AMD գրաֆիկական քարտով նոութբուքերի վրա՝ խաղերի, տեսանյութերի խմբագրման և 3D-արտադրման ժամանակ արդյունավետությունը բարձրացնելու համար;
    • Intel վիդեո քարտերի i915 դրայվերում ներառված աջակցություն Intel Alderlake P չիպերին;
    • ավելացվել է drm/hyperv վարորդ Hyper-V վիրտուալ գրաֆիկական ադապտերի համար;
    • ավելացրեց simpledrm գրաֆիկական վարորդ, որն օգտագործում է EFI-GOP կամ VESA framebuffer-ը, որը տրամադրվում է UEFI որոնվածի կամ BIOS-ի կողմից ելքի համար: Վարորդի հիմնական նպատակն է ապահովել գրաֆիկական ելքային հնարավորություններ բեռնման սկզբնական փուլերում, նախքան ամբողջական DRM դրայվերի օգտագործումը: Վարորդը կարող է օգտագործվել նաև որպես ժամանակավոր լուծում սարքավորումների համար, որոնք դեռ չունեն բնիկ DRM դրայվերներ.
    • ավելացրել է համընդհանուր համակարգչային աջակցություն Raspberry Pi 400;
    • Ավելացվեց dell-wmi-գաղտնիության դրայվեր՝ Dell նոութբուքերում ներառված տեսախցիկի և խոսափողի ապարատային անջատիչներին աջակցելու համար;
    • Lenovo նոութբուքերի համար ավելացրեց WMI ինտերֆեյս BIOS-ի պարամետրերը փոխելու համար sysfs /sys/class/firmware-attributes/-ի միջոցով;
    • ընդլայնվել է USB4 ինտերֆեյս ունեցող սարքերի աջակցություն;
    • ավելացրել է ձայնային քարտերի և կոդեկների աջակցություն AmLogic SM1 TOACODEC, Intel AlderLake-M, NXP i.MX8, NXP TFA1, TDF9897, Rockchip RK817, Qualcomm Quinary MI2 և Texas Instruments TAS2505: Բարելավված աուդիո աջակցություն HP և ASUS նոութբուքերի վրա: Ավելացված է կարկատներ՝ ուշացումները նվազեցնելու համար, նախքան USB ինտերֆեյս ունեցող սարքերում ձայնի նվագարկումը կսկսվի:

Աղբյուրը՝ opennet.ru.

Source: linux.org.ru