Kernel Linux 5.14

Kernel Linux 5.14

Setelah dua bulan pengembangan, Linus Torvalds diperkenalkan rilis kernel Linux 5.14. Di antara perubahan yang paling menonjol: panggilan sistem kuotactl_fd() dan memfd_secret() baru, penghapusan driver ide dan mentah, pengontrol prioritas I/O baru untuk cgroup, mode penjadwalan tugas SCHED_CORE, infrastruktur untuk membuat pemuat program BPF yang terverifikasi.

Versi baru mencakup 15883 perbaikan dari 2002 pengembang, ukuran patch 69 MB (perubahan mempengaruhi 12580 file, 861501 baris kode ditambahkan, 321654 baris dihapus). Sekitar 47% dari semua perubahan yang diperkenalkan di 5.14 terkait dengan driver perangkat, sekitar 14% perubahan terkait dengan pembaruan kode khusus untuk arsitektur perangkat keras, 13% terkait dengan tumpukan jaringan, 3% terkait dengan sistem file, dan 3% terkait dengan subsistem kernel internal.

Utama inovasi:

  • subsistem disk, input/output dan sistem file:
    • untuk cgroup diimplementasikan pengontrol prioritas I/O baru - rq-qos, yang dapat mengontrol prioritas pemrosesan permintaan untuk memblokir perangkat yang dihasilkan oleh anggota setiap cgroup. Dukungan pengontrol prioritas baru telah ditambahkan ke penjadwal I/O tenggat waktu mq;
    • pada sistem file ext4 diimplementasikan perintah ioctl baru EXT4_IOC_CHECKPOINT, yang memaksa semua transaksi yang tertunda dari log dan buffer terkait ke disk, dan juga menimpa area yang digunakan oleh penyimpanan log in. Perubahan tersebut disiapkan sebagai bagian dari inisiatif untuk mencegah kebocoran informasi dari sistem file;
    • di Btrfs masuk Pengoptimalan kinerja: Dengan menghilangkan pencatatan atribut yang diperluas yang tidak perlu selama eksekusi fsync, kinerja operasi intensif dengan atribut yang diperluas meningkat hingga 17%. Selain itu, saat melakukan operasi pemangkasan yang tidak memengaruhi luasan, sinkronisasi penuh dinonaktifkan, sehingga mengurangi waktu pengoperasian sebesar 12%. Pengaturan telah ditambahkan ke sysfs untuk membatasi bandwidth I/O saat memeriksa FS. Menambahkan panggilan ioctl untuk membatalkan operasi pengubahan ukuran dan penghapusan perangkat;
    • di XFS dikerjakan ulang implementasi cache buffer, yang ditransfer ke alokasi halaman memori dalam mode batch. Peningkatan efisiensi cache;
    • F2FS menambahkan opsi untuk bekerja dalam mode read-only dan menerapkan mode cache blok terkompresi (compress_cache) untuk meningkatkan kinerja pembacaan acak. Dukungan telah diterapkan untuk mengompresi file yang dipetakan ke memori menggunakan operasi mmap(). Untuk menonaktifkan kompresi file secara selektif berdasarkan mask, opsi mount baru nocompress telah diusulkan;
    • pekerjaan telah dilakukan pada driver exFAT untuk meningkatkan kompatibilitas dengan penyimpanan beberapa kamera digital;
    • menambahkan panggilan sistem kuotactl_fd(), yang memungkinkan Anda mengelola kuota tidak melalui file perangkat khusus, tetapi dengan menentukan deskriptor file yang terkait dengan sistem file yang kuotanya diterapkan;
    • Driver lama untuk perangkat blok dengan antarmuka IDE telah dihapus dari kernel, mereka telah lama digantikan oleh subsistem libata. Dukungan untuk perangkat lama telah dipertahankan sepenuhnya, perubahan hanya menyangkut kemampuan untuk menggunakan driver lama, saat menggunakan drive yang disebut /dev/hd*, dan bukan /dev/sd*;
    • Driver “mentah” telah dihapus dari kernel, menyediakan akses tanpa buffer untuk memblokir perangkat melalui antarmuka /dev/raw. Fungsionalitas ini telah lama diterapkan dalam aplikasi yang menggunakan flag O_DIRECT;
  • memori dan layanan sistem:
    • mode penjadwalan baru telah diterapkan di penjadwal tugas SCHED_CORE, yang memungkinkan Anda mengontrol proses mana yang dapat berjalan bersama pada inti CPU yang sama. Setiap proses dapat diberi pengidentifikasi cookie yang menentukan cakupan kepercayaan antar proses (misalnya, milik pengguna atau wadah yang sama). Saat mengatur eksekusi kode, penjadwal dapat memastikan bahwa satu inti CPU hanya dibagikan di antara proses yang terkait dengan pemilik yang sama, yang dapat digunakan untuk memblokir beberapa serangan Spectre dengan mencegah tugas yang dapat dipercaya dan tidak dapat dipercaya berjalan pada thread SMT (Hyper Threading) yang sama. ;
    • untuk mekanisme cgroup, dukungan untuk operasi kill telah diterapkan, yang memungkinkan Anda untuk mematikan semua proses yang terkait dengan grup sekaligus (kirim SIGKILL) dengan menulis "1" ke file virtual cgroup.kill;
    • kemampuan yang diperluas terkait dengan respons terhadap deteksi kunci terpisah (“kunci terpisah”) yang terjadi saat mengakses data yang tidak selaras di memori karena fakta bahwa saat menjalankan instruksi atom, data melintasi dua baris cache CPU. Pemblokiran seperti itu menyebabkan penurunan kinerja yang signifikan, sehingga sebelumnya aplikasi yang menyebabkan pemblokiran dapat dihentikan secara paksa. Rilis baru menambahkan parameter baris perintah kernel “split_lock_detect=ratelimit:N”, yang memungkinkan Anda menentukan batas seluruh sistem pada laju operasi penguncian per detik, setelah melebihi proses apa pun yang menjadi sumber kunci terpisah akan terpaksa berhenti selama 20 ms alih-alih berhenti;
    • Pengontrol bandwidth cgroup CFS (CFS bandwidth controller), yang menentukan berapa banyak waktu prosesor yang dapat dialokasikan untuk setiap cgroup, memiliki kemampuan untuk menentukan batas yang dibatasi oleh durasi tindakan tertentu, yang memungkinkan pengaturan beban sensitif latensi yang lebih baik. Misalnya, menyetel cpu.cfs_quota_us ke 50000 dan cpu.cfs_period_us ke 100000 akan memungkinkan sekelompok proses membuang 100 md waktu CPU setiap 50 md;
    • ditambahkan infrastruktur awal untuk membuat pemuat program BPF, yang selanjutnya akan memungkinkan pengunduhan hanya program BPF yang ditandatangani dengan kunci digital yang dapat dipercaya;
    • menambahkan operasi futex baru FUTEX_LOCK_PI2, yang menggunakan pengatur waktu monoton untuk menghitung batas waktu, yang memperhitungkan waktu yang dihabiskan oleh sistem dalam mode tidur;
    • untuk arsitektur RISC-V, dukungan untuk halaman memori besar (Transparent Huge-Pages) dan kemampuan untuk menggunakan KFENCE untuk mengidentifikasi kesalahan saat bekerja dengan memori;
    • ke dalam panggilan sistem madvise(), yang menyediakan sarana untuk mengoptimalkan manajemen memori proses, ditambahkan Tanda MADV_POPULATE_READ dan MADV_POPULATE_WRITE untuk menghasilkan "kesalahan halaman" pada semua halaman memori yang dipetakan untuk operasi baca atau tulis, tanpa melakukan operasi baca atau tulis yang sebenarnya (prefault). Penggunaan flag dapat berguna untuk mengurangi penundaan dalam eksekusi program, berkat eksekusi proaktif dari pengendali “kesalahan halaman” untuk semua halaman yang tidak terisi sekaligus, tanpa menunggu akses sebenarnya ke halaman tersebut;
    • dalam sistem pengujian unit Kunit ditambahkan dukungan untuk menjalankan pengujian di lingkungan QEMU;
    • pelacak baru menambahkan: "kebisingan" untuk melacak penundaan aplikasi yang disebabkan oleh penanganan interupsi, dan " timerlat " untuk menampilkan informasi rinci tentang penundaan saat bangun dari sinyal pengatur waktu;
  • virtualisasi dan keamanan:
    • ditambahkan panggilan sistem memfd_rahasia(), yang memungkinkan Anda membuat area memori pribadi di ruang alamat terisolasi, hanya terlihat oleh pemilik proses, tidak tercermin dalam proses lain dan tidak dapat diakses langsung oleh kernel;
    • dalam sistem pemfilteran panggilan sistem seccomp, saat memindahkan penangan kunci ke ruang pengguna, dimungkinkan untuk menggunakan satu operasi atom untuk membuat deskriptor file untuk tugas yang terisolasi dan mengembalikannya saat memproses panggilan sistem. Operasi yang diusulkan terpecahkan masalahnya dengan interupsi pawang di ruang pengguna ketika sinyal tiba;
    • ditambahkan mekanisme baru untuk mengelola pembatasan sumber daya di namespace ID pengguna, yang mengikat penghitung rlimit individu ke pengguna di "namespace pengguna". Perubahan tersebut memecahkan masalah dengan penggunaan penghitung sumber daya umum ketika satu pengguna menjalankan proses dalam wadah yang berbeda;
    • hypervisor KVM untuk sistem ARM64 telah menambahkan kemampuan untuk menggunakan ekstensi MTE (MemTag, Memory Tagging Extension) di sistem tamu, yang memungkinkan Anda untuk mengikat tag ke setiap operasi alokasi memori dan mengatur pemeriksaan penggunaan pointer yang benar untuk memblokir eksploitasi kerentanan yang disebabkan oleh akses ke blok memori yang sudah dibebaskan, buffer berlebih, akses sebelum inisialisasi dan penggunaan di luar konteks saat ini;
    • Otentikasi Pointer yang disediakan oleh platform ARM64 sekarang dapat dikonfigurasi secara terpisah untuk kernel dan ruang pengguna. Teknologi ini memungkinkan Anda menggunakan instruksi ARM64 khusus untuk memverifikasi alamat pengirim menggunakan tanda tangan digital yang disimpan di bit atas penunjuk itu sendiri yang tidak terpakai;
    • dalam mode Pengguna Linux ditambahkan dukungan untuk penggunaan driver untuk perangkat PCI dengan bus PCI virtual, yang diimplementasikan oleh driver PCI-over-virtio;
    • untuk sistem x86, dukungan tambahan untuk perangkat virtio-iommu para-virtualisasi, yang memungkinkan Anda mengirim permintaan IOMMU, seperti ATTACH, DETACH, MAP dan UNMAP, melalui transport virtio tanpa meniru tabel halaman memori;
    • Untuk CPU Intel, dari keluarga Skylake hingga Coffee Lake, penggunaan Intel TSX (Transactional Synchronization Extensions), yang menyediakan alat untuk meningkatkan kinerja aplikasi multi-thread dengan secara dinamis menghilangkan operasi sinkronisasi yang tidak perlu, dinonaktifkan secara default. Ekstensi dinonaktifkan karena kemungkinan serangan beban zombie, memanipulasi kebocoran informasi melalui saluran pihak ketiga yang terjadi selama pengoperasian mekanisme gangguan operasi asinkron (TAA, TSX Asynchronous Abort);
  • subsistem jaringan:
    • integrasi lanjutan 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. Dalam edisi baru ditambahkan mekanisme untuk menetapkan kebijakan hashing lalu lintas Anda sendiri untuk IPv4 dan IPv6 (kebijakan hash multipath), yang memungkinkan dari ruang pengguna untuk menentukan bidang mana dalam paket, termasuk yang dienkapsulasi, yang akan digunakan saat menghitung hash yang menentukan pilihan jalur untuk paket;
    • dukungan soket telah ditambahkan ke virtio transport virtual SOCK_SEQPACKET (transmisi datagram yang teratur dan andal);
    • Kemampuan mekanisme soket SO_REUSEPORT telah diperluas, yang memungkinkan beberapa soket pendengar terhubung ke satu port sekaligus untuk menerima koneksi dengan distribusi permintaan masuk secara bersamaan ke semua soket yang terhubung melalui SO_REUSEPORT, yang menyederhanakan pembuatan aplikasi server multi-thread . Dalam versi baru ditambahkan sarana untuk mentransfer kontrol ke soket lain jika terjadi kegagalan saat memproses permintaan oleh soket yang dipilih pertama kali (menyelesaikan masalah hilangnya koneksi individual saat memulai ulang layanan);
  • peralatan:
    • di driver amdgpu diimplementasikan dukungan untuk GPU seri AMD Radeon RX 6000 baru, dengan nama kode “Beige Goby” (Navi 24) dan “Yellow Carp”, serta peningkatan dukungan untuk GPU Aldebaran (gfx90a) dan APU Van Gogh. Menambahkan kemampuan untuk bekerja secara bersamaan dengan beberapa panel eDP. Untuk APU Renoir, dukungan untuk bekerja dengan buffer terenkripsi di memori video (TMZ, Trusted Memory Zone) telah diterapkan. Menambahkan dukungan untuk kartu grafis hot-unplug. Untuk GPU Radeon RX 6000 (Navi 2x) dan GPU AMD lama, dukungan untuk mekanisme penghematan daya ASPM (Active State Power Management) diaktifkan secara default, yang sebelumnya hanya diaktifkan untuk GPU Navi 1x, Vega, dan Polaris;
    • untuk chip AMD, dukungan untuk memori virtual bersama (SVM, memori virtual bersama) telah ditambahkan berdasarkan subsistem HMM (Manajemen memori heterogen), yang memungkinkan penggunaan perangkat dengan unit manajemen memorinya sendiri (MMU, unit manajemen memori), yang dapat mengakses memori utama. Termasuk menggunakan HMM, Anda dapat mengatur ruang alamat bersama antara GPU dan CPU, di mana GPU dapat mengakses memori utama proses;
    • menambahkan dukungan teknologi awal Pergeseran Cerdas AMD, yang secara dinamis mengubah parameter konsumsi daya CPU dan GPU pada laptop dengan chipset dan kartu grafis AMD untuk mendongkrak kinerja saat bermain game, mengedit video, dan rendering 3D;
    • di driver i915 untuk kartu video Intel termasuk dukungan untuk chip Intel Alderlake P;
    • menambahkan driver drm/hyperv untuk adaptor grafis virtual Hyper-V;
    • ditambahkan driver grafis simpledrm yang menggunakan framebuffer EFI-GOP atau VESA yang disediakan oleh firmware UEFI atau BIOS untuk output. Tujuan utama driver adalah untuk memberikan kemampuan output grafis selama tahap awal boot, sebelum driver DRM lengkap dapat digunakan. Driver juga dapat digunakan sebagai solusi sementara untuk peralatan yang belum memiliki driver DRM asli;
    • ditambahkan dukungan komputer lengkap Raspberry Pi 400;
    • Menambahkan driver privasi Dell-wmi untuk mendukung sakelar perangkat keras kamera dan mikrofon yang disertakan dalam laptop Dell;
    • untuk laptop Lenovo ditambahkan Antarmuka WMI untuk mengubah parameter BIOS melalui sysfs /sys/class/firmware-attributes/;
    • diperluas dukungan untuk perangkat dengan antarmuka USB4;
    • ditambahkan dukungan untuk kartu suara dan codec AmLogic SM1 TOACODEC, Intel AlderLake-M, NXP i.MX8, NXP TFA1, TDF9897, Rockchip RK817, Qualcomm Quinary MI2 dan Texas Instruments TAS2505. Peningkatan dukungan audio pada laptop HP dan ASUS. Ditambahkan patch untuk mengurangi penundaan sebelum audio mulai diputar pada perangkat dengan antarmuka USB.

Sumber – opennet.ru.

Sumber: linux.org.ru