Rilis kernel Linux 5.12

Setelah dua bulan pengembangan, Linus Torvalds meluncurkan rilis kernel Linux 5.12. Di antara perubahan yang paling menonjol: dukungan untuk perangkat blok yang dikategorikan di Btrfs, kemampuan untuk memetakan ID pengguna untuk sistem file, membersihkan arsitektur ARM lama, mode penulisan β€œbersemangat” di NFS, mekanisme LOOKUP_CACHED untuk menentukan jalur file dari cache , dukungan untuk instruksi atom di BPF, sistem debugging KFENCE untuk mengidentifikasi kesalahan saat bekerja dengan memori, mode polling NAPI berjalan di thread kernel terpisah di tumpukan jaringan, hypervisor ACRN, kemampuan untuk mengubah model preempt dengan cepat dalam tugas penjadwal dan dukungan untuk pengoptimalan LTO saat membangun di Dentang.

Versi baru mencakup 14170 (dalam rilis sebelumnya 15480) perbaikan dari pengembang 1946 (1991), ukuran patch adalah 38 MB (perubahan memengaruhi 12102 (12090) file, 538599 (868025) baris kode ditambahkan, 333377 (261456) baris telah dihapus). Sekitar 43% dari semua perubahan yang diperkenalkan di 5.12 terkait dengan driver perangkat, sekitar 17% perubahan terkait dengan pembaruan kode khusus untuk arsitektur perangkat keras, 12% terkait dengan tumpukan jaringan, 5% terkait dengan sistem file, dan 4% terkait dengan subsistem kernel internal.

