Keluaran kernel Linux 5.3

Selepas dua bulan pembangunan, Linus Torvalds diperkenalkan pelepasan kernel Linux 5.3. Antara perubahan yang paling ketara: sokongan untuk GPU AMD Navi, pemproses Zhaoxi dan teknologi pengurusan kuasa Intel Speed ​​​​Select, keupayaan untuk menggunakan arahan umwait untuk menunggu tanpa menggunakan kitaran,
mod 'penghimpitan penggunaan' yang meningkatkan interaktiviti untuk CPU tidak simetri, panggilan sistem pidfd_open, keupayaan untuk menggunakan alamat IPv4 daripada subnet 0.0.0.0/8, kemungkinan pecutan perkakasan nftables, sokongan HDR dalam subsistem DRM, penyepaduan ACRN hipervisor.

В pengumuman keluaran baharu, Linus mengingatkan semua pembangun peraturan utama pembangunan kernel - mengekalkan tingkah laku yang sama untuk komponen ruang pengguna. Perubahan pada kernel tidak sepatutnya memecahkan aplikasi yang sudah berjalan atau membawa kepada regresi pada peringkat pengguna. Dalam kes ini, pelanggaran tingkah laku boleh menyebabkan bukan sahaja perubahan dalam ABI, pengalihan keluar kod lapuk, atau rupa ralat, tetapi juga kesan tidak langsung daripada penambahbaikan berguna yang berfungsi dengan betul. Sebagai contoh ilustrasi ada dibuang berguna pengoptimuman dalam kod Ext4, yang mengurangkan bilangan akses pemacu dengan melumpuhkan pra-bacaan jadual inod untuk permintaan I/O kecil.

Pengoptimuman membawa kepada fakta bahawa, disebabkan penurunan dalam aktiviti cakera, entropi untuk penjana nombor rawak getrandom() mula terkumpul dengan lebih perlahan dan dalam beberapa konfigurasi, dalam keadaan tertentu, pembekuan boleh diperhatikan semasa pemuatan sehingga kumpulan entropi adalah. diisi. Memandangkan pengoptimuman benar-benar berguna, perbincangan timbul di kalangan pembangun di mana ia dicadangkan untuk menyelesaikan masalah dengan melumpuhkan mod penyekatan lalai panggilan getrandom() dan menambah bendera pilihan untuk menunggu entropi, tetapi perubahan sedemikian akan menjejaskan kualiti nombor rawak pada peringkat awal pemuatan.

Versi baharu termasuk 15794 pembaikan daripada 1974 pembangun,
saiz tampung - 92 MB (perubahan mempengaruhi 13986 fail, 258419 baris kod telah ditambahkan,
599137 baris dialih keluar). Kira-kira 39% daripada semua dibentangkan dalam 5.3
perubahan berkaitan dengan pemacu peranti, kira-kira 12% daripada perubahan adalah
sikap terhadap mengemas kini kod khusus untuk seni bina perkakasan, 11%
berkaitan dengan timbunan rangkaian, 3% kepada sistem fail dan 3% kepada dalaman
subsistem kernel.

