Рэліз ядра Linux 5.9

Пасля двух месяцаў распрацоўкі Лінус Торвальдс прадставіў рэліз ядра Linux 5.9. Сярод найболей прыкметных змен: абмежаванне імпарту знакаў з прапрыетарных модуляў у GPL-модулі, паскарэнне аперацый пераключэння кантэксту пры дапамозе працэсарнай інструкцыі FSGSBASE, падтрымка сціску выявы ядра пры дапамозе Zstd, перапрацоўка расстаноўкі прыярытэтаў для струменяў у ядры, падтрымка пратаколу PRP (Parallel Red) , планаванне з улікам прапускной здольнасці ў планавальніку deadline, папераджальнае пакаванне старонак памяці, capability-сцяг CAP_CHECKPOINT_RESTOR, сістэмны выклік close_range(), павышэнне прадукцыйнасці dm-crypt, выдаленне кода для 32-разрадных гасцявых сістэм Xen PV "rescue" у Btrfs, падтрымка inline-шыфравання ў ext4 і F2FS.

У новую версію прынята 16074 выпраўленні ад 2011 распрацоўшчыкаў,
памер патча – 62 МБ (змены закранулі 14548 файлаў, дададзена 782155 радкоў кода, выдалена 314792 радкі). Каля 45% усіх прадстаўленых у 5.9
змен звязаны з драйверамі прылад, прыкладна 15% змен маюць
стаўленне да абнаўлення кода, спецыфічнага для апаратных архітэктур, 13%
звязана з сеткавым стэкам, 3% - з файлавымі сістэмамі і 3% c унутранымі
падсістэмамі ядра.

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

  • Памяць і сістэмныя сэрвісы
    • Узмоцнена абарона ад выкарыстання GPL-праслоек для звязвання прапрыетарных драйвераў з кампанентамі ядра, якія экспартуюцца толькі для модуляў пад ліцэнзіяй GPL. Сцяг TAINT_PROPRIETARY_MODULE зараз успадкоўваюцца ва ўсіх модулях, якія імпартуюць сімвалы з модуляў з дадзеным сцягам. Калі GPL-модуль паспрабуе імпартаваць знакі з не-GPL модуля, то гэты GPL-модуль успадкуе пазнаку TAINT_PROPRIETARY_MODULE і не зможа звяртацца да кампанентаў ядра, даступным толькі для модуляў пад ліцэнзіяй GPL, нават калі модуль раней імпартаваў знакі з катэгорыі "gplonly". Зваротная блакіроўка (экспарт толькі EXPORT_SYMBOL_GPL у модулях, якія імпартавалі EXPORT_SYMBOL_GPL), якая магла парушыць працу прапрыетарных драйвераў, не рэалізаваная (успадкоўваецца толькі сцяг прапрыетарнага модуля, але не GPL-прывязкі).
    • Дададзена падтрымка механізму kcompactd для папераджальнай упакоўкі старонак памяці у фонавым рэжыме, які дазваляе павялічыць колькасць вялікіх старонак памяці, даступных ядру. Па папярэдняй адзнацы, фонавая пакаванне коштам мінімальных накладных выдаткаў дазваляе ў 70-80 раз зменшыць затрымкі пры вылучэнні буйных старонак памяці (huge-page) у параўнанні з раней ужывальным механізмам пакавання, запускаемым пры ўзнікненні неабходнасці (on-demand). Для задання меж знешняй фрагментацыі, якую будзе забяспечваць kcompactd, дададзены sysctl vm.compaction_proactiveness.
    • Дададзена падтрымка сціску выявы ядра з выкарыстаннем алгарытму Зстандарт (zstd).
    • Для сістэм x86 рэалізавана падтрымка працэсарнай інструкцыі FSGSBASE, якая дазваляе чытаць і змяняць змесціва рэгістраў FS/GS з прасторы карыстача. У ядры FSGSBASE выкарыстоўваецца для паскарэння аперацый пераключэння кантэксту за рахунак выключэння лішніх аперацый запісу MSR для GSBASE, а ў прасторы карыстача дазваляе абыйсціся без лішніх сістэмных выклікаў для змены FS/GS.
    • Дададзены параметр "allow_writes", які дазваляе забараніць змены MSR-рэгістраў працэсара з прасторы карыстача і абмежаваць доступ да змесціва дадзеных рэгістраў аперацыямі чытання, бо змена MSR можа прывесці да праблем. Па змаўчанні запіс пакуль не забаронены, а змена MSR адлюстроўваецца ў логу, але ў будучыні плануецца перавесці доступ па змаўчанні ў рэжым толькі для чытання.
    • У інтэрфейс асінхроннага ўводу/высновы io_uring дададзена поўная падтрымка асінхронных аперацый буферызаванага чытання, якія не патрабуюць прыцягнення струменяў ядра. Падтрымка запісу чакаецца ў наступным выпуску.
    • У планавальніку ўводу/высновы deadline рэалізавана планаванне з улікам прапускной здольнасці, якое дазваляе прымаць карэктныя рашэнні на асіметрычных сістэмах, такіх як сістэмы ARM на базе архітэктур DynamIQ і big.LITTLE, якія камбінуюць у адным чыпе магутныя і менш прадукцыйныя энергаэфектыўныя ядра CPU. У прыватнасці, новы рэжым дазваляе пазбегнуць разузгадненняў пры планаванні, калі павольнае ядро ​​CPU не мае належных рэсурсаў для выканання задачы ў прызначаны тэрмін.
    • Мадэль спажывання энергіі ў ядры (фрэймворк Energy Model) зараз апісвае не толькі паводзіны энергаспажывання CPU, але і ахапляе перыферыйныя прылады.
    • Рэалізаваны сістэмны выклік close_range(), які дазваляе працэсу зараз зачыніць цэлы дыяпазон адчыненых файлавых дэскрыптараў.
    • З рэалізацыі тэкставай кансолі і драйвера fbcon выдалены код, Які забяспечвае магчымасць праграмнай пракруткі тэксту назад (CONFIG_VGACON_SOFT_SCROLLBACK) больш чым на аб'ём відэапамяці тэкставага рэжыму VGA.
    • Перапрацаваны алгарытм прызначэння прыярытэтаў для патокаў ўнутры ядра. Новы варыянт забяспечвае лепшую ўзгодненасць ва ўсіх падсістэмах ядра пры прызначэнні прыярытэтаў для задач рэальнага часу.
    • Дададзены sysctl sched_uclamp_util_min_rt_default для кіравання параметрамі фарсіравання частаты CPU для задач рэальнага часу (напрыклад, можна на лёце мяняць паводзіны пры выкананні задач рэальнага часу для эканоміі энергіі пасля пераходу на харчаванне ад акумулятара або на мабільных сістэмах).
    • Праведзена падрыхтоўка да рэалізацыі падтрымкі тэхналогіі Transparent Huge Pages у старонкавым кэшы.
    • У механізме fanotify рэалізаваны новыя сцягі FAN_REPORT_NAME і FAN_REPORT_DIR_FID для перадачы звестак аб бацькоўскім імі і ўнікальным ідэнтыфікатары FID пры наступе падзей стварэння, выдаленні або перасоўванні элементаў каталога і не злучаных з каталогамі аб'ектаў.
    • Для cgroups рэалізаваны новы кантролер размеркавання памяці slab (slab memory controller), які адметны пераносам уліку slab з узроўня старонак памяці на ўзровень аб'ектаў ядра, што дае магчымасць сумесна выкарыстоўваць slab-старонкі ў розных cgroup, замест вылучэння асобных кэшаў slab для кожнай cgroup. Прапанаваны падыход дазваляе павысіць эфектыўнасць выкарыстання slab, на 30-45% скараціць памер выкарыстоўванай для slab памяці, значна паменшыць агульнае спажыванне памяці ядром і знізіць фрагментацыю памяці.
    • У гукавой падсістэме ALSA и USB-стэку, у адпаведнасці з нядаўна прынятымі рэкамендацыямі па выкарыстанні інклюзіўнай тэрміналогіі ў ядры Linux, праведзена чыстка непаліткарэктных тэрмінаў. Код ачышчаны ад выкарыстання слоў "slave", "master", "blacklist" і "whitelist".
  • Віртуалізацыя і бяспека
    • Пры зборцы ядра з выкарыстаннем кампілятара Clang з'явілася магчымасць налады (CONFIG_INIT_STACK_ALL_ZERO) аўтаматычнай ініцыялізацыі нулявым значэннем усіх зменных, якія захоўваюцца ў стэку (пры зборцы паказваецца "-ftrivial-auto-var-init=zero") .
    • У падсістэму seccomp, пры выкарыстанні рэжыму кантролю працэсу ў прасторы карыстача, дададзена магчымасць падстаноўкі ў адсочваны працэс файлавых дэскрыптараў для поўнай эмуляцыі сістэмных выклікаў, якія прыводзяць да стварэння файлавых дэскрыптараў. Функцыянальнасць запатрабавана ў сістэмах ізаляваных кантэйнераў і рэалізацыі sandbox для Chrome.
    • Для архітэктур xtensa і csky дададзена падтрымка абмежавання сістэмных выклікаў пры дапамозе падсістэмы seccomp. Для xtensa дадаткова рэалізавана падтрымка механізму аўдыту.
    • Дададзены новы capability-сцяг CAP_CHECKPOINT_RESTORE, які дазваляе без перадачы дадатковых прывілеяў падаць доступ да магчымасцяў, звязаных з замарозкай і аднаўленнем стану працэсаў.
    • У GCC 11 рэалізаваны ўсе магчымасці, неабходныя для
      адладкавай прылады KCSAN (Kernel Concurrency Sanitizer), прызначанага для дынамічнага выяўлення станаў гонкі ўсярэдзіне ядраў. Такім чынам, KCSAN зараз можа выкарыстоўвацца з ядрамі, сабранымі ў GCC.

    • Для AMD Zen і навейшых мадэляў CPU дададзена падтрымка тэхналогіі P2PDMA, якая дазваляе выкарыстоўваць DMA для прамой перадачы дадзеных паміж памяццю двух прылад, падлучаных да шыны PCI.
    • У dm-crypt дададзены рэжым, які дазваляе скараціць затрымкі за рахунак выканання крыптаграфічнай апрацоўкі дадзеных без выкарыстання працоўных чэргаў. Указаны рэжым таксама неабходны для карэктнай працы з занаванымі блокавымі прыладамі (прылады з абласцямі, якія павінны запісвацца паслядоўна з абнаўленнем цалкам усёй групы блокаў). Праведзена праца па падвышэнні прапускной здольнасці і памяншэнню затрымак у dm-crypt.
    • Выдалены код для падтрымкі 32-разрадных гасцявых сістэм, якія працуюць у рэжыме паравіртуалізацыі пад кіраваннем гіпервізара Xen. Карыстачам падобных сістэм варта перайсці на выкарыстанне 64-разрадных ядраў у гасцявых асяродках або выкарыстоўваць для запуску акружэнняў замест паравіртуалізацыі (PV) рэжымы поўнай (HVM) або камбінаванай (PVH) віртуалізацыі.
  • Дыскавая падсістэма, увод/выснова і файлавыя сістэмы
    • У файлавай сістэме Btrfs рэалізавана опцыя мантавання «rescue», якая ўніфікуе доступ да ўсіх іншых опцый для аднаўлення. Выдалена падтрымка опцый "alloc_start" і "subvolrootid", абвешчана састарэлай опцыя "inode_cache". Праведзена аптымізацыя прадукцыйнасці, асабліва прыкметна паскорана выкананне аперацый fsync(). Дададзена магчымасць выкарыстання альтэрнатыўных тыпаў кантрольных сум, адрозных ад CRC32c.
    • Дададзена магчымасць выкарыстання inline-шыфравання (Inline Encryption) у файлавых сістэмах ext4 і F2FS, для ўключэння якога прадугледжана опцыя мантавання "inlinecrypt". Рэжым inline-шыфраванні дазваляе задзейнічаць убудаваныя ў кантролер назапашвальніка механізмы шыфравання, якія ажыццяўляюць празрыстае шыфраванне і расшыфроўку ўводу/высновы.
    • У XFS забяспечаны скід inode (flush) у цалкам асінхронным рэжыме, не блакавальным працэсы пры выкананні аперацыі чысткі памяці. Вырашана даўняя праблема з квотамі, з-за якой некарэктна адсочваліся папярэджанні аб перавышэнні мяккага ліміту і абмежаванняў на лік inode. Уніфікавана рэалізацыя падтрымкі DAX для ext4 і xfs.
    • У Ext4 рэалізавана папераджальная загрузка бітавых карт размеркавання блокаў. У спалучэнні з абмежаваннем сканавання неініцыялізаваных груп, аптымізацыя дазволіла скараціць час мантавання вельмі вялікіх раздзелаў.
    • У F2FS дададзены ioctl F2FS_IOC_SEC_TRIM_FILE, які дазваляе выкарыстоўваць каманды TRIM/discard для фізічнага абнулення паказаных дадзеных у файле, напрыклад, для выдалення ключоў доступу без ссядання на назапашвальніку рэшткавых дадзеных.
      У F2FS таксама дададзены новы рэжым зборкі смецця GC_URGENT_LOW, які працуе больш агрэсіўна за кошт выключэння некаторых праверак знаходжання ў стане прастою (idle) перад запускам зборшчыка смецця.

    • У bcache памер bucket_size для экстэнтаў павялічаны з 16 да 32 біт у рамках падрыхтоўкі да забеспячэння магчымасці ўжывання для кэша занаваных прылад.
    • У падсістэму SCSI дададзена магчымасць выкарыстання inline-шыфравання на базе ўбудаваных сродкаў апаратнага шыфравання, якія прадстаўляюцца UFS-кантролерамі (Універсальны флэш-назапашвальнік).
    • Дададзены новы параметр каманднага радка ядра "debugfs", які дазваляе кіраваць даступнасцю аднайменнай псеўда-ФС.
    • У кліенце NFSv4.2 забяспечана падтрымка пашыраных атрыбутаў файлаў (xattr).
    • У dm-dust дададзены інтэрфейс для вываду зараз спісу ўсіх выяўленых bad-блокаў на дыску ("dmsetup message dust1 0 listbadblocks").
    • Для md/raid5 дададзены параметр /sys/block/md1/md/stripe_size для налады памеру STRIPE-блока.
    • Для прылад захоўвання NVMe дададзена падтрымка каманд для занавання назапашвальніка (ZNS, NVM Express Zoned Namespace), які дазваляе разбіць прастору для захоўвання на зоны, якія складаюць групы блокаў, для больш поўнага кіравання размяшчэннем дадзеных на назапашвальніку.
  • Сеткавая падсістэма
    • У Netfilter дададзена магчымасць адхілення пакетаў на стадыі да праверкі маршрутызацыі (выраз REJECT зараз можа выкарыстоўвацца не толькі ў ланцужках INPUT, FORWARD і OUTPUT, але і на стадыі PREROUTING для icmp і tcp).
    • У nftables дададзена магчымасць аўдыту падзей, звязаных са зменай канфігурацыі.
    • У nftables у API netlink дададзена падтрымка ананімных ланцужкоў, імя якім прызначаецца дынамічна ядром. Пры выдаленні звязанага з ананімным ланцужком правіла аўтаматычна выдаляецца і сам ланцужок.
    • У BPF дададзеная падтрымка ітэратараў для абыходу, фільтраванні і змены элементаў асацыятыўных масіваў (map) без капіявання дадзеных у прастору карыстача. Ітэратары можна выкарыстоўваць для сокетаў TCP і UDP, што дазваляе BPF-праграмам перабіраць спісы адчыненых сокетаў і здабываць з іх неабходныя звесткі.
    • Дададзены новы тып BPF-праграм BPF_PROG_TYPE_SK_LOOKUP, якія запускаюцца ў момант, калі ядро ​​шукае прыдатны які слухае сокет для ўваходнага злучэння. Пры дапамозе падобнай BPF-праграмы можна ствараць апрацоўшчыкі, якія прымаюць рашэнні аб тым, з якім сокетам варта асацыяваць злучэнне, не абмежаваныя рамкамі сістэмнага выкліку bind(). Напрыклад, можна арганізаваць звязванне аднаго сокета з дыяпазонам адрасоў ці партоў. Акрамя таго, у bpf_setsockopt() дададзеная падтрымка сцяга SO_KEEPALIVE і рэалізаваная магчымасць усталёўкі апрацоўшчыкаў BPF_CGROUP_INET_SOCK_RELEASE, выкліканых пры вызваленні сокета.
    • Рэалізавана падтрымка пратакола PRP (Parallel Redundancy Protocol), які дазваляе на базе Ethernet рэалізаваць празрыстае для прыкладанняў пераключэнне на запасны канал у выпадку збою любых кампанентаў сеткі.
    • У стэк mac80211 дададзена падтрымка чатырохэтапнага ўзгаднення канала WPA/WPA2-PSK у рэжыме кропкі доступу.
    • Дададзена магчымасць пераключэння планавальніка qdisc (queuing discipline) на выкарыстанне па змаўчанні алгарытму кіравання сеткавымі чэргамі FQ-PIE (Flow Queue PIE), накіраванага на зніжэнне негатыўнага ўплыву прамежкавай буферызацыі пакетаў на межавым сеткавым абсталяванні (bufferbloat) у сетках з кабель.
    • Дададзены новыя магчымасці ў MPTCP (MultiPath TCP), пашырэнні пратаколу TCP для арганізацыі працы TCP-злучэнні з дастаўкай пакетаў адначасова па некалькіх маршрутам праз розныя сеткавыя інтэрфейсы, прывязаныя да розных IP-адрасоў. Дададзена падтрымка syn cookie, DATA_FIN, аўтаналадкі буфераў, дыягностыкі сокетаў і выкарыстанні сцягоў REUSEADDR, REUSEPORT і V6ONLY у setsockopt.
    • Для віртуальных табліц маршрутызацыі VRF (Virtual Routing and Forwarding), якія дазваляюць арганізаваць працу некалькіх даменаў маршрутызацыі на адной сістэме, рэалізаваны рэжым "strict". У дадзеным рэжыме віртуальная табліца можа быць асацыяваная толькі з табліцай маршрутызацыі, якая не выкарыстоўваецца ў іншых віртуальных табліцах.
    • У бесправадны драйвер ath11k дададзена падтрымка частаты 6GHz і спектральнага сканавання.
  • Абсталяванне
    • Выдалены код для падтрымкі архітэктуры UniCore, распрацаванай у мікрапрацэсарным цэнтры Пекінскага ўніверсітэта і ўключанай у склад ядра Linux у 2011 году. Дадзеная архітэктура з 2014 года знаходзіцца без суправаджэння і не мае падтрымкі ў GCC.
    • Для архітэктуры RISC-V рэалізавана падтрымка kcov (debugfs-інтэрфейс для аналізу пакрыцця кода ядра), kmemleak (сістэма выяўлення ўцечак памяці), абароны стэка, пазнак пераходу і tickless-аперацый (незалежная ад сігналаў таймера шматзадачнасць).
    • Для архітэктуры PowerPC рэалізавана падтрымка чэргаў для spinlock, якая дазволіла значна падняць прадукцыйнасць у сітуацыях канфлікту блакіровак.
    • Для архітэктур ARM і ARM64 задзейнічаны па змаўчанні механізм рэгулявання частаты працэсара расклад (cpufreq governor), які для прыняцця рашэння аб змене частаты напроста выкарыстоўвае інфармацыю ад планавальніка задач і можа адразу звяртацца да драйвераў cpufreq для аператыўнай змены частаты, імгненна падганяючы параметры працы CPU да бягучай нагрузкі.
    • У DRM-драйверы i915 для відэакарт Intel уключана падтрымка чыпаў на базе мікраархітэктуры Возера Ракета і дададзена пачатковая падтрымка дыскрэтных карт Intel Xe DG1.
    • У драйвер amdgpu дададзена пачатковая падтрымка GPU AMD Navi 21 (Navy Flounder) і Navi 22 (Sienna Cichlid). Дададзена падтрымка рухавікоў паскарэння кадавання і дэкадавання відэа UVD / VCE для GPU Southern Islands (Radeon HD 7000).
      Дададзена ўласцівасць для павароту адлюстравання на 90, 180 або 270 градусаў.

      Цікава, што драйвер для GPU AMD з'яўляецца самым буйным драйверам у ядры - ён налічвае каля 2.71 млн радкоў кода, што прыкладна 10% ад агульнага памеру ядра (27.81 млн радкоў). Пры гэтым 1.79 млн радкоў прыпадае на згенераваныя аўтаматычна загалоўкавыя файлы з дадзенымі для рэгістраў GPU, а Сі-код складае 366 тысяч радкоў (для параўнання драйвер Intel i915 уключае 209 тысяч радкоў, а Nouveau – 149 тысяч).

    • У драйвер Nouveau дададзена падтрымка пакадравай праверкі цэласнасці пры дапамозе CRC (Cyclic Redundancy Checks) у дысплейных рухавіках GPU NVIDIA. Рэалізацыя заснавана на дакументацыі, прадстаўленай кампаніяй NVIDIA.
    • Дададзеныя драйверы для LCD-панэляў: Frida FRD350H54004, KOE TX26D202VM0BWA, CDTech S070PWS19HP-FC21, CDTech S070SWV29HG-DC44, Tianma TM070JVHG33 і Xing.
    • У гукавой падсістэме ALSA рэалізавана падтрымка Intel Silent Stream (рэжым сталага падтрымання сілкавання для вонкавых HDMI-прылад для выключэння затрымкі пры пачатку прайгравання) і новай прылады для кіравання падсветкай кнопак актывацыі мікрафона і адключэнні гуку, а таксама дададзена падтрымка новага абсталявання, уключаючы кантролер Loongson 7A1000.
    • Дададзеная падтрымка ARM-плат, прылад і платформаў: Pine64 PinePhone v1.2, Lenovo IdeaPad Duet 10.1/7, ASUS Google Nexus 500, Acer Iconia Tab A630, Qualcomm Snapdragon SDM10 (выкарыстоўваецца ў Sony Xperia 10, 2 Plus, XA Ultra), Jetson Xavier NX, Amlogic WeTek Core2, Aspeed EthanolX, пяць новых поплаткаў на базе NXP i.MX2, MikroTik RouterBoard 2, Xiaomi Libra, Microsoft Lumia 6, Sony Xperia Z3011, Intel, Microchip Sparx950 v5, Renesas RZ/G5H.

Адначасова лацінаамерыканскі Фонд вольнага ПЗ сфармаваў
варыянт цалкам вольнага ядра 5.9 - Linux-libre 5.9-gnu, вычышчанага ад элементаў прашывак і драйвераў, якія змяшчаюць нявольныя кампаненты або ўчасткі кода, вобласць ужывання якіх абмежавана вытворцам. У новым выпуску адключаная загрузка блобаў у драйверах для WiFi rtw8821c і SoC MediaTek mt8183. Абноўлены код чысткі блобаў у драйверах і падсістэмах Habanalabs, Wilc1000, amdgpu, mt7615, i915 CSR, Mellanox mlxsw (Spectrum3), r8169 (rtl8125b-2) і x86 touchscreen.

Крыніца: opennet.ru

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