Rilis kernel Linux 5.7

Setelah dua bulan pengembangan, Linus Torvalds diperkenalkan rilis kernel Linux 5.7. Di antara perubahan yang paling menonjol: implementasi baru sistem file exFAT, modul bareudp untuk membuat terowongan UDP, perlindungan berdasarkan otentikasi pointer untuk ARM64, kemampuan untuk melampirkan program BPF ke penangan LSM, implementasi baru Curve25519, split- detektor kunci, kompatibilitas BPF dengan PREEMPT_RT, menghilangkan batas ukuran baris 80 karakter dalam kode, dengan mempertimbangkan indikator suhu CPU di penjadwal tugas, kemampuan untuk menggunakan clone() untuk menelurkan proses di cgroup lain, perlindungan terhadap penulisan ke memori menggunakan userfaultfd.

Versi baru mencakup 15033 perbaikan dari 1961 pengembang,
ukuran tambalan - 39 MB (perubahan memengaruhi 11590 file, menambahkan 570560 baris kode,
297401 baris dihapus). Sekitar 41% dari semuanya disajikan di 5.7
perubahan terkait dengan driver perangkat, sekitar 16% perubahannya terkait
sikap terhadap pembaruan kode khusus untuk arsitektur perangkat keras, 13%
terkait dengan tumpukan jaringan, 4% ke sistem file dan 4% ke internal
subsistem kernel.

