Rilis kernel Linux 5.16

Setelah dua bulan pengembangan, Linus Torvalds meluncurkan rilis kernel Linux 5.16. Di antara perubahan yang paling menonjol: panggilan sistem futex_waitv untuk meningkatkan kinerja game Windows di Wine, pelacakan kesalahan di FS melalui fanotify, konsep folio dalam sistem manajemen memori, dukungan untuk instruksi prosesor AMX, kemampuan untuk mencadangkan memori untuk soket jaringan, dukungan untuk klasifikasi paket pada tahap netfilter "egress", menggunakan subsistem DAMON untuk secara proaktif mengeluarkan area memori yang tidak digunakan, meningkatkan penanganan kelebihan beban dengan operasi penulisan volume besar, dukungan untuk hard drive multi-drive.

Versi baru mencakup 15415 perbaikan dari 2105 pengembang, ukuran patch adalah 45 MB (perubahan mempengaruhi 12023 file, 685198 baris kode ditambahkan, 263867 baris dihapus). Sekitar 44% dari semua perubahan yang diperkenalkan di 5.16 terkait dengan driver perangkat, sekitar 16% perubahan terkait dengan pembaruan kode khusus untuk arsitektur perangkat keras, 16% terkait dengan tumpukan jaringan, 4% terkait dengan sistem file, dan 4% terkait dengan subsistem kernel internal.

