Rilis kernel Linux 5.3

Setelah dua bulan pengembangan, Linus Torvalds diperkenalkan rilis kernel Linux 5.3. Di antara perubahan yang paling menonjol: dukungan untuk GPU AMD Navi, prosesor Zhaoxi dan teknologi manajemen daya Intel Speed ​​​​Select, kemampuan untuk menggunakan instruksi umwait untuk menunggu tanpa menggunakan siklus,
mode 'penjepitan pemanfaatan' yang meningkatkan interaktivitas untuk CPU asimetris, panggilan sistem pidfd_open, kemampuan untuk menggunakan alamat IPv4 dari subnet 0.0.0.0/8, kemungkinan akselerasi perangkat keras nftables, dukungan HDR dalam subsistem DRM, integrasi ACRN hypervisor.

В pengumuman rilis baru, Linus mengingatkan semua pengembang tentang aturan utama pengembangan kernel - mempertahankan perilaku yang sama untuk komponen ruang pengguna. Perubahan pada kernel tidak boleh merusak aplikasi yang sudah berjalan atau menyebabkan regresi di tingkat pengguna. Dalam hal ini, pelanggaran perilaku tidak hanya dapat menyebabkan perubahan pada ABI, penghapusan kode usang, atau munculnya kesalahan, tetapi juga dampak tidak langsung dari perbaikan berguna yang berfungsi dengan benar. Sebagai contoh ilustrasi ada dibuang berguna optimasi dalam kode Ext4, yang mengurangi jumlah akses drive dengan menonaktifkan pra-pembacaan tabel inode untuk permintaan I/O kecil.

Pengoptimalan mengarah pada fakta bahwa, karena penurunan aktivitas disk, entropi untuk generator bilangan acak getrandom() mulai terakumulasi lebih lambat dan dalam beberapa konfigurasi, dalam keadaan tertentu, pembekuan dapat diamati selama pemuatan hingga kumpulan entropi berada dipenuhi. Karena optimasi sangat berguna, sebuah diskusi muncul di antara pengembang di mana diusulkan untuk memperbaiki masalah dengan menonaktifkan mode pemblokiran default dari panggilan getrandom() dan menambahkan tanda opsional untuk menunggu entropi, tetapi perubahan seperti itu akan mempengaruhi kualitas angka acak pada tahap awal pemuatan.

Versi baru mencakup 15794 perbaikan dari 1974 pengembang,
ukuran tambalan - 92 MB (perubahan memengaruhi 13986 file, 258419 baris kode ditambahkan,
599137 baris dihapus). Sekitar 39% dari semuanya disajikan di 5.3
perubahan terkait dengan driver perangkat, sekitar 12% perubahannya terkait
sikap terhadap pembaruan kode khusus untuk arsitektur perangkat keras, 11%
terkait dengan tumpukan jaringan, 3% ke sistem file dan 3% ke internal
subsistem kernel.

