Keluaran kernel Linux 6.1

Selepas dua bulan pembangunan, Linus Torvalds membentangkan keluaran kernel Linux 6.1. Antara perubahan yang paling ketara: sokongan untuk pembangunan pemacu dan modul dalam bahasa Rust, pemodenan mekanisme untuk menentukan halaman memori yang digunakan, pengurus memori khas untuk program BPF, sistem untuk mendiagnosis masalah memori KMSAN, KCFI (Kawalan Kernelk). -Flow Integrity) mekanisme perlindungan, pengenalan pokok struktur Maple.

Versi baharu termasuk 15115 pembaikan daripada 2139 pembangun, saiz tampalan ialah 51 MB, iaitu kira-kira 2 kali lebih kecil daripada saiz tampalan daripada kernel 6.0 dan 5.19. Perubahan mempengaruhi 13165 fail, 716247 baris kod telah ditambahkan dan 304560 baris telah dipadamkan. Kira-kira 45% daripada semua perubahan yang diperkenalkan dalam 6.1 adalah berkaitan dengan pemacu peranti, kira-kira 14% daripada perubahan berkaitan dengan pengemaskinian kod khusus untuk seni bina perkakasan, 14% berkaitan dengan susunan rangkaian, 3% berkaitan dengan sistem fail dan 3% adalah berkaitan dengan subsistem kernel dalaman.

