Рэліз ядра Linux 5.7

Пасля двух месяцаў распрацоўкі Лінус Торвальдс прадставіў рэліз ядра Linux 5.7. Сярод найболей прыкметных змен: новая рэалізацыя ФС exFAT, модуль bareudp для стварэння UDP-тунэляў, абарона на аснове аўтэнтыфікацыі паказальнікаў для ARM64, магчымасць прымацавання BPF-праграм да LSM-апрацоўшчыкам, новая рэалізацыя Curve25519, дэтэктар «split-lock», сумяшчальнасць BPF з PREEMPT_RT, здыманне абмежавання на 80-знакавы памер радка ў кодзе, улік паказчыкаў тэмпературы CPU у планавальніку задач, магчымасць выкарыстання clone() для спараджэння працэсаў у іншым cgroup, абарона ад запісу ў памяць пры дапамозе userfaultfd.

У новую версію прынята 15033 выпраўленняў ад 1961 распрацоўшчыкаў,
памер патча – 39 МБ (змены закранулі 11590 файлаў, дададзена 570560 радкоў кода,
выдалена 297401 радкоў). Каля 41% усіх прадстаўленых у 5.7
змен звязаны з драйверамі прылад, прыкладна 16% змен маюць
стаўленне да абнаўлення кода, спецыфічнага для апаратных архітэктур, 13%
звязана з сеткавым стэкам, 4% - з файлавымі сістэмамі і 4% c унутранымі
падсістэмамі ядра.

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

  • Дыскавая падсістэма, увод/выснова і файлавыя сістэмы
    • Дададзена новая рэалізацыя драйвера exFAT, заснаваная на актуальнай кодавай базе "sdfat" (2.x), якая развіваецца кампаніяй Samsung для сваіх Android-смартфонаў. Раней дададзены ў ядро ​​драйвер быў заснаваны на састарэлым кодзе Samsung (версія 1.2.9) і адставаў па прадукцыйнасці ад новага драйвера прыкладна на 10%. Нагадаем, што даданне падтрымкі exFAT у ядро ​​стала магчымым пасля таго, як кампанія Microsoft апублікавала агульнадаступныя спецыфікацыі і падала магчымасць бязвыплатнага выкарыстання патэнтаў на exFAT у Linux.
    • У Btrfs рэалізавана новая каманда ioctl() - BTRFS_IOC_SNAP_DESTROY_V2, якая дазваляе выдаляць падраздзел па ім ідэнтыфікатару. Забяспечана поўная падтрымка кланавання inline-экстэнтаў. Пашырана колькасць кропак адмены аперацый пераразмеркавання, што дазволіла скараціць працяглыя чаканні пры выкананні каманды 'balance cancel'. Паскорана вызначэнне зваротных спасылак на экстэнты (напрыклад, час выканання тэставага сцэнара зменшыўся з гадзіны да некалькіх хвілін). Дададзена магчымасць прымацавання да кожнага inode дрэва экстэнтаў файла. Перапрацавана схема блакіроўкі, якая выкарыстоўваецца пры запісе ў падраздзелы і пры выключэнні NOCOW. Падвышаная эфектыўнасць выканання fsync для дыяпазонаў.
    • У XFS палепшана праверка метададзеных і выкананне fsck для актыўных частак. Прапанавана бібліятэка для перабудавання структур btree, якая ў будучыні будзе выкарыстана для перапрацоўкі xfs_repair і рэалізацыі магчымасці аднаўлення без адмантавання часткі.
    • У CIFS дададзена эксперыментальная падтрымка размяшчэння часткі падпампоўкі ў SMB3-сховішчах. Рэалізаваны POSIX-пашырэння ў readdir, вызначаныя ў спецыфікацыі SMB3.1.1. Падвышаная прадукцыйнасць запісу для старонак памерам 64KB пры ўключэнні рэжыму cache=strict і выкарыстанні версій пратаколу 2.1+.
    • ФС EXT4 перакладзена з bmap і iopoll на выкарыстанне iomap.
    • У F2FS рэалізавана апцыянальная падтрымка сціску дадзеных з выкарыстаннем алгарытму zstd. Па змаўчанні для сціску задзейнічаны алгарытм LZ4. Дададзена падтрымка каманды «chattr -c commit». Забяспечана адлюстраванне часу мантавання. Дададзены ioctl F2FS_IOC_GET_COMPRESS_BLOCKS для атрымання звестак аб ліку сціснутых блокаў. Дададзеныя дадзеныя аб сціску, выводныя праз statx.
    • У файлавай сістэме Ceph дададзена магчымасць лакальнага выканання аперацый стварэння і выдаленні (unlink) файла без чакання адказу ад сервера (праца ў асінхронным рэжыме). Змена, напрыклад, дазваляе прыкметна падняць прадукцыйнасць пры працы ўтыліты rsync.
    • У OVERLAYFS дададзена магчымасць выкарыстання virtiofs у якасці ФС верхняга ўзроўня.
    • Перапісаны код абыходу шляхоў у VFS, перароблены код разбору сімвалічных спасылак і ўніфікаваны абыход кропак мантавання.
    • У падсістэме scsi непрывілеяваным карыстальнікам дазволена выкананне каманд ZBC.
    • У dm_writecache рэалізавана магчымасць паступовай ачысткі кэша на падставе параметру max_age, які задае максімальны час жыцця блока.
    • У dm_integrity дададзена падтрымка аперацыі "discard".
    • У null_blk дададзена падтрымка падстаноўкі памылак для сімуляцыі збояў пры правядзенні тэсціравання.
    • Дададзена магчымасць адпраўкі udev-паведамленняў аб змене памеру блокавай прылады.
  • Сеткавая падсістэма
    • У Netfilter ўключаны змены, якія значна паскараюць апрацоўку вялікіх спісаў супастаўлення (nftables set), у якіх патрабуецца праверка спалучэння падсетак, сеткавых партоў, пратаколу і MAC-адрасоў.
      Аптымізацыі унесены у модуль nft_set_pipapo (PIle PAcket POlicies), які вырашае задачу супастаўлення змесціва пакета з ужывальнымі ў правілах фільтравання адвольнымі дыяпазонамі стану палёў, такімі як дыяпазоны IP і сеткавых партоў (nft_set_rbtree і nft_set_hash маніпулююць супастаўленнем інтэрвалаў). Вектарызаваная пры дапамозе 256-разрадных інструкцый AVX2 версія pipapo на сістэме з працэсарам AMD Epyc 7402 паказала прырост прадукцыйнасці на 420% пры разборы 30 тысяч запісаў, якія ўключаюць звязкі порт-пратакол. Прырост пры параўнанні звязку з падсеткі і нумары порта пры аналізе 1000 запісаў склаў 87% для IPv4 і 128% для IPv6.

    • Дададзены модуль bareudp, які дазваляе інкапсуляваць у UDP-тунэль розныя L3-пратаколы, такія як MPLS, IP і NSH.
    • Працягнута інтэграцыя кампанентаў MPTCP (MultiPath TCP), пашырэнні пратаколу TCP для арганізацыі працы TCP-злучэнні з дастаўкай пакетаў адначасова па некалькіх маршрутам праз розныя сеткавыя інтэрфейсы, прывязаныя да розных IP-адрасоў.
    • Дададзена падтрымка механізмаў апаратнага паскарэння інкапсуляцыі Ethernet-кадраў у 802.11 (Wi-Fi).
    • Пры перасоўванні прылады з адной прасторы імёнаў сеткавай падсістэмы (network namespace) у іншае забяспечана карэкціроўка правоў доступу і ўладальніка адпаведных файлаў у sysfs.
    • Прадастаўлена магчымасць выкарыстання сцяга SO_BINDTODEVICE карыстальнікамі, якія не маюць правоў root.
    • Прынята трэцяя частка патчаў, якія перакладаюць інструментар ethtool з ioctl() на выкарыстанне інтэрфейсу netlink. Новы інтэрфейс спрашчае даданне пашырэнняў, паляпшае апрацоўку памылак, дазваляе адпраўляць апавяшчэнні пры змене стану, спрашчае ўзаемадзеянне паміж ядром і прасторай карыстача і скарачае лік сінхранізаваных найменных спісаў.
    • Дададзена магчымасць выкарыстання спецыяльных апаратных паскаральнікаў для выканання аперацый адсочвання злучэнняў.
    • У netfilter дададзены хук для падлучэння класіфікатараў выходных пакетаў (egress), які дапоўніў сабой раней прысутнічаў хук для ўваходных пакетаў (ingress).
  • Віртуалізацыя і бяспека
    • Дададзена апаратная рэалізацыя аўтэнтыфікацыі паказальнікаў (Pointer Authentication), якая выкарыстоўвае спецыялізаваныя інструкцыі CPU ARM64 для абароны ад нападаў, якія выкарыстоўваюць прыёмы зваротна-арыентаванага праграмавання (ROP) пры якіх атакавалы не спрабуе размясціць свой код у памяці, а аперуе ўжо наяўнымі ў загружаных бібліятэках кавалкамі машынных інструкцый, якія завяршаюцца інструкцыяй звароту кіравання. Абарона зводзіцца да выкарыстання лічбавых подпісаў для праверкі адрасоў вяртання на ўзроўні ядра. Подпіс захоўваецца ў невыкарыстоўваных верхніх бітах самога паказальніка. У адрозненне ад праграмных рэалізацый стварэнне і праверка лічбавых подпісаў праводзіцца пры дапамозе спецыяльных інструкцый CPU.
    • Дададзена магчымасць абароны вобласці памяці ад запісу пры дапамозе сістэмнага выкліку userfaultfd(), прызначанага для апрацоўкі page faults (зварот да нявыдзеленых старонак памяці) у прасторы карыстача. Ідэя ў тым, каб выкарыстоўваць userfaultfd() і для адсочвання парушэння доступу да старонак, пазначаных абароненымі ад запісу, і выкліку апрацоўшчыка, які можа рэагаваць на падобныя спробы запісу (напрыклад, для апрацоўкі змен у працэсе стварэння live-снапшотаў якія працуюць працэсаў, фіксацыі стану пры скідзе дампаў памяці на дыск, рэалізацыі падзялянай памяці, адсочвання змен у памяці). Функцыянальнасць эквівалентная ужыванню mprotect() у звязку з апрацоўшчыкам сігналу SIGSEGV, але працуе прыкметна хутчэй.
    • У SELinux абвешчаны састарэлым параметр "checkreqprot", які дазваляе адключыць праверку абароны памяці пры апрацоўцы правіл (дапушчаў выкарыстанне выкананых абласцей памяці, незалежна ад прадпісанняў, зададзеных у правілах). Сімвалічным спасылкам kernfs дазволена ўспадкоўванне кантэксту бацькоўскіх каталогаў.
    • У склад уключаны модуль KRSI, які дазваляе прымацоўваць BPF-праграмы да любых LSM-хукам у ядры. Змена дазваляе ствараць LSM-модулі (Linux Security Module) у форме BPF-праграм для рашэння задач аўдыту і мандатнага кантролю доступу.
    • Праведзена аптымізацыя прадукцыйнасці /dev/random за кошт пакетнай перадачы значэнняў CRNG замест асобнага выкліку інструкцый RNG. Палепшана праца getrandom і /dev/random на сістэмах ARM64, якія прадстаўляюць інструкцыі RNG.
    • Рэалізацыя эліптычнай крывой Curve25519 заменена на варыянт з бібліятэкі HACL, для якога прыведзена матэматычны доказ фармальнай верыфікацыі надзейнасці.
    • Дададзены механізм інфармавання аб свабодных старонках памяці. Пры дапамозе дадзенага механізму гасцявыя сістэмы могуць перадаваць хост-сістэме звесткі аб старонках, якія больш не выкарыстоўваюцца, і дадзеныя старонкі хост можа забраць зваротна.
    • У vfio/pci дададзена падтрымка SR-IOV (Single-Root I/O Virtualization).
  • Памяць і сістэмныя сэрвісы
    • З 80 да 100 сімвалаў павялічана абмежаванне на максімальную даўжыню радка ў зыходных тэкстах. Пры гэтым распрацоўшчыкам па-ранейшаму рэкамендуецца трымацца ў межах 80 сімвалаў у радку, але гэта зараз не з'яўляецца жорсткім лімітам. Акрамя таго, перавышэнне ліміту на памер радка зараз будзе прыводзіць да высновы папярэджання пры зборцы толькі калі ўтыліта checkpatch запушчана з опцыяй «—strict'. Змена дасць магчымасць не адцягваць распрацоўшчыкаў на маніпуляцыі з прабеламі і больш свабодна адчуваць сябе пры выраўноўванні кода, а таксама прадухіліць залішняе разбіццё радкоў, якое замінае ўспрыманні кода і пошуку.
    • Дададзена падтрымка змяшанага рэжыму загрузкі EFI, які дазваляе без ужывання спецыялізаванага загрузніка загрузіць 64-разраднае ядро ​​з 32-разраднай прашыўкі, выкананай на 64-разрадным CPU.
    • ўключаная сістэма выяўлення і адладкі расшчэпленых блакіровак («split lock«), якія ўзнікаюць пры доступе да невыраўнаваных дадзеных у памяці з-за таго, што пры выкананні атамарнай інструкцыі дадзеныя перасякаюць дзве лініі кэша CPU. Падобныя блакаванні прыводзяць да значнага падзення прадукцыйнасці (на 1000 цыклаў павольней, чым атамарная аперацыя з дадзенымі, якія трапляюць у адну лінію кэша). У залежнасці ад загрузнага параметру "split_lock_detect" ядро ​​можа на лёце выяўляць падобныя блакаванні і выводзіць папярэджанні ці адпраўляць сігнал SIGBUS з дадаткам, які выклікаў блакаванне.
    • У планавальніку задач забяспечана адсочванне паказчыкаў датчыкаў тэмпературы (Thermal Pressure) і рэалізаваны ўлік перагрэву пры размяшчэнні задач. Карыстаючыся выдаванай статыстыкай апрацоўшчык тэмпературы (thermal governor) можа карэктаваць максімальную частату CPU пры перагрэве, а планавальнік задач зараз улічвае зніжэнне вылічальнай магутнасці з-за падобнага зразання частаты пры планаванні запуску задач (раней планавальнік рэагаваў на змену частаты з вызначанай затрымкай, нейкі час прымаючы рашэнні на аснове завышаных здагадках аб даступных вылічальных рэсурсах).
    • У планавальніку задач задзейнічаны інварыянтныя паказчыкі адсочвання нагрузкі, якія дазваляюць карэктна ацаніць нагрузку, незалежна ад бягучай частаты працы CPU. Змена дазваляе больш дакладна прагназаваць паводзіны задач ва ўмовах дынамічнай змены вальтажу і частаты CPU. Напрыклад, задача, якая спажывала 1/3 рэсурсаў CPU пры частаце 1000 MHz, стане спажываць 2/3 рэсурсаў пры зніжэнні частаты да 500 MHz, што раней стварала ілжывае меркаванне аб працы на поўную магутнасць (г.зн. задачы для планавальніка здаваліся буйнейшымі толькі за кошт зніжэння частаты, што прыводзіла да прыняцця няслушных рашэнняў у schedutil cpufreq governor).
    • Драйвер Intel P-state, які адказвае за выбар рэжымаў прадукцыйнасці, пераведзены на выкарыстанне расклад.
    • Рэалізаваная магчымасць выкарыстання падсістэмы BPF пры працы ядра ў рэжыме рэальнага часу (PREEMPT_RT). Раней пры ўключэнні PREEMPT_RT загадвалася адключэнне BPF.
    • Дададзены новы тып BPF-праграм - BPF_MODIFY_RETURN, якія могуць прымацоўвацца да функцыі ў ядры і змяняць якое вяртаецца дадзенай функцыяй значэнне.
    • Дададзена магчымасць выкарыстання сістэмнага выкліку clone3() для стварэння працэсу ў cgroup, адрозным ад бацькоўскага cgroup, што дазваляе бацькоўскаму працэсу прымяніць абмежаванні і ўключыць акаўнтынг адразу пасля спараджэння новага працэсу або патоку. Напрыклад, сэрвісны мэнэджар можа наўпрост вылучаць новыя сэрвісы ў асобныя cgroup, а новыя працэсы пры змяшчэнні ў «замарожаныя» cgroup і будуць адразу спыненыя.
    • у Kbuild дададзена падтрымка зменнай асяроддзі "LLVM=1" для пераключэння на інструментар Clang/LLVM пры зборцы ядра. Узняты патрабаванні да версіі binutils (2.23).
    • У debugfs дададзена секцыя /sys/kernel/debug/kunit/ з вынікамі тэстаў kunit.
    • Дададзены параметр загрузкі ядра pm_debug_messages (аналаг/sys/power/pm_debug_messages), улучальны выснова адладкавай інфармацыі аб працы сістэмы кіравання сілкаваннем (карысна пры адладцы праблем са спячым і якія чакаюць рэжымам).
    • У інтэрфейс асінхроннага ўводу/высновы io_uring дададзена падтрымка зрошчванне () и атамарнага выбару буфераў.
    • Палепшана прафіляванне cgroup пры дапамозе інструментара perf. Раней perf мог прафіляваць задачы толькі ў вызначаным cgroup і не мог пазнаць да якой cgroup прыналежыць бягучы ўзор. Цяпер perf атрымлівае звесткі аб cgroup для кожнай выбаркі, што дазваляе прафіляваць больш аднаго cgroup і ўжываць сартаванне па
      cgroup у справаздачах.

    • У cgroupfs, псеўда-ФС для кіравання cgroups, дададзена падтрымка пашыраных атрыбутаў (xattrs) пры дапамозе якіх, напрыклад, можна пакідаць дадатковую інфармацыю для апрацоўшчыкаў у прасторы карыстача.
    • У cgroup memory controller дададзеныа падтрымка рэкурсіўнай абароны значэння "memory.low", якое рэгулюе мінімальны аб'ём аператыўнай памяці, прадстаўленай удзельнікам групы. Пры манціраванні іерархіі cgroup з опцыяй "memory_recursiveprot" значэнне "memory.low", якое ўсталявана для ніжніх вузлоў, аўтаматычна будзе размяркоўвацца для ўсіх даччыных вузлоў.
    • Дададзены фрэймворк Uacce (Unified/User-space-access-intended Accelerator Framework) для сумеснага выкарыстання віртуальных адрасоў (SVA, Shared Virtual Addressing) паміж CPU і перыферыйнымі прыладамі, які дазваляе апаратным паскаральнікам атрымаць доступ да структур дадзеных у асноўным CPU.
  • Апаратныя архітэктуры
    • Для архітэктуры ARM рэалізавана магчымасць гарачага вымання памяці.
    • Для архітэктуры RISC-V дададзеная падтрымка гарачага падлучэння і вымання CPU (CPU hotplug). Для 32-разрадных RISC-V рэалізаваны eBPF JIT.
    • Прыбрана магчымасць выкарыстання 32-разрадных ARM-сістэм для запуску гасцявых асяродкаў KVM.
    • Выдалена "фіктыўная" рэалізацыя NUMA для архітэктуры s390, для якой так і не знойдзены сцэнары выкарыстання, якія дазваляюць дамагчыся падвышэнні прадукцыйнасці.
    • Для ARM64 дададзена падтрымка пашырэння AMU (Activity Monitors Unit), вызначанага ў ARMv8.4 і які прадстаўляе лічыльнікі прадукцыйнасці, якія выкарыстаны для разліку каэфіцыентаў карэкцыі маштабавання частаты ў планавальніку задач.
  • Абсталяванне
    • Дададзена падтрымка прылад vDPA, у якіх выкарыстоўваецца канал абмену дадзеных, які адпавядае спецыфікацыям virtio. vDPA-прылады могуць быць як фізічна падлучаным абсталяваннем, так і эмуляванымі праграмна віртуальнымі прыладамі.
    • У падсістэме GPIO з'явілася новая каманда ioctl() для маніторынгу змен, якая дазваляе наладзіць інфармаванне працэсу аб змене стану любой лініі GPIO. У якасці прыкладу выкарыстання новай каманды прапанаваная утыліта gpio-watch.
    • У DRM-драйверы i915 для відэакарт Intel ўключаная па змаўчанні падтрымкі чыпаў Tigerlake ("Gen12") і дададзеная пачатковая падтрымка кіравання падсветкай OLED. Палепшана падтрымка чыпаў Ice Lake, Elkhart Lake, Baytrail і Haswell.
    • У драйверы amdgpu дададзена магчымасць загрузкі прашывак у чып USBC для ASIC. Палепшана падтрымка чыпаў AMD Ryzen 4000 "Renoir". З'явілася падтрымка кіравання OLED-панэлямі. Забяспечана адлюстраванне стану прашыўкі ў debugfs.
    • У DRM-драйвер vmwgfx для сістэм віртуалізацыі VMware дададзена магчымасць выкарыстання OpenGL 4 у гасцявых сістэмах (раней падтрымліваўся OpenGL 3.3).
    • Дададзены новы DRM-драйвер tidss для дысплейнай сістэмы платформы TI Keystone.
    • Дададзеныя драйверы для LCD-панэляў: Feixin K101 IM2BA02, Samsung s6e88a0-ams452ef01, Novatek NT35510, Elida KD35T133, EDT, NewEast Optoelectronics WJFH116008A, Rocktech RK101
    • У сістэму кіравання харчаваннем дададзена падтрымка платформы Intel Jasper Lake (JSL) на базе Atom.
    • Дададзена падтрымка наўтбука Pinebook Pro на базе Rockchip RK3399, планшэта Pine64 PineTab і смартфона PinePhone на базе Allwinner A64.
    • Дададзеныя падтрымка новых гукавых кодэкаў і чыпаў:
      Amlogic AIU, Amlogic T9015, Texas Instruments TLV320ADCX140, Realtek RT5682, ALC245, Broadcom BCM63XX I2S, Maxim MAX98360A, Presonus Studio 1810c, MOTU MicroBook IIc.

    • Дададзена падтрымка ARM-плат і платформаў Qualcomm Snapdragon 865 (SM8250), IPQ6018, NXP i.MX8M Plus, Kontron "sl28", 11 варыянтаў платы i.MX6 TechNexion Pico, тры новыя варыянты Toradex Colibri, Samsung S7710 Gala -Ericsson u2, DH Electronics DHCOM SoM і PDK8500, Renesas M2ULCB, Hoperun HiHope, Linutronix Testbox v3, PocketBook Touch Lux 2.

Крыніца: opennet.ru

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