Inovasi utama:

  • Subsistem Disk, I/O dan Sistem File
    • Kemampuan untuk memetakan ID pengguna untuk sistem file yang dipasang telah diterapkan (Anda dapat memetakan file dari satu pengguna di partisi asing yang dipasang dengan pengguna lain di sistem saat ini). Pemetaan didukung untuk sistem file FAT, ext4 dan XFS. Fungsionalitas yang diusulkan membuatnya lebih mudah untuk berbagi file antara pengguna yang berbeda dan pada komputer yang berbeda, termasuk pemetaan akan digunakan dalam mekanisme direktori home portabel systemd-homed, memungkinkan pengguna untuk memindahkan direktori home mereka ke media eksternal dan menggunakannya pada komputer yang berbeda, pemetaan ID pengguna yang tidak cocok. Aplikasi lain yang berguna adalah mengatur penyediaan akses bersama ke file dari host eksternal, tanpa benar-benar mengubah data tentang pemilik file di sistem file.
    • Patch LOOKUP_CACHED telah diadopsi ke dalam kernel, memungkinkan operasi untuk menentukan jalur file dari ruang pengguna tanpa memblokir, hanya berdasarkan data yang tersedia di cache. Mode LOOKUP_CACHED diaktifkan dalam panggilan openat2() dengan meneruskan tanda RESOLVE_CACHED, di mana data disajikan hanya dari cache, dan jika penentuan jalur memerlukan akses ke drive, kesalahan EAGAIN akan dikembalikan.
    • Sistem file Btrfs telah menambahkan dukungan awal untuk perangkat blok yang dikategorikan (perangkat pada hard disk magnetik atau SSD NVMe, ruang penyimpanan yang dibagi menjadi zona-zona yang membentuk kelompok blok atau sektor, yang hanya diperbolehkan penambahan data secara berurutan, memperbarui seluruh kelompok blok). Dalam mode read-only, dukungan untuk blok dengan metadata dan data yang lebih kecil dari satu halaman (subhalaman) diterapkan.
    • Sistem file F2FS telah menambahkan kemampuan untuk memilih algoritma dan tingkat kompresi. Menambahkan dukungan untuk kompresi tingkat tinggi untuk algoritma LZ4. Menerapkan opsi pemasangan checkpoint_merge.
    • Perintah ioctl baru FS_IOC_READ_VERITY_METADATA telah diterapkan untuk membaca metadata dari file yang dilindungi dengan fs-verity.
    • Klien NFS menerapkan mode tulis β€œbersemangat” (writes=eager), ketika diaktifkan, operasi penulisan ke file segera ditransfer ke server, melewati cache halaman. Mode ini memungkinkan Anda mengurangi konsumsi memori, memberikan penerimaan informasi instan tentang akhir ruang kosong di sistem file, dan dalam beberapa situasi memungkinkan untuk mencapai peningkatan kinerja.
    • Opsi pemasangan baru telah ditambahkan ke CIFS (SMB): acregmax untuk mengontrol cache file dan acdirmax untuk mengontrol cache metadata direktori.
    • Di XFS, mode pemeriksaan kuota multi-thread telah diaktifkan, eksekusi fsync telah dipercepat, dan kode growthfs telah disiapkan untuk mengimplementasikan fungsi pengurangan ukuran sistem file.
  • Layanan memori dan sistem
    • Subsistem DTMP (Dynamic Thermal Power Management) telah ditambahkan, memungkinkan Anda mengatur konsumsi daya berbagai perangkat secara dinamis berdasarkan batas suhu umum yang ditetapkan.
    • Kemampuan untuk membangun kernel menggunakan kompiler Clang dengan penyertaan optimasi pada tahap penautan (LTO, Link Time Optimization) telah diterapkan. Pengoptimalan LTO berbeda dengan mempertimbangkan status semua file yang terlibat dalam proses pembuatan, sedangkan mode pengoptimalan tradisional mengoptimalkan setiap file secara terpisah dan tidak memperhitungkan kondisi untuk memanggil fungsi yang ditentukan dalam file lain. Misalnya, dengan LTO, penerapan inline dimungkinkan untuk fungsi dari file lain, kode yang tidak digunakan tidak disertakan dalam file yang dapat dieksekusi, pemeriksaan tipe dan optimasi umum dilakukan di tingkat proyek secara keseluruhan. Dukungan LTO saat ini terbatas pada arsitektur x86 dan ARM64.
    • Dimungkinkan untuk memilih mode preemption (PREMPT) di penjadwal tugas pada tahap boot (preempt=none/sukarela/penuh) atau saat bekerja melalui debugfs (/debug/sched_debug), jika pengaturan PREEMPT_DYNAMIC ditentukan saat membangun kernel. Sebelumnya, mode ekstrusi hanya dapat diatur pada tingkat parameter perakitan. Perubahan ini memungkinkan distribusi untuk mengirimkan kernel dengan mode PREEMPT diaktifkan, yang memberikan latensi minimal untuk desktop dengan biaya penalti throughput yang kecil, dan jika perlu kembali ke PREEMPT_VOLUNTARY (mode perantara untuk desktop) atau PREEMPT_NONE (memberikan throughput maksimum untuk server) .
    • Dukungan untuk operasi atom BPF_ADD, BPF_AND, BPF_OR, BPF_XOR, BPF_XCHG dan BPF_CMPXCHG telah ditambahkan ke subsistem BPF.
    • Program BPF diberikan kemampuan untuk mengakses data pada stack menggunakan pointer dengan variabel offset. Misalnya, jika sebelumnya Anda hanya bisa menggunakan indeks elemen konstan untuk mengakses array di tumpukan, sekarang Anda bisa menggunakan indeks yang berubah. Kontrol akses hanya dalam batas-batas yang ada dilakukan oleh verifikator BPF. Fitur ini hanya tersedia untuk program yang memiliki hak istimewa karena kekhawatiran tentang eksploitasi kerentanan eksekusi kode spekulatif.
    • Menambahkan kemampuan untuk melampirkan program BPF ke titik jejak kosong yang tidak terkait dengan peristiwa jejak yang terlihat di ruang pengguna (pelestarian ABI tidak dijamin untuk titik jejak tersebut).
    • Dukungan untuk bus CXL 2.0 (Compute Express Link) telah diterapkan, yang digunakan untuk mengatur interaksi berkecepatan tinggi antara CPU dan perangkat memori (memungkinkan Anda menggunakan perangkat memori eksternal sebagai bagian dari RAM atau memori permanen, seolah-olah memori ini terhubung melalui pengontrol memori standar di CPU).
    • Menambahkan driver nvmem untuk mengambil data dari area memori cadangan firmware yang tidak dapat diakses langsung oleh Linux (misalnya, memori EEPROM yang secara fisik hanya dapat diakses oleh firmware, atau data yang hanya dapat diakses selama fase boot awal).
    • Dukungan untuk sistem pembuatan profil β€œoprofile” telah dihapus, yang tidak digunakan secara luas dan telah digantikan oleh mekanisme kinerja yang lebih modern.
    • Antarmuka I/O asinkron io_uring menyediakan integrasi dengan cgroup yang mengontrol penggunaan memori.
    • Arsitektur RISC-V mendukung sistem NUMA, serta mekanisme kprobe dan uprobe.
    • Menambahkan kemampuan untuk menggunakan panggilan sistem kcmp() terlepas dari fungsionalitas snapshot status proses (pos pemeriksaan/pemulihan).
    • Makro EXPORT_UNUSED_SYMBOL() dan EXPORT_SYMBOL_GPL_FUTURE(), yang sudah bertahun-tahun tidak digunakan dalam praktik, telah dihapus.
  • Virtualisasi dan Keamanan
    • Menambahkan mekanisme perlindungan KFence (Kernel Electric Fence), yang menangkap kesalahan saat bekerja dengan memori, seperti buffer overruns dan akses setelah mengosongkan memori. Berbeda dengan mekanisme debugging KASAN, subsistem KFence dicirikan oleh kecepatan operasi yang tinggi dan overhead yang rendah, yang memungkinkan Anda menangkap kesalahan memori yang hanya muncul pada sistem yang sedang berjalan atau selama operasi jangka panjang.
    • Menambahkan dukungan untuk hypervisor ACRN, yang ditulis dengan memperhatikan kesiapan untuk tugas-tugas real-time dan kesesuaian untuk digunakan dalam sistem yang sangat penting. ACRN memberikan overhead minimal, menjamin latensi rendah, dan respons yang memadai saat berinteraksi dengan peralatan. Mendukung virtualisasi sumber daya CPU, I/O, subsistem jaringan, operasi grafis dan suara. ACRN dapat digunakan untuk menjalankan beberapa mesin virtual terisolasi di unit kontrol elektronik, panel instrumen, sistem informasi otomotif, perangkat IoT konsumen, dan teknologi tertanam lainnya. ACRN mendukung dua jenis sistem tamu - VM Layanan dengan hak istimewa, yang digunakan untuk mengelola sumber daya sistem (CPU, memori, I/O, dll.), dan VM Pengguna khusus, yang dapat menjalankan distribusi Linux, Android, dan Windows.
    • Dalam subsistem IMA (Integrity Measurement Architecture), yang memelihara database hash untuk memeriksa integritas file dan metadata terkait, kini dimungkinkan untuk memeriksa integritas data kernel itu sendiri, misalnya, untuk melacak perubahan dalam aturan SELinux .
    • Kemampuan untuk mencegat hypercall Xen dan meneruskannya ke emulator yang berjalan di ruang pengguna telah ditambahkan ke hypervisor KVM.
    • Menambahkan kemampuan untuk menggunakan Linux sebagai lingkungan root untuk hypervisor Hyper-V. Lingkungan root memiliki akses langsung ke perangkat keras dan digunakan untuk menjalankan sistem tamu (analog dengan Dom0 di Xen). Hingga saat ini, Hyper-V (Microsoft Hypervisor) hanya mendukung Linux di lingkungan tamu, namun hypervisor itu sendiri dikendalikan dari lingkungan berbasis Windows.
    • Menambahkan dukungan untuk enkripsi inline untuk kartu eMMC, memungkinkan Anda menggunakan mekanisme enkripsi yang terpasang pada pengontrol drive yang mengenkripsi dan mendekripsi I/O secara transparan.
    • Dukungan untuk hash RIPE-MD 128/256/320 dan Tiger 128/160/192, yang tidak digunakan di inti, serta stream cipher Salsa20, yang digantikan oleh algoritma ChaCha20, telah dihapus dari subsistem kripto. Algoritma blake2 telah diperbarui untuk mengimplementasikan blake2s.
  • Subsistem jaringan
    • Menambahkan kemampuan untuk memindahkan pengendali polling NAPI untuk perangkat jaringan ke thread kernel terpisah, yang memungkinkan peningkatan kinerja untuk beberapa jenis beban kerja. Sebelumnya, polling dilakukan dalam konteks softirq dan tidak tercakup oleh penjadwal tugas, sehingga sulit untuk melakukan pengoptimalan menyeluruh untuk mencapai kinerja maksimal. Eksekusi dalam thread kernel terpisah memungkinkan pengendali polling diamati dari ruang pengguna, dilampirkan ke masing-masing inti CPU, dan diperhitungkan saat menjadwalkan peralihan tugas. Untuk mengaktifkan mode baru di sysfs, parameter /sys/class/net//threaded diusulkan.
    • Integrasi ke dalam inti MPTCP (MultiPath TCP), perpanjangan dari protokol TCP untuk mengatur pengoperasian koneksi TCP dengan pengiriman paket secara bersamaan sepanjang beberapa rute melalui antarmuka jaringan berbeda yang terkait dengan alamat IP berbeda. Rilis baru menambahkan kemampuan untuk menetapkan prioritas ke thread tertentu, yang memungkinkan, misalnya, untuk mengatur pekerjaan thread cadangan yang hanya aktif jika ada masalah dengan thread utama.
    • IGMPv3 menambahkan dukungan untuk mekanisme EHT (Explicit Host Tracking).
    • Mesin pemfilteran paket Netfilter memberikan kemampuan untuk memiliki tabel tertentu untuk mendapatkan kontrol eksklusif (misalnya, proses firewall latar belakang dapat mengambil alih kepemilikan tabel tertentu, mencegah orang lain mengganggu tabel tersebut).
  • ΠžΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΠ΅
    • Kami membersihkan platform ARM yang usang dan tidak dirawat. Kode untuk platform efm32, picoxcell, prima2, tango, u300, zx dan c6x, serta driver terkaitnya, telah dihapus.
    • Driver amdgpu menyediakan kemampuan untuk melakukan overclock (OverDrive) kartu berdasarkan GPU Sienna Cichlid (Navi 22, Radeon RX 6xxx). Menambahkan dukungan untuk format piksel FP16 untuk DCE (mesin pengontrol tampilan) dari generasi ke-8 hingga ke-11. Untuk GPU Navy Flounder (Navi 21) dan APU Van Gogh, kemampuan reset GPU telah diterapkan.
    • Driver i915 untuk kartu grafis Intel mengimplementasikan parameter i915.mitigations untuk menonaktifkan mekanisme isolasi dan perlindungan demi peningkatan kinerja. Untuk chip mulai dari Tiger Lake, dukungan untuk mekanisme VRR (Variable Rate Refresh) disertakan, yang memungkinkan Anda mengubah kecepatan refresh monitor secara adaptif untuk memastikan kelancaran dan tidak ada celah selama permainan. Dukungan untuk teknologi Intel Clear Color disertakan untuk meningkatkan akurasi warna. Menambahkan dukungan untuk DP-HDMI 2.1. Kemampuan untuk mengontrol lampu latar panel eDP telah diterapkan. Untuk GPU Gen9 dengan dukungan LSPCON (Level Shifter dan Protocol Converter), dukungan HDR diaktifkan.
    • Driver nouveau menambahkan dukungan awal untuk GPU NVIDIA berdasarkan arsitektur GA100 (Ampere).
    • Driver msm menambahkan dukungan untuk GPU Adreno 508, 509 dan 512 yang digunakan dalam chip SDM (Snapdragon) 630, 636 dan 660.
    • Menambahkan dukungan untuk kartu suara Sound BlasterX AE-5 Plus, Lexicon I-ONIX FW810s, dan Pioneer DJM-750. Menambahkan dukungan untuk subsistem audio Intel Alder Lake PCH-P. Dukungan untuk simulasi perangkat lunak untuk menghubungkan dan melepaskan konektor audio telah diterapkan untuk penangan debugging di ruang pengguna.
    • Menambahkan dukungan untuk konsol game Nintendo 64 yang diproduksi dari tahun 1996 hingga 2003 (percobaan sebelumnya untuk mem-porting Linux ke Nintendo 64 tidak selesai dan diklasifikasikan sebagai Vaporware). Motivasi pembuatan port baru untuk platform usang yang belum dirilis selama hampir dua puluh tahun adalah keinginan untuk merangsang pengembangan emulator dan menyederhanakan porting game.
    • Menambahkan driver untuk pengontrol game Sony PlayStation 5 DualSense.
    • Menambahkan dukungan untuk papan, perangkat, dan platform ARM: PineTab, Snapdragon 888 / SM8350, Snapdragon MTP, Two Beacon EmbeddedWorks, Intel eASIC N5X, Netgear R8000P, Plymovent M2M, Beacon i.MX8M Nano, NanoPi M4B.
    • Menambahkan dukungan untuk smartphone Purism Librem5 Evergreen, Xperia Z3+/Z4/Z5, ASUS Zenfone 2 Laser, BQ Aquaris X5, OnePlus6, OnePlus6T, Samsung GT-I9070.
    • Menambahkan driver bcm-vk untuk papan akselerator Broadcom VK (misalnya, papan Valkyrie dan Viper PCIe), yang dapat digunakan untuk memindahkan operasi pemrosesan audio, video dan gambar, serta operasi terkait enkripsi, ke perangkat terpisah.
    • Menambahkan dukungan untuk platform Lenovo IdeaPad dengan kemampuan untuk mengontrol pengisian daya konstan dan lampu latar keyboard. Juga disediakan dukungan untuk profil ACPI platform ThinkPad dengan kemampuan untuk mengontrol mode konsumsi daya. Menambahkan driver untuk subsistem HID Lenovo ThinkPad X1 Tablet Gen 2.
    • Menambahkan driver ov5647 dengan dukungan modul kamera untuk Raspberry Pi.
    • Menambahkan dukungan untuk papan RISC-V SoC FU740 dan HiFive Unleashed. Driver baru untuk chip Kendryte K210 juga telah ditambahkan.

Sumber: opennet.ru

Tambah komentar