Inovasi utama dalam kernel 6.1:

  • Perkhidmatan memori dan sistem
    • Menambahkan keupayaan untuk menggunakan Rust sebagai bahasa kedua untuk membangunkan modul pemacu dan kernel. Sebab utama untuk menyokong Rust adalah untuk memudahkan menulis pemacu peranti yang selamat dan berkualiti tinggi dengan mengurangkan kemungkinan membuat ralat apabila bekerja dengan memori. Sokongan Rust dilumpuhkan secara lalai dan tidak menyebabkan Rust disertakan sebagai pergantungan binaan kernel yang diperlukan. Inti setakat ini telah menggunakan versi tampalan yang minimum dan dilucutkan, yang telah dikurangkan daripada 40 kepada 13 ribu baris kod dan hanya menyediakan minimum yang diperlukan, mencukupi untuk membina modul kernel ringkas yang ditulis dalam bahasa Rust. Pada masa hadapan, ia dirancang untuk meningkatkan fungsi sedia ada secara beransur-ansur, memindahkan perubahan lain daripada cawangan Rust-for-Linux. Secara selari, projek sedang dibangunkan untuk menggunakan infrastruktur yang dicadangkan untuk membangunkan pemacu bagi pemacu NVMe, protokol rangkaian 9p dan GPU Apple M1 dalam bahasa Rust.
    • Untuk sistem berdasarkan seni bina AArch64, RISC-V dan LoongArch dengan EFI, keupayaan untuk memuatkan terus imej kernel termampat telah dilaksanakan. Menambahkan pengendali untuk memuatkan, menjalankan dan memunggah imej kernel, dipanggil terus dari EFI zboot. Pengendali untuk memasang dan memadam protokol daripada pangkalan data protokol EFI juga telah ditambah. Sebelum ini, pembongkaran dilakukan oleh pemuat but yang berasingan, tetapi kini ini boleh dilakukan oleh pengendali dalam kernel itu sendiri - imej kernel dibentuk sebagai aplikasi EFI.
    • Komposisi termasuk sebahagian daripada tampalan dengan pelaksanaan model pengurusan memori berbilang peringkat, yang membolehkan anda memisahkan bank memori dengan ciri prestasi yang berbeza. Sebagai contoh, halaman yang paling banyak digunakan mungkin disimpan dalam memori terpantas, manakala halaman yang paling jarang digunakan mungkin disimpan dalam memori yang agak perlahan. Kernel 6.1 memperkenalkan mekanisme untuk menentukan di mana halaman yang banyak digunakan terletak dalam ingatan perlahan supaya ia boleh dinaikkan kepada ingatan pantas, dan juga memperkenalkan konsep umum peringkat memori dan prestasi relatifnya.
    • Ia termasuk mekanisme MGLRU (Multi-Generational LRU), yang menggantikan pelaksanaan LRU lama (Paling Kurang Digunakan) berdasarkan dua baris gilir dengan struktur berbilang peringkat yang lebih baik menentukan halaman memori yang sebenarnya sedang digunakan dan yang boleh ditolak ke partition swap.
    • Sokongan tambahan untuk struktur data "pokok maple" yang dicadangkan oleh jurutera Oracle, yang diletakkan sebagai pengganti yang lebih berkesan untuk struktur "pokok merah-hitam". Pokok maple ialah varian B-tree yang menyokong pengindeksan julat dan direka bentuk untuk menggunakan cache pemproses moden dengan cekap. Beberapa subsistem pengurusan memori telah pun dipindahkan ke pokok maple, yang telah memberi kesan positif pada prestasinya. Pada masa hadapan, pokok maple boleh digunakan untuk melaksanakan penguncian julat.
    • Keupayaan untuk mencipta program BPF yang "merosakkan" yang direka khas untuk memulakan penutupan kecemasan melalui panggilan crash_kexec() telah ditambahkan pada subsistem BPF. Program BPF sedemikian mungkin diperlukan untuk tujuan penyahpepijatan untuk memulakan penciptaan tempat pembuangan ranap pada satu masa tertentu. Untuk mengakses operasi yang merosakkan semasa memuatkan program BPF, anda mesti menentukan bendera BPF_F_DESTRUCTIVE, mengaktifkan kernel sysctl.destructive_bpf_enabled dan mempunyai hak CAP_SYS_BOOT.
    • Untuk program BPF, adalah mungkin untuk menghitung elemen cgroup, serta menghitung sumber (fail, vma, proses, dll.) bagi urutan atau tugasan tertentu. Jenis peta baharu telah dilaksanakan untuk mencipta penimbal gelang pengguna.
    • Menambahkan panggilan khas untuk peruntukan memori dalam program BPF (memori allocator), yang menyediakan peruntukan memori yang lebih selamat dalam konteks BPF daripada standard kmalloc().
    • Bahagian pertama perubahan telah disepadukan, menyediakan keupayaan untuk mencipta pemacu untuk peranti input dengan antara muka HID (Peranti Antaramuka Manusia), dilaksanakan dalam bentuk program BPF.
    • Kernel telah mengalih keluar kod sepenuhnya untuk menyokong format fail boleh laku a.out, yang telah ditamatkan dalam keluaran 5.1 dan telah dilumpuhkan untuk seni bina utama sejak versi 5.18 dan 5.19. Format a.out telah lama ditamatkan pada sistem Linux dan penjanaan fail a.out tidak disokong oleh alatan moden dalam konfigurasi Linux lalai. Pemuat untuk fail a.out boleh dilaksanakan sepenuhnya dalam ruang pengguna.
    • Untuk sistem berdasarkan seni bina set arahan LoongArch yang digunakan dalam pemproses Loongson 3 5000 dan melaksanakan RISC ISA baharu, serupa dengan MIPS dan RISC-V, sokongan untuk acara pengukuran prestasi (peristiwa perf), kompilasi kexec, kdump dan BPF JIT dilaksanakan .
    • Antara muka I/O tak segerak io_uring menawarkan mod baharu, IORING_SETUP_DEFER_TASKRUN, yang membenarkan kerja berkaitan penimbal gelang ditangguhkan buat sementara waktu sehingga permintaan aplikasi dibuat, yang boleh digunakan untuk kerja kelompok dan mengelakkan isu kependaman akibat preemption. salah masa.
    • Proses dalam ruang pengguna diberi kebolehan untuk memulakan penukaran julat halaman memori biasa kepada satu set halaman memori yang besar (Transparent Huge-Pages).
    • Perlaksanaan tambahan peranti /dev/userfaultfd, yang membenarkan akses kepada kefungsian panggilan sistem userfaultfd() menggunakan hak akses dalam FS. Fungsi userfaultfd membolehkan anda mencipta pengendali untuk mengakses halaman memori yang tidak diperuntukkan (kesalahan halaman) dalam ruang pengguna.
    • Keperluan untuk versi utiliti GNU Make telah ditingkatkan - sekurang-kurangnya versi 3.82 kini diperlukan untuk membina kernel.
  • Subsistem cakera, I/O dan sistem fail
    • Pengoptimuman prestasi yang ketara telah dibuat pada sistem fail Btrfs; antara lain, prestasi panggilan FIEMAP ioctl telah ditingkatkan mengikut urutan magnitud. Menambah sokongan untuk penulisan buffer tak segerak untuk aplikasi menggunakan io_uring. Menambahkan sokongan untuk fail yang dilindungi dengan fs-verity pada operasi "hantar".
    • Sistem fail ext4 telah menambah pengoptimuman prestasi yang berkaitan dengan penyelenggaraan jurnal dan operasi baca sahaja.
    • Sistem fail EROFS (Enhanced Read-Only File System), yang direka untuk digunakan pada partition yang boleh diakses dalam mod baca sahaja, melaksanakan keupayaan untuk berkongsi data yang diduplikasi dalam sistem fail yang berbeza.
    • Panggilan sistem statx() telah ditambahkan untuk memaparkan maklumat tentang sama ada I/O langsung boleh digunakan pada fail.
    • Sokongan untuk mencipta fail sementara dengan bendera O_TMFILE telah ditambahkan pada subsistem FUSE (Sistem Fail dalam Ruang Pengguna).
  • Maya dan Keselamatan
    • Pelaksanaan mekanisme perlindungan CFI (Control Flow Integrity) telah diganti, menambah semakan sebelum setiap panggilan tidak langsung fungsi untuk mengesan beberapa bentuk tingkah laku tidak ditentukan yang berpotensi membawa kepada pelanggaran perintah pelaksanaan biasa (aliran kawalan) sebagai hasil daripada penggunaan eksploitasi yang menukar penunjuk kepada fungsi yang disimpan dalam ingatan . Pelaksanaan standard CFI daripada projek LLVM telah digantikan dengan pilihan yang juga berdasarkan penggunaan Clang, tetapi disesuaikan khas untuk melindungi subsistem peringkat rendah dan kernel sistem pengendalian. Dalam LLVM, pelaksanaan baharu akan ditawarkan dalam keluaran Clang 16 dan akan didayakan dengan pilihan "-fsanitize=kcfi". Perbezaan utama dengan pelaksanaan baharu ialah ia tidak terikat dengan pengoptimuman masa pautan (LTO) dan tidak menyebabkan penunjuk fungsi digantikan dengan pautan dalam jadual lompat.
    • Untuk modul LSM (Modul Keselamatan Linux), adalah mungkin untuk mencipta pengendali yang memintas operasi untuk mencipta ruang nama.
    • Alat disediakan untuk mengesahkan tandatangan digital PKCS#7 dalam program BPF.
    • Keupayaan untuk membuka dalam mod tidak menyekat (O_NONBLOCK), yang dialih keluar secara tidak sengaja dalam kernel 5.6, telah dikembalikan kepada /dev/random.
    • Pada sistem dengan seni bina x86, amaran telah ditambah sekiranya pemetaan halaman memori oleh subsistem kernel yang secara serentak membenarkan pelaksanaan dan penulisan. Pada masa akan datang, kemungkinan melarang sepenuhnya pemetaan memori sedemikian sedang dipertimbangkan.
    • Menambahkan mekanisme penyahpepijatan KMSAN (Kernel Memory Sanitizer) untuk mengesan penggunaan memori yang tidak dimulakan dalam kernel, serta kebocoran memori yang tidak dimulakan antara ruang pengguna dan peranti.
    • Penambahbaikan telah dibuat pada penjana nombor pseudo-rawak crypto-secure CRNG yang digunakan dalam panggilan getrandom. Perubahan telah disediakan oleh Jason A. Donenfeld, pengarang VPN WireGuard, dan bertujuan untuk meningkatkan keselamatan pengekstrakan integer pseudo-rawak.
  • Subsistem rangkaian
    • Tindanan TCP menyediakan keupayaan (dilumpuhkan secara lalai) untuk menggunakan jadual cincang soket secara berasingan untuk setiap ruang nama, yang meningkatkan prestasi pada sistem dengan sejumlah besar ruang nama.
    • Kod dialih keluar untuk menyokong protokol DECnet warisan. Rintisan API ruang pengguna dibiarkan untuk membolehkan aplikasi yang menggunakan DECnet disusun, tetapi aplikasi ini tidak akan dapat disambungkan ke rangkaian.
    • Protokol pautan net didokumenkan.
  • ΠžΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΠ΅
    • Pemacu amdgpu telah menambah sokongan untuk pemajuan DSC (Display Stream Compression) untuk pemampatan data tanpa kehilangan apabila bertukar maklumat dengan skrin yang menyokong resolusi yang sangat tinggi. Kerja terus menyediakan sokongan untuk platform AMD RDNA3 (RX 7000) dan CDNA (Instinct). Sokongan tambahan untuk komponen DCN 3.2, SMU 13.x, NBIO 7.7, GC 11.x, PSP 13.x, SDMA 6.x dan GMC 11.x IP. Pemacu amdkfd (untuk GPU AMD diskret seperti Polaris) menyediakan sokongan untuk GFX 11.0.3.
    • Pemacu i915 (Intel) termasuk sokongan untuk GPU Meteor Lake. Meteor Lake dan GPU yang lebih baharu menyokong antara muka DP 2.0 (DisplayPort). Penambahan pengecam untuk kad video berdasarkan seni bina mikro Alder Lake S.
    • Sokongan tambahan untuk subsistem audio yang dilaksanakan dalam pemproses Apple Silicon, Intel SkyLake dan Intel KabyLake. Pemacu audio CS35L41 HDA menyokong mod tidur. Menambahkan sokongan ASoC (ALSA System on Chip) untuk cip audio bersepadu Apple Silicon, AMD Rembrant DSPs, AMD Pink Sardin ACP 6.2, Everest ES8326, Intel Sky Lake dan Kaby Lake, Mediatek MT8186, NXP i.MX8ULP DSPs, Qualcomm SC8280XP, SM8250, SM8450 dan Texas Instruments SRC4392
    • Sokongan tambahan untuk panel LCD Samsung LTL101AL01, B120XAN01.0, R140NWF5 RH, Densitron DMT028VGHMCMI-1A TFT, AUO B133UAN02.1, IVO M133NW4J-R3, Innolux N120ACA-BEA1N116, BOAKO01.6. , INX N116BCA- EA21 , INX N116BCN-EA2, Teknologi Multi-Inno MI116FT-1.
    • Sokongan tambahan untuk pengawal AHCI SATA yang digunakan dalam Baikal-T1 SoC.
    • Sokongan tambahan untuk cip Bluetooth MediaTek MT7921, Intel Magnetor (CNVi, Kesambungan Bersepadu), Realtek RTL8852C, RTW8852AE dan RTL8761BUV (Edimax BT-8500).
    • Pemacu ath11k untuk modul wayarles Qualcomm telah menambah sokongan untuk pengimbasan spektrum dalam julat 160 MHz, melaksanakan NAPI berbilang benang dan sokongan yang lebih baik untuk cip Wi-Fi Qualcomm WCN6750.
    • Menambah pemacu untuk papan kekunci PinePhone, pad sentuh InterTouch (ThinkPad P1 G3), Pengawal Adaptif X-Box, Pengawal Penerbangan PhoenixRC, Pengawal Kereta VRC-2, Pengawal Tepi DualSense, Panel Operasi IBM, alat kawalan jauh XBOX One Elite, tablet XP-PEN Deco Pro S dan Intuos Pro Small (PTH-460).
    • Menambah pemacu untuk pemecut kriptografi Aspeed HACE (Hash and Crypto Engine).
    • Sokongan tambahan untuk pengawal Thunderbolt/USB4 Intel Meteor Lake bersepadu.
    • Menambah sokongan untuk telefon pintar Sony Xperia 1 IV, Samsung Galaxy E5, E7 dan Grand Max, Pine64 Pinephone Pro.
    • Sokongan tambahan untuk SoC dan papan ARM: AMD DaytonaX, Mediatek MT8186, Rockchips RK3399 dan RK3566, TI AM62A, NXP i.MX8DXL, Renesas R-Car H3Ne-1.7G, Qualcomm IPQ8064-v2.0, IPQ8062, IPQ8065, Konon 8 BL i.MX8195MM OSM-S, MT4 (Acer Tomato), Radxa ROCK 4C+, NanoPi R1S Enterprise Edition, JetHome JetHub DXNUMXp. Pemacu yang dikemas kini untuk SoC Samsung, Mediatek, Renesas, Tegra, Qualcomm, Broadcom dan NXP.

Pada masa yang sama, Yayasan Perisian Percuma Amerika Latin membentuk versi kernel percuma sepenuhnya 6.1 - Linux-libre 6.1-gnu, dibersihkan daripada elemen perisian tegar dan pemacu yang mengandungi komponen bukan bebas atau bahagian kod, yang skopnya terhad oleh pengilang. Keluaran baharu ini membersihkan pemacu rtw8852b baharu dan fail DTS untuk pelbagai SoC Qualcomm dan MediaTek dengan pemproses berdasarkan seni bina AArch64. Kod pembersihan gumpalan dikemas kini dalam pemacu dan subsistem amdgpu, i915, brcmfmac, r8188eu, rtw8852c, Intel ACPI. Pembersihan kad TV pemandu lapuk tm6000, cpia2 v4l, sp8870, av7110 telah diperbetulkan.

Sumber: opennet.ru

Tambah komen