Linux 5.3 ядросының шығарылымы

Екі айлық дамудан кейін Линус Торвальдс енгізілді ядро шығару Linux 5.3. Ең көрнекті өзгерістердің арасында: AMD Navi GPU, Zhaoxi процессорлары және Intel Speed ​​​​Select қуатты басқару технологиясын қолдау, циклдарды пайдаланбай күту үшін umwait нұсқауларын пайдалану мүмкіндігі,
асимметриялық процессорлар үшін интерактивтілікті арттыратын «пайдалануды қысу» режимі, pidfd_open жүйелік қоңырау, 4/0.0.0.0 ішкі желіден IPv8 мекенжайларын пайдалану мүмкіндігі, nftables аппараттық жеделдету мүмкіндігі, DRM ішкі жүйесінде HDR қолдауы, ACRN интеграциясы гипервизор.

В хабарландыру жаңа шығарылым, Linus барлық әзірлеушілерге ядроны дамытудың негізгі ережесін еске салды - пайдаланушы-кеңістік құрамдастары үшін бірдей әрекетті сақтау. Ядроға енгізілген өзгертулер ешбір жағдайда бұрыннан іске қосылған қолданбаларды бұзбауы немесе пайдаланушы деңгейінде регрессияға әкелмеуі керек. Бұл жағдайда мінез-құлықтың бұзылуы ABI-нің өзгеруіне, ескірген кодтың жойылуына немесе қателердің пайда болуына ғана емес, сонымен қатар дұрыс жұмыс істейтін пайдалы жақсартулардың жанама әсеріне әкелуі мүмкін. Көрнекі мысал ретінде болды тасталды пайдалы оңтайландыру Ext4 кодында, ол шағын енгізу/шығару сұраулары үшін инод кестесін алдын ала оқуды өшіру арқылы дискіге кіру санын азайтады.

Оңтайландыру диск белсенділігінің төмендеуіне байланысты getrandom() кездейсоқ сандар генераторы үшін энтропияның баяу жинала бастағанына және кейбір конфигурацияларда белгілі бір жағдайларда энтропия пулы болғанша жүктеу кезінде қатып қалу байқалуы мүмкін екеніне әкелді. толтырылған. Оңтайландыру шынымен пайдалы болғандықтан, әзірлеушілер арасында getrandom() шақыруының әдепкі блоктау режимін өшіру және энтропияны күту үшін қосымша жалаушаны қосу арқылы мәселені шешу ұсынылатын пікірталас туындады, бірақ мұндай өзгеріс жүктеудің бастапқы кезеңінде кездейсоқ сандардың сапасы.

Жаңа нұсқа 15794 әзірлеушілерден 1974 XNUMX түзетуді қамтиды,
патч өлшемі - 92 МБ (өзгерістер 13986 файлға әсер етті, 258419 код жолы қосылды,
599137 жол жойылды). Барлығының шамамен 39% 5.3-те ұсынылған
өзгерістер құрылғы драйверлеріне қатысты, өзгерістердің шамамен 12%
аппараттық архитектураға тән кодты жаңартуға деген көзқарас, 11%
желілік стекпен байланысты, 3% файлдық жүйелерге және 3% ішкі
ядроның ішкі жүйелері.

