Рэліз ядра Linux 5.3

Пасля двух месяцаў распрацоўкі Лінус Торвальдс прадставіў рэліз ядра Linux 5.3. Сярод найболей прыкметных змен: падтрымка GPU AMD Navi, працэсараў Zhaoxi і тэхналогіі кіравання энергаспажываннем Intel Speed ​​Select, магчымасць выкарыстання інструкцый umwait для чакання без выкарыстання цыклаў,
які падвышае інтэрактыўнасць рэжым 'utilization clamping' для асіметрычных CPU, сістэмны выклік pidfd_open, магчымасць выкарыстання IPv4-адрасоў з падсеткі 0.0.0.0/8, магчымасць апаратнага паскарэння nftables, падтрымка HDR у падсістэме DRM, інтэграцыя гіпервізара ACRN.

В анонсе новага выпуску Лінус нагадаў усім распрацоўнікам аб галоўным правіле распрацоўкі ядра - захаванне нязменнасці паводзін для кампанентаў прасторы карыстача. Змены ў ядры ніякім чынам не павінны парушаць ужо працавальныя прыкладанні і прыводзіць да рэгрэсіі на карыстацкім узроўні. Пры гэтым парушэнне паводзін можа выклікаць не толькі змена ABI, выдаленне састарэлага кода ці з'яўленне памылак, але і ўскосны ўплыў карэктна якія працуюць карысных паляпшэнняў. У якасці нагляднага прыкладу была адкінута карысная аптымізацыя у кодзе Ext4, якая скарачае колькасць зваротаў да назапашвальніка за кошт адключэння папераджальнага чытання табліцы inode пры дробных запытах уводу/высновы.

Аптымізацыя прывяла да таго, што з-за зніжэння дыскавай актыўнасці энтрапія для генератара выпадковых лікаў getrandom() стала назапашвацца павольней і ў некаторых канфігурацыях пры вызначаным збегу акалічнасцяў маглі назірацца падвісанні падчас загрузкі да запаўнення пула энтрапіі. Бо аптымізацыя сапраўды карысная, сярод распрацоўнікаў паўстала дыскусія, у якой прапаноўвалася ўхіліць праблему за рахунак адключэння па змаўчанні блакавальнага рэжыму працы выкліку getrandom() з даданнем апцыянальнага сцяга для чакання энтрапіі, але падобная змена паўплывае на якасць выпадковых лікаў на пачатковым этапе загрузіць.

