Рэліз ядра Linux 5.2

Пасля двух месяцаў распрацоўкі Лінус Торвальдс прадставіў рэліз ядра Linux 5.2. Сярод найболей прыкметных змен: рэжым працы Ext4 без уліку рэгістра знакаў, паасобныя сістэмныя выклікі для мантавання ФС, драйверы для GPU Mali 4xx/ 6xx/7xx, магчымасць апрацоўкі змены значэнняў sysctl у праграмах BPF, device-mapper модуль dm-dust, абарона ад нападаў MDS, падтрымка Sound Open Firmware для DSP, аптымізацыя прадукцыйнасці BFQ, давядзенне падсістэмы PSI (Pressure Stall Information) да магчымасці выкарыстання ў Android.

У новую версію прынята 15100 выпраўленняў ад 1882 распрацоўшчыкаў,
памер патча – 62 Мб (змены закранулі 30889 файлаў, дададзена 625094 радкоў кода, выдалена 531864 радкоў). Каля 45% усіх прадстаўленых у 5.2
змен звязаны з драйверамі прылад, прыкладна 21% змен маюць
стаўленне да абнаўлення кода спецыфічнага для апаратных архітэктур, 12%
звязана з сеткавым стэкам, 3% - файлавымі сістэмамі і 3% c унутранымі
падсістэмамі ядра. 12.4% усіх зменаў падрыхтавана кампаніяй Intel, 6.3% – Red Hat, 5.4% – Google, 4.0% – AMD, 3.1% – SUSE, 3% – IBM, 2.7% – Huawei, 2.7% – Linaro, 2.2% – ARM, 1.6 % - Oracle.