басты инновациялар:

  • Жад және жүйелік қызметтер
    • PID қайта пайдалану жағдайларын өңдеуге көмектесетін «pidfd» функционалдығын дамытуды жалғастыру (pidfd белгілі бір процесспен байланысты және өзгермейді, ал PID сол PID-мен байланысты ағымдағы процесс аяқталғаннан кейін басқа процесспен байланыстырылуы мүмкін). Ол бұрын ядроға қосылған
      pidfd_send_signal() жүйесінде пайдалану үшін pidfd алу үшін clone() шақыруындағы CLONE_PIDFD жалауы және pidfd_send_signal() жүйелік шақыруы. Clone() функциясын CLONE_PIDFD жалаушасымен пайдалану қызмет менеджерлерімен немесе Android платформасының жадсыз күшпен тоқтату жүйесінде ақаулық тудыруы мүмкін. Бұл жағдайда бастау үшін CLONE_PIDFD жоқ fork() немесе clone() шақыруы пайдаланылады.

      Ядро 5.3 жүйелік шақыруды ұсынды pidfd_open(), ол CLONE_PIDFD жалаушасымен clone() шақыру арқылы жасалмаған кез келген бар процесс үшін тексерілетін pidfd алуға мүмкіндік береді. Сондай-ақ poll() және epoll() арқылы pidfd сұрауына қолдау қосылды, бұл процесс менеджерлеріне жаңа процеске PID тағайындалған жағдайда жарыс жағдайында қорықпай ерікті процестердің аяқталуын бақылауға мүмкіндік береді. pidfd-мен байланысты процесс аяқталған кезде хабарлау механизмі оның еншілес процесі аяқталған кезде хабарлауға ұқсас;

    • Жүктемені бекіту механизміне қолдау тапсырмаларды жоспарлаушыға қосылды (Қолдану қысқышы), процессордағы белсенді тапсырмаларға байланысты минималды немесе максималды жиілік диапазондарын ұстануға мүмкіндік береді. Ұсынылған механизм пайдаланушы тәжірибесінің сапасына тікелей әсер ететін тапсырмаларды осы тапсырмаларды кем дегенде «сұралған» жиіліктің төменгі жағында орындау арқылы жылдамдатады. Пайдаланушының жұмысына әсер етпейтін басымдылығы төмен тапсырмалар «рұқсат етілген» жиіліктің жоғарғы шегін пайдалану арқылы іске қосылады. Шектер sched_setattr() жүйелік шақыруындағы sched_uclamp_util_min және sched_uclamp_util_max атрибуттары арқылы орнатылады.
    • Энергияны басқару технологиясына қолдау қосылды Intel жылдамдығын таңдаңыз, Intel Xeon процессорлары бар таңдаулы серверлерде қолжетімді. Бұл технология басқа ядролардағы өнімділікті жоғалта отырып, белгілі бір ядроларда орындалатын тапсырмалар үшін өнімділікке басымдық беруге мүмкіндік беретін әртүрлі CPU ядролары үшін өнімділік пен бөлу өткізу қабілеті параметрлерін орнатуға мүмкіндік береді;
    • Пайдаланушы кеңістігіндегі процестер ұсынылған umwait нұсқаулығын пайдалана отырып, циклдарды пайдаланбай қысқа уақыт күту мүмкіндігі. Бұл нұсқаулық umonitor және tpause нұсқауларымен бірге Intel компаниясының алдағы "Tremont" чиптерінде ұсынылады және Hyper Threading пайдалану кезінде энергияны үнемдейтін және басқа ағындардың өнімділігіне әсер етпейтін кідірістерді жүзеге асыруға мүмкіндік береді;
    • RISC-V архитектурасы үшін үлкен жад беттеріне қолдау қосылды;
    • Kprobes бақылау механизмі, мысалы, жүйелік шақыруларға жіберілген құрылымдардың мазмұнын бағалау үшін пайдаланылуы мүмкін пайдаланушы кеңістігіне ядро ​​көрсеткіштерін жою мүмкіндігін қосты. Жүктеу сатысында тексерулерді орнату мүмкіндігі де қосылды.
    • Нақты уақытта жұмыс істеу үшін конфигурация файлына PREEMPT_RT опциясы қосылды. Нақты уақыттағы режимді қолдайтын кодтың өзі ядроға әлі қосылмаған, бірақ опцияның пайда болуы ұзақ мерзімді эпостың жақсы белгісі болып табылады. интеграция Realtime-Preempt патчтары аяқталуға жақын;
    • Жалаулардың көбірек санын көрсетуге мүмкіндік беретін clone() интерфейсінің кеңейтілген нұсқасын іске асырумен clone3() жүйелік шақыруы қосылды;
    • BPF бағдарламаларына ерікті процестерге сигнал жіберуге мүмкіндік беретін bpf_send_signal() өңдегіші қосылды;
    • KVM гипервизоры ортасындағы тамаша оқиғалар үшін әкімшіге қонақ жүйесі жағында бақылауға рұқсат етілген немесе рұқсат етілмеген оқиғалар түрлерін анықтауға мүмкіндік беретін жаңа оқиғаларды сүзу механизмі қосылды;
    • Бағдарламаларды циклдармен өңдеу мүмкіндігі, егер циклдің орындалуы шектелген болса және нұсқаулардың максималды санының шегінен асуға әкелмейтін болса, eBPF қолданбасын тексеру механизміне қосылды;
  • Дискінің ішкі жүйесі, енгізу/шығару және файлдық жүйелер
    • XFS файлдық жүйесі енді көп ағынды инодты айналып өтуді қолдайды (мысалы, квоталарды тексеру кезінде). Жаңа ioctls BULKSTAT және INUMBERS қосылды, олар FS пішімінің бесінші басылымында пайда болған мүмкіндіктерге қол жеткізуді қамтамасыз етеді, мысалы, inode туу уақыты және әрбір AG тобы үшін BULKSTAT және INUMBERS параметрлерін орнату мүмкіндігі (Бөлу топтары);
    • Ext4 ішінде қолдау қосылды каталогтардағы бос орындар (байланыстырылмаған блоктар).
      Өңдеу қамтамасыз етілген ашық файлдар үшін «i» (өзгермейтін) жалаушасы (файл әлдеқашан ашық болған кезде жалауша орнатылған жағдайда жазуға тыйым салынады);

    • Btrfs барлық архитектурада crc32c жылдам іске асыру анықтамасын береді;
    • CIFS жүйесінде smbdirect қолдау коды эксперименттік әзірлеу ретінде жойылды. SMB3 GCM режимінде криптографиялық алгоритмдерді пайдалану мүмкіндігін қосты. ACE (Access Control Entry) жазбаларынан режим параметрлерін шығару үшін жаңа орнату опциясы қосылды. open() қоңырауының өнімділігі оңтайландырылды;
    • F2FS параметріне бақылау нүктесі=өшіру режимінде іске қосылған кезде қоқыс жинағышты шектеу опциясы қосылды. F2FS жүйесінен блок ауқымдарын жою үшін ioctl қосылды, бұл бөлім өлшемін жылдам реттеуге мүмкіндік береді. Тікелей енгізу/шығаруды қамтамасыз ету үшін своп файлын F2FS ішінде орналастыру мүмкіндігі қосылды. Барлық пайдаланушылар үшін файлды бекітуге және ұқсас файлдарға блоктарды бөлуге қолдау қосылды;
    • io_uring асинхронды енгізу/шығару интерфейсіне sendmsg() және recvmsg() асинхронды операцияларға қолдау қосылды;
    • UBIFS файлдық жүйесіне zstd алгоритмі арқылы қысуды қолдау және қол қойылған FS кескіндерін тексеру мүмкіндігі қосылды;
    • Ceph FS енді файлдарға арналған SELinux қауіпсіздік белгілерін қолдайды;
    • NFSv4 үшін сервермен орнатылған қосылымдар санын анықтайтын «nconnect=» жаңа орнату опциясы жүзеге асырылды. Осы қосылымдар арасындағы трафик жүктемені теңестіру арқылы таратылады. Сонымен қатар, NFSv4 сервері енді ағымдағы клиенттер туралы ақпарат, соның ішінде олар ашқан файлдар туралы ақпарат бар /proc/fs/nfsd/clients каталогын жасайды;
  • Виртуализация және қауіпсіздік
    • Ядро ендірілген құрылғыларға арналған гипервизорды қамтиды ACRN, ол нақты уақыттағы тапсырмаларға дайын болуды және миссиясы маңызды жүйелерде пайдалану жарамдылығын ескере отырып жазылған. ACRN минималды үстеме шығындарды қамтамасыз етеді, жабдықпен өзара әрекеттесу кезінде төмен кідіріс пен сәйкес жауап беруге кепілдік береді. Орталық процессор ресурстарын, енгізу/шығару жүйесін, желілік ішкі жүйені, графиканы және дыбыстық операцияларды виртуалдандыруды қолдайды. ACRN бірнеше оқшауланған виртуалды машиналарды электрондық басқару блоктарында, бақылау тақталарында, автомобиль ақпараттық жүйелерінде, тұтынушылық IoT құрылғыларында және басқа ендірілген технологияларда іске қосу үшін пайдаланылуы мүмкін;
    • Linux пайдаланушы режимінде қосылды Уақытқа байланысты кодты жөндеуді жеңілдету үшін виртуалды UML ортасында уақытты баяулатуға немесе жылдамдатуға мүмкіндік беретін уақытты саяхат режимі. Сонымен қатар, параметр қосылды
      жүйелік сағатты дәуір форматында белгіленген сәттен бастауға мүмкіндік беретін time-travel-start;

    • «init_on_alloc» және «init_on_free» жаңа ядро ​​пәрмен жолы опциялары қосылды, көрсетілген кезде бөлінген және босатылған жад аумақтарын нөлге келтіру қосылған (malloc және бос үшін нөлдермен толтыру), бұл қосымша инициализацияның үстеме шығындары есебінен қауіпсіздікті арттыруға мүмкіндік береді;
    • Жаңа драйвер қосылды виртио-иомму ATTACH, DETACH, MAP және UNMAP сияқты IOMMU сұрауларын жад беттерінің кестелерін эмуляциялаусыз virtio тасымалдау арқылы жіберуге мүмкіндік беретін паравиртуалдандырылған құрылғыны жүзеге асырумен;
    • Жаңа драйвер қосылды virtio-pmem, NVDIMM сияқты физикалық мекенжай кеңістігімен салыстырылған сақтау құрылғыларына қол жеткізуді білдіреді;
    • Пайдаланушыға немесе желілік аттар кеңістігіне криптографиялық кілттерді тіркеу (кілттер таңдалған аттар кеңістігінен тыс жерде қол жетімсіз болып қалады), сондай-ақ ACL көмегімен кілттерді қорғау мүмкіндігі енгізілді;
    • Криптографиялық ішкі жүйеге қосылды өте жылдам криптографиялық емес хэштеу алгоритмін қолдау xxhash, оның жылдамдығы жадының өнімділігіне байланысты;
  • Желілік ішкі жүйе
    • Бұрын пайдалану үшін қолжетімсіз болған 4/0.0.0.0 ауқымындағы IPv8 мекенжайларын өңдеу қосылған. Осы ішкі желіні енгізу мүмкіндік береді тағы 16 миллион IPv4 мекенжайларын тарату;
    • Nftables үшін Netfilter ішінде қосылды қосылған драйверлерді пайдалану арқылы пакеттерді сүзуге арналған аппараттық жеделдету механизмдерін қолдау Flow Block API. Барлық тізбектері бар ережелер кестелерін желілік адаптерлердің жағында орналастыруға болады. Қосу NFT_TABLE_F_HW жалауын кестеге байланыстыру арқылы орындалады. Қарапайым 3-деңгей және 4-деңгей протоколының метадеректерін, әрекеттерді қабылдау/қабылдамау, IP және жіберуші/алушы желі порттары және хаттама түрі бойынша салыстыруды қолдайды;
    • Қосылды br_netfilter эмуляциялық қабатын пайдалануды қажет етпейтін желілік көпірлер үшін кірістірілген қосылымды бақылауды қолдау;
    • nf_tables ішінде қосылды iptables-тен ұқсас функционалдылықты қайталайтын SYNPROXY модуліне қолдау көрсету және IPv4 тақырыбындағы жеке опциялар үшін ережелерді тексеру мүмкіндігі де жүзеге асырылады;
    • BPF бағдарламаларын setsockopt() және getsockopt() жүйелік қоңырауларына тіркеу мүмкіндігі қосылды, бұл, мысалы, осы қоңырауларға өзіңіздің қол жеткізу өңдеушілеріңізді қосуға мүмкіндік береді. Сонымен қатар, жаңа шақыру нүктесі (ілмек) қосылды, оның көмегімен BPF бағдарламасына әрбір RTT интервалына бір рет қоңырауды ұйымдастыруға болады (бару-қайту уақыты, пинг уақыты);
    • IPv4 және IPv6 үшін қосылды маршруттау кестелерінің ауқымдылығын арттыруға бағытталған жаңа nexthop маршруттау деректерін сақтау механизмі. Сынақтар көрсеткендей, жаңа жүйені пайдалану кезінде ядроға небәрі 743 секундта 4.3 мың маршруттар жинағы жүктелді;
    • Bluetooth үшін жүзеге асырылды LE ping қолдауына қажетті функционалдылық;
  • Жабдық
    • Қосылды компанияның x86-үйлесімді процессорларына қолдау көрсету Чаоксин, VIA Technologies және Шанхай муниципалитетінің бірлескен жобасының нәтижесінде әзірленген. ZX CPU отбасы технологияның дамуын жалғастыра отырып, x86-64 Isaiah архитектурасына негізделген. VIA Кентавр;
    • DRM (Direct Rendering Manager) ішкі жүйесі, сондай-ақ amdgpu және i915 графикалық драйверлері HDMI порты арқылы HDR (жоғары динамикалық диапазон) метадеректерін талдауға, өңдеуге және жіберуге қолдау көрсетті, бұл HDR панельдері мен экрандарын пайдалануға мүмкіндік береді. қосымша жарықтық диапазондарын көрсету ;
    • Amdgpu драйвері AMD NAVI GPU (RX5700) үшін бастапқы қолдауды қосты, оған негізгі драйвер, экранның өзара әрекеттесу коды (DCN2), GFX және есептеу қолдауы (GFX10),
      SDMA 5 (DMA0 жүйесі), қуатты басқару және мультимедиялық кодерлер/декодерлер (VCN2). amdgpu сонымен қатар Vega12 және Vega20 графикалық процессорларына негізделген карталарды қолдауды жақсартады, олар үшін жад пен қуатты басқарудың қосымша мүмкіндіктері қосылған;

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

    • Қосылды декодтау жеделдету құралдарын қосуға арналған драйвер
      Amlogic Meson SoC жүйесінде қолжетімді бейнелер;

    • v3d драйверінде (Raspberry Pi-де қолданылатын Broadcom Video Core V GPU үшін) пайда болды. Қолдау есептеу шейдерлерін жіберу;
    • Қосылды Apple MacBook және MacBookPro ноутбуктерінің заманауи үлгілерінде қолданылатын SPI пернетақталары мен трекпадтарына арналған драйвер;
    • Қосылды дискета драйверімен байланысты ioctl қоңыраулары үшін қосымша қорғаныс және драйвердің өзі қызмет көрсетілмеген деп белгіленеді
      («жетім»), бұл оның тестілеуінің тоқтатылуын білдіреді. Драйвер әлі де ядрода сақталады, бірақ оның дұрыс жұмыс істеуіне кепілдік берілмейді. Драйвер ескірген болып саналады, өйткені оны сынау үшін жұмыс істейтін жабдықты табу қиын - барлық ағымдағы сыртқы дискілер, әдетте, USB интерфейсін пайдаланады.

    • Қосылды процессор жиілігіндегі өзгерістерді динамикалық басқаруға мүмкіндік беретін Raspberry Pi тақталарына арналған cpufreq драйвері;
    • Жаңа ARM SoC Mediatek mt8183 (4x Cortex-A73 + 4x Cortex-A53), TI J721E (2x Cortex-A72 + 3x Cortex-R5F + 3 DSP + MMA) және Amlogic G12B (4x Cortex-A73 +) үшін қосылды. A2 ), сонымен қатар тақталар:
      • Пуризм либремі5,
      • 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 теледидар қорабы (Rockchip RK3399),
      • Khadas Edge/Edge-V/Капитан (Rockchip RK3399),
      • HiHope RZ/G2M,
      • NXP LS1021A-TSN.

Бұл ретте Латын Америкасының еркін бағдарламалық қамтамасыз ету қоры қалыптасты
опция толығымен бос ядро ​​5.3 - Linux-libre 5.3-gnu, көлемін өндіруші шектейтін бос емес құрамдастарды немесе код бөлімдерін қамтитын микробағдарлама және драйвер элементтерінен тазартылған. Жаңа шығарылымда blob жүктеу qcom, hdcp drm, allegro-dvt және meson-vdec драйверлерінде өшірілген.
Amdgpu, i915, netx, r8169, brcmfmac, rtl8188eu, adreno, si2157, pvrusb2, touchscreen_dmi, skylake үшін дыбыс драйвері, сондай-ақ микрокод құжаттамасындағы драйверлер мен ішкі жүйелердегі жаңартылған blob тазалау коды.

Ақпарат көзі: opennet.ru

пікір қалдыру