Utama inovasi:

  • Subsistem Disk, I/O dan Sistem File
    • Menambahkan implementasi driver exFAT baru, didirikan berdasarkan basis kode β€œsdfat” (2.x) saat ini yang dikembangkan oleh Samsung untuk ponsel pintar Android-nya. Driver yang sebelumnya ditambahkan ke kernel didasarkan pada kode Samsung lama (versi 1.2.9) dan kinerjanya sekitar 10% lebih rendah dari driver baru. Mari kita ingat bahwa menambahkan dukungan exFAT ke kernel menjadi mungkin setelah Microsoft ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π»Π° spesifikasi publik dan membuat paten exFAT tersedia untuk penggunaan bebas royalti di Linux.
    • Btrfs mengimplementasikan perintah ioctl() baru - BTRFS_IOC_SNAP_DESTROY_V2, yang memungkinkan Anda menghapus subbagian berdasarkan pengidentifikasinya. Dukungan penuh untuk mengkloning luasan inline disediakan. Jumlah titik pembatalan untuk operasi redistribusi telah diperluas, sehingga mengurangi waktu tunggu yang lama ketika menjalankan perintah 'pembatalan saldo'. Penentuan backlink hingga luasnya telah dipercepat (misalnya, waktu eksekusi skrip pengujian berkurang dari satu jam menjadi beberapa menit). Menambahkan kemampuan untuk melampirkan luasan file ke setiap inode pohon. Skema pemblokiran yang digunakan saat menulis ke subpartisi dan saat mengecualikan NOCOW telah didesain ulang. Peningkatan efisiensi eksekusi fsync untuk rentang.
    • XFS telah meningkatkan pemeriksaan metadata dan fsck untuk partisi aktif. Sebuah perpustakaan telah diusulkan untuk membangun kembali struktur btree, yang di masa depan akan digunakan untuk mengerjakan ulang xfs_repair dan mengimplementasikan kemungkinan pemulihan tanpa melepas partisi.
    • Dukungan eksperimental untuk menempatkan partisi swap di penyimpanan SMB3 telah ditambahkan ke CIFS. Menerapkan ekstensi POSIX ke readdir, yang ditentukan dalam spesifikasi SMB3.1.1. Peningkatan kinerja penulisan untuk halaman 64KB ketika mode cache=strict diaktifkan dan protokol versi 2.1+ digunakan.
    • FS EXT4 telah ditransfer dari bmap dan iopoll ke menggunakan iomap.
    • F2FS menyediakan dukungan opsional untuk kompresi data menggunakan algoritma zstd. Secara default, algoritma LZ4 digunakan untuk kompresi. Menambahkan dukungan untuk perintah "chattr -c commit". Tampilan waktu pemasangan disediakan. Menambahkan ioctl F2FS_IOC_GET_COMPRESS_BLOCKS untuk mendapatkan informasi tentang jumlah blok terkompresi. Menambahkan output data kompresi melalui statx.
    • Sistem file Ceph telah menambahkan kemampuan untuk melakukan operasi pembuatan dan penghapusan file secara lokal (membatalkan tautan) tanpa menunggu respons dari server (bekerja dalam mode asinkron). Perubahan tersebut, misalnya, dapat meningkatkan kinerja secara signifikan saat menjalankan utilitas rsync.
    • Kemampuan untuk menggunakan virtiofs sebagai sistem file tingkat atas telah ditambahkan ke OVERLAYFS.
    • Ditulis ulang kode traversal jalur di VFS, kode parsing tautan simbolik telah dikerjakan ulang, dan traversal titik pemasangan telah disatukan.
    • Dalam subsistem scsi untuk pengguna yang tidak memiliki hak istimewa diizinkan eksekusi perintah ZBC.
    • Di dm_writecache diimplementasikan kemampuan untuk menghapus cache secara bertahap berdasarkan parameter max_age, yang menetapkan masa pakai maksimum sebuah blok.
    • Di dm_integrity ditambahkan dukungan untuk operasi "buang".
    • Di null_blk ditambahkan dukungan untuk substitusi kesalahan untuk mensimulasikan kegagalan selama pengujian.
    • Ditambahkan kemampuan untuk mengirim pemberitahuan udev tentang perubahan ukuran perangkat blok.
  • Subsistem jaringan
    • Termasuk Netfilter perubahan, secara signifikan mempercepat pemrosesan daftar kecocokan besar (kumpulan nftables), yang memerlukan pemeriksaan kombinasi subnet, port jaringan, protokol, dan alamat MAC.
      Pengoptimalan masuk ke dalam modul nft_set_pipapo (PIle PAcket POlicies), yang memecahkan masalah pencocokan konten paket dengan rentang status bidang arbitrer yang digunakan dalam aturan pemfilteran, seperti rentang IP dan port jaringan (nft_set_rbtree dan nft_set_hash memanipulasi pencocokan interval dan refleksi langsung nilai ). Versi pipapo yang di-vektorisasi menggunakan instruksi AVX256 2-bit pada sistem dengan prosesor AMD Epyc 7402 menunjukkan peningkatan kinerja sebesar 420% ketika mengurai 30 ribu catatan termasuk kombinasi port-protokol. Peningkatan saat membandingkan kombinasi subnet dan nomor port saat mengurai 1000 catatan adalah 87% untuk IPv4 dan 128% untuk IPv6.

    • Ditambahkan modul bareudp, yang memungkinkan Anda merangkum berbagai protokol L3, seperti MPLS, IP, dan NSH, ke dalam terowongan UDP.
    • Integrasi komponen 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 diikat ke alamat IP berbeda, terus berlanjut.
    • Ditambahkan dukungan untuk mekanisme akselerasi perangkat keras untuk merangkum frame Ethernet di 802.11 (Wi-Fi).
    • Saat memindahkan perangkat dari satu namespace jaringan ke namespace jaringan lainnya, hak akses dan kepemilikan file terkait di sysfs disesuaikan.
    • Menambahkan kemampuan untuk menggunakan tanda SO_BINDTODEVICE untuk pengguna non-root.
    • Bagian ketiga dari patch telah diterima, mengubah toolkit ethtool dari ioctl() menjadi menggunakan antarmuka netlink. Antarmuka baru mempermudah penambahan ekstensi, meningkatkan penanganan kesalahan, memungkinkan pengiriman notifikasi ketika status berubah, menyederhanakan interaksi antara kernel dan ruang pengguna, dan mengurangi jumlah daftar bernama yang perlu disinkronkan.
    • Menambahkan kemampuan untuk menggunakan akselerator perangkat keras khusus untuk melakukan operasi pelacakan koneksi.
    • Di netfilter ditambahkan sebuah hook untuk menghubungkan pengklasifikasi paket keluar (egress), yang melengkapi hook yang sebelumnya ada untuk paket masuk (ingress).
  • Virtualisasi dan Keamanan
    • Menambahkan implementasi perangkat keras dari otentikasi penunjuk (Otentikasi Penunjuk), yang menggunakan instruksi CPU ARM64 khusus untuk melindungi terhadap serangan menggunakan teknik pemrograman berorientasi kembali (ROP), di mana penyerang tidak mencoba menempatkan kodenya di memori, tetapi beroperasi pada bagian instruksi mesin yang sudah tersedia di perpustakaan yang dimuat, berakhir dengan instruksi pengembalian kontrol. Keamanan bergantung pada penggunaan tanda tangan digital untuk memverifikasi alamat pengirim di tingkat kernel. Tanda tangan disimpan di bit atas penunjuk itu sendiri yang tidak terpakai. Berbeda dengan implementasi perangkat lunak, pembuatan dan verifikasi tanda tangan digital dilakukan dengan menggunakan instruksi CPU khusus.
    • Ditambahkan kemampuan untuk melindungi area memori dari penulisan menggunakan panggilan sistem userfaultfd(), yang dirancang untuk menangani kesalahan halaman (akses ke halaman memori yang tidak terisi) di ruang pengguna. Idenya adalah menggunakan userfaultfd() untuk mendeteksi pelanggaran akses ke halaman yang ditandai sebagai dilindungi penulisan dan untuk memanggil pengendali yang dapat merespons upaya penulisan tersebut (misalnya, untuk menangani perubahan selama pembuatan cuplikan langsung dari proses yang berjalan, nyatakan menangkap saat membuang dump memori ke disk, mengimplementasikan memori bersama, melacak perubahan dalam memori). Kegunaan setara menggunakan mprotect() bersama dengan pengendali sinyal SIGSEGV, namun bekerja jauh lebih cepat.
    • SELinux tidak lagi menggunakan parameter "checkreqprot", yang memungkinkan Anda menonaktifkan pemeriksaan perlindungan memori saat memproses aturan (mengizinkan penggunaan area memori yang dapat dieksekusi, terlepas dari aturan yang ditentukan dalam aturan). Symlink Kernfs diizinkan untuk mewarisi konteks direktori induknya.
    • Struktur termasuk modul KRSI, yang memungkinkan Anda untuk melampirkan program BPF ke kait LSM apa pun di kernel. Perubahan tersebut memungkinkan pembuatan modul LSM (Modul Keamanan Linux) dalam bentuk program BPF untuk memecahkan masalah audit dan kontrol akses wajib.
    • Dilakukan Mengoptimalkan kinerja /dev/random dengan mengelompokkan nilai CRNG alih-alih memanggil instruksi RNG satu per satu. Peningkatan kinerja getrandom dan /dev/random pada sistem ARM64 yang menyediakan instruksi RNG.
    • Implementasi kurva elips Curve25519 diganti untuk opsi dari perpustakaan HACL, untuk itu diberikan bukti matematis dari verifikasi keandalan formal.
    • Ditambahkan mekanisme untuk menginformasikan tentang halaman memori bebas. Dengan menggunakan mekanisme ini, sistem tamu dapat mengirimkan informasi tentang halaman yang tidak lagi digunakan ke sistem host, dan host dapat mengambil kembali data halaman tersebut.
    • Di vfio/pci ditambahkan dukungan untuk SR-IOV (Virtualisasi I/O Root Tunggal).
  • Layanan memori dan sistem
    • Dari 80 hingga 100 karakter ditingkatkan batasan panjang baris maksimum dalam teks sumber. Pada saat yang sama, pengembang tetap disarankan untuk tetap berada dalam 80 karakter per baris, tetapi ini bukan lagi batasan yang sulit. Selain itu, melebihi batas ukuran garis sekarang akan menghasilkan peringatan build hanya jika checkpatch dijalankan dengan opsi '--strict'. Perubahan ini akan memungkinkan pengembang untuk tidak terganggu manipulasi dengan spasi dan merasa lebih bebas saat menyelaraskan kode, serta akan mencegah putusnya garis berlebihan, mengganggu pemahaman dan pencarian kode.
    • Ditambahkan dukungan untuk mode boot campuran EFI, yang memungkinkan Anda memuat kernel 64-bit dari firmware 32-bit yang berjalan pada CPU 64-bit tanpa menggunakan bootloader khusus.
    • Diaktifkan sistem untuk mengidentifikasi dan men-debug kunci terpisah (β€œkunci terpisah"), yang terjadi saat mengakses data yang tidak selaras di memori karena fakta bahwa saat menjalankan instruksi atom, data melewati dua baris cache CPU. Pemblokiran seperti itu menghasilkan kinerja yang signifikan (1000 siklus lebih lambat dibandingkan operasi atom pada data yang termasuk dalam satu baris cache). Bergantung pada parameter boot "split_lock_detect", kernel dapat mendeteksi kunci tersebut dengan cepat dan mengeluarkan peringatan atau mengirim sinyal SIGBUS ke aplikasi yang menyebabkan kunci tersebut.
    • Penjadwal tugas menyediakan pelacakan sensor suhu (Tekanan Termal) dan diterapkan dengan mempertimbangkan panas berlebih saat menempatkan tugas. Dengan menggunakan statistik yang disediakan, pengatur termal dapat menyesuaikan frekuensi CPU maksimum saat terlalu panas, dan penjadwal tugas sekarang memperhitungkan pengurangan daya komputasi karena pengurangan frekuensi saat menjadwalkan tugas untuk dijalankan (sebelumnya, penjadwal merespons perubahan dalam frekuensi dengan penundaan tertentu, untuk beberapa waktu pengambilan keputusan berdasarkan asumsi yang berlebihan tentang sumber daya komputasi yang tersedia).
    • Penjadwal tugas termasuk indikator invarian pelacakan beban, memungkinkan Anda memperkirakan beban dengan benar, terlepas dari frekuensi operasi CPU saat ini. Perubahan ini memungkinkan Anda memprediksi perilaku tugas dengan lebih akurat dalam kondisi perubahan dinamis pada voltase dan frekuensi CPU. Misalnya, tugas yang menghabiskan 1/3 sumber daya CPU pada 1000 MHz akan menghabiskan 2/3 sumber daya saat frekuensi turun menjadi 500 MHz, yang sebelumnya menimbulkan asumsi salah bahwa tugas tersebut berjalan pada kapasitas penuh (yaitu tugas muncul lebih besar ke penjadwal hanya dengan mengurangi frekuensi, yang menyebabkan pengambilan keputusan yang salah di gubernur schedutil cpufreq).
    • Driver Intel P-state, yang bertanggung jawab untuk memilih mode kinerja, telah dialihkan untuk digunakan terjadwal.
    • Kemampuan untuk menggunakan subsistem BPF saat kernel berjalan secara real time (PREMPT_RT) telah diterapkan. Sebelumnya, jika PREEMPT_RT diaktifkan, BPF harus dinonaktifkan.
    • Jenis program BPF baru telah ditambahkan - BPF_MODIFY_RETURN, yang dapat dilampirkan ke suatu fungsi di kernel dan mengubah nilai yang dikembalikan oleh fungsi ini.
    • Ditambahkan kesempatan Menggunakan panggilan sistem clone3() untuk membuat proses dalam cgroup yang berbeda dari cgroup induk, memungkinkan proses induk untuk menerapkan pembatasan dan mengaktifkan akuntansi segera setelah memunculkan proses atau thread baru. Misalnya, manajer layanan dapat secara langsung mengalokasikan layanan baru ke cgroup yang terpisah, dan proses baru, ketika ditempatkan di cgroup yang β€œdibekukan”, akan segera dihentikan.
    • di Kbuild ditambahkan dukungan untuk variabel lingkungan "LLVM=1" untuk beralih ke toolkit Clang/LLVM saat membangun kernel. Persyaratan untuk versi binutils telah dinaikkan (2.23).
    • Bagian /sys/kernel/debug/kunit/ telah ditambahkan ke debugfs dengan hasil tes kunit.
    • Menambahkan parameter boot kernel pm_debug_messages (analog dengan /sys/power/pm_debug_messages), yang memungkinkan keluaran informasi debug tentang pengoperasian sistem manajemen daya (berguna saat men-debug masalah dengan mode hibernasi dan siaga).
    • Ke antarmuka I/O asinkron io_uring dukungan ditambahkan sambatan() ΠΈ pemilihan buffer atom.
    • Peningkatan pembuatan profil cgroup menggunakan perangkat perf. Sebelumnya, perf hanya dapat membuat profil tugas dalam cgroup tertentu dan tidak dapat mengetahui cgroup mana yang menjadi milik sampel saat ini. perf sekarang menerima informasi cgroup untuk setiap sampel, memungkinkan Anda membuat profil lebih dari satu cgroup dan menerapkan pengurutan berdasarkan
      cgroup dalam laporan.

    • cgroupfs, sebuah pseudo-FS untuk mengelola cgroups, telah menambahkan dukungan untuk atribut yang diperluas (xattrs), yang dengannya, misalnya, Anda dapat meninggalkan informasi tambahan untuk penangan di ruang pengguna.
    • Di pengontrol memori cgroup ditambahkandan dukungan untuk perlindungan rekursif dari nilai β€œmemory.low”, yang mengatur jumlah minimum RAM yang diberikan kepada anggota grup. Saat memasang hierarki cgroup dengan opsi "memory_recursiveprot", nilai "memory.low" yang ditetapkan untuk node bawah akan secara otomatis didistribusikan ke semua node anak.
    • Ditambahkan Kerangka kerja Uacce (Unified/User-space-access-inended Accelerator Framework) untuk berbagi alamat virtual (SVA, Shared Virtual Addressing) antara CPU dan perangkat periferal, memungkinkan akselerator perangkat keras mengakses struktur data di CPU utama.
  • Arsitektur perangkat keras
    • Untuk arsitektur ARM, kemampuan hot-fetch memori diimplementasikan.
    • Untuk arsitektur RISC-V, dukungan untuk hot plugging dan penghapusan CPU (CPU hotplug) telah ditambahkan. Untuk RISC-V 32-bit, eBPF JIT diimplementasikan.
    • Kemampuan untuk menggunakan sistem ARM 32-bit untuk menjalankan lingkungan tamu KVM telah dihapus.
    • Menghapus implementasi NUMA "dummy" untuk arsitektur s390, yang tidak ditemukan kasus penggunaan untuk mencapai peningkatan kinerja.
    • Untuk ARM64, menambahkan dukungan untuk ekstensi AMU (Unit Monitor Aktivitas), yang ditentukan di ARMv8.4 dan menyediakan penghitung kinerja yang digunakan untuk menghitung faktor koreksi penskalaan frekuensi di penjadwal tugas.
  • ΠžΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΠ΅
    • Ditambahkan dukungan untuk perangkat vDPA yang menggunakan saluran pertukaran data yang sesuai dengan spesifikasi virtio. Perangkat vDPA dapat berupa peralatan yang terhubung secara fisik atau perangkat virtual yang ditiru perangkat lunak.
    • Dalam subsistem GPIO muncul perintah ioctl() baru untuk memantau perubahan, memungkinkan Anda menginformasikan proses tentang perubahan status saluran GPIO mana pun. Sebagai contoh penggunaan perintah baru diajukan utilitas jam tangan gpio.
    • Dalam driver DRM i915 untuk kartu video Intel termasuk dukungan default untuk chip Tigerlake (β€œGen12”) dan menambahkan dukungan awal untuk kontrol lampu latar OLED. Peningkatan dukungan untuk chip Ice Lake, Elkhart Lake, Baytrail, dan Haswell.
    • Di driver amdgpu ditambahkan kemampuan untuk memuat firmware ke dalam chip USBC untuk ASIC. Peningkatan dukungan untuk chip AMD Ryzen 4000 "Renoir". Sekarang ada dukungan untuk mengendalikan panel OLED. Disediakan tampilan status firmware di debugfs.
    • Kemampuan untuk menggunakan OpenGL 4 di sistem tamu telah ditambahkan ke driver vmwgfx DRM untuk sistem virtualisasi VMware (sebelumnya mendukung OpenGL 3.3).
    • Menambahkan informasi driver DRM baru untuk sistem tampilan platform TI Keystone.
    • Driver tambahan untuk panel LCD: Feixin K101 IM2BA02, Samsung s6e88a0-ams452ef01, Novatek NT35510, Elida KD35T133, EDT, NewEast Optoelectronics WJFH116008A, Rocktech RK101II01D-CT, Frida FRD350H54004.
    • Ke sistem manajemen daya ditambahkan dukungan untuk platform Intel Jasper Lake (JSL) berbasis Atom.
    • Menambahkan dukungan untuk laptop Pinebook Pro berbasis Rockchip RK3399, tablet dan ponsel pintar Pine64 PineTab PinePhone berdasarkan Allwinner A64.
    • Menambahkan dukungan untuk codec dan chip audio baru:
      Amlogic AIU, Amlogic T9015, Texas Instruments TLV320ADCX140, Realtek RT5682, ALC245, Broadcom BCM63XX I2S, Maxim MAX98360A, Presonus Studio 1810c, MOTU MicroBook IIc.

    • Menambahkan dukungan untuk papan dan platform ARM Qualcomm Snapdragon 865 (SM8250), IPQ6018, NXP i.MX8M Plus, Kontron β€œsl28”, 11 i.MX6 opsi papan TechNexion Pico, tiga opsi Toradex Colibri baru, Samsung S7710 Galaxy Xcover 2 berdasarkan ST -Ericsson u8500, DH Electronics DHCOM SoM dan PDK2, Renesas M3ULCB, Hoperun HiHope, Linutronix Testbox v2, PocketBook Touch Lux 3.

Sumber: opennet.ru

Tambah komentar