Inovasi utama dalam kernel 5.16:

  • Subsistem Disk, I/O dan Sistem File
    • Alat telah ditambahkan ke mekanisme fanotify untuk memantau keadaan sistem file dan melacak terjadinya kesalahan. Informasi tentang kesalahan dikirimkan menggunakan jenis peristiwa baru - FAN_FS_ERROR, yang dapat dicegat dalam sistem pemantauan yang berjalan di ruang pengguna untuk segera memberi tahu administrator atau meluncurkan proses pemulihan. Ketika serangkaian kesalahan terjadi secara berjenjang, fanotify memastikan bahwa pesan kesalahan pertama dikirimkan bersama dengan penghitung masalah umum untuk menyederhanakan analisis selanjutnya mengenai penyebab kegagalan. Dukungan pelacakan kesalahan saat ini hanya diterapkan untuk sistem file Ext4.
    • Peningkatan penanganan kemacetan tulis, yang terjadi ketika volume operasi tulis melebihi throughput drive dan sistem dipaksa untuk memblokir permintaan tulis suatu proses hingga permintaan yang telah dikirimkan selesai. Pada versi baru, mekanisme kernel yang digunakan untuk memperoleh informasi tentang terjadinya kelebihan beban dan pemblokiran tugas telah didesain ulang sepenuhnya, karena pada implementasi lama terdapat masalah dalam menggabungkan pemrosesan kelebihan beban tulis dengan perpindahan halaman memori ke dalam swap. bagian ketika tidak ada cukup memori dalam sistem.
    • Btrfs mengimplementasikan dukungan untuk teknologi zonasi perangkat (Zoned Namespace), yang digunakan dalam hard drive atau NVMe SSD untuk membagi ruang penyimpanan menjadi zona-zona, yang membentuk kelompok blok atau sektor, di mana hanya penambahan data berurutan yang diperbolehkan, memperbarui seluruh kelompok blok. Selain itu, sedikit optimasi dilakukan pada inode logging, yang meningkatkan throughput dalam pengujian dbench sebesar 3% dan mengurangi latensi sebesar 11%. Mekanisme logging direktori telah didesain ulang, di mana jumlah operasi pencarian dan pemblokiran di pohon telah dikurangi untuk meningkatkan efisiensi. Penyisipan elemen ke dalam struktur btree dalam mode batch telah dipercepat (waktu untuk penyisipan elemen secara massal telah berkurang sebesar 4%, dan penghapusan sebesar 12%). Menambahkan dukungan terbatas untuk menggunakan kompresi saat menulis sebagian halaman, serta kemampuan untuk mendefrag subhalaman. Persiapan telah dilakukan untuk mengaktifkan dukungan untuk versi kedua dari protokol untuk perintah β€œkirim”.
    • Sistem file XFS mengurangi konsumsi memori dengan menggunakan cache lempengan terpisah untuk item yang sering digunakan dan mengurangi beberapa struktur data.
    • Dalam sistem file Ext4, hanya perbaikan bug dan penghitungan parameter inisialisasi lambat tabel Inode yang lebih akurat yang dicatat.
    • Optimasi telah diterapkan pada tingkat perangkat blok untuk secara signifikan meningkatkan efisiensi menghubungkan operasi ke inti CPU.
    • Menambahkan dukungan awal untuk hard drive dengan beberapa drive independen (multi-aktuator), sehingga memungkinkan untuk mengakses beberapa sektor secara bersamaan di berbagai area pelat magnet.
    • Menambahkan perintah ioctl baru CDROM_TIMED_MEDIA_CHANGE untuk mendeteksi peristiwa perubahan media di drive disk optik.
    • Sistem file EROFS (Enhanced Read-Only File System) telah menambahkan kemampuan untuk bekerja di atas beberapa perangkat penyimpanan. Perangkat yang berbeda dapat dipetakan ke satu ruang alamat blok 32-bit. Dukungan untuk kompresi menggunakan algoritma LZMA juga telah ditambahkan.
    • Opsi pemasangan telah ditambahkan ke sistem file F2FS untuk mengontrol fragmentasi file saat ditempatkan di penyimpanan (misalnya, untuk men-debug pengoptimalan untuk bekerja dengan penyimpanan terfragmentasi).
    • CEPH mengaktifkan pembuatan dan penghapusan direktori asinkron secara default (gunakan tanda '-o wsync' saat pemasangan untuk kembali ke perilaku lama). Menambahkan pemeliharaan metrik yang melacak operasi penyalinan objek eksternal.
    • Parameter pemasangan tcpnodelay telah ditambahkan ke CIFS, yang menyetel mode tcp_sock_set_nodelay untuk soket jaringan, yang menonaktifkan menunggu antrian untuk mengisi tumpukan TCP. Menambahkan dukungan untuk Tautan DFS bersarang (Sistem File Terdistribusi) saat melakukan pemasangan ulang.
    • Menambahkan dukungan untuk menyelesaikan permintaan ke perangkat blok dalam mode batch. Pengujian terhadap perubahan tersebut menunjukkan peningkatan intensitas operasi pembacaan acak dari drive Optane dari 6.1 menjadi 6.6 juta IOPS pada satu inti CPU.
  • Layanan memori dan sistem
    • Menambahkan panggilan sistem baru futex_waitv, yang memungkinkan Anda memantau status beberapa futex sekaligus menggunakan satu panggilan sistem. Fitur ini mengingatkan pada fungsionalitas WaitForMultipleObjects yang tersedia di Windows, yang emulasinya melalui futex_waitv dapat berguna untuk meningkatkan kinerja game Windows yang berjalan di bawah Wine atau Proton. Selain itu, menunggu futex secara bersamaan juga dapat digunakan untuk mengoptimalkan kinerja game build asli untuk Linux.
    • Konsep folio halaman telah diterapkan, yang penggunaannya di beberapa subsistem kernel akan mempercepat manajemen memori pada beban kerja biasa. Saat ini, subsistem manajemen memori utama di kernel dan implementasi cache halaman telah ditransfer ke folio, dan sistem file direncanakan akan ditransfer di masa mendatang. Di masa depan, direncanakan juga untuk menambahkan dukungan untuk folio multi-halaman ke kernel.

      Buku tebal menyerupai halaman majemuk, tetapi memiliki semantik yang lebih baik dan organisasi kerja yang lebih jelas. Untuk mengelola memori sistem, RAM yang tersedia dibagi menjadi beberapa halaman memori, yang ukurannya bervariasi berdasarkan arsitektur, namun pada sistem x86 diukur dalam kilobyte (biasanya 4096 byte). Sistem modern hadir dengan RAM puluhan gigabyte, yang membuat manajemen memori menjadi lebih kompleks karena kebutuhan untuk memproses halaman memori dalam jumlah besar. Untuk mengurangi jumlah halaman, kernel sebelumnya menerapkan konsep halaman gabungan dengan struktur yang mencakup lebih dari satu halaman fisik memori. Namun API untuk memanipulasi halaman memori gabungan masih menyisakan banyak hal yang tidak diinginkan dan menyebabkan overhead tambahan.

    • Penangan telah ditambahkan ke penjadwal tugas yang memperhitungkan pengelompokan cache pada CPU. Pada beberapa prosesor, seperti Kunpeng 920 (ARM) dan Intel Jacobsville (x86), sejumlah inti CPU tertentu, biasanya 4, dapat menggabungkan cache L3 atau L2. Mempertimbangkan topologi seperti itu dapat secara signifikan meningkatkan efisiensi pendistribusian tugas di seluruh inti CPU dalam penjadwal tugas, karena memindahkan tugas dalam cluster CPU yang sama memungkinkan peningkatan throughput akses memori dan mengurangi pertikaian cache.
    • Menambahkan dukungan untuk instruksi AMX (Advanced Matrix Extensions) yang diterapkan pada prosesor server Intel Xeon Scalable yang akan datang, dengan nama kode Sapphire Rapids. AMX menawarkan register TMM "TILE" baru yang dapat dikonfigurasi dan instruksi untuk memanipulasi data dalam register ini, seperti TMUL (Tile matriks MULtiply) untuk perkalian matriks.
    • Beberapa fitur baru telah diimplementasikan berdasarkan subsistem DAMON (Data Access MONitor) yang ditambahkan pada rilis terakhir, yang memungkinkan Anda memantau akses ke data dalam RAM sehubungan dengan proses terpilih yang berjalan di ruang pengguna. Misalnya, subsistem memungkinkan untuk menganalisis area memori mana yang diakses oleh proses selama seluruh operasinya, dan area memori mana yang tidak diklaim.
      • DAMON_RECLAIM untuk mengidentifikasi dan mengusir area memori yang belum diakses. Mekanisme ini dapat digunakan untuk secara proaktif mengeluarkan halaman memori ketika memori bebas hampir habis.
      • DAMOS (Skema Operasi Berbasis Pemantauan Akses Data) untuk menerapkan operasi madvise() tertentu, seperti melepaskan memori bebas tambahan, untuk memproses area memori yang frekuensi akses memori tertentu ditetapkan. Parameter DAMOS dikonfigurasi melalui debugfs.
      • Kemampuan untuk memonitor ruang alamat fisik memori (sebelumnya hanya alamat virtual yang dapat dipantau).
    • Implementasi algoritma kompresi zstd telah diperbarui ke versi 1.4.10, yang secara signifikan meningkatkan kinerja berbagai subsistem kernel yang menggunakan kompresi (misalnya, membongkar gambar kernel telah dipercepat sebesar 35%, kinerja membongkar data terkompresi di Btrfs dan SquashFS meningkat sebesar 15%, dan di ZRAM - sebesar 30%). Kernel awalnya menggunakan implementasi zstd yang terpisah, berdasarkan versi 1.3.1, yang dirilis lebih dari tiga tahun lalu dan tidak menyertakan banyak optimasi penting. Selain berpindah ke versi saat ini, patch yang ditambahkan juga menyederhanakan sinkronisasi dengan cabang upstream zstd, memungkinkan Anda membuat kode untuk dimasukkan ke dalam kernel langsung dari repositori zstd utama. Di masa depan, kode zstd di kernel direncanakan akan diperbarui seiring dengan dirilisnya versi baru perpustakaan zstd.
    • Sebagian besar perbaikan telah dilakukan pada subsistem eBPF. Menambahkan kemampuan untuk memanggil fungsi modul kernel dari program BPF. Fungsi bpf_trace_vprintk() telah diterapkan, tidak seperti bpf_trace_printk(), yang memungkinkan Anda mengeluarkan lebih dari tiga argumen sekaligus. Filter mekar struktur penyimpanan data baru (peta BPF) telah ditambahkan, yang memungkinkan Anda menggunakan struktur data probabilistik dengan nama yang sama untuk menentukan keberadaan elemen dalam kumpulan. Atribut baru BTF_KIND_TAG telah ditambahkan, yang dapat digunakan dalam program BPF untuk mengikat tag ke parameter fungsi, misalnya, untuk menyederhanakan pendeteksian kesalahan dalam program pengguna. Di libbpf, dimungkinkan untuk membuat bagian .rodata.*/.data.* Anda sendiri, dukungan untuk peristiwa pelacakan uprobe dan kprobe telah diterapkan, dan API telah ditambahkan untuk menyalin semua tipe BTF dari satu objek ke objek lainnya. Dukungan AF_XDP telah dipindahkan dari libbpf ke perpustakaan libxdp terpisah. Untuk arsitektur MIPS, kompiler JIT telah diimplementasikan untuk mesin virtual BPF.
    • Untuk arsitektur ARM64, dukungan untuk ekstensi ARMv8.6 untuk pengatur waktu telah diterapkan, termasuk ekstensi yang memungkinkan representasi register sistem menyinkronkan sendiri tanpa menggunakan instruksi ISB.
    • Untuk arsitektur PA-RISC, kemampuan untuk menggunakan mekanisme KFENCE untuk mendeteksi kesalahan saat bekerja dengan memori telah diterapkan, dan dukungan untuk pendeteksi kondisi balapan KCSAN telah ditambahkan.
    • Hak akses ke penelusuran dapat dikonfigurasi pada tingkat pengguna dan grup individual; misalnya, Anda kini dapat mengizinkan akses ke alat penelusuran hanya untuk anggota grup tertentu.
  • Virtualisasi dan Keamanan
    • Subsistem io_uring dan device-mapper menerapkan dukungan untuk menghasilkan peristiwa audit. io_uring menyediakan kemampuan untuk mengontrol akses melalui modul LSM. Menambahkan kemampuan untuk mengaudit panggilan sistem openat2().
    • Kode kernel benar-benar bebas dari ekspresi case yang berkelanjutan di switch (tidak ada return atau break setelah setiap blok case). Saat membangun kernel, sekarang dimungkinkan untuk menggunakan mode β€œ-Wimplicit-fallthrough”.
    • Termasuk perubahan untuk memperketat pemeriksaan batas saat menjalankan fungsi memcpy().
    • Antarmuka I/O asinkron io_uring mengimplementasikan kemampuan untuk menerapkan kebijakan keamanan yang ditentukan oleh modul SELinux dan Smack ke operasi I/O.
    • Subsistem IMA (Arsitektur Pengukuran Integritas), yang memungkinkan layanan eksternal memverifikasi status subsistem kernel untuk memastikan keasliannya, mengimplementasikan kemampuan untuk menerapkan aturan berdasarkan pengidentifikasi grup (GID) milik file atau milik pengguna. mengakses file milik.
    • Menonaktifkan secara default beberapa mekanisme lanjutan untuk melindungi thread seccomp() dari serangan Spectre, yang dianggap tidak perlu dan tidak meningkatkan keamanan secara signifikan, namun berdampak negatif pada kinerja. Penggunaan perlindungan Retpoline telah direvisi.
    • Implementasi mekanisme cryptoloop telah dihapus, yang digantikan pada tahun 2004 oleh dm-crypt dan, jika perlu, mendukung algoritma yang sama.
    • Secara default, akses tanpa hak istimewa ke subsistem eBPF dilarang. Perubahan ini dilakukan untuk mencegah program BPF digunakan untuk melewati perlindungan terhadap serangan saluran samping. Jika perlu, administrator dapat memulihkan kemampuan pengguna yang tidak memiliki hak istimewa untuk menggunakan eBPF.
    • Hypervisor ACRN, yang dirancang untuk tugas real-time dan digunakan dalam sistem yang sangat penting, telah menambahkan dukungan untuk membuat/menghapus perangkat virtual dan meneruskan perangkat MMIO.
    • Dukungan untuk definisi KPP (Key-agreement Protocol Primitives) telah ditambahkan ke mesin kripto, menyederhanakan logika pengembangan driver untuk sistem kripto.
    • Hypervisor Hyper-V sekarang mendukung mode isolasi mesin virtual, yang melibatkan enkripsi konten memori.
    • Hypervisor KVM telah menambahkan dukungan untuk arsitektur RISC-V. Kemampuan untuk memigrasi mesin virtual yang berjalan menggunakan ekstensi AMD SEV dan SEV-ES dalam lingkungan host telah diterapkan. Menambahkan API untuk migrasi langsung sistem tamu yang dienkripsi menggunakan AMD SEV (Virtualisasi Terenkripsi Aman).
    • Untuk arsitektur PowerPC, mode STRICT_KERNEL_RWX diaktifkan secara default, yang memblokir penggunaan halaman memori yang tersedia secara bersamaan untuk penulisan dan eksekusi.
    • Pada sistem x32 86-bit, dukungan untuk hotplug memori telah dihentikan, yang tidak beroperasi selama lebih dari setahun.
    • Pustaka liblockdep telah dihapus dari kernel dan sekarang akan dikelola secara terpisah dari kernel.
  • Subsistem jaringan
    • Untuk soket, opsi baru SO_RESERVE_MEM telah diterapkan, yang dengannya Anda dapat mencadangkan sejumlah memori untuk soket, yang akan selalu tersedia untuk soket dan tidak akan dihapus. Menggunakan opsi ini memungkinkan Anda mencapai peningkatan kinerja dengan mengurangi alokasi memori dan mendapatkan kembali operasi di tumpukan jaringan, terutama ketika kondisi memori rendah terjadi di sistem.
    • Menambahkan dukungan untuk protokol Tunneling Multicast Otomatis (RFC 7450), yang memungkinkan pengiriman lalu lintas multicast dari jaringan yang mendukung Multicast ke penerima di jaringan tanpa Multicast. Protokol ini bekerja melalui enkapsulasi dalam paket UDP.
    • Peningkatan enkapsulasi data IOAM (Operasi, Administrasi, dan Pemeliharaan In-situ) dalam paket transit.
    • Kemampuan untuk mengontrol mode konsumsi daya transceiver telah ditambahkan ke ethtool netlink API.
    • Subsistem netfilter mengimplementasikan kemampuan untuk mengklasifikasikan paket pada tingkat jalan keluar, yaitu. pada tahap ketika driver menerima paket dari tumpukan jaringan kernel. Di nftables, dukungan untuk filter terkait muncul di versi 1.0.1. Netfilter telah menambahkan kemampuan untuk membandingkan dan mengubah header internal dan data untuk UDP dan TCP (header dalam/payload) yang muncul setelah header transport.
    • Menambahkan parameter sysctl baru arp_evict_nocarrier dan ndisc_evict_nocarrier, jika disetel, cache ARP dan tabel ndisc (penemuan tetangga) akan dihapus jika terjadi kegagalan koneksi (NOCARRIER).
    • Mode Latensi Rendah, Kehilangan Rendah, dan Throughput yang Dapat Diskalakan (L4S) telah ditambahkan ke mekanisme manajemen antrian jaringan fq_codel (Controlled Delay).
  • ΠžΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΠ΅
    • Driver amdgpu memberikan dukungan awal untuk spesifikasi DP 2.0 (DisplayPort 2.0) dan penerowongan DisplayPort melalui USB4. Untuk APU Cyan Skillfish (dilengkapi dengan GPU Navi 1x) dukungan untuk pengontrol tampilan telah ditambahkan. Dukungan untuk APU Yellow Carp (prosesor seluler Ryzen 6000 β€œRembrandt”) telah diperluas.
    • Driver i915 menstabilkan dukungan untuk chip Intel Alderlake S dan mengimplementasikan dukungan untuk teknologi Intel PXP (Protected Xe Path), yang memungkinkan Anda mengatur sesi grafis yang dilindungi perangkat keras pada sistem dengan chip Intel Xe.
    • Pekerjaan telah dilakukan pada driver nouveau untuk memperbaiki bug dan meningkatkan gaya kode.
    • Menambahkan dukungan untuk CPU Vortex yang kompatibel dengan x86 (Vortex86MX). Linux telah bekerja pada prosesor serupa sebelumnya, namun identifikasi eksplisit dari CPU tertentu diperlukan untuk menonaktifkan perlindungan terhadap serangan Spectre/Meltdown, yang tidak berlaku untuk chip tertentu.
    • Menambahkan dukungan awal untuk platform x86 untuk Surface Pro 8 dan Surface Laptop Studio.
    • Menambahkan driver untuk mendukung chip suara yang digunakan pada AMD Yellow Carp, APU Van Gogh, juga menambahkan dukungan untuk sistem suara dan codec Cirrus CS35L41, Maxim MAX98520/MAX98360A, Mediatek MT8195, Nuvoton NAU8821, NVIDIA Tegra210, NXP i.MX8ULP, Qualcomm AudioReach, Realtek ALC5682I-VS, RT5682S, RT9120, Rockchip RV1126 dan RK3568.
    • Menambahkan driver ishtp_eclite untuk mengakses pengontrol tertanam Intel PSE (Programmable Service Engine) menggunakan ISHTP (Integratd Sensor Hub Transport Protocol), seperti antarmuka informasi terkait baterai, suhu, dan UCSI (Perangkat Lunak Sistem Konektor USB Type-C).
    • Menambahkan driver untuk pengontrol game Nintendo Switch yang mendukung Switch Pro dan Joy-Cons. Dukungan tambahan untuk tablet Wacom Intuos BT (CTL-4100WL/CTL-6100WL) dan Apple 2021 Magic Keyboard. Peningkatan dukungan untuk pengontrol Sony PlayStation DualSense. Menambahkan dukungan untuk tombol samping mouse Xiaomi Mi.
    • Menambahkan driver RT89 dengan dukungan untuk chip nirkabel Realtek 802.11ax, serta driver untuk adaptor Ethernet Asix AX88796C-SPI dan switch Realtek RTL8365MB-VC.
    • Driver untuk PCI dan PASemi i1c telah ditambahkan untuk chip Apple M2.
    • Menambahkan dukungan untuk ARM SoΠ‘, perangkat dan papan Raspberry Pi Compute Module 4, Fairphone 4, Snapdragon 690, LG G Watch R, Sony Xperia 10 III, Samsung Galaxy S4 Mini Value Edition, Xiaomi MSM8996 (Mi 5, Mi Note 2, Mi 5s , Mi Mix, Mi 5s Plus dan Xiaomi Mi 5), Sony Yoshino (Sony Xperia XZ1, dan Sony Xperia XZ Premium), F(x)tec Pro1 QX1000, Microchip LAN966, CalAmp LMU5000, Exegin Q5xR5, sama7g5, Samsung ExynosAutov9, Rockchip RK3566 , RK3399 ROCK Pi 4A+, RK3399 ROCK Pi 4B+, Firefly ROC-RK3328-PC, Firefly ROC-RK3399-PC-PLUS, ASUS Chromebook Tablet CT100, Pine64 Quartz64-A, Netgear GS110EMX, Globalscale MOCHAbin 7040, NXP S32G2, Ren esas R8A779M* , Xilinx Kria, Radxa Nol, JetHub D1/H1, Netronix E70K02.

Sumber: opennet.ru

Tambah komentar