Rilis kernel Linux 6.1

Setelah dua bulan pengembangan, Linus Torvalds meluncurkan rilis kernel Linux 6.1. Di antara perubahan yang paling menonjol: dukungan untuk pengembangan driver dan modul dalam bahasa Rust, modernisasi mekanisme untuk menentukan halaman memori yang digunakan, manajer memori khusus untuk program BPF, sistem untuk mendiagnosis masalah memori KMSAN, KCFI (Kernelk Control -Mekanisme perlindungan Integritas Aliran), pengenalan pohon struktur Maple.

Versi baru ini mencakup 15115 perbaikan dari 2139 pengembang, ukuran patch adalah 51 MB, kira-kira 2 kali lebih kecil dari ukuran patch dari kernel 6.0 dan 5.19. Perubahan tersebut mempengaruhi 13165 file, 716247 baris kode ditambahkan, dan 304560 baris dihapus. Sekitar 45% dari semua perubahan yang diperkenalkan di 6.1 terkait dengan driver perangkat, sekitar 14% perubahan terkait dengan pembaruan kode khusus untuk arsitektur perangkat keras, 14% terkait dengan tumpukan jaringan, 3% terkait dengan sistem file, dan 3% terkait dengan subsistem kernel internal.

Inovasi utama dalam kernel 6.1:

  • Layanan memori dan sistem
    • Menambahkan kemampuan untuk menggunakan Rust sebagai bahasa kedua untuk mengembangkan driver dan modul kernel. Alasan utama mendukung Rust adalah untuk mempermudah penulisan driver perangkat yang aman dan berkualitas tinggi dengan mengurangi kemungkinan membuat kesalahan saat bekerja dengan memori. Dukungan Rust dinonaktifkan secara default dan tidak mengakibatkan Rust disertakan sebagai dependensi build kernel yang diperlukan. Kernel sejauh ini telah mengadopsi versi patch yang minimal dan disederhanakan, yang telah dikurangi dari 40 menjadi 13 ribu baris kode dan hanya menyediakan jumlah minimum yang diperlukan, cukup untuk membangun modul kernel sederhana yang ditulis dalam bahasa Rust. Di masa depan, direncanakan untuk secara bertahap meningkatkan fungsionalitas yang ada dengan mentransfer perubahan lain dari cabang Rust-for-Linux. Secara paralel, proyek sedang dikembangkan untuk menggunakan infrastruktur yang diusulkan untuk mengembangkan driver untuk drive NVMe, protokol jaringan 9p, dan GPU Apple M1 dalam bahasa Rust.
    • Untuk sistem berbasis arsitektur AArch64, RISC-V dan LoongArch dengan EFI, kemampuan untuk memuat image kernel terkompresi secara langsung telah diterapkan. Menambahkan penangan untuk memuat, menjalankan, dan membongkar image kernel, yang dipanggil langsung dari EFI zboot. Penangan untuk menginstal dan menghapus protokol dari database protokol EFI juga telah ditambahkan. Sebelumnya, pembongkaran dilakukan oleh bootloader terpisah, tetapi sekarang hal ini dapat dilakukan oleh pengendali di dalam kernel itu sendiri - image kernel dibentuk sebagai aplikasi EFI.
    • Komposisinya mencakup bagian tambalan dengan penerapan model manajemen memori multi-level, yang memungkinkan Anda memisahkan bank memori dengan karakteristik kinerja berbeda. Misalnya, halaman yang paling sering digunakan mungkin disimpan dalam memori tercepat, sedangkan halaman yang paling jarang digunakan mungkin disimpan dalam memori yang relatif lambat. Kernel 6.1 memperkenalkan mekanisme untuk menentukan lokasi halaman yang sering digunakan dalam memori lambat sehingga dapat dipromosikan ke memori cepat, dan juga memperkenalkan konsep umum tingkatan memori dan kinerja relatifnya.
    • Ini mencakup mekanisme MGLRU (Multi-Generational LRU), yang menggantikan implementasi LRU (Least Newly Used) lama berdasarkan dua antrian dengan struktur multi-tahap yang lebih menentukan halaman memori mana yang benar-benar digunakan dan mana yang dapat didorong keluar ke partisi pertukaran.
    • Menambahkan dukungan untuk struktur data β€œpohon maple” yang diusulkan oleh para insinyur Oracle, yang diposisikan sebagai pengganti yang lebih efektif untuk struktur β€œpohon merah-hitam”. Pohon maple adalah varian B-tree yang mendukung pengindeksan rentang dan dirancang untuk memanfaatkan cache prosesor modern secara efisien. Beberapa subsistem manajemen memori telah ditransfer ke pohon maple, yang berdampak positif pada kinerjanya. Di masa depan, pohon maple dapat digunakan untuk menerapkan penguncian jangkauan.
    • Kemampuan untuk membuat program BPF β€œdestruktif” yang dirancang khusus untuk memulai penghentian darurat melalui panggilan crash_kexec() telah ditambahkan ke subsistem BPF. Program BPF tersebut mungkin diperlukan untuk tujuan debugging guna memulai pembuatan crash dump pada titik waktu tertentu. Untuk mengakses operasi destruktif saat memuat program BPF, Anda harus menentukan flag BPF_F_DESTRUCTIVE, mengaktifkan sysctl kernel.destructive_bpf_enabled, dan memiliki hak CAP_SYS_BOOT.
    • Untuk program BPF, dimungkinkan untuk menghitung elemen cgroup, serta menghitung sumber daya (file, vma, proses, dll.) dari thread atau tugas tertentu. Tipe peta baru telah diterapkan untuk membuat buffer cincin pengguna.
    • Menambahkan panggilan khusus untuk alokasi memori dalam program BPF (pengalokasi memori), yang menyediakan alokasi memori lebih aman dalam konteks BPF dibandingkan kmalloc() standar.
    • Bagian pertama dari perubahan telah terintegrasi, memberikan kemampuan untuk membuat driver untuk perangkat input dengan antarmuka HID (Human Interface Device), diimplementasikan dalam bentuk program BPF.
    • Kernel telah sepenuhnya menghapus kode untuk mendukung format file a.out yang dapat dieksekusi, yang tidak digunakan lagi pada rilis 5.1 dan telah dinonaktifkan untuk arsitektur utama sejak versi 5.18 dan 5.19. Format a.out sudah lama tidak digunakan lagi di sistem Linux, dan pembuatan file a.out tidak didukung oleh alat modern dalam konfigurasi default Linux. Loader untuk file a.out dapat diimplementasikan seluruhnya di ruang pengguna.
    • Untuk sistem berdasarkan arsitektur set instruksi LoongArch yang digunakan dalam prosesor Loongson 3 5000 dan mengimplementasikan RISC ISA baru, mirip dengan MIPS dan RISC-V, dukungan untuk peristiwa pengukuran kinerja (peristiwa perf), kompilasi kexec, kdump dan BPF JIT diimplementasikan .
    • Antarmuka I/O asinkron io_uring menawarkan mode baru, IORING_SETUP_DEFER_TASKRUN, yang memungkinkan pekerjaan terkait buffer ring ditunda sementara hingga permintaan aplikasi dibuat, yang dapat digunakan untuk pekerjaan batch dan menghindari masalah latensi karena preemption. waktu yang tidak tepat.
    • Proses di ruang pengguna diberikan kemampuan untuk memulai konversi serangkaian halaman memori normal menjadi sekumpulan halaman memori besar (Halaman Besar Transparan).
    • Menambahkan implementasi perangkat /dev/userfaultfd, yang memungkinkan akses ke fungsionalitas panggilan sistem userfaultfd() menggunakan hak akses di FS. Fungsionalitas userfaultfd memungkinkan Anda membuat penangan untuk mengakses halaman memori yang tidak terisi (kesalahan halaman) di ruang pengguna.
    • Persyaratan untuk versi utilitas GNU Make telah ditingkatkan - setidaknya versi 3.82 sekarang diperlukan untuk membangun kernel.
  • Subsistem Disk, I/O dan Sistem File
    • Optimalisasi kinerja yang signifikan telah dilakukan pada sistem file Btrfs; antara lain, kinerja panggilan FIEMAP ioctl telah ditingkatkan berkali-kali lipat. Menambahkan dukungan untuk penulisan buffered asinkron untuk aplikasi yang menggunakan io_uring. Menambahkan dukungan untuk file yang dilindungi dengan fs-verity ke operasi "kirim".
    • Sistem file ext4 telah menambahkan optimalisasi kinerja terkait dengan pemeliharaan jurnal dan operasi read-only.
    • Sistem file EROFS (Enhanced Read-Only File System), dirancang untuk digunakan pada partisi yang dapat diakses dalam mode read-only, mengimplementasikan kemampuan untuk berbagi data yang diduplikasi dalam sistem file yang berbeda.
    • Panggilan sistem statx() telah ditambahkan untuk menampilkan informasi tentang apakah I/O langsung dapat diterapkan ke file.
    • Dukungan untuk membuat file sementara dengan flag O_TMPFILE telah ditambahkan ke subsistem FUSE (Sistem File di Ruang Pengguna).
  • Virtualisasi dan Keamanan
    • Implementasi mekanisme perlindungan CFI (Control Flow Integrity) telah diganti, menambahkan pemeriksaan sebelum setiap pemanggilan tidak langsung suatu fungsi untuk mendeteksi beberapa bentuk perilaku tidak terdefinisi yang berpotensi menyebabkan pelanggaran terhadap urutan eksekusi normal (aliran kontrol) sebagai a hasil dari penggunaan eksploitasi yang mengubah pointer ke fungsi yang disimpan dalam memori. Implementasi standar CFI dari proyek LLVM telah digantikan oleh opsi yang juga didasarkan pada penggunaan Clang, tetapi secara khusus diadaptasi untuk melindungi subsistem tingkat rendah dan kernel sistem operasi. Di LLVM, implementasi baru akan ditawarkan dalam rilis Clang 16 dan akan diaktifkan dengan opsi "-fsanitize=kcfi". Perbedaan utama dengan implementasi baru ini adalah bahwa implementasi ini tidak terikat dengan optimasi waktu tautan (LTO) dan tidak mengakibatkan penunjuk fungsi digantikan oleh tautan di tabel lompat.
    • Untuk modul LSM (Modul Keamanan Linux), dimungkinkan untuk membuat penangan yang mencegat operasi untuk membuat namespace.
    • Alat disediakan untuk memverifikasi tanda tangan digital PKCS#7 dalam program BPF.
    • Kemampuan untuk membuka dalam mode non-pemblokiran (O_NONBLOCK), yang secara tidak sengaja dihapus di kernel 5.6, telah dikembalikan ke /dev/random.
    • Pada sistem dengan arsitektur x86, peringatan telah ditambahkan jika halaman memori dipetakan oleh subsistem kernel yang memungkinkan eksekusi dan penulisan secara bersamaan. Di masa depan, kemungkinan untuk sepenuhnya melarang pemetaan memori semacam itu sedang dipertimbangkan.
    • Menambahkan mekanisme debugging KMSAN (Kernel Memory Sanitizer) untuk mendeteksi penggunaan memori yang tidak diinisialisasi di kernel, serta kebocoran memori yang tidak diinisialisasi antara ruang pengguna dan perangkat.
    • Perbaikan telah dilakukan pada generator nomor pseudo-acak CRNG yang aman terhadap kripto yang digunakan dalam panggilan getrandom. Perubahan ini disiapkan oleh Jason A. Donenfeld, penulis VPN WireGuard, dan bertujuan untuk meningkatkan keamanan ekstraksi bilangan bulat pseudo-acak.
  • Subsistem jaringan
    • Tumpukan TCP menyediakan kemampuan (dinonaktifkan secara default) untuk menggunakan tabel hash soket secara terpisah untuk setiap namespace, yang meningkatkan kinerja pada sistem dengan sejumlah besar namespace.
    • Menghapus kode untuk mendukung protokol DECnet lama. Rintisan API ruang pengguna dibiarkan di tempatnya untuk memungkinkan aplikasi yang menggunakan DECnet dikompilasi, namun aplikasi ini tidak akan dapat terhubung ke jaringan.
    • Protokol netlink didokumentasikan.
  • ΠžΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΠ΅
    • Driver amdgpu telah menambahkan dukungan penerusan DSC (Display Stream Compression) untuk kompresi data lossless saat bertukar informasi dengan layar yang mendukung resolusi sangat tinggi. Pekerjaan terus dilakukan untuk memberikan dukungan untuk platform AMD RDNA3 (RX 7000) dan CDNA (Instinct). Menambahkan dukungan untuk komponen IP DCN 3.2, SMU 13.x, NBIO 7.7, GC 11.x, PSP 13.x, SDMA 6.x dan GMC 11.x. Driver amdkfd (untuk GPU AMD diskrit seperti Polaris) menyediakan dukungan untuk GFX 11.0.3.
    • Driver i915 (Intel) menyertakan dukungan untuk GPU Meteor Lake. Meteor Lake dan GPU yang lebih baru mendukung antarmuka DP 2.0 (DisplayPort). Menambahkan pengidentifikasi untuk kartu video berdasarkan mikroarsitektur Alder Lake S.
    • Menambahkan dukungan untuk subsistem audio yang diterapkan di prosesor Apple Silicon, Intel SkyLake, dan Intel KabyLake. Driver audio HDA ​​CS35L41 mendukung mode tidur. Menambahkan dukungan ASoC (ALSA System on Chip) untuk chip audio terintegrasi Apple Silicon, AMD Rembrant DSPs, AMD Pink Sardine 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
    • Dukungan tambahan untuk panel LCD Samsung LTL101AL01, B120XAN01.0, R140NWF5 RH, Densitron DMT028VGHMCMI-1A TFT, AUO B133UAN02.1, IVO M133NW4J-R3, Innolux N120ACA-EA1, AUO B116XAK01.6, BOE NT116WH M-N21 116, INX N2BCA- EA116 , INX N1BCN-EA0800, Teknologi Multi-Inno MI9FT-XNUMX.
    • Menambahkan dukungan untuk pengontrol AHCI SATA yang digunakan di SoC Baikal-T1.
    • Menambahkan dukungan untuk chip Bluetooth MediaTek MT7921, Intel Magnetor (CNVi, Konektivitas Terintegrasi), Realtek RTL8852C, RTW8852AE dan RTL8761BUV (Edimax BT-8500).
    • Driver ath11k untuk modul nirkabel Qualcomm telah menambahkan dukungan untuk pemindaian spektral dalam rentang 160 MHz, menerapkan NAPI multi-thread, dan meningkatkan dukungan untuk chip Wi-Fi Qualcomm WCN6750.
    • Driver tambahan untuk keyboard PinePhone, touchpad InterTouch (ThinkPad P1 G3), X-Box Adaptive Controller, PhoenixRC Flight Controller, VRC-2 Car Controller, DualSense Edge Controller, IBM Operation Panel, remote XBOX One Elite, tablet XP-PEN Deco Pro S dan Intuos Pro Kecil (PTH-460).
    • Menambahkan driver untuk akselerator kriptografi Aspeed HACE (Hash dan Crypto Engine).
    • Menambahkan dukungan untuk pengontrol Intel Meteor Lake Thunderbolt/USB4 terintegrasi.
    • Menambahkan dukungan untuk ponsel pintar Sony Xperia 1 IV, Samsung Galaxy E5, E7 dan Grand Max, Pine64 Pinephone Pro.
    • Dukungan tambahan untuk ARM SoC dan board: 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, Kontron SL/ BL i.MX8MM OSM-S, MT8195 (Acer Tomato), Radxa ROCK 4C+, NanoPi R4S Edisi Perusahaan, JetHome JetHub D1p. Driver yang diperbarui untuk SoC Samsung, Mediatek, Renesas, Tegra, Qualcomm, Broadcom dan NXP.

Pada saat yang sama, Yayasan Perangkat Lunak Bebas Amerika Latin membentuk versi kernel 6.1 yang sepenuhnya gratis - Linux-libre 6.1-gnu, dibersihkan dari elemen firmware dan driver yang berisi komponen atau bagian kode tidak bebas, yang ruang lingkupnya adalah dibatasi oleh pabrikan. Rilis baru ini membersihkan driver rtw8852b baru dan file DTS untuk berbagai SoC Qualcomm dan MediaTek dengan prosesor berdasarkan arsitektur AArch64. Kode pembersihan gumpalan yang diperbarui di driver dan subsistem amdgpu, i915, brcmfmac, r8188eu, rtw8852c, Intel ACPI. Pembersihan driver usang kartu TV tm6000, cpia2 v4l, sp8870, av7110 telah diperbaiki.

Sumber: opennet.ru

Tambah komentar