Utama inovasi:

  • Perkhidmatan memori dan sistem
    • Pembangunan berterusan fungsi 'pidfd' untuk membantu mengendalikan situasi penggunaan semula PID (pidfd dikaitkan dengan proses tertentu dan tidak berubah, manakala PID boleh dikaitkan dengan proses lain selepas proses semasa yang dikaitkan dengan PID itu ditamatkan). Ia telah ditambahkan pada kernel sebelum ini
      panggilan sistem pidfd_send_signal() dan bendera CLONE_PIDFD dalam panggilan clone() untuk mendapatkan pidfd untuk digunakan dalam idfd_send_signal(). Menggunakan clone() dengan bendera CLONE_PIDFD boleh menyebabkan masalah dengan pengurus perkhidmatan atau sistem penamatan daya ingatan platform Android. Dalam kes ini, panggilan ke fork() atau clone() tanpa CLONE_PIDFD digunakan untuk bermula.

      Kernel 5.3 memperkenalkan panggilan sistem pidfd_open(), yang membolehkan anda mendapatkan pidfd yang boleh disemak untuk proses sedia ada sewenang-wenangnya yang tidak dibuat dengan memanggil clone() dengan bendera CLONE_PIDFD. Juga menambah sokongan untuk pengundian pidfd menggunakan poll() dan epoll(), yang membolehkan pengurus proses menjejaki penamatan proses sewenang-wenangnya tanpa rasa takut terhadap keadaan perlumbaan jika PID diperuntukkan kepada proses baharu. Mekanisme untuk memberitahu apabila proses yang dikaitkan dengan pidfd telah ditamatkan adalah serupa dengan pemberitahuan apabila proses anaknya telah ditamatkan;

    • Sokongan untuk mekanisme penyematan beban telah ditambahkan pada penjadual tugas (Pengapitan penggunaan), membolehkan anda mematuhi julat frekuensi minimum atau maksimum, bergantung pada tugas yang aktif pada CPU. Mekanisme yang dibentangkan mempercepatkan tugas yang secara langsung menjejaskan kualiti pengalaman pengguna dengan menjalankan tugasan ini sekurang-kurangnya pada hujung bawah kekerapan "diminta". Tugas keutamaan rendah yang tidak menjejaskan kerja pengguna dilancarkan menggunakan had atas kekerapan "dibenarkan". Had ditetapkan melalui atribut sched_uclamp_util_min dan sched_uclamp_util_max dalam panggilan sistem sched_setattr().
    • Sokongan tambahan untuk teknologi pengurusan tenaga Intel Speed ​​​​Select, tersedia pada pelayan terpilih dengan pemproses Intel Xeon. Teknologi ini membolehkan anda menetapkan tetapan prestasi dan pemprosesan partition untuk teras CPU yang berbeza, yang membolehkan anda mengutamakan prestasi untuk tugas yang dilakukan pada teras tertentu, mengorbankan prestasi pada teras lain;
    • Proses dalam ruang pengguna diberikan keupayaan untuk menunggu dalam masa yang singkat tanpa menggunakan gelung menggunakan arahan umwait. Arahan ini, bersama-sama dengan arahan umonitor dan tpause, akan ditawarkan dalam cip "Tremont" Intel yang akan datang, dan akan membenarkan pelaksanaan kelewatan yang cekap tenaga dan tidak menjejaskan prestasi utas lain apabila menggunakan Hyper Threading;
    • Untuk seni bina RISC-V, sokongan untuk halaman memori besar telah ditambah;
    • Mekanisme pengesanan kprobes telah menambah keupayaan untuk menyahrujuk penunjuk kernel kepada ruang pengguna, yang boleh digunakan, sebagai contoh, untuk menilai kandungan struktur yang dihantar kepada panggilan sistem. Keupayaan untuk memasang semakan pada peringkat but juga telah ditambah.
    • Menambahkan pilihan PREEMPT_RT pada fail konfigurasi untuk operasi masa nyata. Kod itu sendiri untuk menyokong mod masa nyata belum lagi ditambahkan pada kernel, tetapi kemunculan pilihan adalah petanda yang baik bahawa epik jangka panjang integrasi Tampalan Preempt Masa Nyata hampir siap;
    • Menambahkan panggilan sistem clone3() dengan pelaksanaan versi antara muka clone() yang lebih boleh diperluas, yang membolehkan menentukan bilangan bendera yang lebih besar;
    • Menambah pengendali bpf_send_signal(), membenarkan program BPF menghantar isyarat kepada proses sewenang-wenangnya;
    • Untuk acara perf dalam persekitaran hipervisor KVM, mekanisme penapisan acara baharu telah ditambah, membolehkan pentadbir menentukan jenis acara yang dibenarkan atau tidak dibenarkan untuk pemantauan di sisi sistem tetamu;
    • Keupayaan untuk memproses program dengan gelung telah ditambahkan pada mekanisme pengesahan aplikasi eBPF jika pelaksanaan gelung adalah terhad dan tidak boleh menyebabkan melebihi had pada bilangan maksimum arahan;
  • Subsistem cakera, I/O dan sistem fail
    • Sistem fail XFS kini menyokong pintasan inod berbilang benang (contohnya, semasa menyemak kuota). ioctls BULKSTAT dan INUMBERS baharu telah ditambah, menyediakan akses kepada ciri yang muncul dalam edisi kelima format FS, seperti masa lahir inode dan keupayaan untuk menetapkan parameter BULKSTAT dan INUMBERS untuk setiap kumpulan AG (Kumpulan Peruntukan);
    • Dalam Ext4 sokongan ditambah lompang dalam direktori (blok tidak dipautkan).
      Pemprosesan disediakan bendera "i" (tidak boleh diubah) untuk fail terbuka (menulis adalah dilarang dalam keadaan jika bendera ditetapkan pada masa fail telah dibuka);

    • Btrfs menyediakan definisi pelaksanaan pantas crc32c pada semua seni bina;
    • Dalam CIFS, kod untuk sokongan smbdirect telah dialih keluar sebagai pembangunan percubaan. SMB3 menambah keupayaan untuk menggunakan algoritma kriptografi dalam mod GCM. Menambah pilihan pelekap baharu untuk mengekstrak parameter mod daripada entri ACE (Entri Kawalan Akses). Mengoptimumkan prestasi panggilan open();
    • Menambah pilihan pada F2FS untuk mengehadkan pemungut sampah apabila berjalan dalam mod checkpoint=disable. Menambah ioctl untuk mengalih keluar julat blok daripada F2FS, membenarkan pelarasan saiz partition on-the-fly. Menambah keupayaan untuk meletakkan fail swap dalam F2FS untuk menyediakan I/O langsung. Menambah sokongan untuk menyemat fail dan memperuntukkan blok untuk fail serupa untuk semua pengguna;
    • Menambahkan sokongan untuk operasi tak segerak sendmsg() dan recvmsg() pada antara muka untuk io_uring input/output tak segerak;
    • Sokongan untuk pemampatan menggunakan algoritma zstd dan keupayaan untuk mengesahkan imej FS yang ditandatangani telah ditambahkan pada sistem fail UBIFS;
    • Ceph FS kini menyokong label keselamatan SELinux untuk fail;
    • Untuk NFSv4, pilihan pelekap baharu "nconnect=" telah dilaksanakan, yang menentukan bilangan sambungan yang diwujudkan dengan pelayan. Trafik antara sambungan ini akan diedarkan menggunakan pengimbangan beban. Selain itu, pelayan NFSv4 kini mencipta direktori /proc/fs/nfsd/clients dengan maklumat tentang klien semasa, termasuk maklumat tentang fail yang telah mereka buka;
  • Maya dan Keselamatan
    • Kernel termasuk hipervisor untuk peranti terbenam ACRN, yang ditulis dengan memperhatikan kesediaan untuk tugas masa nyata dan kesesuaian untuk digunakan dalam sistem kritikal misi. ACRN menyediakan overhed minimum, menjamin kependaman rendah dan responsif yang mencukupi apabila berinteraksi dengan peralatan. Menyokong virtualisasi sumber CPU, I/O, subsistem rangkaian, grafik dan operasi bunyi. ACRN boleh digunakan untuk menjalankan berbilang mesin maya terpencil dalam unit kawalan elektronik, papan pemuka, sistem maklumat automotif, peranti IoT pengguna dan teknologi terbenam lain;
    • Dalam Linux mod Pengguna tambah Mod perjalanan masa, yang membolehkan anda memperlahankan atau mempercepatkan masa dalam persekitaran UML maya untuk memudahkan anda menyahpepijat kod berkaitan masa. Di samping itu, parameter telah ditambah
      permulaan perjalanan masa, yang membolehkan jam sistem bermula dari saat tertentu dalam format zaman;

    • Pilihan baris arahan kernel baharu “init_on_alloc” dan “init_on_free” telah ditambah, apabila dinyatakan, sifar kawasan memori yang diperuntukkan dan dibebaskan didayakan (mengisi dengan sifar untuk malloc dan percuma), yang membolehkan keselamatan meningkat disebabkan overhed permulaan tambahan;
    • Pemandu baharu ditambah virtio-iommu dengan pelaksanaan peranti paravirtual yang membolehkan anda menghantar permintaan IOMMU seperti ATTACH, DETACH, MAP dan UNMAP melalui pengangkutan virtio tanpa meniru jadual halaman memori;
    • Pemandu baharu ditambah virtio-pmem, mewakili akses kepada peranti storan yang dipetakan ke ruang alamat fizikal, seperti NVDIMM;
    • Melaksanakan keupayaan untuk melampirkan kunci kriptografi kepada pengguna atau ruang nama rangkaian (kunci menjadi tidak boleh diakses di luar ruang nama yang dipilih), serta melindungi kunci menggunakan ACL;
    • Kepada subsistem crypto tambah sokongan untuk algoritma pencincangan bukan kriptografi yang sangat pantas xxhash, kelajuannya bergantung pada prestasi memori;
  • Subsistem rangkaian
    • Membolehkan pemprosesan alamat IPv4 dalam julat 0.0.0.0/8, yang sebelum ini tidak tersedia untuk digunakan. Pengenalan subnet ini akan membenarkan mengedarkan 16 juta lagi alamat IPv4;
    • Dalam Netfilter untuk nftables tambah sokongan untuk mekanisme pecutan perkakasan untuk penapisan paket melalui penggunaan pemacu tambahan API Blok Aliran. Keseluruhan jadual peraturan dengan semua rantai boleh diletakkan di sisi penyesuai rangkaian. Pendayaan dilakukan dengan mengikat bendera NFT_TABLE_F_HW pada jadual. Menyokong metadata protokol Lapisan 3 dan Lapisan 4 yang mudah, menerima/menolak tindakan, pemetaan oleh IP dan port rangkaian penghantar/penerima dan jenis protokol;
    • Ditambah sokongan penjejakan sambungan terbina dalam untuk jambatan rangkaian, yang tidak memerlukan penggunaan lapisan meniru br_netfilter;
    • Dalam nf_tables tambah sokongan untuk modul SYNPROXY, yang mereplikasi fungsi serupa daripada iptables, dan keupayaan untuk menyemak peraturan untuk pilihan individu dalam pengepala IPv4 juga dilaksanakan;
    • Menambahkan keupayaan untuk melampirkan program BPF pada panggilan sistem setsockopt() dan getsockopt(), yang, sebagai contoh, membolehkan anda melampirkan pengendali akses anda sendiri pada panggilan ini. Di samping itu, titik panggilan baharu (cangkuk) telah ditambah, yang dengannya anda boleh mengatur panggilan ke program BPF sekali untuk setiap selang RTT (masa pergi balik, masa ping);
    • Untuk IPv4 dan IPv6 tambah mekanisme penyimpanan data penghalaan nexthop baharu yang bertujuan untuk meningkatkan kebolehskalaan jadual penghalaan. Ujian menunjukkan bahawa apabila menggunakan sistem baharu, satu set 743 ribu laluan dimuatkan ke dalam kernel dalam masa 4.3 saat sahaja;
    • Untuk Bluetooth dilaksanakan fungsi yang diperlukan untuk menyokong ping LE;
  • Оборудование
    • Ditambah sokongan untuk pemproses serasi x86 syarikat Zhaoxin, dibangunkan hasil projek bersama antara VIA Technologies dan Perbandaran Shanghai. Keluarga CPU ZX dibina pada seni bina x86-64 Isaiah, meneruskan pembangunan teknologi MELALUI Centaur;
    • Subsistem DRM (Direct Rendering Manager), serta pemacu grafik amdgpu dan i915, telah menambah sokongan untuk menghurai, memproses dan menghantar metadata HDR (julat dinamik tinggi) melalui port HDMI, membenarkan penggunaan panel HDR dan skrin yang mampu memaparkan julat kecerahan tambahan;
    • Pemacu amdgpu telah menambah sokongan awal untuk AMD NAVI GPU (RX5700), yang termasuk pemacu asas, kod interaksi skrin (DCN2), GFX dan sokongan pengiraan (GFX10),
      SDMA 5 (Sistem DMA0), pengurusan kuasa dan pengekod/penyahkod multimedia (VCN2). amdgpu juga menambah baik sokongan untuk kad berdasarkan GPU Vega12 dan Vega20, yang mana memori tambahan dan keupayaan pengurusan kuasa telah ditambah;

    • Menambahkan sokongan untuk kad berdasarkan GPU VegaM pada pemacu amdkfd (untuk GPU diskret, seperti Fiji, Tonga, Polaris);
    • Dalam pemacu DRM untuk kad video Intel untuk cip Icelake dilaksanakan mod pembetulan gamma berbilang segmen baharu. Menambahkan keupayaan untuk mengeluarkan melalui DisplayPort dalam format YCbCr4:2:0. Perisian tegar baharu ditambah GuC untuk SKL, BXT, KBL, GLK dan ICL. Keupayaan untuk mematikan kuasa skrin dalam mod tak segerak telah dilaksanakan. Ditambah sokongan untuk menyimpan dan memulihkan konteks pemaparan untuk cip Ironlake (gen5) dan gen4 (Broadwater - Cantiga), yang membolehkan anda memulihkan keadaan GPU dari ruang pengguna apabila berpindah dari satu operasi kelompok ke yang lain;
    • Pemacu Nouveau menyediakan pengesanan cipset NVIDIA Turing TU116;
    • Keupayaan pemacu DRM/KMS untuk pemecut skrin ARM Komeda (Mali D71) telah diperluaskan, sokongan untuk penskalaan, lapisan pecah/cantum, putaran, penulisan tertunda, AFBC, SMMU dan format pengekodan warna Y0L2, P010, YUV420_8/10BIT mempunyai telah ditambah;
    • Pemacu MSM menambah sokongan untuk siri A540 GPU Adreno yang digunakan dalam pemproses Qualcomm, serta sokongan untuk pengawal MSM8998 DSI untuk Snapdragon 835;
    • Menambah pemacu untuk panel LCD Samsung S6E63M0, Armadeus ST0700, EDT ETM0430G0DH6, OSD101T2045-53TS,
      Evervision VGG804821, FriendlyELEC HD702E, KOE tx14d24vm1bpa, TFC S9700RTWV43TR-01B, EDT ET035012DM6 dan VXT VL050-8048NT-C01;

    • Ditambah pemacu untuk membolehkan alat pecutan penyahkodan
      video tersedia dalam Amlogic Meson SoC;

    • Dalam pemacu v3d (untuk Broadcom Video Core V GPU yang digunakan dalam Raspberry Pi) muncul menyokong menghantar shader pengiraan;
    • Ditambah pemacu untuk papan kekunci dan pad jejak SPI yang digunakan dalam model moden komputer riba Apple MacBook dan MacBookPro;
    • Ditambah perlindungan tambahan untuk panggilan ioctl yang dikaitkan dengan pemacu liut, dan pemandu itu sendiri ditandakan sebagai tidak diselenggara
      (“yatim piatu”), yang membayangkan penamatan ujiannya. Pemacu masih disimpan dalam kernel, tetapi operasi yang betul tidak dijamin. Pemandu dianggap ketinggalan zaman, kerana sukar untuk mencari peralatan kerja untuk mengujinya - semua pemacu luaran semasa, sebagai peraturan, menggunakan antara muka USB.

    • Ditambah pemacu cpufreq untuk papan Raspberry Pi, yang membolehkan anda mengawal perubahan dalam kekerapan pemproses secara dinamik;
    • Menambah sokongan untuk ARM SoC Mediatek mt8183 baharu (4x Cortex-A73 + 4x Cortex-A53), TI J721E (2x Cortex-A72 + 3x Cortex-R5F + 3 DSPs + MMA) dan Amlogic G12B (4x Cortex-A73 + 2x Cortex- A53 ), serta papan:
      • Purisme Librem5,
      • Aspeed BMC,
      • Microsoft Olympus BMC,
      • Kontron SMARC,
      • Novtech Meerkat96 (i.MX7),
      • ST Micro Avenger96,
      • Google Cheza (Qualcomm SDM845),
      • Qualcomm Dragonboard 845c (Qualcomm SDM845),
      • Kotak TV Hugsun X99 (Rockchip RK3399),
      • Khadas Edge/Edge-V/Captain (Rockchip RK3399),
      • HiHope RZ/G2M,
      • NXP LS1021A-TSN.

Pada masa yang sama, Yayasan Perisian Percuma Amerika Latin terbentuk
pilihan kernel percuma sepenuhnya 5.3 - Linux-percuma 5.3-gnu, dibersihkan daripada perisian tegar dan elemen pemacu yang mengandungi komponen bukan bebas atau bahagian kod, yang skopnya dihadkan oleh pengilang. Dalam keluaran baharu, pemuatan gumpalan dilumpuhkan dalam pemacu qcom, hdcp drm, allegro-dvt dan meson-vdec.
Kod pembersihan gumpalan dikemas kini dalam pemacu dan subsistem amdgpu, i915, netx, r8169, brcmfmac, rtl8188eu, adreno, si2157, pvrusb2, touchscreen_dmi, pemacu bunyi untuk skylake, serta dalam dokumentasi mikrokod.

Sumber: opennet.ru

Tambah komen