Setelah dua bulan pengembangan, Linus Torvalds merilis kernel tersebut. Linux 6.12. Di antara perubahan yang paling penting: kemampuan untuk mengaktifkan mode Realtime, sched_ext untuk membuat penjadwal CPU melalui eBPF, keluaran kode QR dalam kondisi darurat, mekanisme TCP Memori Perangkat, mekanisme reservasi sumber daya server SCHED_DEADLINE, peningkatan penjadwal tugas EEVDF, modul IPE untuk menetapkan kebijakan integritas.
Versi baru mencakup 14607 perbaikan dari 2167 pengembang, ukuran patch 37 MB (perubahan mempengaruhi 13087 file, 507913 baris kode ditambahkan, 234083 baris dihapus). Rilis terakhir memiliki 15130 perbaikan dari 2078 pengembang, ukuran patch adalah 85 MB (di kernel 6.10, patch berukuran 41 MB). Sekitar 45% dari semua perubahan yang diperkenalkan pada 6.12 terkait dengan driver perangkat, sekitar 12% perubahan terkait dengan pembaruan kode khusus untuk arsitektur perangkat keras, 13% terkait dengan tumpukan jaringan, 6% terkait dengan sistem file, dan 3% terkait dengan subsistem kernel internal.
Inovasi utama dalam kernel 6.12:
- Layanan memori dan sistem
- Kemampuan untuk membangun kernel dengan opsi PREEMPT_RT tanpa patch tambahan untuk operasi real-time kini tersedia. Fitur kernel terakhir yang hilang yang mencegah mode PREEMPT_RT diaktifkan adalah dukungan untuk output atomik non-blocking melalui fungsi printk, yang juga disertakan dalam kernel. Dukungan PREEMPT_RT tersedia untuk arsitektur x86, x86_64, ARM64, dan RISC-V. Hingga saat ini, implementasi mode PREEMPT_RT disediakan dalam bentuk patch eksternal, yang digunakan oleh beberapa distribusi, seperti RHEL, SUSE, dan Ubuntu, menciptakan edisi Realtime terpisah untuk produk mereka, yang banyak diminati di berbagai bidang seperti sistem keuangan, perangkat pengolahan audio dan video, penerbangan, kedokteran, robotika, telekomunikasi, dan sistem industri, di mana diperlukan kepastian waktu pemrosesan peristiwa yang dapat diprediksi.
- Mekanisme "sched_ext" (SCX) telah ditambahkan, memungkinkan penggunaan eBPF untuk membuat penjadwal CPU yang mencakup hampir semua aspek penjadwalan tugas dan alokasi sumber daya CPU. Penjadwal tersebut dapat dimuat dan dieksekusi secara dinamis di dalam kernel. Linux в mesin virtual eBPF. Mekanisme sched_ext menyederhanakan pembuatan penjadwal khusus tugas, memungkinkan eksperimen dengan berbagai teknik dan strategi penjadwalan, dan memungkinkan pembuatan prototipe kerja yang cepat serta penggantian penjadwal secara langsung di infrastruktur produksi. Misalnya, dengan menggunakan sched_ext, Anda dapat membuat penjadwal yang mempertimbangkan kekhususan aplikasi tertentu dan secara dinamis mengubah strategi penjadwalannya tergantung pada status sistem dan faktor lainnya.
- Komposisinya mencakup sisa tambalan yang diperlukan untuk pengoperasian mekanisme server SCHED_DEADLINE, yang memecahkan masalah kurang dimanfaatkannya sumber daya CPU oleh tugas-tugas biasa ketika CPU dimonopoli oleh tugas-tugas prioritas tinggi (waktu nyata). Untuk mencegah monopoli CPU, kernel sebelumnya menggunakan mekanisme pembatasan waktu nyata, yang mencoba mencadangkan 5% untuk tugas-tugas berprioritas rendah, dan menyisakan 95% waktunya untuk tugas-tugas waktu nyata. Mekanisme ini masih menyisakan banyak hal yang diinginkan, karena tugas-tugas biasa dalam banyak situasi tidak menerima waktu prosesor yang cukup. Server SCHED_DEADLINE menerapkan mekanisme reservasi sumber daya yang lebih efisien.
- Integrasi penjadwal tugas EEVDF (Earliest Eligible Virtual Deadline First) telah selesai, yang menggantikan penjadwal CFS (Completely Fair Scheduler), yang disediakan mulai dari kernel 2.6.23. Penjadwal baru, ketika memilih proses berikutnya untuk mentransfer eksekusi, memperhitungkan proses yang belum menerima sumber daya prosesor yang cukup atau telah menerima waktu prosesor yang terlalu lama. Dalam kasus pertama, pengalihan kendali ke proses dipaksakan, dan dalam kasus kedua, sebaliknya, ditunda. Penjadwal CFS lama menggunakan heuristik dan penyesuaian untuk mengidentifikasi proses yang memerlukan perhatian khusus, sedangkan penjadwal baru melacaknya secara lebih eksplisit dan tidak memerlukan penyesuaian. EEVDF diharapkan dapat mengurangi penundaan tugas yang menyebabkan masalah penjadwalan pada CFS.
- Di kernel pengendali darurat - DRM Panic, yang menggunakan subsistem DRM (Direct Rendering Manager) untuk menampilkan laporan visual bergaya "layar biru kematian", kemampuan untuk menampilkan logo dan kode QR dengan laporan kmsg di layar ketika kondisi darurat terjadi telah ditambahkan. Karena hanya 2953 byte yang masuk ke dalam kode QR, opsi DRM_PANIC_SCREEN_QR_CODE_URL disediakan, di mana laporan kmsg dikompresi menggunakan zlib dan dilampirkan sebagai parameter ke URL, yang memungkinkan sekitar 40 byte ditransfer melalui kode QR V7500. Saat membuat paket dengan kernel, distribusi dapat menetapkan URL dasar untuk URL tersebut, yang memungkinkan mereka menavigasi ke halaman untuk melaporkan masalah. Untuk memilih format kode QR, disediakan pengaturan DRM_PANIC_SCREEN_QR_VERSION.
- Menambahkan dukungan untuk ARM POE (Permission Overlay Extension), yang memungkinkan Anda mengatur hak akses ke area memori. Dengan menggunakan ekstensi ini, pada sistem dengan prosesor ARM64, mekanisme Kunci Perlindungan Memori dapat diimplementasikan, yang digunakan untuk membatasi akses ke halaman memori tanpa mengubah tabel halaman memori.
- Untuk arsitektur Loongarch, ARM64, PowerPC dan s390, implementasi panggilan sistem getrandom() telah dipindahkan, dioptimalkan menggunakan mekanisme vDSO (virtual Dynamic Shared Object), yang memungkinkan untuk memindahkan pengendali panggilan sistem dari kernel ke pengguna. ruang dan hindari peralihan konteks. Pengoptimalan memungkinkan Anda mempercepat pembuatan angka acak hingga 15 kali lipat.
- Kemampuan untuk menggunakan batas waktu absolut, dipicu ketika waktu tertentu tercapai pada jam sistem, telah ditambahkan ke subsistem input/output asinkron io_uring (sebelumnya, hanya batas waktu relatif yang dapat diatur, yang menunjukkan durasi dari awal operasi ).
- Menambahkan file untuk membuat binding untuk pustaka libcpupower menggunakan toolkit SWIG, yang memungkinkan Anda membuat binding dari kode C/C++ untuk berbagai bahasa pemrograman. Binding memungkinkan Anda membuat skrip dalam Python dan bahasa lain, dan menggunakannya untuk memperluas fungsionalitas perpustakaan libcpupower, yang menyediakan API untuk mengelola cpufreq dan driver dari ruang pengguna.
- Utilitas cpuidle menampilkan nilai "residensi" keadaan menganggur, yang digunakan untuk sistem waktu nyata dan memperhitungkan waktu minimum prosesor harus berada dalam keadaan menganggur untuk membenarkan biaya energi untuk transisi masuk dan keluar dari keadaan ini.
- Menambahkan kemampuan untuk menggunakan kompiler Clang untuk membangun pustaka C standar nolibc, yang disertakan dalam kode sumber kernel. Linux dan menyediakan pembungkus di sekitar panggilan sistem dasar. Saat membangun nolibc di Clang, optimasi waktu tautan (LTO) diaktifkan.
- Beberapa antarmuka cgroup1 sudah tidak digunakan lagi, seperti akuntansi TCP, batas lunak versi XNUMX, dan manajemen kehabisan memori. Dukungan untuk fitur-fitur ini tetap penuh untuk saat ini, dan peringatan dibuat untuk mempelajari jumlah pengguna yang terus menggunakan fitur-fitur tersebut.
- Menambahkan kemampuan untuk mengonfigurasi buffer jejak cincin untuk menyimpan akumulasi data setelah reboot, yang memungkinkan Anda tidak kehilangan akumulasi informasi debug jika terjadi kerusakan kernel. Data disimpan dalam memori. Pengaktifan dilakukan melalui parameter baris perintah kernel trace_instance, misalnya, pengaturan “trace_instance=boot_map@0x285400000:12M” akan mencadangkan 12 MB memori pada 0x285400000 untuk buffer “boot_map”, yang dapat diakses melalui file /sys/kernel /tracing/instances/boot_map.
- Terus memigrasikan perubahan dari cabang Rust-for-LinuxTerkait dengan penggunaan Rust sebagai bahasa kedua untuk mengembangkan driver dan modul kernel (dukungan Rust tidak aktif secara default dan tidak menyertakan Rust di antara dependensi build yang dibutuhkan kernel). Menambahkan modul 'list' dan 'rbtree' untuk bekerja dengan daftar berantai ganda dan pohon pencarian merah-hitam. Memperluas kemampuan modul 'init', 'sync', 'types', dan 'error'. Kemampuan untuk menggunakan kode Rust saat membangun kernel dengan perlindungan terhadap serangan Spectre (opsi MITIGATION_{RETHUNK,RETPOLINE,SLS}), menggunakan sistem debugging KASAN, mekanisme perlindungan kCFI (Kernel Control Flow Integrity) dan Shadow Call, dan saat menggunakan plugin GCC tambahan telah ditambahkan. Driver untuk pengontrol Ethernet PHY Applied Micro QT2025, yang ditulis dalam Rust, telah ditambahkan. Situs web terpisah dengan dokumentasi telah disiapkan: rust.docs.kernel.org.
- Utilitas xdrgen telah ditambahkan ke kode sumber kernel untuk mengkonversi spesifikasi XDR (eXternal Data Representation) menjadi fungsi pengkodean dan dekode XDR yang ditulis menggunakan gaya C yang diadopsi oleh kernel. Linux.
- Kernel telah diubah untuk menerapkan mekanisme penyembunyian penunjuk guna mengurangi jumlah panggilan lambat ke penghalang_nospec() dalam fungsi copy_from_user() 64-bit, yang digunakan untuk menyalin data ke dalam kernel dari ruang pengguna. Penggunaan masking mempercepat pengujian “per_thread_ops”, yang mengevaluasi jumlah operasi yang dapat dilakukan dalam satu thread, sebesar 2.6%.
- Driver USB baru telah ditambahkan yang memungkinkan Anda menggunakan protokol 9pfs sebagai transportasi untuk mengirim dan menerima data dari perangkat USB saat memasang sistem file 9p melalui USB (misalnya, “mount -t 9p -o trans=usbg, nama=/jalur/ke/ fs /menit/9"). Contoh penggunaan driver baru adalah menggunakannya sebagai pengganti NFS untuk mengatur boot partisi root saat mengembangkan perangkat tertanam.
- Subsistem Disk, I/O dan Sistem File
- Kemampuan untuk bekerja dengan perangkat penyimpanan yang ukuran bloknya lebih besar dari ukuran halaman memori dalam sistem telah ditambahkan ke subsistem VFS. Dalam sistem file, fitur ini saat ini hanya didukung di XFS.
- Subsistem FUSE, yang memungkinkan Anda membuat implementasi sistem file yang beroperasi di ruang pengguna, telah menambahkan dukungan untuk memetakan pengidentifikasi pengguna dari sistem file yang dipasang, yang digunakan untuk mencocokkan file pengguna tertentu di partisi asing yang dipasang dengan pengguna lain di saat ini sistem.
- Operasi fcntl baru, F_CREATED_QUERY, telah diterapkan, memberikan aplikasi kemampuan untuk menentukan apakah file yang dibuka menggunakan flag O_CREAT telah dibuat atau sudah ada sebelumnya.
- Menambahkan kemampuan untuk menggunakan ID titik pemasangan 64-bit yang unik ke panggilan sistem name_to_handle_at() untuk menghindari kondisi balapan saat menguraikan /proc/mountinfo.
- Ukuran struktur “file” di kernel telah dikurangi dari 232 menjadi 184 byte, yang mengurangi konsumsi memori pada sistem yang aktif bekerja dengan file.
- Pemasangan sistem file ke titik pemasangan dalam hierarki /proc, seperti /proc/PID/fd, dilarang, sehingga menimbulkan potensi masalah keamanan.
- Pseudo-FS NSFS (NameSpace FS), digunakan untuk bekerja dengan namespace, memberikan informasi tambahan tentang namespace titik pemasangan.
- Sistem file EROFS (Extendable Read-Only File System), yang dirancang untuk digunakan pada partisi read-only, sekarang mendukung pemasangan sistem file langsung dari image disk yang disimpan sebagai file.
- Perintah ioctl baru XFS_IOC_START_COMMIT dan XFS_IOC_COMMIT_RANGE telah ditambahkan ke XFS untuk bertukar konten antara dua file.
- NFS telah menambahkan dukungan untuk protokol "LOCALIO", yang memungkinkan Anda untuk menentukan apakah klien dan server NFS pada host yang sama untuk mengaktifkan optimasi yang sesuai.
- Dalam sistem file Btrfs, optimalisasi kinerja telah diusulkan, kode telah difaktorkan ulang, area penguncian selama operasi membaca telah dikurangi, pekerjaan dilanjutkan pada konversi halaman memori untuk menggunakan halaman folio, dan pelepasan memori otomatis telah dilakukan. diimplementasikan untuk struktur btrfs_path.
- Dalam sistem file Ext4, bug yang terkait dengan alokasi blok, manajemen jangkauan, komitmen cepat, dan penjurnalan telah diperbaiki.
- Virtualisasi dan Keamanan
- Menambahkan modul LSM IPE (Penegakan Kebijakan Integritas), yang dikembangkan oleh Microsoft untuk memperluas sistem kontrol akses wajib yang ada. Modul ini memungkinkan Anda menentukan kebijakan integritas umum untuk keseluruhan sistem, yang menunjukkan operasi mana yang diperbolehkan dan bagaimana keaslian komponen harus diverifikasi. Misalnya, dengan menggunakan IPE, Anda dapat menentukan file executable mana yang boleh dijalankan, dengan mempertimbangkan kepatuhannya terhadap versi referensi menggunakan hash kriptografi yang disediakan oleh sistem dm-verity.
- Pada tahap kompilasi kernel, dimungkinkan untuk secara terpisah mengaktifkan metode perlindungan yang tersedia terhadap kerentanan kelas Spectre yang berbeda di CPU. Kconfig menawarkan parameter baru: MITIGATE_MDS (perlindungan terhadap kerentanan Microarchitectural Data Sampling), MITIGATE_TAA (perlindungan terhadap kerentanan TSX Asynchronous Abort), MITIGATE_MMIO_STALE_DATA (perlindungan terhadap kerentanan MMIO Stale Data), MITIGATE_L1TF (perlindungan terhadap kerentanan L1 Terminal Fault), MITIGATE_RETBLEED (perlindungan terhadap kerentanan Retbleed), MITIGATE_SPECTRE_V1, MITIGATE_SPECTRE_V2 (perlindungan terhadap kerentanan Spectre), MITIGATE_SRBDS (perlindungan terhadap kerentanan Pengambilan Sampel Data Buffer Daftar Khusus), MITIGATE_SSB (perlindungan terhadap kerentanan Spekulatif Store Bypass).
- Menambahkan opsi baris perintah proc_mem.force_override dan serangkaian pengaturan perakitan di Kconfig (PROC_MEM_FORCE_ALWAYS, PROC_MEM_FORCE_PTRACE dan PROC_MEM_FORCE_NEVER) untuk mencegah perubahan memori melalui /proc/pid/mem.
- Subsistem LSM (Linux Modul keamanan) telah dialihkan ke penggunaan panggilan statis, yang telah meningkatkan keamanan dan kinerja.
- Kemampuan untuk menggunakan core standar untuk arsitektur ARM64 di lingkungan guest yang berjalan pada Android-sistem dengan hypervisor KVM yang dimodifikasi (KVM terlindungi).
- Modul Landlock LSM, yang memungkinkan Anda membatasi interaksi sekelompok proses dengan lingkungan eksternal, mengimplementasikan konsep “pelingkupan IPC” untuk secara selektif membatasi interaksi dengan lingkungan sandbox menggunakan soket dan sinyal Unix. Misalnya, Anda dapat melarang koneksi menggunakan soket Unix dari lingkungan sandbox ke proses yang tidak menerapkan isolasi, namun mengizinkan koneksi ke proses dalam cakupan yang sama.
- Di hypervisor KVM, sebuah flag telah ditambahkan ke CPUID untuk sistem tamu yang menunjukkan dukungan untuk ekstensi AVX10.1.
- Subsistem jaringan
- Mekanisme TCP Memori Perangkat telah ditambahkan, memungkinkan penggunaan soket jaringan untuk secara langsung mengirim konten memori perangkat periferal melalui jaringan (mode zero-copy) dan secara langsung menempatkan konten paket jaringan di area memori perangkat di sisi penerima. Data yang dikirimkan dalam paket ditransfer dari kartu jaringan ke memori perangkat periferal atau dari memori perangkat ke kartu jaringan secara langsung, melewati CPU, dan header paket berakhir di buffer kernel biasa.
- Kemampuan banyak driver Ethernet dan nirkabel telah diperluas. Misalnya, driver Intel iwlwifi menambahkan dukungan untuk memindahkan operasi RLC/SMPS ke sisi firmware, driver RealTek rtw89 meningkatkan kinerja dan menambahkan dukungan untuk chip RTL8852BT/8852BE-VT (WiFi 6), driver microchip Ethernet menambahkan dukungan untuk IEEE 802.3 spesifikasi bw (100BASE) -T1) dan IEEE 802.3bp, implementasi Microsoft vNIC dan IBM veth virtual Ethernet telah ditingkatkan. Menambahkan driver baru untuk chip Realtek RTL9054, RTL9068, RTL9072, RTL9075, RTL9068, RTL9071 dan Microchip LAN8650/1 10BASE-T1S MAC-PHY Ethernet.
- Dalam MPTCP (MultiPath TCP), perpanjangan dari protokol TCP untuk mengatur pengiriman paket TCP secara bersamaan sepanjang beberapa rute melalui antarmuka jaringan yang berbeda, ukuran bobot yang digunakan dalam perutean ditingkatkan dari 8 menjadi 16 bit. Deteksi lalu lintas yang hilang (lubang hitam) telah diterapkan dan penangguhan upaya untuk membangun koneksi dengan sistem selama beberapa waktu menyebabkan hilangnya lalu lintas.
- Untuk IPv6, dukungan diterapkan untuk tanda “p” di PIO (Opsi Informasi Awalan), yang digunakan dalam iklan RA (Iklan Router IPv6) untuk memilih model penerapan klien melalui DHCPv6-PD (Delegasi Awalan DHCPv6, RFC9663) alih-alih menetapkan alamat individual berdasarkan awalan menggunakan SLAAC (Stateless Address Autoconfiguration). IPv6 IOAM6 menambahkan dukungan untuk mode enkapsulasi tunsrc baru yang memungkinkan kinerja lebih baik.
- Peningkatan kinerja untuk memproses paket kontrol IPsec.
- Peningkatan kinerja pembilasan kumpulan aturan nftables yang besar. nfnetlink_queue telah meningkatkan dukungan untuk protokol SCTP.
- API ethtool telah menambahkan dukungan untuk mengikat beberapa kartu jaringan ke satu antarmuka jaringan.
- Оборудование
- Pada driver AMDGPU, pekerjaan terus dilakukan untuk mengimplementasikan dukungan untuk GPU AMD RDNA4 (“GFX12”). Menambahkan kemampuan untuk mereset antrian tugas individual tanpa mereset seluruh GPU.
- Pekerjaan dilanjutkan pada driver Xe drm (Direct Rendering Manager) untuk GPU berdasarkan arsitektur Intel Xe, yang digunakan dalam kartu video keluarga Intel Arc dan grafis terintegrasi, dimulai dengan prosesor Tiger Lake. Versi baru ini mencakup dukungan untuk GPU berdasarkan mikroarsitektur Battlemage dan Lunar Lake. Dukungan untuk pengubah Xe2 CCS (Color Control Surface) telah diperkenalkan untuk mengontrol parameter GPU terintegrasi dan diskrit.
- Driver i915 mengimplementasikan kemampuan untuk mengeluarkan informasi tentang kecepatan kipas melalui antarmuka HWMON atau sysfs (atribut “fan1_input”). Parameter "i915.modeset" tidak digunakan lagi; parameter "i915.nomodeset" harus digunakan sebagai pengganti "i0.modeset=915".
- Menambahkan dukungan untuk GPU A615, A306 dan A621 ke driver msm DRM (Qualcomm Adreno GPU).
- Struktur internal pengemudi Nouveau telah dikerjakan ulang dan dibersihkan.
- Driver intel_pstate, yang mengontrol parameter konsumsi daya (P-state) pada sistem dengan prosesor Intel, telah menambahkan dukungan untuk sistem hybrid dengan CPU asimetris (karakteristik berbeda), serta dukungan untuk manajemen daya prosesor berdasarkan Granite Rapids dan Sierra Forest mikroarsitektur. Menambahkan dukungan untuk CPU Xeon Granite Rapids ke driver intel_idle. Driver intel_rapl memberikan pengenalan proses keluarga AMD 1Ah dan prosesor Intel ArrowLake-U.
- Penyertaan lanjutan perubahan untuk mendukung ARM SoC Snapdragon X Elite, yang menggunakan CPU Oryon 12-core milik Qualcomm dan GPU Qualcomm Adreno. Chip ini ditujukan untuk digunakan di laptop dan PC, dan berada di depan chip Apple M3 dan Intel Core Ultra 155H dalam banyak pengujian kinerja.
- Dukungan tambahan untuk papan ARM, SoC, dan perangkat: Broadcom bcm2712 (Raspberry Pi 5), Renesas R9A09G057 (RZ/V2H), Qualcomm Snapdragon 414 (MSM8929), Lenovo ThinkPad T14s Gen 6, Lenovo A6000/A6010, Surface Laptop 7, Anbernic RG35XXSP , Firefly Core-PX30-JD4, Lunzn Fastrhino R68S, Aspeed Riser, AGX Orin, Rockchip Qnap-TS433, Huashan Pi, Meta Catalina, BeagleY-AI, NanoPi R2S Plus, ExynosAuto v920, SOPHGO SG2002, Qualcomm IPQ5332, LG G4 (h815 ), GenBook Pi CM5 Keren, Anbernic RG35XXSP, GameForce Ace, IBM P11, Kontron i.MX93 OSM-S, NanoPC-T6
- Menambahkan dukungan untuk panel layar Anbernic RG28XX, On Tat Industrial Company KD50G21-40NT-A1, Innolux G070ACE-LH3, Melfas lmfbx101117480, Densitron DMT028VGHMCMI-1D, Microchip AC40T08A, AOU B116XTN02.3, AUO B116XAN06.1, B116 04.1XAT101, BOE TV2WUM -LL140, BOE NV41WUM-N133, BOE NV63WUM-N116, BOE NV4WHM-A140D, BOE NE6WUM-N116G, CMN N2BCA-EA116, CMN N2BCP-EA601, CSW MNB1LS4-88577, Starry erXNUMX.
- Subsistem audio telah menambahkan dukungan untuk chip dan codec RME Digiface USB, AMD ACP 7.1, Mediatek MT6367, MT8365, Realtek RTL1320, C-Media CM9825. Driver suara lama untuk Intel ASoC telah dinyatakan usang, dan disarankan untuk menggunakan driver AVS sebagai gantinya. Banyak perbaikan telah dilakukan pada driver SoundWire.
Sumber: opennet.ru
