Kernel Linux 5.14

Kernel Linux 5.14

Selepas dua bulan pembangunan, Linus Torvalds diperkenalkan pelepasan kernel Linux 5.14. Antara perubahan yang paling ketara: panggilan sistem quotactl_fd() dan memfd_secret() baharu, penyingkiran ide dan pemacu mentah, pengawal keutamaan I/O baharu untuk cgroup, mod penjadualan tugas SCHED_CORE, infrastruktur untuk mencipta pemuat program BPF yang disahkan.

Versi baharu termasuk 15883 pembaikan daripada 2002 pembangun, saiz tampalan ialah 69 MB (perubahan mempengaruhi 12580 fail, 861501 baris kod telah ditambahkan, 321654 baris telah dipadamkan). Kira-kira 47% daripada semua perubahan yang diperkenalkan dalam 5.14 adalah berkaitan dengan pemacu peranti, kira-kira 14% daripada perubahan berkaitan dengan pengemaskinian kod khusus untuk seni bina perkakasan, 13% berkaitan dengan susunan rangkaian, 3% berkaitan dengan sistem fail dan 3% adalah berkaitan dengan subsistem kernel dalaman.

Utama inovasi:

  • subsistem cakera, input/output dan sistem fail:
    • untuk cgroup dilaksanakan pengawal keutamaan I/O baharu - rq-qos, yang boleh mengawal keutamaan pemprosesan permintaan untuk menyekat peranti yang dijana oleh ahli setiap cgroup. Sokongan pengawal keutamaan baharu telah ditambahkan pada penjadual I/O tarikh akhir mq;
    • pada sistem fail ext4 dilaksanakan arahan ioctl baharu EXT4_IOC_CHECKPOINT, yang memaksa semua transaksi belum selesai daripada log dan penimbal yang berkaitan ke cakera, dan juga menimpa kawasan yang digunakan oleh storan log masuk. Perubahan itu disediakan sebagai sebahagian daripada inisiatif untuk mengelakkan kebocoran maklumat daripada sistem fail;
    • dalam Btrfs diperkenalkan Pengoptimuman prestasi: Dengan menghapuskan pengelogan atribut lanjutan yang tidak perlu semasa pelaksanaan fsync, prestasi operasi intensif dengan atribut lanjutan meningkat sehingga 17%. Selain itu, apabila melakukan operasi pemangkasan yang tidak menjejaskan takat, penyegerakan penuh dinyahdayakan, yang mengurangkan masa operasi sebanyak 12%. Tetapan telah ditambahkan pada sysfs untuk mengehadkan lebar jalur I/O apabila menyemak FS. Menambahkan panggilan ioctl untuk membatalkan saiz semula dan memadam operasi peranti;
    • dalam XFS diolah semula pelaksanaan cache penimbal, yang dipindahkan ke peruntukan halaman memori dalam mod kelompok. Kecekapan cache yang dipertingkatkan;
    • F2FS menambah pilihan untuk berfungsi dalam mod baca sahaja dan melaksanakan mod caching blok termampat (compress_cache) untuk meningkatkan prestasi bacaan rawak. Sokongan telah dilaksanakan untuk memampatkan fail yang dipetakan ke memori menggunakan operasi mmap(). Untuk menyahdayakan pemampatan fail secara selektif dengan topeng, pilihan pemasangan baru nocompress telah dicadangkan;
    • kerja telah dilakukan dalam pemacu exFAT untuk meningkatkan keserasian dengan storan beberapa kamera digital;
    • panggilan sistem tambahan quotactl_fd(), yang membolehkan anda mengurus kuota bukan melalui fail peranti khas, tetapi dengan menentukan deskriptor fail yang dikaitkan dengan sistem fail yang kuota digunakan;
    • Pemacu lama untuk peranti blok dengan antara muka IDE telah dialih keluar daripada kernel; mereka telah lama digantikan oleh subsistem libata. Sokongan untuk peranti lama telah dikekalkan sepenuhnya, perubahan hanya melibatkan keupayaan untuk menggunakan pemacu lama, apabila menggunakan pemacu yang dipanggil /dev/hd*, dan bukan /dev/sd*;
    • Pemacu "mentah" telah dialih keluar daripada kernel, menyediakan akses tanpa buffer untuk menyekat peranti melalui antara muka /dev/raw. Fungsi ini telah lama dilaksanakan dalam aplikasi menggunakan bendera O_DIRECT;
  • memori dan perkhidmatan sistem:
    • mod penjadualan baharu telah dilaksanakan dalam penjadual tugas SCHED_CORE, yang membolehkan anda mengawal proses yang boleh berjalan bersama pada teras CPU yang sama. Setiap proses boleh diberikan pengecam kuki yang mentakrifkan skop kepercayaan antara proses (contohnya, kepunyaan pengguna atau bekas yang sama). Apabila mengatur pelaksanaan kod, penjadual boleh memastikan bahawa satu teras CPU dikongsi hanya antara proses yang dikaitkan dengan pemilik yang sama, yang boleh digunakan untuk menyekat beberapa serangan Spectre dengan menghalang tugas yang boleh dipercayai dan tidak boleh dipercayai daripada dijalankan pada utas SMT (Hyper Threading) yang sama ;
    • untuk mekanisme cgroup, sokongan untuk operasi bunuh telah dilaksanakan, yang membolehkan anda mematikan semua proses yang dikaitkan dengan kumpulan itu sekali gus (hantar SIGKILL) dengan menulis "1" ke fail maya cgroup.kill;
    • keupayaan diperluaskan yang berkaitan dengan tindak balas terhadap pengesanan kunci belah (β€œkunci berpecah”) yang berlaku apabila mengakses data tidak sejajar dalam ingatan disebabkan fakta bahawa apabila melaksanakan arahan atom, data melintasi dua baris cache CPU. Penyekatan sedemikian membawa kepada penurunan prestasi yang ketara, jadi sebelum ini adalah mungkin untuk menamatkan secara paksa aplikasi yang menyebabkan penyekatan. Keluaran baharu menambah parameter baris arahan kernel "split_lock_detect=ratelimit:N", yang membolehkan anda menentukan had seluruh sistem pada kadar operasi mengunci sesaat, selepas melebihi mana-mana proses yang menjadi sumber kunci split akan terpaksa berhenti selama 20 ms dan bukannya tamat;
    • Pengawal lebar jalur cgroup CFS (pengawal lebar jalur CFS), yang menentukan berapa banyak masa pemproses boleh diperuntukkan kepada setiap cgroup, mempunyai keupayaan untuk menentukan had yang dihadkan oleh tempoh tindakan tertentu, yang membolehkan pengawalseliaan yang lebih baik bagi beban sensitif kependaman. Contohnya, menetapkan cpu.cfs_quota_us kepada 50000 dan cpu.cfs_period_us kepada 100000 akan membenarkan sekumpulan proses membuang 100ms masa CPU setiap 50ms;
    • tambah infrastruktur awal untuk mencipta pemuat program BPF, yang seterusnya akan membenarkan muat turun hanya program BPF yang ditandatangani dengan kunci digital yang boleh dipercayai;
    • menambah operasi futex baharu FUTEX_LOCK_PI2, yang menggunakan pemasa monoton untuk mengira tamat masa, yang mengambil kira masa yang dibelanjakan oleh sistem dalam mod tidur;
    • untuk seni bina RISC-V, sokongan untuk halaman memori yang besar (Transparent Huge-Pages) dan keupayaan untuk menggunakan KFENCE untuk mengenal pasti ralat apabila bekerja dengan ingatan;
    • ke dalam panggilan sistem madvise(), yang menyediakan cara untuk mengoptimumkan pengurusan memori proses, tambah Bendera MADV_POPULATE_READ dan MADV_POPULATE_WRITE untuk menjana "kesalahan halaman" pada semua halaman memori yang dipetakan untuk operasi baca atau tulis, tanpa melakukan bacaan atau tulis sebenar (prefault). Penggunaan bendera boleh berguna untuk mengurangkan kelewatan dalam pelaksanaan program, terima kasih kepada pelaksanaan proaktif pengendali "kesalahan halaman" untuk semua halaman yang tidak diperuntukkan sekaligus, tanpa menunggu akses sebenar kepada mereka;
    • dalam sistem ujian unit kulit tambah sokongan untuk menjalankan ujian dalam persekitaran QEMU;
    • pengesan baharu menambah: "bunyi bising" untuk mengesan kelewatan aplikasi yang disebabkan oleh pengendalian gangguan, dan " timerlat " untuk memaparkan maklumat terperinci tentang kelewatan apabila bangun daripada isyarat pemasa;
  • maya dan keselamatan:
    • tambah panggilan sistem memfd_secret(), yang membolehkan anda mencipta kawasan memori peribadi dalam ruang alamat terpencil, hanya boleh dilihat oleh proses pemilik, tidak ditunjukkan dalam proses lain dan tidak boleh diakses secara langsung kepada kernel;
    • dalam sistem penapisan panggilan sistem seccomp, apabila memindahkan pengendali kunci ke dalam ruang pengguna, adalah mungkin untuk menggunakan satu operasi atom untuk mencipta deskriptor fail untuk tugas terpencil dan mengembalikannya apabila memproses panggilan sistem. Operasi yang dicadangkan menyelesaikan masalah itu dengan gangguan pengendali dalam ruang pengguna apabila isyarat tiba;
    • tambah mekanisme baru untuk menguruskan pengehadan sumber dalam ruang nama ID pengguna, yang mengikat pembilang rlimit individu kepada pengguna dalam "ruang nama pengguna". Perubahan itu menyelesaikan masalah dengan penggunaan pembilang sumber biasa apabila seorang pengguna menjalankan proses dalam bekas yang berbeza;
    • hipervisor KVM untuk sistem ARM64 telah menambah keupayaan untuk menggunakan sambungan MTE (MemTag, Memory Tagging Extension) dalam sistem tetamu, yang membolehkan anda mengikat tag pada setiap operasi peruntukan memori dan mengatur pemeriksaan penggunaan penunjuk yang betul untuk menyekat eksploitasi kelemahan yang disebabkan oleh mengakses blok memori yang telah dibebaskan, melimpah penimbal, akses sebelum pemulaan dan penggunaan di luar konteks semasa;
    • Pengesahan Penunjuk yang disediakan oleh platform ARM64 kini boleh dikonfigurasikan secara berasingan untuk ruang kernel dan pengguna. Teknologi ini membolehkan anda menggunakan arahan ARM64 khusus untuk mengesahkan alamat pemulangan menggunakan tandatangan digital yang disimpan dalam bit atas penuding itu sendiri yang tidak digunakan;
    • dalam Linux mod Pengguna tambah sokongan untuk penggunaan pemacu untuk peranti PCI dengan bas PCI maya, dilaksanakan oleh pemacu PCI-over-virtio;
    • untuk sistem x86, sokongan tambahan untuk peranti paravirtual virtio-iommu, yang membolehkan anda menghantar permintaan IOMMU, seperti ATTACH, DETACH, MAP dan UNMAP, melalui pengangkutan virtio tanpa meniru jadual halaman memori;
    • Untuk CPU Intel, daripada keluarga Skylake hingga Coffee Lake, penggunaan Intel TSX (Transactional Synchronization Extensions), yang menyediakan alatan untuk meningkatkan prestasi aplikasi berbilang benang dengan menghapuskan operasi penyegerakan yang tidak perlu secara dinamik, dilumpuhkan secara lalai. Sambungan dilumpuhkan kerana kemungkinan serangan Zombieload, memanipulasi kebocoran maklumat melalui saluran pihak ketiga yang berlaku semasa operasi mekanisme untuk gangguan operasi tak segerak (TAA, TSX Asynchronous Abort);
  • subsistem rangkaian:
    • penyepaduan berterusan ke dalam teras MPTCP (MultiPath TCP), lanjutan daripada protokol TCP untuk mengatur operasi sambungan TCP dengan penghantaran paket secara serentak di sepanjang beberapa laluan melalui antara muka rangkaian berbeza yang dikaitkan dengan alamat IP yang berbeza. Dalam isu baru tambah mekanisme untuk menetapkan dasar pencincangan trafik anda sendiri untuk IPv4 dan IPv6 (dasar cincangan berbilang path), yang membolehkan daripada ruang pengguna untuk menentukan medan dalam paket, termasuk yang dikapsulkan, akan digunakan semasa mengira cincang yang menentukan pilihan laluan untuk paket;
    • sokongan soket telah ditambahkan pada virtio pengangkutan maya SOCK_SEQPACKET (penghantaran datagram yang teratur dan boleh dipercayai);
    • Keupayaan mekanisme soket SO_REUSEPORT telah diperluaskan, yang membolehkan beberapa soket pendengaran menyambung ke satu port sekaligus untuk menerima sambungan dengan pengedaran permintaan masuk secara serentak merentas semua soket yang disambungkan melalui SO_REUSEPORT, yang memudahkan penciptaan aplikasi pelayan berbilang benang. . Dalam versi baharu tambah cara untuk memindahkan kawalan ke soket lain sekiranya berlaku kegagalan apabila memproses permintaan oleh soket yang dipilih pada mulanya (menyelesaikan masalah dengan kehilangan sambungan individu apabila memulakan semula perkhidmatan);
  • peralatan:
    • dalam pemandu amdgpu dilaksanakan sokongan untuk siri GPU AMD Radeon RX 6000 baharu, diberi nama kod "Beige Goby" (Navi 24) dan "Yellow Carp", serta sokongan yang dipertingkatkan untuk GPU Aldebaran (gfx90a) dan Van Gogh APU. Menambah keupayaan untuk bekerja serentak dengan beberapa panel eDP. Untuk APU Renoir, sokongan untuk bekerja dengan penimbal yang disulitkan dalam memori video (TMZ, Zon Memori Dipercayai) telah dilaksanakan. Menambah sokongan untuk kad grafik hot-clug. Untuk GPU Radeon RX 6000 (Navi 2x) dan GPU AMD yang lebih lama, sokongan untuk mekanisme penjimatan kuasa ASPM (Pengurusan Kuasa Aktif) didayakan secara lalai, yang sebelum ini hanya didayakan untuk GPU Navi 1x, Vega dan Polaris;
    • untuk cip AMD, sokongan untuk memori maya dikongsi (SVM, memori maya dikongsi) telah ditambah berdasarkan subsistem HMM (Pengurusan memori heterogen), yang membenarkan penggunaan peranti dengan unit pengurusan memori mereka sendiri (MMU, unit pengurusan memori), yang boleh mengakses memori utama. Termasuk menggunakan HMM, anda boleh mengatur ruang alamat dikongsi antara GPU dan CPU, di mana GPU boleh mengakses memori utama proses;
    • menambah sokongan teknologi awal AMD Smart Shift, yang menukar parameter penggunaan kuasa CPU dan GPU secara dinamik pada komputer riba dengan set cip dan kad grafik AMD untuk meningkatkan prestasi semasa permainan, penyuntingan video dan pemaparan 3D;
    • dalam pemacu i915 untuk kad video Intel termasuk sokongan untuk cip Intel Alderlake P;
    • tambah pemacu drm/hyperv untuk penyesuai grafik maya Hyper-V;
    • tambah pemacu grafik simpledrm yang menggunakan framebuffer EFI-GOP atau VESA yang disediakan oleh perisian tegar UEFI atau BIOS untuk output. Tujuan utama pemacu adalah untuk menyediakan keupayaan output grafik semasa peringkat awal but, sebelum pemacu DRM penuh boleh digunakan. Pemacu juga boleh digunakan sebagai penyelesaian sementara untuk peralatan yang belum mempunyai pemacu DRM asli;
    • tambah sokongan komputer semua-dalam-satu Raspberry Pi 400;
    • Menambah pemacu privasi dell-wmi untuk menyokong suis perkakasan kamera dan mikrofon yang disertakan dalam komputer riba Dell;
    • untuk komputer riba Lenovo tambah Antara muka WMI untuk menukar parameter BIOS melalui sysfs /sys/class/firmware-attributes/;
    • diperluaskan sokongan untuk peranti dengan antara muka USB4;
    • tambah sokongan untuk kad bunyi dan codec AmLogic SM1 TOACODEC, Intel AlderLake-M, NXP i.MX8, NXP TFA1, TDF9897, Rockchip RK817, Qualcomm Quinary MI2 dan Texas Instruments TAS2505. Sokongan audio yang dipertingkatkan pada komputer riba HP dan ASUS. Ditambah tampalan untuk mengurangkan kelewatan sebelum audio mula dimainkan pada peranti dengan antara muka USB.

Sumber – opennet.ru.

Sumber: linux.org.ru