Linux 5.8 yadro versiyasi

Ikki oylik rivojlanishdan so'ng, Linus Torvalds tanishtirdi yadro chiqarilishi Linux 5.8. Eng e'tiborli o'zgarishlar orasida: KCSAN poyga holati detektori, foydalanuvchi maydoniga bildirishnomalarni etkazib berishning universal mexanizmi, ichki shifrlash uchun apparat yordami, ARM64 uchun kengaytirilgan xavfsizlik mexanizmlari, rus Baykal-T1 protsessorini qo'llab-quvvatlash, procfs nusxalarini alohida o'rnatish qobiliyati. , ARM64 Call Stack va BTI uchun Shadow xavfsizlik mexanizmlarini amalga oshirish.

Yadro 5.8 loyihaning butun mavjudligi davomida barcha yadrolarning o'zgarishlar soni bo'yicha eng katta bo'ldi. Bundan tashqari, o'zgarishlar biron bir quyi tizim bilan bog'liq emas, balki yadroning turli qismlarini qamrab oladi va asosan ichki qayta ishlash va tozalash bilan bog'liq. Eng katta o'zgarishlar haydovchilarda ko'rinadi. Yangi versiya 17606 ishlab chiquvchilar tomonidan 2081 tuzatishni o'z ichiga olgan, bu yadro kodlari omboridagi barcha fayllarning taxminan 20 foiziga ta'sir ko'rsatdi. Yamoq hajmi 65 MB (o'zgarishlar 16180 1043240 ta faylga ta'sir qildi, 489854 5.7 15033 qator kod qo'shildi, 39 37 satr o'chirildi). Taqqoslash uchun, 5.8 filialida 16 11 ta tuzatish va yamoq hajmi 3 MB edi. 4-da kiritilgan barcha o'zgarishlarning taxminan XNUMX% qurilma drayverlari bilan bog'liq, o'zgarishlarning taxminan XNUMX% apparat arxitekturasiga xos kodni yangilash bilan bog'liq, XNUMX% tarmoq stekiga, XNUMX% fayl tizimlariga va XNUMX% ichki yadro quyi tizimlari bilan bog'liq.