У новую версію прынята 15794 выпраўленняў ад 1974 распрацоўшчыкаў,
памер патча – 92 Мб (змены закранулі 13986 файлаў, дададзена 258419 радкоў кода,
выдалена 599137 радкоў). Каля 39% усіх прадстаўленых у 5.3
змен звязаны з драйверамі прылад, прыкладна 12% змен маюць
стаўленне да абнаўлення кода спецыфічнага для апаратных архітэктур, 11%
звязана з сеткавым стэкам, 3% - файлавымі сістэмамі і 3% c унутранымі
падсістэмамі ядра.

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

  • Памяць і сістэмныя сэрвісы
    • Працягнута развіццё функцыянальнасці 'pidfd', якая дапамагае апрацоўваць сітуацыі з паўторным выкарыстаннем PID (pidfd злучаецца з пэўным працэсам і не змяняецца, у той час як PID можа быць прывязаны да іншага працэсу пасля завяршэння бягучага працэсу, асацыяванага з гэтым PID). Раней у ядро ​​ўжо быў дададзены
      сістэмны выклік pidfd_send_signal() і сцяг CLONE_PIDFD у выкліку clone(), які дазваляе атрымаць pidfd для выкарыстання ў idfd_send_signal(). Пры выкарыстанні выкліку clone() са сцягам CLONE_PIDFD маглі ўзнікаць праблемы з сэрвіснымі мэнэджэрамі або сістэмай прымусовага завяршэння працэсаў пры недахопе памяці ў платформе Android. У гэтым выпадку для запуску выкарыстоўваецца выклік fork() ці clone() без CLONE_PIDFD.

      У ядры 5.3 прадстаўлены сістэмны выклік pidfd_open(), які дазваляе атрымаць правяраемы pidfd для адвольнага існуючага працэсу, створанага не праз выклік clone() са сцягам CLONE_PIDFD. Таксама дададзена падтрымка поллінга pidfd пры дапамозе poll() і epoll(), што дазваляе ў мэнэджэрах працэсаў адсочваць завяршэнні адвольных працэсаў, не асцерагаючыся стану гонкі ў выпадку прысваення PID новаму працэсу. Механізм апавяшчэння аб завяршэнні працы працэсу, звязанага з pidfd, аналагічны інфармаванню аб завяршэнні свайго даччынага працэсу;

    • У планавальнік задач дададзена падтрымка механізму замацавання нагрузкі (Utilization clamping), які дазваляе прытрымлівацца мінімальнага або максімальнага дыяпазонаў частот, у залежнасці ад актыўных на CPU задач. Прадстаўлены механізм паскарае задачы, якія напроста ўплываюць на якасць узаемадзеяння з карыстачом, праз запуск гэтых задач прынамсі ў ніжняй мяжы "запытанай" частаты. Нізкапрыярытэтныя задачы, якія не адбіваюцца на працы карыстача, запускаюцца c выкарыстаннем верхняга ліміту «дазволенай» частаты. Ліміты задаюцца праз атрыбуты sched_uclamp_util_min і sched_uclamp_util_max у сістэмным выкліку sched_setattr().
    • Дададзена падтрымка тэхналогіі кіравання энергаспажываннем Intel Speed ​​Select, даступнай на некаторых серверах з працэсарамі Intel Xeon. Указаная тэхналогія дазваляе ўсталёўваць налады прадукцыйнасці і прапускной здольнасці частак для розных ядраў CPU, што дазваляе зрабіць больш прыярытэтнай прадукцыйнасць для задач, выкананых на вызначаных ядрах, ахвяруючы прадукцыйнасцю на іншых ядрах;
    • Працэсам у прасторы карыстальніка прадастаўлена магчымасць чакання на працягу невялікага часу без выкарыстання цыклаў пры дапамозе інструкцыі umwait. Дадзеная інструкцыя, разам з інструкцыямі umonitor і tpause, будзе прапанавана ў якія рыхтуюцца да выпуску чыпах Intel "Tremont", і дазволіць рэалізоўваць затрымкі, эфектыўныя з пункта гледжання энергаспажывання і не якія ўплываюць на прадукцыйнасць іншых струменяў пры выкарыстанні Hyper Threading;
    • Для архітэктуры RISC-V дададзена падтрымка вялікіх старонак памяці (huge pages);
    • У механізм трасіроўкі "kprobes" дададзена магчымасць разнаймення паказальнікаў ядра ў прастору карыстальніка, што можа прымяняцца, напрыклад, для ацэнкі змесціва структур, якія перадаюцца ў сістэмныя выклікі. Таксама дабаўлена магчымасць устаноўкі праверак на этапе загрузкі.
    • У файл канфігурацыі дададзена опцыя PREEMPT_RT для працы ў рэжыме рэальнага часу. Сам код для падтрымкі рэжыму рэальнага часу пакуль не дададзены ў ядро, але з'яўленне опцыі з'яўляецца добрым знакам, што шматгадовая эпапея па інтэграцыі патчаў Realtime-Preempt набліжаецца да фіналу;
    • Дададзены сістэмны выклік clone3() c рэалізацыяй больш пашыральнага варыянта інтэрфейсу clone(), які дапускае ўказанне большай колькасці сцягоў;
    • Дададзены апрацоўшчык bpf_send_signal(), які дазваляе BPF-праграмам адпраўляць сігналы адвольным працэсам;
    • Для падзей perf у асяроддзі гіпервізара KVM дададзены новы механізм фільтрацыі падзей, які дазваляе адміністратару вызначыць тыпы падзей, дапушчальныя ці не дапушчальныя для маніторынгу на боку гасцявой сістэмы;
    • У механізм верыфікацыі eBPF-прыкладанняў дададзена магчымасць апрацоўкі праграм з цыкламі, калі выкананне цыклу абмежавана і не можа прывесці да перавышэння ліміту на максімальную колькасць інструкцый;
  • Дыскавая падсістэма, увод/выснова і файлавыя сістэмы
    • Для файлавай сістэмы XFS рэалізаваная магчымасць шматструменнага абыходу inode (напрыклад, пры праверцы квот). Дададзены новыя ioctl BULKSTAT і INUMBERS, якія прадстаўляюць доступ да магчымасцяў, якія з'явіліся ў пятай рэдакцыі фармату ФС, такім як час нараджэння inode і магчымасць задання параметраў BULKSTAT і INUMBERS для кожнай групы AG (Allocation Groups);
    • У Ext4 дададзена падтрымка пустэч у каталогах (не прывязаных блокаў).
      Забяспечана апрацоўка флага "i" (immutable) для адкрытых файлаў (забарона запісу ў сітуацыі, калі сцяг быў устаноўлены ў момант, калі файл ужо быў адкрыты);

    • У Btrfs забяспечана азначэнне хуткай рэалізацыі crc32c на ўсіх архітэктурах;
    • У CIFS з кода для падтрымкі smbdirect знята прыкмета эксперыментальнай распрацоўкі. У SMB3 дададзена магчымасць выкарыстання крыптаалгарытмаў у рэжыме GCM. Дададзена новая опцыя мантавання для вымання параметраў рэжыму з запісаў ACE (Access Сontrol Entry). Аптымізавана прадукцыйнасць выкліку open();
    • У F2FS дададзена опцыя для абмежавання зборшчыка смецця пры працы ў рэжыме checkpoint=disable. Дададзены ioctl для выдалення дыяпазонаў блокаў з F2FS, што дазваляе рэалізаваць карэкціроўку памеру часткі на лета. Дададзена магчымасць размяшчэння ў F2FS файла падпампоўкі з забеспячэннем прамога ўводу/высновы. Для ўсіх карыстальнікаў дададзена падтрымка замацавання файла і вылучэнні блокаў для падобных файлаў;
    • У інтэрфейс для асінхроннага ўводу/высновы io_uring дададзена падтрымка асінхронных аперацый sendmsg() і recvmsg();
    • У файлавую сістэму UBIFS дададзена падтрымка сціску з выкарыстаннем алгарытму zstd і магчымасць верыфікацыі падпісаных выяў ФС;
    • У ФС Ceph дададзеная падтрымка метак бяспекі SELinux для файлаў;
    • Для NFSv4 рэалізавана новая опцыя манціроўкі "nconnect=", вызначальная лік усталяваных з серверам злучэнняў. Трафік паміж гэтымі злучэннямі будзе размяркоўвацца з выкарыстаннем балансавання нагрузкі. Акрамя таго, серверам NFSv4 зараз ствараецца каталог /proc/fs/nfsd/clients з інфармацыяй аб бягучых кліентах, уключаючы звесткі аб адкрытых імі файлах;
  • Віртуалізацыя і бяспека
    • У склад ядра ўключаны гіпервізор для ўбудаваных прылад АКРН, які напісаны з аглядкай на гатоўнасць для выканання задач рэальнага часу і прыдатнасць да выкарыстання ў крытычна важных сістэмах. ACRN забяспечвае мінімальныя накладныя выдаткі, гарантуе нізкія затрымкі (low latency) і адэкватную спагадлівасць пры ўзаемадзеянні з абсталяваннем. Падтрымліваецца віртуалізацыя рэсурсаў CPU, уводу/высновы, сеткавай падсістэмы, аперацый з графікай і гукам. ACRN можа прымяняцца для запуску некалькіх ізаляваных віртуальных машын у электронных блоках кіравання, прыборных панэлях, аўтамабільных інфармацыйных сістэмах, спажывецкіх IoT-прылад і іншай убудаванай тэхнікі;
    • У User-mode Linux дададзены рэжым "падарожжа ў часе", які дазваляе запаволіць або паскорыць час у віртуальным асяроддзі UML для спрашчэння адладкі звязанага з часам кода. Акрамя таго дададзены параметр
      time-travel-start, які дазваляе стартаваць сістэмны гадзіннік з названага моманту ў epoch-фармаце;

    • Дададзены новыя опцыі каманднага радка ядра "init_on_alloc" і "init_on_free", пры ўказанні якіх уключаецца абнуленне вылучаемых і вызваляных абласцей памяці (запаўненне нулямі пры malloc і free), што дазваляе ўзмацніць бяспеку за кошт дадатковых накладных выдаткаў на ініцыялізацыю;
    • Дададзены новы драйвер virtio-iommu з рэалізацыяй паравірталізаванай прылады, які дазваляе адпраўляць IOMMU-запыты, такія як ATTACH, DETACH, MAP і UNMAP, па-над транспартам virtio без эмуляцыі табліц старонак памяці;
    • Дададзены новы драйвер virtio-pmem, які прадстаўляе доступ да прылад захоўвання, адлюстраваным у фізічную адрасную прастору, такім як NVDIMM;
    • Рэалізаваная магчымасць прымацавання крыптаграфічных ключоў да карыстацкай ці сеткавай прасторы імёнаў (ключы становяцца недаступныя за межамі абранай прасторы імёнаў), а таксама абароны ключоў пры дапамозе ACL;
    • У крыптападсістэму дададзена падтрымка вельмі хуткага алгарытму некрыптаграфічнага хэшавання xxhash, хуткасць якога ўпіраецца ў прадукцыйнасць памяці;
  • Сеткавая падсістэма
    • Забяспечана апрацоўка адрасоў IPv4 у дыяпазоне 0.0.0.0/8, які раней быў недаступны для выкарыстання. Увядзенне дадзенай падсеткі дазволіць размеркаваць яшчэ 16 млн адрасоў IPv4;
    • У Netfilter для nftables дададзена падтрымка механізмаў апаратнага паскарэння фільтрацыі пакетаў за рахунак ужывання дададзенага ў драйверы Flow Block API. На бок сеткавых адаптараў могуць выносіцца цэлыя табліцы правіл са ўсімі ланцужкамі. Уключэнне праводзіцца праз прывязку сцяга NFT_TABLE_F_HW да табліцы. Падтрымліваюцца простыя метададзеныя пратаколаў 3 і 4 узроўняў, дзеянні прыняць/адкінуць, супастаўленні па IP і сеткавым партам адпраўніка/атрымальніка і тыпу пратакола;
    • Дададзена убудаваная падтрымка адсочвання злучэнняў для сеткавых мастоў, не патрабавальная ўжыванні эмулюючай праслойкі br_netfilter;
    • У nf_tables дададзена падтрымка модуля SYNPROXY, паўтаральнага аналагічную функцыянальнасць з iptables, а таксама рэалізаваная магчымасць праверкі ў правілах па асобных опцыях у загалоўку IPv4;
    • Дададзена магчымасць прымацавання BPF-праграм да сістэмных выклікаў setsockopt() і getsockopt(), што, напрыклад, дазваляе прымацаваць свае апрацоўшчыкі доступу да гэтых выклікаў. Акрамя таго, дабаўлена новая кропка выкліку (hook), пры дапамозе якой можна арганізаваць выклік BPF-праграмы адзін раз за кожны інтэрвал RTT (round-trip-time, час пінгу);
    • Для IPv4 і IPv6 дададзены новы механізм захоўвання дадзеных маршрутызацыі nexthop, накіраваны на павелічэнне маштабаванасці табліц маршрутызацыі. Праведзеныя тэсты паказалі, што пры выкарыстанні новай сістэмы набор у 743 маршрутаў быў загружаны ў ядро ​​ўсяго за 4.3 секунды;
    • Для Bluetooth рэалізавана функцыянальнасць, неабходная для падтрымкі LE ping;
  • Абсталяванне
    • Дададзена падтрымка x86-сумяшчальных працэсараў кампаніі Жаоксін, якія развіваюцца ў выніку сумеснага праекта VIA Technologies і муніцыпалітэта Шанхая. Сямейства CPU ZX пабудавана на базе архітэктуры x86-64 Isaiah, якая працягвае развіццё тэхналогій VIA Centaur;
    • У падсістэму DRM (Direct Rendering Manager), а таксама ў графічныя драйверы amdgpu і i915, дададзеная падтрымка разбору, апрацоўкі і адпраўка праз HDMI-порт метададзеных HDR (пашыраны дынамічны дыяпазон), які дазваляе выкарыстоўваць HDR-панэлі і экраны, здольныя адлюстроўваць дадатковыя дыяпазоны яркасці. ;
    • У драйвер amdgpu дададзеная пачатковая падтрымка GPU AMD NAVI (RX5700), якая ўключае базавы драйвер, код для ўзаемадзеяння з экранамі (DCN2), падтрымку GFX і вылічэнняў (GFX10),
      SDMA 5 (System DMA0), сродкі кіравання харчаваннем і мультымедыйныя кадавальнікі / дэкадавальнікі (VCN2). У amdgpu таксама палепшана падтрымка карт на базе GPU Vega12 і Vega20, для якіх дададзены дадатковыя магчымасці кіравання памяццю і энергаспажываннем;

    • У драйвер amdkfd (для дыскрэтных GPU, такія як Fiji, Tonga, Polaris) дададзена падтрымка карт на базе GPU VegaM;
    • У DRM-драйверы для відэакарт Intel для чыпаў Icelake рэалізаваны новы мультысегментны рэжым гама-карэкцыі. Дададзена магчымасць вываду праз DisplayPort у фармаце YCbCr4:2:0. Дададзены новыя прашыўкі GuC для SKL, BXT, KBL, GLK і ICL. Рэалізавана магчымасць адключэння харчавання экрана ў асінхронным рэжыме. Дададзена падтрымка захавання і ўзнаўленні кантэксту рэндэрынгу для чыпаў Ironlake (gen5) і gen4 (Broadwater - Cantiga), што дазваляе з прасторы карыстача аднаўляць стан GPU пры пераходзе ад выканання адных пакетных аперацый да іншых;
    • У драйверы Nouveau забяспечана вызначэнне чыпсэта NVIDIA Turing TU116;
    • Пашыраныя магчымасці DRM/KMS-драйвера для паскаральнікаў экранных аперацый ARM Komeda (Mali D71), дададзеная падтрымка маштабавання, падзелы/зліцці пластоў, павароту, адкладзенага запісу, AFBC, SMMU і фарматаў кадавання колеру Y0L2, P010, YUV420_8/10B;
    • У драйвер MSM дададзеная падтрымка серыі A540 GPU Adreno, якая ўжываецца ў працэсарах Qualcomm, а таксама падтрымка DSI-кантролера MSM8998 для Snapdragon 835;
    • Дададзеныя драйверы для LCD-панэляў Samsung S6E63M0, Armadeus ST0700, EDT ETM0430G0DH6, OSD101T2045-53TS,
      Evervision VGG804821, FriendlyELEC HD702E, KOE tx14d24vm1bpa, TFC S9700RTWV43TR-01B, EDT ET035012DM6 і VXT VL050-8048NT-C01;

    • Дададзены драйвер для задзейнічання сродкаў паскарэння дэкадавання
      відэа, даступных у SoC Amlogic Meson;

    • У драйверы v3d (для GPU Broadcom Video Core V, выкарыстоўванага ў Raspberry Pi) з'явілася падтрымка дыспетчарызацыі вылічальных шэйдараў;
    • Дададзены драйвер для SPI-клавіятур і трэкпадаў, якія выкарыстоўваюцца ў сучасных мадэлях наўтбукаў Apple MacBook і MacBookPro;
    • Дададзена дадатковая абарона ioctl-выклікаў, злучаных з драйверам floppy, а сам драйвер пазначаны як пакінуты без суправаджэння
      («orphaned»), што мае на ўвазе спыненне яго тэсціравання. Драйвер пакуль захоўваецца ў ядры, але яго карэктная праца не гарантуецца. Драйвер разглядаецца як састарэлы, бо для яго тэставання цяжка знайсці працавальнае абсталяванне – усё актуальныя вонкавыя назапашвальнікі, як правіла, выкарыстоўваюць інтэрфейс USB.

    • Дададзены cpufreq-драйвер для поплаткаў Raspberry Pi, які дазваляе дынамічна кіраваць зменай частаты працэсара;
    • Дададзена падтрымка новых ARM SoC Mediatek mt8183 (4x Cortex-A73 + 4x Cortex-A53), TI J721E (2x Cortex-A72 + 3x Cortex-R5F + 3 DSPs + MMA) і Amlogic G12B (4x Cortex-A73 + 2 ), а таксама плат:
      • Purism Librem5,
      • Aspeed BMC,
      • Microsoft Olympus BMC,
      • Kontron SMARC,
      • Novtech Meerkat96 (i.MX7),
      • ST Micro Avenger96,
      • Google Cheza (Qualcomm SDM845),
      • Qualcomm Dragonboard 845c (Qualcomm SDM845),
      • Hugsun X99 TV Box (Rockchip RK3399),
      • Khadas Edge/Edge-V/Captain (Rockchip RK3399),
      • HiHope RZ/G2M,
      • NXP LS1021A-TSN.

Адначасова Лацінаамерыканскі Фонд вольнага ПЗ сфармаваў
варыянт цалкам вольнага ядра 5.3 - Linux-libre 5.3-gnu, вычышчанага ад элементаў прашывак і драйвераў, якія змяшчаюць нявольныя кампаненты або ўчасткі кода, вобласць ужывання якіх абмежавана вытворцам. У новым выпуску адключаная загрузка блобаў у драйверах qcom, hdcp drm, allegro-dvt і meson-vdec.
Абноўлены код чысткі блобаў у драйверах і падсістэмах amdgpu, i915, netx, r8169, brcmfmac, rtl8188eu, adreno, si2157, pvrusb2, touchscreen_dmi, гукавым драйверы для skylake, а таксама ў дакумент.

Крыніца: opennet.ru

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