Utama inovasi:

  • Layanan memori dan sistem
    • Pengembangan fungsionalitas 'pidfd' yang berkelanjutan untuk membantu menangani situasi penggunaan kembali PID (pidfd dikaitkan dengan proses tertentu dan tidak berubah, sedangkan PID dapat dikaitkan dengan proses lain setelah proses saat ini yang terkait dengan PID tersebut berakhir). Itu sebelumnya ditambahkan ke kernel
      panggilan sistem pidfd_send_signal() dan tanda CLONE_PIDFD dalam panggilan clone() untuk mendapatkan pidfd untuk digunakan dalam idfd_send_signal(). Penggunaan clone() dengan tanda CLONE_PIDFD dapat menyebabkan masalah pada pengelola layanan atau sistem penghentian paksa kehabisan memori pada platform Android. Dalam hal ini, panggilan ke fork() atau clone() tanpa CLONE_PIDFD digunakan untuk memulai.

      Kernel 5.3 memperkenalkan panggilan sistem pidfd_open(), yang memungkinkan Anda mendapatkan pidfd yang dapat diperiksa untuk proses arbitrer yang sudah ada dan tidak dibuat dengan memanggil clone() dengan tanda CLONE_PIDFD. Juga menambahkan dukungan untuk polling pidfd menggunakan poll() dan epoll(), yang memungkinkan manajer proses melacak penghentian proses sewenang-wenang tanpa takut akan kondisi balapan jika PID ditetapkan ke proses baru. Mekanisme untuk memberitahukan bahwa suatu proses yang terkait dengan pidfd telah dihentikan sama dengan memberitahukan bahwa proses turunannya telah dihentikan;

    • Dukungan untuk mekanisme penyematan beban telah ditambahkan ke penjadwal tugas (Penjepit pemanfaatan), memungkinkan Anda untuk mematuhi rentang frekuensi minimum atau maksimum, bergantung pada tugas yang aktif pada CPU. Mekanisme yang disajikan mempercepat tugas-tugas yang secara langsung mempengaruhi kualitas pengalaman pengguna dengan menjalankan tugas-tugas ini setidaknya pada frekuensi “yang diminta” yang lebih rendah. Tugas berprioritas rendah yang tidak memengaruhi pekerjaan pengguna diluncurkan menggunakan batas atas frekuensi yang “diizinkan”. Batas ditetapkan melalui atribut sched_uclamp_util_min dan sched_uclamp_util_max dalam panggilan sistem sched_setattr().
    • Menambahkan dukungan untuk teknologi manajemen energi Pilihan Kecepatan Intel, tersedia di server tertentu dengan prosesor Intel Xeon. Teknologi ini memungkinkan Anda untuk mengatur pengaturan kinerja dan throughput partisi untuk inti CPU yang berbeda, yang memungkinkan Anda memprioritaskan kinerja untuk tugas-tugas yang dilakukan pada inti tertentu, mengorbankan kinerja pada inti lainnya;
    • Proses di ruang pengguna diberikan kemampuan untuk menunggu dalam waktu singkat tanpa menggunakan loop menggunakan instruksi umwait. Instruksi ini, bersama dengan instruksi umonitor dan tpause, akan ditawarkan dalam chip "Tremont" Intel yang akan datang, dan akan memungkinkan penerapan penundaan yang hemat energi dan tidak mempengaruhi kinerja thread lain saat menggunakan Hyper Threading;
    • Untuk arsitektur RISC-V, dukungan untuk halaman memori besar telah ditambahkan;
    • Mekanisme penelusuran kprobes telah menambahkan kemampuan untuk melakukan dereferensi pointer kernel ke ruang pengguna, yang dapat digunakan, misalnya, untuk mengevaluasi konten struktur yang diteruskan ke panggilan sistem. Kemampuan untuk menginstal pemeriksaan pada tahap boot juga telah ditambahkan.
    • Menambahkan opsi PREEMPT_RT ke file konfigurasi untuk operasi waktu nyata. Kode itu sendiri untuk mendukung mode real-time belum ditambahkan ke kernel, namun kemunculan opsi tersebut merupakan pertanda baik bahwa epik jangka panjang integrasi Patch Realtime-Preempt hampir selesai;
    • Menambahkan panggilan sistem clone3() dengan penerapan versi antarmuka clone() yang lebih dapat diperluas, yang memungkinkan penentuan jumlah tanda yang lebih besar;
    • Menambahkan pengendali bpf_send_signal(), yang memungkinkan program BPF mengirim sinyal ke proses sewenang-wenang;
    • Untuk kejadian kinerja di lingkungan hypervisor KVM, mekanisme pemfilteran kejadian baru telah ditambahkan, memungkinkan administrator untuk menentukan jenis kejadian yang diperbolehkan atau tidak diperbolehkan untuk pemantauan di sisi sistem tamu;
    • Kemampuan untuk memproses program dengan loop telah ditambahkan ke mekanisme verifikasi aplikasi eBPF jika eksekusi loop terbatas dan tidak dapat melebihi batas jumlah maksimum instruksi;
  • Subsistem Disk, I/O dan Sistem File
    • Sistem file XFS sekarang mendukung bypass inode multi-thread (misalnya, saat memeriksa kuota). Ioctls baru BULKSTAT dan INUMBER telah ditambahkan, memberikan akses ke fitur-fitur yang muncul dalam format FS edisi kelima, seperti waktu lahir inode dan kemampuan untuk mengatur parameter BULKSTAT dan INUMBERS untuk setiap grup AG (Grup Alokasi);
    • Di Ext4 dukungan ditambahkan kekosongan dalam direktori (blok tidak tertaut).
      Pemrosesan disediakan tandai "i" (tidak dapat diubah) untuk file yang terbuka (penulisan dilarang jika tanda tersebut disetel pada saat file sudah dibuka);

    • Btrfs memberikan definisi implementasi crc32c yang cepat pada semua arsitektur;
    • Di CIFS, kode untuk dukungan smbdirect telah dihapus sebagai pengembangan eksperimental. SMB3 menambahkan kemampuan untuk menggunakan algoritma kriptografi dalam mode GCM. Menambahkan opsi pemasangan baru untuk mengekstrak parameter mode dari entri ACE (Access Control Entry). Mengoptimalkan kinerja panggilan open();
    • Menambahkan opsi ke F2FS untuk membatasi pengumpul sampah saat dijalankan dalam mode checkpoint=disable. Menambahkan ioctl untuk menghapus rentang blok dari F2FS, memungkinkan penyesuaian ukuran partisi saat itu juga. Menambahkan kemampuan untuk menempatkan file swap di F2FS untuk menyediakan I/O langsung. Menambahkan dukungan untuk menyematkan file dan mengalokasikan blok untuk file serupa untuk semua pengguna;
    • Menambahkan dukungan untuk operasi asinkron sendmsg() dan recvmsg() ke antarmuka untuk input/output asinkron io_uring;
    • Dukungan untuk kompresi menggunakan algoritma zstd dan kemampuan untuk memverifikasi gambar FS yang ditandatangani telah ditambahkan ke sistem file UBIFS;
    • Ceph FS sekarang mendukung label keamanan SELinux untuk file;
    • Untuk NFSv4, opsi pemasangan baru “nconnect=” telah diterapkan, yang menentukan jumlah koneksi yang dibuat dengan server. Lalu lintas antar koneksi ini akan didistribusikan menggunakan loadbalancing. Selain itu, server NFSv4 sekarang membuat direktori /proc/fs/nfsd/clients dengan informasi tentang klien saat ini, termasuk informasi tentang file yang telah mereka buka;
  • Virtualisasi dan Keamanan
    • Kernel menyertakan hypervisor untuk perangkat tertanam ACRN, yang ditulis dengan mempertimbangkan kesiapan untuk tugas-tugas real-time dan kesesuaian untuk digunakan dalam sistem yang sangat penting. ACRN memberikan overhead minimal, menjamin latensi rendah, dan respons yang memadai saat berinteraksi dengan peralatan. Mendukung virtualisasi sumber daya CPU, I/O, subsistem jaringan, operasi grafis dan suara. ACRN dapat digunakan untuk menjalankan beberapa mesin virtual terisolasi di unit kontrol elektronik, dasbor, sistem informasi otomotif, perangkat IoT konsumen, dan teknologi tertanam lainnya;
    • Dalam mode Pengguna Linux ditambahkan Mode perjalanan waktu, yang memungkinkan Anda memperlambat atau mempercepat waktu di lingkungan UML virtual untuk mempermudah debug kode terkait waktu. Selain itu, parameter telah ditambahkan
      time-travel-start, yang memungkinkan jam sistem dimulai dari momen tertentu dalam format epoch;

    • Opsi baris perintah kernel baru “init_on_alloc” dan “init_on_free” telah ditambahkan, ketika ditentukan, penekanan pada area memori yang dialokasikan dan dibebaskan diaktifkan (diisi dengan nol untuk malloc dan gratis), yang memungkinkan peningkatan keamanan karena overhead inisialisasi tambahan;
    • Pengemudi baru ditambahkan virtio-iommu dengan implementasi perangkat paravirtual yang memungkinkan Anda mengirim permintaan IOMMU seperti ATTACH, DETACH, MAP dan UNMAP melalui virtio transport tanpa meniru tabel halaman memori;
    • Pengemudi baru ditambahkan virtio-pmem, mewakili akses ke perangkat penyimpanan yang dipetakan ke ruang alamat fisik, seperti NVDIMM;
    • Menerapkan kemampuan untuk melampirkan kunci kriptografi ke pengguna atau namespace jaringan (kunci menjadi tidak dapat diakses di luar namespace yang dipilih), serta melindungi kunci menggunakan ACL;
    • Ke subsistem kripto ditambahkan dukungan untuk algoritma hashing non-kriptografi yang sangat cepat xxhash, kecepatannya bergantung pada kinerja memori;
  • Subsistem jaringan
    • Mengaktifkan pemrosesan alamat IPv4 dalam kisaran 0.0.0.0/8, yang sebelumnya tidak tersedia untuk digunakan. Pengenalan subnet ini akan memperbolehkan mendistribusikan 16 juta alamat IPv4 lainnya;
    • Di Netfilter untuk nftables ditambahkan dukungan untuk mekanisme akselerasi perangkat keras untuk pemfilteran paket melalui penggunaan driver tambahan API Blok Aliran. Seluruh tabel aturan dengan semua rantai dapat ditempatkan di sisi adaptor jaringan. Pengaktifannya dilakukan dengan mengikat flag NFT_TABLE_F_HW ke tabel. Mendukung metadata protokol Layer 3 dan Layer 4 yang sederhana, tindakan menerima/menolak, pemetaan berdasarkan IP dan port jaringan pengirim/penerima serta jenis protokol;
    • Ditambahkan dukungan pelacakan koneksi bawaan untuk jembatan jaringan, yang tidak memerlukan penggunaan lapisan emulasi br_netfilter;
    • Di nf_tables ditambahkan dukungan untuk modul SYNPROXY, yang mereplikasi fungsionalitas serupa dari iptables, dan kemampuan untuk memeriksa aturan untuk opsi individual di header IPv4 juga diterapkan;
    • Menambahkan kemampuan untuk melampirkan program BPF ke panggilan sistem setockopt() dan getockopt(), yang, misalnya, memungkinkan Anda melampirkan pengendali akses Anda sendiri ke panggilan ini. Selain itu, titik panggilan baru (hook) telah ditambahkan, yang dengannya Anda dapat mengatur panggilan ke program BPF satu kali untuk setiap interval RTT (waktu pulang pergi, waktu ping);
    • Untuk IPv4 dan IPv6 ditambahkan mekanisme penyimpanan data perutean nexthop baru yang bertujuan untuk meningkatkan skalabilitas tabel perutean. Pengujian menunjukkan bahwa saat menggunakan sistem baru, sekumpulan 743 ribu rute dimuat ke dalam kernel hanya dalam 4.3 detik;
    • Untuk Bluetooth diimplementasikan fungsionalitas yang diperlukan untuk mendukung ping LE;
  • Оборудование
    • Ditambahkan dukungan untuk prosesor perusahaan yang kompatibel dengan x86 Zhaoxin, dikembangkan sebagai hasil proyek bersama antara VIA Technologies dan Kota Shanghai. Keluarga CPU ZX dibangun pada arsitektur x86-64 Isaiah, melanjutkan pengembangan teknologi MELALUI Centaur;
    • Subsistem DRM (Direct Rendering Manager), serta driver grafis amdgpu dan i915, telah menambahkan dukungan untuk penguraian, pemrosesan, dan pengiriman metadata HDR (rentang dinamis tinggi) melalui port HDMI, memungkinkan penggunaan panel dan layar HDR yang mampu menampilkan rentang kecerahan tambahan;
    • Driver amdgpu telah menambahkan dukungan awal untuk GPU AMD NAVI (RX5700), yang mencakup driver dasar, kode interaksi layar (DCN2), GFX dan dukungan komputasi (GFX10),
      SDMA 5 (Sistem DMA0), manajemen daya dan encoder/decoder multimedia (VCN2). amdgpu juga meningkatkan dukungan untuk kartu berdasarkan GPU Vega12 dan Vega20, yang mana memori tambahan dan kemampuan manajemen daya telah ditambahkan;

    • Menambahkan dukungan untuk kartu berbasis GPU VegaM ke driver amdkfd (untuk GPU diskrit, seperti Fiji, Tonga, Polaris);
    • Dalam driver DRM untuk kartu video Intel untuk chip Icelake diimplementasikan mode koreksi gamma multi-segmen baru. Menambahkan kemampuan untuk mengeluarkan melalui DisplayPort dalam format YCbCr4:2:0. Firmware baru ditambahkan GuC untuk SKL, BXT, KBL, GLK dan ICL. Kemampuan untuk mematikan daya layar dalam mode asinkron telah diterapkan. Ditambahkan dukungan untuk menyimpan dan memulihkan konteks rendering untuk chip Ironlake (gen5) dan gen4 (Broadwater - Cantiga), yang memungkinkan Anda memulihkan status GPU dari ruang pengguna saat berpindah dari satu operasi batch ke operasi batch lainnya;
    • Driver Nouveau menyediakan deteksi chipset NVIDIA Turing TU116;
    • Kemampuan driver DRM/KMS untuk akselerator layar ARM Komeda (Mali D71) telah diperluas, dukungan untuk penskalaan, pemisahan/penggabungan lapisan, rotasi, penulisan tertunda, AFBC, SMMU dan format pengkodean warna Y0L2, P010, YUV420_8/10BIT telah telah ditambahkan;
    • Driver MSM menambahkan dukungan untuk GPU seri Adreno A540 yang digunakan pada prosesor Qualcomm, serta dukungan untuk pengontrol DSI MSM8998 untuk Snapdragon 835;
    • Menambahkan driver 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;

    • Ditambahkan driver untuk mengaktifkan alat akselerasi decoding
      video tersedia di Amlogic Meson SoC;

    • Di driver v3d (untuk GPU Broadcom Video Core V yang digunakan di Raspberry Pi) muncul mendukung mengirimkan shader komputer;
    • Ditambahkan driver untuk keyboard dan trackpad SPI yang digunakan pada model modern laptop Apple MacBook dan MacBookPro;
    • Ditambahkan perlindungan tambahan untuk panggilan ioctl yang terkait dengan driver floppy, dan driver itu sendiri ditandai sebagai tidak dipelihara
      (“yatim piatu”), yang berarti penghentian pengujiannya. Driver masih tersimpan di kernel, tetapi pengoperasiannya tidak dijamin benar. Driver dianggap ketinggalan jaman, karena sulit menemukan peralatan yang berfungsi untuk mengujinya - semua drive eksternal saat ini, biasanya, menggunakan antarmuka USB.

    • Ditambahkan driver cpufreq untuk papan Raspberry Pi, yang memungkinkan Anda mengontrol perubahan frekuensi prosesor secara dinamis;
    • Menambahkan dukungan untuk ARM SoC Mediatek mt8183 baru (4x Cortex-A73 + 4x Cortex-A53), TI J721E (2x Cortex-A72 + 3x Cortex-R5F + 3 DSP + MMA) dan Amlogic G12B (4x Cortex-A73 + 2x Cortex- A53 ), serta papan:
      • Librem Purisme5,
      • Kecepatan BMC,
      • MicrosoftOlympus BMC,
      • Kontron SMARC,
      • Novtech Meerkat96 (i.MX7),
      • ST Mikro Avenger96,
      • Google Cheza (Qualcomm SDM845),
      • Qualcomm Dragonboard 845c (Qualcomm SDM845),
      • Kotak TV Hugsun X99 (Rockchip RK3399),
      • Khadas Edge/Edge-V/Kapten (Rockchip RK3399),
      • Hai Harapan RZ/G2M,
      • NXP LS1021A-TSN.

Pada saat yang sama, Yayasan Perangkat Lunak Bebas Amerika Latin terbentuk
pilihan kernel 5.3 sepenuhnya gratis - Linux gratis 5.3-gnu, dibersihkan dari elemen firmware dan driver yang berisi komponen tidak bebas atau bagian kode, yang cakupannya dibatasi oleh pabrikan. Dalam rilis baru, pemuatan blob dinonaktifkan di driver qcom, hdcp drm, allegro-dvt, dan meson-vdec.
Kode pembersihan gumpalan yang diperbarui di driver dan subsistem amdgpu, i915, netx, r8169, brcmfmac, rtl8188eu, adreno, si2157, pvrusb2, touchscreen_dmi, driver suara untuk skylake, serta dalam dokumentasi mikrokode.

Sumber: opennet.ru

Tambah komentar