asosiy yangiliklar:

  • Virtualizatsiya va xavfsizlik
    • Bir vaqtning o'zida bajarish va yozish imkonini beruvchi bitlar o'rnatiladigan kodli bo'limlarga ega yadro modullarini yuklash ta'minlanadi. O'zgartirish yadroni bir vaqtning o'zida bajarish va yozish imkonini beruvchi xotira sahifalaridan foydalanishdan xalos qilish uchun kattaroq loyiha doirasida amalga oshirildi.
    • Endi turli xil variantlar bilan o'rnatilgan, lekin bir xil jarayon identifikatori nom maydonini (pid nom maydoni) aks ettiruvchi bir nechta procfs o'rnatish nuqtalaridan foydalanishga ruxsat beruvchi alohida procfs misollarini yaratish mumkin. Ilgari barcha procfs o'rnatish nuqtalari faqat bitta ichki tasvirni aks ettirgan va o'rnatish parametrlarining har qanday o'zgarishi bir xil jarayon identifikatori nom maydoni bilan bog'liq bo'lgan barcha boshqa o'rnatish nuqtalariga ta'sir qilgan. Turli xil variantlar bilan montaj talab qilinishi mumkin bo'lgan sohalar orasida procflarda ma'lum turdagi jarayonlar va axborot tugunlarini yashirish qobiliyatiga ega bo'lgan o'rnatilgan tizimlar uchun engil izolyatsiyani amalga oshirish kiradi.
    • Mexanizmni qo'llab-quvvatlash ARM64 platformasi uchun amalga oshirildi
      Shadow-Call Stack, stek buferi to'lib ketgan taqdirda funksiyaning qaytish manzilini qayta yozishdan himoya qilish uchun Clang kompilyatori tomonidan taqdim etilgan. Himoyaning mohiyati boshqaruvni funktsiyaga o'tkazgandan so'ng va funktsiyadan chiqishdan oldin ushbu manzilni olgandan so'ng, qaytarish manzilini alohida "soya" stekida saqlashdir.

    • ARM64 platformasi uchun ko'rsatmalar qo'shildi ARMv8.5-BTI (Branch Target Indicator) tarmoqlanmasligi kerak bo'lgan ko'rsatmalar to'plamining bajarilishini himoya qilish uchun. Kodning ixtiyoriy bo'limlariga o'tishni blokirovka qilish, qaytarishga yo'naltirilgan dasturlash usullaridan foydalanadigan ekspluatatsiyalarda gadjetlar yaratilishining oldini olish uchun amalga oshiriladi (ROP - Qaytishga yo'naltirilgan dasturlash; tajovuzkor o'z kodini xotiraga joylashtirishga urinmaydi, lekin allaqachon mavjud bo'laklar ustida ishlaydi. Qaytishni boshqarish yo'riqnomasi bilan tugaydigan mashina ko'rsatmalari, undan kerakli funksionallikni olish uchun qo'ng'iroqlar zanjiri qurilgan).
    • Blok qurilmalarini ichki shifrlash uchun qo'shimcha apparat yordami (Inline shifrlash). Inlinep shifrlash qurilmalari odatda drayvga o'rnatilgan bo'ladi, lekin mantiqiy ravishda tizim xotirasi va disk o'rtasida joylashgan bo'lib, yadro tomonidan ko'rsatilgan kalitlar va shifrlash algoritmi asosida I/U ni shaffof shifrlaydi va shifrlaydi.
    • Dastlabki yuklash tasvirini RAMga joylashtirishda initrdning jismoniy xotira manzilini belgilash imkonini beruvchi "initrdmem" yadrosi buyruq qatori opsiyasi qo'shildi.
    • Yangi imkoniyatlar qo‘shildi: CAP_PERFMON mukammal quyi tizimga kirish va unumdorlik monitoringini amalga oshirish. CAP_BPF, bu avval CAP_SYS_ADMIN huquqlarini talab qiladigan ma'lum BPF operatsiyalarini (masalan, BPF dasturlarini yuklash) imkonini beradi (CAP_SYS_ADMIN huquqlari endi CAP_BPF, CAP_PERFMON va CAP_NET_ADMIN kombinatsiyasiga bo'lingan).
    • Yuklangan yangi virtio-mem qurilmasi, bu sizga xotirani mehmon tizimlariga hot-plug va hot-plug imkonini beradi.
    • Agar qurilma drayveri bir-birining ustiga chiqadigan xotira maydonlaridan foydalansa, /dev/mem-da xaritalash operatsiyalarini eslab qolish amalga oshirildi.
    • Zaiflikdan himoyalanish qo'shildi CROSSTalk/SRBDS, bu boshqa CPU yadrosida bajarilgan ba'zi ko'rsatmalarning bajarilishi natijalarini tiklash imkonini beradi.
  • Xotira va tizim xizmatlari
    • Kodni formatlash qoidalarini belgilovchi hujjatda, qabul qilingan inklyuziv terminologiyadan foydalanish bo'yicha tavsiyalar. Ishlab chiquvchilarga "master / slave" va "qora ro'yxat / oq ro'yxat" birikmalaridan, shuningdek "qul" so'zidan alohida foydalanish tavsiya etilmaydi. Tavsiyalar faqat ushbu atamalardan yangi foydalanishga tegishli. Yadroda allaqachon mavjud bo'lgan ko'rsatilgan so'zlarni eslatib o'tmasdan qoladi. Yangi kodda belgilangan shartlardan foydalanish, agar foydalanuvchi maydonida ochilgan API va ABIni qo'llab-quvvatlash uchun zarur bo'lsa, shuningdek, spetsifikatsiyalari ma'lum shartlardan foydalanishni talab qiladigan mavjud apparat yoki protokollarni qo'llab-quvvatlash uchun kodni yangilashda ruxsat etiladi.
    • Nosozliklarni tuzatish vositasi kiritilgan KCSAN (Kernel Concurrency Sanitizer), dinamik aniqlash uchun mo'ljallangan poyga shartlari yadro ichida. KCSAN-dan foydalanish GCC va Clang-da qurishda qo'llab-quvvatlanadi va xotiraga kirishni kuzatish uchun kompilyatsiya vaqtida maxsus o'zgartirishlarni talab qiladi (xotira o'qilganda yoki o'zgartirilganda ishga tushiriladigan uzilish nuqtalari ishlatiladi). KCSAN rivojlanishining asosiy yo'nalishi noto'g'ri pozitiv oldini olish, kengayish va foydalanish qulayligi edi.
    • Qo'shilgan universal mexanizm yadrodan foydalanuvchi maydoniga bildirishnomalarni yetkazib berish. Mexanizm standart quvur drayveriga asoslanadi va yadrodan bildirishnomalarni foydalanuvchi maydonida ochilgan kanallar bo'yicha samarali tarqatish imkonini beradi. Xabarlarni qabul qilish punktlari maxsus rejimda ochilgan va yadrodan olingan xabarlarni halqa buferida to'plash imkonini beruvchi quvurlardir. O'qish odatiy read() funktsiyasi tomonidan amalga oshiriladi. Kanal egasi yadrodagi qaysi manbalar kuzatilishi kerakligini aniqlaydi va ma'lum turdagi xabarlar va hodisalarni e'tiborsiz qoldirish uchun filtrni belgilashi mumkin. Hodisalardan faqat kalitlar bilan operatsiyalar qo'llab-quvvatlanadi, masalan, kalitlarni qo'shish/o'chirish va ularning atributlarini o'zgartirish. Ushbu voqealar GNOME da qo'llanilishi rejalashtirilgan.
    • PIDni qayta ishlatish holatlarini hal qilishga yordam berish uchun "pidfd" funksiyasini ishlab chiqishda davom etish (pidfd ma'lum bir jarayon bilan bog'lanadi va o'zgarmaydi, PID esa PID bilan bog'liq joriy jarayon tugaganidan keyin boshqa jarayon bilan bog'lanishi mumkin). Yangi versiyada jarayonni nomlar bo'shliqlariga biriktirish uchun pidfd-dan foydalanish qo'llab-quvvatlanadi (setns tizimi chaqiruvini bajarishda pidfd-ni ko'rsatishga imkon beradi). Pidfd-dan foydalanish jarayonni bir qo'ng'iroq bilan bir necha turdagi nomlar maydoniga biriktirishni boshqarishga imkon beradi, zarur tizim qo'ng'iroqlari sonini sezilarli darajada kamaytiradi va biriktirmani atom rejimida amalga oshiradi (agar nomlar maydonidan biriga ulanish muvaffaqiyatsiz tugasa, boshqalar ulanmaydi). .
    • Faccessat2() dan farqli yangi tizim chaqiruvi qo'shildi
      faccessat() POSIX tavsiyalariga mos keladigan bayroqlar bilan qo'shimcha argument (ilgari bu bayroqlar C kutubxonasida emulyatsiya qilingan va yangi faccessat2 ularni yadroda amalga oshirishga imkon beradi).

    • Cgroupda qo'shildi juda ko'p almashtirish joyini egallagan vazifalarni sekinlashtirish uchun ishlatilishi mumkin bo'lgan xotira.swap.high sozlamasi.
    • Asinxron kiritish-chiqarish interfeysiga io_uring tee() tizim chaqiruvi uchun qo'shimcha yordam.
    • Qo'shilgan mexanizm "BPF iteratori, yadro tuzilmalari tarkibini foydalanuvchi maydoniga chiqarish uchun mo'ljallangan.
    • Taqdim etilgan BPF dasturlari o'rtasida ma'lumot almashish uchun halqali buferdan foydalanish imkoniyati.
    • Mexanizmga padata, yadrodagi vazifalarning parallel bajarilishini tashkil qilish uchun mo'ljallangan, yuklarni muvozanatlash bilan ko'p bosqichli vazifalarni qo'llab-quvvatlash qo'shildi.
    • Qayta yuklashlar o'rtasida yo'qolmaydigan xotira joylarida nosozlik sabablari haqida disk raskadrovka ma'lumotlarini saqlashga imkon beruvchi pstore mexanizmida, qo'shildi qurilmalarni blokirovka qilish uchun ma'lumotlarni saqlash uchun backend.
    • PREEMPT_RT yadro filialidan Ko'chib mahalliy qulflarni amalga oshirish.
    • Qo'shilgan XDP (eXpress Data Path) qo'llab-quvvatlashi bilan tarmoq drayverlarini yozishni soddalashtirishga qaratilgan yangi bufer ajratish API (AF_XDP).
    • RISC-V arxitekturasi uchun KGDB yordamida yadro komponentlarini disk raskadrovka qilishni qo'llab-quvvatlash amalga oshirildi.
    • 4.8 versiyasi chiqarilishidan oldin yadro yaratish uchun ishlatilishi mumkin bo'lgan GCC versiyasiga talablar oshirildi. Keyingi nashrlarning birida barni GCC 4.9 ga ko'tarish rejalashtirilgan.
  • Disk quyi tizimi, kiritish-chiqarish va fayl tizimlari
    • Qurilma xaritasida qo'shildi kichikroq mantiqiy blok hajmini taqlid qilish uchun ishlatilishi mumkin bo'lgan yangi dm-ebs (blok hajmini taqlid qilish) ishlov beruvchisi (masalan, 512K sektor o'lchamli disklardagi 4 baytli sektorlarni taqlid qilish uchun).
    • F2FS fayl tizimi endi LZO-RLE algoritmi yordamida siqishni qo'llab-quvvatlaydi.
    • dm-crypt ichida qo'shildi shifrlangan kalitlarni qo'llab-quvvatlash.
    • Btrfs to'g'ridan-to'g'ri kiritish-chiqarish rejimida o'qish operatsiyalarini boshqarishni yaxshiladi. O'rnatish paytida tezlashtirilgan ota-onasiz qolgan o'chirilgan bo'limlar va kataloglarni tekshirish.
    • CIFS-ga "tugun" parametri qo'shildi, bu serverda normal ruxsatnomalarni tekshirish imkonini beradi, lekin mijozga fayllar yoki kataloglarni o'chirishni taqiqlaydi.
    • Ext4 xatolarni boshqarishni yaxshiladi ENOSPC multithreadingdan foydalanganda. xattr GNU Hurd-da foydalaniladigan gnu.* nom maydonini qo'llab-quvvatladi.
    • Ext4 va XFS uchun alohida fayllar va kataloglarga nisbatan DAX operatsiyalarini qo'llab-quvvatlash yoqilgan (blok qurilmasi darajasidan foydalanmasdan sahifa keshini chetlab o'tib fayl tizimiga to'g'ridan-to'g'ri kirish).
    • Tizim chaqiruvida statx() bayroq qo'shildi STATX_ATTR_DAX, belgilangan bo'lsa, DAX mexanizmi yordamida ma'lumotni oladi.
    • EXFAT qo'shildi yuklash maydonini tekshirishni qo'llab-quvvatlash.
    • FATda yaxshilandi FS elementlarini proaktiv yuklash. Sekin 2TB USB drayverini sinovdan o'tkazish testni yakunlash vaqtining 383 dan 51 soniyagacha qisqarganini ko'rsatdi.
  • Tarmoq quyi tizimi
    • Tarmoq ko'priklarining ishlashini boshqarish uchun kodda qo'shildi protokolni qo'llab-quvvatlash MRP (Media Redundancy Protocol), bu bir nechta Ethernet kalitlarini ulash orqali nosozliklarga chidamlilik imkonini beradi.
    • Trafikni boshqarish tizimiga (Tc) qo'shildi yangi "darvoza" harakati, bu ma'lum paketlarni qayta ishlash va yo'q qilish uchun vaqt oralig'ini aniqlash imkonini beradi.
    • Yadro va ettool yordam dasturiga ulangan tarmoq kabelini sinovdan o'tkazish va tarmoq qurilmalarini o'z-o'zini diagnostika qilish uchun yordam qo'shildi.
    • MPLS (Multiprotocol Label Switching) algoritmini qo‘llab-quvvatlash IPv6 stekiga ko‘p protokolli yorliqli kommutatsiya yordamida paketlarni yo‘naltirish uchun qo‘shildi (MPLS ilgari IPv4 uchun qo‘llab-quvvatlangan).
    • IKE (Internet Key Exchange) va IPSec paketlarini TCP orqali uzatish uchun qoʻshimcha yordam qoʻshildi (QRM 8229) mumkin bo'lgan UDP blokirovkasini chetlab o'tish.
    • Yuklangan RDMA transporti (InfiniBand, RoCE, iWARP) va RTRS protokoli yordamida blokirovka qurilmasiga masofadan kirishni tashkil qilish imkonini beruvchi tarmoq blokirovkasi qurilmasi rnbd.
    • TCP stekida qo'shildi selektiv tasdiqlash (SACK) javoblarida diapazonni siqishni qo'llab-quvvatlash.
    • IPv6 uchun amalga oshirildi TCP-LD-ni qo'llab-quvvatlash (QRM 6069, Uzoq ulanishdagi uzilishlar).
  • uskunalar
    • Intel video kartalari uchun i915 DRM drayveri sukut bo'yicha Intel Tiger Lake (GEN12) chiplarini qo'llab-quvvatlaydi, buning uchun amalga oshirildi quvvat iste'moli yoki ishlash talablariga qarab chastota va kuchlanishni dinamik ravishda sozlash uchun SAGV (System Agent Geyserville) tizimidan foydalanish qobiliyati.
    • Amdgpu drayveri FP16 piksel formatini qo'llab-quvvatlashni va video xotirada (TMZ, Ishonchli xotira zonasi) shifrlangan buferlar bilan ishlash qobiliyatini qo'shdi.
    • AMD Zen va Zen2 protsessorlari uchun quvvat sensorlari, shuningdek, AMD Ryzen 4000 Renoir uchun harorat sensorlari uchun qo‘shimcha yordam qo‘shildi. AMD Zen va Zen2 uchun interfeys orqali quvvat sarfi haqidagi ma'lumotni olish qo'llab-quvvatlanadi RAPL (Ishlayotgan o'rtacha quvvat chegarasi).
    • Nouveau drayveriga NVIDIA modifikator formatini qo'llab-quvvatlash qo'shildi. Gv100 uchun interlaced skanerlash rejimlaridan foydalanish imkoniyati amalga oshirildi. vGPU ta'rifi qo'shildi.
    • MSM (Qualcomm) drayveriga Adreno A405, A640 va A650 grafik protsessorlarini qo'llab-quvvatlash qo'shildi.
    • Qo'shilgan DRM (Direct Rendering Manager) resurslarini boshqarish uchun ichki asos.
    • Xiaomi Redmi Note 7 va Samsung Galaxy S2 smartfonlari, shuningdek, Elm/Hana Chromebook noutbuklari uchun qo‘shimcha qo‘llab-quvvatlash qo‘shildi.
    • LCD panellar uchun qo'shilgan drayverlar: ASUS TM5P5 NT35596, Starry KR070PE2T, Leadtek LTK050H3146W, Visionox rm69299, Boe tv105wum-nw0.
    • Renesas "RZ/G1H", Realtek RTD1195, Realtek RTD1395/RTD1619, Rockchips RK3326, AMLogic S905D, S905X3, S922XH, Olimex A20-OLinuXino50, Olimex AXNUMX-OLinuXinoXNUMX, ARM platalari va platformalari uchun qo'shimcha qo'llab-quvvatlash.
      , Beacon i.MX8m-Mini, Qualcomm SDM660/SDM630, Xnano X5 TV Box, Stinger96, Beaglebone-AI.

    • MIPS protsessor Loongson-2K (qisqartirilgan Loongson64) uchun qo'shimcha qo'llab-quvvatlash. CPU Loongson 3 uchun KVM gipervisoridan foydalangan holda virtualizatsiya qo'llab-quvvatlashi qo'shildi.
    • Qo'shilgan
      rus Baykal-T1 protsessorini va uning asosidagi tizimni qo'llab-quvvatlash BE-T1000. Baykal-T1 protsessorida 5600 gigagertsli chastotada ishlaydigan ikkita P32 MIPS 5 r1.2 superskalyar yadro mavjud. Chipda L2 kesh (1 MB), DDR3-1600 ECC xotira kontrolleri, 1 ta 10 Gb chekilgan port, 2 1 Gb chekilgan port, PCIe Gen.3 x4 kontroller, 2 SATA 3.0 port, USB 2.0, GPIO, UART, SPI, I2C mavjud. Protsessor virtualizatsiya, SIMD ko'rsatmalari va GOST 28147-89 ni qo'llab-quvvatlaydigan integratsiyalashgan apparat kriptografik tezlatgichni qo'llab-quvvatlashni ta'minlaydi. Chip Imagination Technologies litsenziyasiga ega MIPS32 P5600 Warrior protsessor yadro bloki yordamida ishlab chiqilgan.

Shu bilan birga, Lotin Amerikasi erkin dasturiy ta'minot fondi shakllangan
variantni tanlang butunlay bepul yadro 5.8 - Linux-libre 5.8-gnu, ishlab chiqaruvchi tomonidan cheklangan, erkin bo'lmagan komponentlar yoki kod bo'limlarini o'z ichiga olgan proshivka va drayver elementlaridan tozalangan. Yangi versiya Atom ISP Video, MediaTek 7663 USB/7915 PCIe, Realtek 8723DE WiFi, Renesas PCI xHCI, HabanaLabs Gaudi, Kengaytirilgan asinxron namuna tezligi konvertori, Maxim Integrated MAX98390 Home MicromiplifierL Connector, MicromiplifierL38060 uchun drayverlarga blob yuklashni o'chirib qo'yadi. va I2C EEPROM Slave. Adreno GPU, HabanaLabs Goya, x86 sensorli ekran, vt6656 va btbcm drayverlari va quyi tizimlarida yangilangan blob tozalash kodi.

Manba: opennet.ru

a Izoh qo'shish