Rilis kernel Linux 5.9

Setelah dua bulan pengembangan, Linus Torvalds diperkenalkan rilis kernel Linux 5.9. Di antara perubahan yang paling menonjol: membatasi impor simbol dari modul berpemilik ke modul GPL, mempercepat operasi peralihan konteks menggunakan instruksi prosesor FSGSBASE, dukungan untuk kompresi gambar kernel menggunakan Zstd, pengerjaan ulang prioritas thread di kernel, dukungan untuk PRP (Protokol Redundansi Paralel), penjadwalan bandwidth-aware dalam penjadwal tenggat waktu, pengepakan halaman memori preemptif, tanda kemampuan CAP_CHECKPOINT_RESTOR, panggilan sistem close_range(), peningkatan kinerja dm-crypt, penghapusan kode untuk tamu Xen PV 32-bit, memori pelat baru mekanisme manajemen, opsi "penyelamatan" di Btrfs, dukungan untuk enkripsi inline di ext4 dan F2FS.

Versi baru mencakup 16074 perbaikan dari pengembang tahun 2011,
ukuran tambalan - 62 MB (perubahan memengaruhi 14548 file, 782155 baris kode ditambahkan, 314792 baris dihapus). Sekitar 45% dari semuanya disajikan di 5.9
perubahan terkait dengan driver perangkat, sekitar 15% perubahannya terkait
sikap terhadap pembaruan kode khusus untuk arsitektur perangkat keras, 13%
terkait dengan tumpukan jaringan, 3% ke sistem file dan 3% ke internal
subsistem kernel.