Асноўныя навіны:

  • Дыскавая падсістэма, увод/выснова і файлавыя сістэмы
    • Для Ext4 дададзена падтрымка працы без адрознення рэгістра сімвалаў у імёнах файлаў, якая актывуецца толькі ў прывязцы да асобных пустых каталогаў пры дапамозе новага атрыбута "+F" (EXT4_CASEFOLD_FL). Пры ўсталёўцы дадзенага атрыбуту на каталог усе аперацыі з файламі і падкаталогамі ўсярэдзіне будуць вырабляцца без уліку рэгістра знакаў, у тым ліку рэгістр будзе ігнаравацца пры аперацыях пошуку і адкрыцці файлаў (напрыклад, файлы Test.txt, test.txt і test.TXT у падобных каталогах будуць лічыцца аднолькавымі). Па змаўчанні ФС працягвае быць рэгістразалежнай, за выключэннем каталогаў з атрыбутам "chattr + F";
    • Уніфікаваны функцыі апрацоўкі сімвалаў UTF-8 у імёнах файлаў, якія прымяняюцца пры выкананні аперацый параўнання і нармалізацыі радкоў;
    • У XFS дададзена інфраструктура для адсочвання стану файлавай сістэмы і новы ioctl для запыту статуту працаздольнасці. Рэалізавана эксперыментальная магчымасць для праверкі на ляту (online scrub) лічыльнікаў суперблока.
    • Дададзены новы модуль device-mapperdm-dust«, які дазваляе сімуляваць з'яўленне bad-блокаў на носьбіце ці памылак пры чытанні з дыска. Модуль дазваляе спрасціць адладку і тэсціраванне прыкладанняў і розных сістэм захоўвання ва ўмовах магчымага з'яўлення збояў;
    • Праведзена значная аптымізацыя прадукцыйнасці планавальніка ўводу/высновы BFQ. Ва ўмовах высокай нагрузкі на ўвод/вывад унесеныя аптымізацыі дазваляюць да 80% скараціць час такіх аперацый, як запуск прыкладанняў;
    • Дададзена серыя сістэмных выклікаў для мантавання файлавых сістэм: fsopen(), open_tree(), fspick(), fsmount(), fsconfig() и move_mount(). Дадзеныя сістэмныя выклікі дазваляюць паасобна апрацаваць розныя стадыі мантавання (апрацаваць суперблок, атрымаць інфармацыю аб ФС, прымантаваць, прымацаваць да кропкі мантавання), якія раней выконваліся пры дапамозе агульнага сістэмнага выкліку mount(). Паасобныя выклікі даюць магчымасць выконваць больш складаныя сцэнары мантавання і асобна выконваць такія аперацыі, як пераналадка суперблока, уключэнне опцый, змена кропкі мантавання і перанос у іншую прастору імёнаў. Акрамя таго, паасобная апрацоўка дазваляе сапраўды вызначаць чыннікі высновы кодаў памылак і задаваць некалькі крыніц для шматслаёвых ФС, такіх як overlayfs;
    • У інтэрфейс для асінхроннага ўводу/высновы io_uring дададзена новая аперацыя IORING_OP_SYNC_FILE_RANGE, якая выконвае дзеянні, эквівалентныя сістэмнаму выкліку sync_file_range(), а таксама рэалізавана магчымасць рэгістрацыі eventfd з io_uring і атрыманні апавяшчэнняў аб завяршэнні аперацый;
    • Для файлавай сістэмы CIFS дададзены ioctl FIEMAP, які забяспечвае эфектыўнае супастаўленне экстэнтаў, а таксама падтрымка рэжымаў SEEK_DATA і SEEK_HOLE;
    • У падсістэме FUSE прапанаваны API для кіравання кэшаваннем дадзеных;
    • У Btrfs праведзена аптымізацыя рэалізацыі qgroups і падвышаная хуткасць выканання fsync для файлаў з некалькімі цвёрдымі спасылкамі. Палепшаны код праверкі цэласнасці дадзеных, які зараз улічвае магчымае пашкоджанне інфармацыі ў АЗП перад скідам дадзеных на дыск;
    • У CEPH дададзена падтрымка экспарту снапшотаў праз NFS;
    • Палепшана рэалізацыя мантавання NFSv4 у рэжыме "soft" (пры ўзнікненні памылкі доступу да сервера ў рэжыме "soft" выклік у адразу вяртае код памылкі, а ў рэжыме "hard" кіраванне не аддаецца да ўзнаўлення даступнасці ФС або таймаўту). У новым выпуску забяспечана больш дакладная апрацоўка таймаўту, паскорана аднаўленне пасля збою і дададзена новая опцыя мантавання «softerr», якая дазваляе змяніць код памылкі (ETIMEDOUT), які вяртаецца пры наступе таймаўту;
    • У API nfsdcld, прызначаным для адсочвання стану кліентаў NFS, забяспечана магчымасць карэктнага адсочвання NFS-серверам стану кліента пры перазагрузцы. Такім чынам, дэман nfsdcld зараз можа выконваць ролю апрацоўшчыка nfsdcltrack;
    • Для AFS дададзена эмуляцыя блакіровак дапазонаў байт у файлах (Byte Range Locking);
  • Віртуалізацыя і бяспека
    • Праведзена праца па ўхіленні месцаў у ядры, якія дапушчаюць выкананне кода з даступных на запіс адлюстраваных абласцей памяці, што дазваляе блакаваць патэнцыйныя праломы, якія могуць быць эксплуатаваны пры нападзе;
    • Дададзены новы параметр каманднага радка ядра «mitigations=», які прадстаўляе спрошчаны спосаб кіравання ўключэннем тых ці іншых тэхнік абароны ад уразлівасцяў, злучаных са спекулятыўным выкананнем інструкцый у CPU. Перадача "mitigations=off" выключае ўсе наяўныя метады, а ўжывальны па змаўчанні рэжым "mitigations=auto" уключае абарону, але не ўплывае на выкарыстанне Hyper Threading. Рэжым "mitigations = auto, nosmt" дадаткова выключае Hyper Threading, калі таго патрабуе метад абароны.
    • Дададзена падтрымка электроннага лічбавага подпісу па ДАСТ Р 34.10-2012 (RFC 7091, ISO/IEC 14888-3), распрацаваная Віталём Чыкуновым з «Базальт ВПЗ». Ва ўбудаваную рэалізацыю TLS дададзена падтрымка AES128-CCM. У модуль crypto_simd дададзена падтрымка алгарытмаў AEAD;
    • У Kconfig дададзена асобная секцыя "kernel hardening" з опцыямі для ўзмацнення абароны ядра. У цяперашні час у новай секцыі пакуль сабраны толькі наладкі для ўключэння якія ўзмацняюць праверкі GCC-плагінаў;
    • Код ядра амаль пазбаўлены ад бесперапынных выразаў casе ў switch (без return ці break пасля кожнага блока case). Засталося выправіць 32 з 2311 выпадку падобнага выкарыстання switch, пасля чаго пры зборцы ядра можна будзе ўжываць рэжым "-Wimplicit-fallthrough";
    • Для архітэктуры PowerPC рэалізавана падтрымка апаратных механізмаў абмежавання непажаданых шляхоў доступу ядра да дадзеных у прасторы карыстача;
    • Дададзены код для блакавання нападаў класа MDS (Microarchitectural Data Sampling) у працэсарах Intel. Праверыць схільнасць сістэмы ўразлівасці можна праз SysFS-зменную "/sys/devices/system/cpu/vulnerabilities/mds". даступна два рэжыму абароны: поўны, які патрабуе наяўнасці абноўленага мікракода, і абыходны, які цалкам не гарантуе ачыстку буфераў CPU пры перадачы кіравання ў прастору карыстальніка або гасцявой сістэме. Для кіравання рэжымамі абароны ў ядро ​​дададзены параметр "mds=", які можа прымаць значэнні "full", "full, nosmt" (+ адключэнне Hyper-Threads) і "off";
    • На сістэмах x86-64 для IRQ, механізмаў адладкі і апрацоўшчыкаў выключэнняў дададзена абарона "stack guard-page", сутнасць якой у падстаноўцы на мяжы са стэкам старонак памяці, зварот да якіх прыводзіць да генерацыі выключэння (page-fault);
    • Дададзена sysctl-налада vm.unprivileged_userfaultfd, якая кіруе магчымасцю выкарыстання сістэмнага выкліку userfaultfd() непрывілеяванымі працэсамі;
  • Сеткавая падсістэма
    • Дададзена падтрымка шлюзаў IPv6 для маршрутаў IPv4. Напрыклад, цяпер можна ўказваць правілы маршрутызацыі выгляду "ip ro add 172.16.1.0/24 via inet6 2001:db8::1 dev eth0";
    • Для ICMPv6 рэалізаваны ioctl-выклікі icmp_echo_ignore_anycast і icmp_echo_ignore_multicast для ігнаравання ICMP ECHO для anycast і
      multicast адрасоў. Дададзена магчымасць абмежавання інтэнсіўнасці апрацоўкі пакетаў ICMPv6;

    • Для mesh-пратакола BATMAN ("Better Approach To Mobile Adhoc Networking"), які дазваляе ствараць дэцэнтралізаваныя сеткі, кожны вузел у якіх звязаны праз суседнія вузлы, дададзена падтрымка трансляцыі з multicast у unicast, а таксама магчымасць кіравання праз sysfs;
    • У ethtool дададзены новы параметр Fast Link Down, які дазваляе скараціць час паступлення інфармацыі аб падзеі адключэння лінка для 1000BaseT (у звычайных умовах затрымка складае да 750ms);
    • з'явілася магчымасць прывязкі тунэляў Foo-Over-UDP да вызначанага адрасу, сеткаваму інтэрфейсу ці сокету (раней прывязка выраблялася толькі па агульнай масцы);
    • У бесправадным стэку забяспечана магчымасць рэалізацыі апрацоўшчыкаў
      OWE (Opportunistic Wireless Encryption) у прасторы карыстальніка;

    • У Netfilter у ланцужкі nat дададзеная падтрымка сямейства адрасоў inet (напрыклад, зараз можна выкарыстоўваць адно правіла трансляцыі для апрацоўкі ipv4 і ipv6, без падзелу правіл для ipv4 і ipv6);
    • У netlink дададзены рэжым strict для жорсткай праверкі карэктнасці ўсіх паведамленняў і атрыбутаў, у якім не дапушчаецца перавышэнне чаканага памеру атрыбутаў і забаронена даданне дадатковых дадзеных у канцы паведамленняў;
  • Памяць і сістэмныя сэрвісы
    • У сістэмны выклік clone() дададзены сцяг CLONE_PIDFD, пры ўказанні якога бацькоўскаму працэсу вяртаецца файлавы дэскрыптар «pidfd», атаясамлены са створаным даччыным працэсам. Дадзены файлавы дэскрыптар, напрыклад, можна выкарыстоўваць для адпраўкі сігналаў без асцярогі сутыкнуцца са станам гонкі (адразу пасля адпраўкі сігналу мэтавай PID можа быць вызвалены з-за завяршэнні працы працэсу і заняты іншым працэсам);
    • Для другой версіі cgroups дададзена функцыянальнасць кантролера freezer, пры дапамозе якога можна спыніць працу ў cgroup і часова вызваліць некаторыя рэсурсы (CPU, увод/выснова і патэнцыйна нават памяць) для выканання іншых задач. Кіраванне вырабляецца праз кіравальныя файлы cgroup.freeze і cgroup.events у дрэве cgroup. Запіс 1 у cgroup.freeze замарожвае працэсы ў бягучым cgroup і ўсіх даччыных групах. Бо замарозка патрабуе некаторага часу, дадаткова прапанаваны файл cgroup.events праз які можна пазнаць аб завяршэнні аперацыі;
    • Забяспечаны экспарт атрыбутаў памяці, прымацаванай да кожнага вузла ў sysfs, што дазваляе з прасторы карыстальніка вызначыць характар ​​апрацоўкі банкаў памяці ў сістэмах з гетэрагеннай памяццю;
    • Дапрацавана падсістэма PSI (Pressure Stall Information), якая дазваляе прааналізаваць інфармацыю аб часе чакання атрымання розных рэсурсаў (CPU, памяць, увод / вывад) для пэўных задач або набораў працэсаў у cgroup. Пры дапамозе PSI апрацоўшчыкі ў прасторы карыстальніка могуць больш дакладна ацаніць узровень загружанасці сістэмы і характар ​​запаволення працы, у параўнанні з Load Average. У новай версіі забяспечана падтрымка налады парогаў адчувальнасці і магчымасць выкарыстоўваць выклік poll() для атрымання апавяшчэння аб спрацоўванні ўсталяваных парогавых значэнняў за вызначаны прамежак часу. Дадзеная магчымасць дазваляе арганізаваць у Android адсочванне недахопу памяці на ранняй стадыі, вызначаць крыніцу праблем і завяршаць няважныя прыкладанні, не даводзячы да з'яўлення прыкметных карыстачу праблем. Пры стрэс-тэставанні сродку маніторынгу спажывання памяці на аснове PSI прадэманстравалі з 10 разоў менш ілжывых спрацоўванняў у параўнанні са статыстыкай vmpressure;
    • Праведзена аптымізацыя кода для праверкі BPF-праграм, які для вялікіх праграм стаў выконваць праверку да 20 разоў хутчэй. Аптымізацыя дазволіла падняць ліміт на памер BPF-праграм з 4096 да мільёна інструкцый;
    • Для BPF-праграм прадастаўлена магчымасць доступу да глабальных звестак, што дазваляе вызначаць у праграмах глабальныя зменныя і канстанты;
    • Дададзены API, які дазваляе кантраляваць з BPF-праграм змены параметраў sysctl;
    • Для архітэктуры MIPS32 рэалізаваны JIT-кампілятар для віртуальнай машыны eBPF;
    • Для 32-разраднай архітэктуры PowerPC дададзеная падтрымка адладкавай прылады KASan (Kernel address sanitizer), які забяспечвае выяўленне памылак пры працы з памяццю;
    • На сістэмах x86-64 знята абмежаванне па размяшчэнні дампаў стану пры краху ядра (crash-dump) у абласцях памяці вышэй 896MB;
    • Для архітэктуры s390 рэалізавана падтрымка рандомизации адраснай прасторы ядра (KASLR) і магчымасць верыфікацыі лічбавых подпісаў пры загрузцы ядра праз kexec_file_load();
    • Для архітэктуры PA-RISC дададзена падтрымка адладчыка ядра (KGDB), пазнак пераходу і kprobes;
  • Абсталяванне
    • У склад уключаны драйвер Ліма для GPU Mali 400/450, які ўжываецца ў шматлікіх старых чыпах на аснове архітэктуры ARM. Для навейшых GPU Mali дададзены драйвер Panfrost, які падтрымлівае чыпы на базе мікраархітэктур Midgard (Mali-T6xx, Mali-T7xx, Mali-T8xx) і Bifrost (Mali G3x, G5x, G7x);
    • Дададзена падтрымка гукавых прылад, якія выкарыстоўваюць адкрытыя прашыўкі. Гук адкрытай прашыўкі (SOF). Нягледзячы на ​​наяўнасць адчыненых драйвераў, код прашывак для гукавых чыпаў дагэтуль заставаўся зачыненым і пастаўляўся ў бінарным выглядзе. Праект Sound Open Firmware распрацаваны кампаніяй Intel для стварэння адчыненых прашывак для DSP-чыпаў, злучаных з апрацоўкай гуку (пазней да распрацоўкі таксама падлучыўся Google). У цяперашні час у рамках праекта ўжо падрыхтаваны адкрыццё прашыўкі для гукавых чыпаў платформаў Intel Baytrail, CherryTrail, Broadwell, ApolloLake, GeminiLake, CannonLake і IceLake;
    • У DRM-драйверы Intel (i915) дададзеная падтрымка чыпаў
      Elkhartlake (Gen11). Дададзеныя PCI-ідэнтыфікатары для чыпаў Comet Lake (Gen9). Стабілізаваная падтрымка чыпаў Icelake, для якіх таксама дададзены дадатковыя PCI-ідэнтыфікатары прылад.
      Уключаны
      рэжым асінхроннага пераключэння паміж двума буферамі ў відэапамяці (async flip) пры выкананні аперацый запісу праз mmio, што дазволіла прыкметна падняць прадукцыйнасць некаторых 3D-прыкладанняў (напрыклад, прадукцыйнасць у цесцю 3DMark Ice Storm павялічылася на 300-400%). Дададзена падтрымка тэхналогіі HDCP 2.2 (High-bandwidth Digital Content Protection) для шыфравання відэасігналу, які перадаецца праз HDMI;

    • У драйвер amdgpu для GPU Vega20 дададзена падтрымка RAS (Reliability, Availability, Serviceability) і эксперыментальная падтрымка падсістэмы SMU 11, якая прыйшла на змену тэхналогіі Powerplay. Для GPU Vega12 дададзена падтрымка рэжыму BACO (Bus Active, Chip Off). Дададзена пачатковая падтрымка XGMI, высакахуткасны шыны (PCIe 4.0) для злучэння GPU. У драйвер amdkfd дададзены адсутнічаюць ідэнтыфікатары карт на базе GPU Polaris10;
    • У драйвер Nouveau дададзеная падтрымка поплаткаў на аснове чыпсэта NVIDIA Turing 117 (TU117, выкарыстоўваецца ў GeForce GTX 1650). У
      kconfig дададзена налада для адключэння састарэлых функцый, якія ўжо не прымяняюцца ў актуальных выпусках libdrm;

    • У API DRM і драйвер amdgpu дададзена падтрымка аб'ектаў сінхранізацыі "timeline", якія дазваляюць абыйсціся без класічных блакіровак.
    • З галінкі staging у асноўны склад перанесены драйвер vboxvideo для віртуальнага GPU VirtualBox;
    • Дададзены драйвер aspeed для GFX чыпа SoC ASPEED;
    • Дададзена падтрымка ARM SoC і поплаткаў Intel Agilex (SoCFPGA), NXP i.MX8MM, Allwinner (RerVision H3-DVK (H3), Oceanic 5205 5inMFD,, Beelink GS2 (H6), Orange Pi 3 (H6)), Rockchip RK3399, Nanopi NEO4, Veyron-Mighty Chromebook), Amlogic: SEI Robotics SEI510,
      ST Micro (stm32mp157a, stm32mp157c), NXP (
      Eckelmann ci4x10 (i.MX6DL),

      i.MX8MM EVK (i.MX8MM),

      ZII i.MX7 RPU2 (i.MX7),

      ZII SPB4 (VF610),

      Zii Ultra (i.MX8M),

      TQ TQMa7S (i.MX7Solo),

      TQ TQMa7D (i.MX7Dual),

      Kobo Aura (i.MX50),

      Menlosystems M53 (i.MX53)), NVIDIA Jetson Nano (Tegra T210).

Адначасова Лацінаамерыканскі Фонд вольнага ПЗ сфармаваў
варыянт цалкам вольнага ядра 5.2 - Linux-libre 5.2-gnu, вычышчанага ад элементаў прашывак і драйвераў, якія змяшчаюць нявольныя кампаненты або ўчасткі кода, вобласць ужывання якіх абмежавана вытворцам. У новым выпуску ўключана загрузка файлаў
Sound Open Firmware. Адключана загрузка блобаў у драйверах
mt7615, rtw88, rtw8822b, rtw8822c, btmtksdio, iqs5xx, ishtp і ucsi_ccg. Абноўлены код чысткі блобаў у драйверах і падсістэмах ixp4xx, imx-sdma, amdgpu, nouveau і goya, а таксама ў дакументацыі да мікракода. Спынена чыстка блобаў у драйверы r8822be з-за яго выдалення.

Крыніца: opennet.ru

Дадаць каментар