Utama inovasi:

  • Layanan memori dan sistem
    • Diperketat perlindungan terhadap penggunaan lapisan GPL untuk menghubungkan driver berpemilik dengan komponen kernel yang diekspor hanya untuk modul di bawah lisensi GPL. Bendera TAINT_PROPRIETARY_MODULE sekarang diwarisi di semua modul yang mengimpor simbol dari modul dengan bendera ini. Jika modul GPL mencoba mengimpor simbol dari modul non-GPL, maka modul GPL tersebut akan mewarisi label TAINT_PROPRIETARY_MODULE dan tidak akan dapat mengakses komponen kernel yang hanya tersedia untuk modul berlisensi GPL, meskipun modul tersebut sebelumnya telah mengimpor simbol dari kategori "gplonly". Kunci terbalik (hanya mengekspor EXPORT_SYMBOL_GPL dalam modul yang mengimpor EXPORT_SYMBOL_GPL), yang dapat mengganggu kerja driver berpemilik, tidak diterapkan (hanya bendera modul berpemilik yang diwarisi, tetapi tidak pengikatan GPL).
    • Ditambahkan dukungan mesin kcompactd untuk halaman memori pra-pengemasan di latar belakang untuk menambah jumlah halaman memori besar yang tersedia untuk kernel. Menurut perkiraan awal, pengemasan latar belakang, dengan biaya overhead minimal, dapat mengurangi penundaan saat mengalokasikan halaman memori besar (halaman besar) sebanyak 70-80 kali dibandingkan dengan mekanisme pengemasan yang digunakan sebelumnya, diluncurkan ketika diperlukan (sesuai permintaan) ). Untuk menetapkan batasan fragmentasi eksternal yang akan disediakan kcompactd, sysctl vm.compaction_proactiveness telah ditambahkan.
    • Ditambahkan dukungan untuk kompresi gambar kernel menggunakan algoritma zstandard (zstd).
    • Dukungan untuk instruksi prosesor telah diterapkan untuk sistem x86 FSGSBASE, yang memungkinkan Anda membaca dan mengubah konten register FS/GS dari ruang pengguna. Di kernel, FSGSBASE digunakan untuk mempercepat operasi peralihan konteks dengan menghilangkan operasi penulisan MSR yang tidak diperlukan untuk GSBASE, dan di ruang pengguna, FSGSBASE menghindari panggilan sistem yang tidak perlu untuk mengubah FS/GS.
    • Ditambahkan parameter "allow_writes" memungkinkan Anda untuk melarang perubahan pada register MSR prosesor dari ruang pengguna dan membatasi akses ke konten register ini untuk membaca operasi, karena mengubah MSR dapat menyebabkan masalah. Secara default, penulisan belum dinonaktifkan, dan perubahan pada MSR tercermin dalam log, namun di masa mendatang direncanakan untuk mengalihkan akses default ke mode baca-saja.
    • Ke antarmuka I/O asinkron io_uring Menambahkan dukungan penuh untuk operasi baca buffered asinkron yang tidak memerlukan thread kernel. Dukungan rekaman diharapkan dalam rilis mendatang.
    • Dalam batas waktu penjadwal I/O diimplementasikan perencanaan berdasarkan kapasitas, memungkinkan membuat keputusan yang tepat pada sistem asimetris seperti sistem berbasis ARM Dynamiq dan big.LITTLE, yang menggabungkan inti CPU hemat energi yang kuat dan kurang efisien dalam satu chip. Secara khusus, mode baru ini memungkinkan Anda menghindari ketidaksesuaian penjadwalan ketika inti CPU yang lambat tidak memiliki sumber daya yang memadai untuk menyelesaikan tugas tepat waktu.
    • Model konsumsi energi di kernel (kerangka Model Energi) sekarang menggambarkan tidak hanya perilaku konsumsi daya CPU, tetapi juga mencakup perangkat periferal.
    • Panggilan sistem close_range() telah diterapkan untuk memungkinkan proses menutup seluruh rentang deskriptor file yang terbuka sekaligus.
    • Dari implementasi konsol teks dan driver fbcon kode dihapus, yang memberikan kemampuan untuk menggulir kembali teks secara terprogram (CONFIG_VGACON_SOFT_SCROLLBACK) lebih dari jumlah memori video mode teks VGA.
    • Didesain ulang algoritma untuk menetapkan prioritas ke thread dalam kernel. Opsi baru ini memberikan konsistensi yang lebih baik di seluruh subsistem kernel ketika menetapkan prioritas pada tugas-tugas real-time.
    • Menambahkan sysctl sched_uclamp_util_min_rt_default untuk mengontrol pengaturan peningkatan CPU untuk tugas-tugas real-time (misalnya, Anda dapat mengubah perilaku tugas-tugas real-time dengan cepat untuk menghemat daya setelah beralih ke daya baterai atau pada sistem seluler).
    • Persiapan telah dilakukan untuk mengimplementasikan dukungan teknologi Halaman Besar Transparan di cache halaman.
    • Mesin fanotify mengimplementasikan flag baru FAN_REPORT_NAME dan FAN_REPORT_DIR_FID untuk melaporkan nama induk dan informasi FID unik ketika peristiwa pembuatan, penghapusan, atau perpindahan terjadi untuk item direktori dan objek non-direktori.
    • Untuk cgroup diimplementasikan pengontrol memori lempengan baru, yang terkenal karena memindahkan akuntansi lempengan dari tingkat halaman memori ke tingkat objek kernel, yang memungkinkan untuk berbagi halaman lempengan di cgroup yang berbeda, daripada mengalokasikan cache lempengan terpisah untuk setiap cgroup. Pendekatan yang diusulkan memungkinkan untuk meningkatkan efisiensi penggunaan lempengan, mengurangi ukuran memori yang digunakan untuk lempengan sebesar 30-45%, secara signifikan mengurangi konsumsi memori keseluruhan kernel dan mengurangi fragmentasi memori.
    • Dalam subsistem suara ALSA ΠΈ tumpukan USB, Menurut baru-baru ini diadopsi rekomendasi mengenai penggunaan terminologi inklusif di kernel Linux; istilah-istilah yang salah secara politis dibersihkan. Kode telah dibersihkan dari kata "slave", "master", "blacklist" dan "whitelist".
  • Virtualisasi dan Keamanan
    • Saat membangun kernel menggunakan kompiler Dentang muncul kemampuan untuk mengonfigurasi (CONFIG_INIT_STACK_ALL_ZERO) inisialisasi otomatis ke nol dari semua variabel yang disimpan di tumpukan (saat membangun, tentukan β€œ-ftrivial-auto-var-init=zero”).
    • Dalam subsistem seccomp, saat menggunakan mode kontrol proses di ruang pengguna, ditambahkan kesempatan substitusi deskriptor file ke dalam proses yang dipantau untuk sepenuhnya meniru panggilan sistem yang mengarah pada pembuatan deskriptor file. Fungsionalitas ini dibutuhkan dalam sistem kontainer terisolasi dan implementasi sandbox untuk Chrome.
    • Untuk arsitektur xtensa dan csky, dukungan telah ditambahkan untuk membatasi panggilan sistem menggunakan subsistem seccomp. Untuk xtensa, dukungan untuk mekanisme audit juga diterapkan.
    • Ditambahkan tanda kemampuan baru CAP_CHECKPOINT_RESTORE, yang memungkinkan Anda memberikan akses ke kemampuan yang terkait dengan pembekuan dan pemulihan status proses tanpa mentransfer hak istimewa tambahan.
    • GCC 11 menyediakan semua fitur yang Anda perlukan
      alat debugging KCSAN (Kernel Concurrency Sanitizer), dirancang untuk mendeteksi kondisi balapan di dalam kernel secara dinamis. Dengan demikian, KCSAN sekarang dapat digunakan dengan kernel yang dibangun di GCC.

    • Untuk AMD Zen dan model CPU yang lebih baru ditambahkan dukungan teknologi P2PDMA, yang memungkinkan Anda menggunakan DMA untuk transfer data langsung antara memori dua perangkat yang terhubung ke bus PCI.
    • Mode telah ditambahkan ke dm-crypt yang memungkinkan Anda mengurangi latensi dengan melakukan pemrosesan data kriptografi tanpa menggunakan antrian kerja. Mode ini juga diperlukan untuk pengoperasian yang benar dikategorikan perangkat blok (perangkat dengan area yang harus ditulis secara berurutan, memperbarui seluruh kelompok blok). Pekerjaan telah dilakukan untuk meningkatkan throughput dan mengurangi latensi di dm-crypt.
    • Menghapus kode untuk mendukung tamu 32-bit yang berjalan dalam mode paravirtualisasi yang menjalankan hypervisor Xen. Pengguna sistem tersebut harus beralih menggunakan kernel 64-bit di lingkungan tamu atau menggunakan mode virtualisasi penuh (HVM) atau gabungan (PVH) alih-alih paravirtualisasi (PV) untuk menjalankan lingkungan.
  • Subsistem Disk, I/O dan Sistem File
    • Pada sistem file Btrfs diimplementasikan opsi pemasangan "penyelamatan" yang menyatukan akses ke semua opsi pemulihan lainnya. Dukungan untuk opsi "alloc_start" dan "subvolrootid" telah dihapus, dan opsi "inode_cache" tidak digunakan lagi. Pengoptimalan kinerja telah dilakukan, terutama mempercepat eksekusi operasi fsync(). Ditambahkan kemampuan untuk menggunakan jenis checksum alternatif selain CRC32c.
    • Ditambahkan kemampuan untuk menggunakan enkripsi inline (Enkripsi Inline) dalam sistem file ext4 dan F2FS, untuk mengaktifkan opsi pemasangan "inlinecrypt" yang disediakan. Mode enkripsi inline memungkinkan Anda menggunakan mekanisme enkripsi yang terpasang pada pengontrol drive, yang mengenkripsi dan mendekripsi input/output secara transparan.
    • Di XFS diamankan inode reset (flush) dalam mode asinkron sepenuhnya yang tidak memblokir proses saat melakukan operasi pembersihan memori. Menyelesaikan masalah kuota yang sudah berlangsung lama yang menyebabkan peringatan batas lunak dan batas inode tidak terlacak dengan benar. Implementasi terpadu dukungan DAX untuk ext4 dan xfs.
    • Di Ext4 diimplementasikan bitmap alokasi blok pramuat. Dikombinasikan dengan membatasi pemindaian grup yang tidak diinisialisasi, pengoptimalan ini mengurangi waktu yang diperlukan untuk memasang partisi yang sangat besar.
    • Di F2FS ditambahkan ioctl F2FS_IOC_SEC_TRIM_FILE, yang memungkinkan Anda menggunakan perintah TRIM/discard untuk mereset data tertentu secara fisik dalam sebuah file, misalnya, untuk menghapus kunci akses tanpa meninggalkan sisa data di drive.
      Di F2FS juga ditambahkan mode pengumpulan sampah baru GC_URGENT_LOW, yang bekerja lebih agresif dengan menghilangkan beberapa pemeriksaan karena berada dalam keadaan siaga sebelum memulai pengumpul sampah.

    • Di bcache, bucket_size untuk luasan telah ditingkatkan dari 16 menjadi 32 bit sebagai persiapan untuk mengaktifkan cache perangkat yang dikategorikan.
    • Kemampuan untuk menggunakan enkripsi inline berdasarkan enkripsi perangkat keras bawaan yang disediakan oleh pengontrol UFS telah ditambahkan ke subsistem SCSI (Penyimpanan Flash Universal).
    • Parameter baris perintah kernel baru β€œdebugfs” telah ditambahkan, yang memungkinkan Anda mengontrol ketersediaan pseudo-FS dengan nama yang sama.
    • Klien NFSv4.2 menyediakan dukungan untuk atribut file yang diperluas (xattr).
    • Dalam debu dm ditambahkan antarmuka untuk menampilkan sekaligus daftar semua blok buruk yang teridentifikasi pada disk (β€œdmsetup message dust1 0 listbadblocks”).
    • Untuk md/raid5, parameter /sys/block/md1/md/stripe_size telah ditambahkan untuk mengonfigurasi ukuran blok STRIPE.
    • Untuk perangkat penyimpanan NVMe ditambahkan dukungan untuk perintah zonasi drive (ZNS, NVM Express Zoned Namespace), yang memungkinkan Anda membagi ruang penyimpanan menjadi zona-zona yang membentuk kelompok blok untuk kontrol lebih lengkap atas penempatan data pada drive.
  • Subsistem jaringan
    • Di Netfilter ditambahkan kemampuan untuk menolak paket pada tahap sebelum pemeriksaan routing (ekspresi REJECT sekarang dapat digunakan tidak hanya dalam rantai INPUT, FORWARD dan OUTPUT, tetapi juga pada tahap PREROUTING untuk icmp dan tcp).
    • Di tabel nft ditambahkan kemampuan untuk mengaudit peristiwa yang terkait dengan perubahan konfigurasi.
    • Di nftables di netlink API ditambahkan dukungan untuk rantai anonim, yang namanya diberikan secara dinamis oleh kernel. Saat Anda menghapus aturan yang terkait dengan rantai anonim, rantai itu sendiri akan dihapus secara otomatis.
    • BPF menambahkan dukungan bagi iterator untuk melintasi, memfilter, dan memodifikasi elemen array asosiatif (peta) tanpa menyalin data ke ruang pengguna. Iterator dapat digunakan untuk soket TCP dan UDP, memungkinkan program BPF untuk melakukan iterasi pada daftar soket terbuka dan mengekstrak informasi yang mereka perlukan dari soket tersebut.
    • Menambahkan program BPF tipe baru BPF_PROG_TYPE_SK_LOOKUP, yang diluncurkan ketika kernel mencari soket pendengaran yang sesuai untuk koneksi masuk. Dengan menggunakan program BPF seperti ini, Anda dapat membuat penangan yang mengambil keputusan tentang soket mana yang harus dikaitkan dengan koneksi, tanpa dibatasi oleh panggilan sistem bind(). Misalnya, Anda dapat mengaitkan satu soket dengan serangkaian alamat atau port. Selain itu, dukungan untuk flag SO_KEEPALIVE telah ditambahkan ke bpf_setsockopt() dan kemampuan untuk menginstal penangan BPF_CGROUP_INET_SOCK_RELEASE, yang dipanggil saat soket dilepaskan, telah diterapkan.
    • Dukungan protokol diterapkan PRP (Protokol Redundansi Paralel), yang memungkinkan peralihan berbasis Ethernet ke saluran cadangan, transparan untuk aplikasi, jika terjadi kegagalan komponen jaringan apa pun.
    • Tumpukan mac80211 ditambahkan dukungan untuk negosiasi saluran WPA/WPA2-PSK empat tahap dalam mode titik akses.
    • Menambahkan kemampuan untuk mengganti penjadwal qdisc (disiplin antrian) untuk menggunakan algoritma manajemen antrian jaringan FQ-PIE (Flow Queue PIE) secara default, yang bertujuan untuk mengurangi dampak negatif dari buffering paket perantara pada peralatan jaringan tepi (bufferbloat) di jaringan dengan modem kabel.
    • Fitur baru telah ditambahkan ke MPTCP (MultiPath TCP), ekstensi 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. Menambahkan dukungan untuk cookie sinkronisasi, DATA_FIN, penyetelan otomatis buffer, diagnostik soket, dan tanda REUSEADDR, REUSEPORT, dan V6ONLY di setockopt.
    • Untuk tabel perutean virtual VRF (Virtual Routing and Forwarding), yang memungkinkan pengorganisasian pengoperasian beberapa domain perutean pada satu sistem, mode "ketat" telah diterapkan. Dalam mode ini, tabel virtual hanya dapat dikaitkan dengan tabel perutean yang tidak digunakan pada tabel virtual lainnya.
    • Driver nirkabelnya adalah ath11k ditambahkan mendukung frekuensi 6GHz dan pemindaian spektral.
  • ΠžΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΠ΅
    • Kode yang dihapus untuk mendukung arsitektur UniCore, dikembangkan di Pusat Mikroprosesor Universitas Peking dan disertakan dalam kernel Linux pada tahun 2011. Arsitektur ini tidak dipelihara sejak tahun 2014 dan tidak mendapat dukungan di GCC.
    • Dukungan untuk arsitektur RISC-V telah diterapkan kcov (antarmuka debugfs untuk menganalisis cakupan kode kernel), kmemleak (sistem deteksi kebocoran memori), perlindungan tumpukan, tanda lompat, dan operasi tickless (multitasking tidak bergantung pada sinyal pengatur waktu).
    • Untuk arsitektur PowerPC, dukungan untuk antrian spinlock telah diterapkan, yang telah meningkatkan kinerja secara signifikan dalam situasi konflik kunci.
    • Untuk arsitektur ARM dan ARM64, mekanisme pengaturan frekuensi prosesor diaktifkan secara default terjadwal (Gubernur cpufreq), yang secara langsung menggunakan informasi dari penjadwal tugas untuk membuat keputusan tentang perubahan frekuensi dan dapat segera mengakses driver cpufreq untuk mengubah frekuensi dengan cepat, langsung menyesuaikan parameter operasi CPU dengan beban saat ini.
    • Driver DRM i915 untuk kartu grafis Intel mencakup dukungan untuk chip berdasarkan mikroarsitektur Danau Roket dan menambahkan dukungan awal untuk kartu diskrit Intel Xe DG1.
    • Driver Amdgpu menambahkan dukungan awal untuk GPU AMD Navi 21 (Angkatan Laut Flounder) dan Navi 22 (Sienna cichlid). Menambahkan dukungan untuk mesin akselerasi pengkodean dan decoding video UVD/VCE untuk GPU Kepulauan Selatan (Radeon HD 7000).
      Menambahkan properti untuk memutar tampilan sebesar 90, 180, atau 270 derajat.

      Menariknya, driver untuk GPU AMD adalah driver terbesar di kernel - ia memiliki sekitar 2.71 juta baris kode, yaitu sekitar 10% dari total ukuran kernel (27.81 juta baris). Pada saat yang sama, 1.79 juta baris dicatat oleh file header yang dibuat secara otomatis dengan data untuk register GPU, dan kode C adalah 366 ribu baris (sebagai perbandingan, driver Intel i915 mencakup 209 ribu baris, dan Nouveau - 149 ribu).

    • Di pengemudi Nouveau ditambahkan dukungan untuk pemeriksaan integritas frame-by-frame menggunakan CRC (Pemeriksaan Redundansi Siklik) di mesin tampilan GPU NVIDIA. Implementasinya didasarkan pada dokumentasi yang disediakan oleh NVIDIA.
    • Menambahkan driver untuk panel LCD: Frida FRD350H54004, KOE TX26D202VM0BWA, CDTech S070PWS19HP-FC21, CDTech S070SWV29HG-DC44, Tianma TM070JVHG33 dan Xingbangda XBD599.
    • Subsistem audio ALSA mendukung Aliran Senyap Intel (mode daya berkelanjutan untuk perangkat HDMI eksternal untuk menghilangkan penundaan saat memulai pemutaran) dan perangkat baru untuk mengontrol penerangan tombol aktivasi dan mute mikrofon, dan juga menambahkan dukungan untuk peralatan baru, termasuk pengontrol Longson 7A1000.
    • Menambahkan dukungan untuk papan, perangkat, dan platform ARM: Pine64 PinePhone v1.2, Lenovo IdeaPad Duet 10.1, ASUS Google Nexus 7, Acer Iconia Tab A500, Qualcomm Snapdragon SDM630 (digunakan di Sony Xperia 10, 10 Plus, XA2, XA2 Plus dan XA2 Ultra), Jetson Xavier NX, Amlogic WeTek Core2, Aspeed EthanolX, lima papan baru berdasarkan NXP i.MX6, MikroTik RouterBoard 3011, Xiaomi Libra, Microsoft Lumia 950, Sony Xperia Z5, MStar, Microchip Sparx5, Intel Keem Bay, Amazon Alpine v3, Renesas RZ/G2H.

Pada saat yang sama, Yayasan Perangkat Lunak Bebas Amerika Latin terbentuk
pilihan kernel 5.9 sepenuhnya gratis - Linux gratis 5.9-gnu, dibersihkan dari elemen firmware dan driver yang berisi komponen tidak bebas atau bagian kode, yang cakupannya dibatasi oleh pabrikan. Rilis baru ini menonaktifkan pemuatan blob pada driver untuk WiFi rtw8821c dan SoC MediaTek mt8183. Kode pembersihan gumpalan diperbarui di driver dan subsistem Habanalabs, Wilc1000, amdgpu, mt7615, i915 CSR, Mellanox mlxsw (Spectrum3), r8169 (rtl8125b-2) dan layar sentuh x86.

Sumber: opennet.ru

Tambah komentar