Rilis kernel Linux 5.6

Setelah dua bulan pengembangan, Linus Torvalds diperkenalkan rilis kernel Linux 5.6. Di antara perubahan yang paling menonjol: integrasi antarmuka WireGuard VPN, dukungan untuk USB4, namespace untuk waktu, kemampuan untuk membuat penangan kemacetan TCP menggunakan BPF, dukungan awal untuk MultiPath TCP, membersihkan kernel dari masalah 2038, mekanisme “bootconfig” , ZonaFS.

Versi baru mencakup 13702 perbaikan dari 1810 pengembang,
ukuran tambalan - 40 MB (perubahan memengaruhi 11577 file, 610012 baris kode ditambahkan,
294828 baris dihapus). Sekitar 45% dari semuanya disajikan di 5.6
perubahan terkait dengan driver perangkat, sekitar 15% perubahannya terkait
sikap terhadap pembaruan kode khusus untuk arsitektur perangkat keras, 12%
terkait dengan tumpukan jaringan, 4% dengan sistem file dan 3% dengan internal
subsistem kernel.

Utama inovasi:

  • Subsistem jaringan
    • Ditambahkan implementasi antarmuka VPN WireGuard, yang diimplementasikan berdasarkan metode enkripsi modern (ChaCha20, Poly1305, Curve25519, BLAKE2s), mudah digunakan, bebas komplikasi, telah membuktikan dirinya dalam sejumlah implementasi besar dan memberikan kinerja yang sangat tinggi (3,9 kali lebih cepat dari OpenVPN dalam hal throughput). WireGuard menggunakan konsep perutean kunci enkripsi, yang melibatkan pemasangan kunci pribadi ke setiap antarmuka jaringan dan menggunakannya untuk mengikat kunci publik. Kunci publik dipertukarkan untuk membuat koneksi dengan cara yang mirip dengan SSH. Kriptografi primitif diperlukan agar WireGuard dapat berfungsi Kami pernah terbawa oleh dari perpustakaan seng sebagai bagian dari Crypto API standar dan termasuk ke dalam inti 5.5.
    • Dimulai integrasi komponen yang diperlukan untuk mendukung 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. Untuk aplikasi jaringan, koneksi agregat seperti itu terlihat seperti koneksi TCP biasa, dan seluruh logika pemisahan aliran dilakukan oleh MPTCP. Multipath TCP dapat digunakan untuk meningkatkan throughput dan meningkatkan keandalan. Misalnya, MPTCP dapat digunakan untuk mengatur transmisi data pada ponsel pintar menggunakan WiFi dan tautan 4G secara bersamaan, atau untuk mengurangi biaya dengan menghubungkan server menggunakan beberapa tautan murah, bukan satu tautan mahal.
    • Ditambahkan dukungan untuk disiplin pemrosesan antrian jaringan sch_ets (Seleksi Transmisi yang Ditingkatkan, IEEE 802.1Qaz), yang menyediakan kemampuan untuk mendistribusikan bandwidth antara kelas lalu lintas yang berbeda. Jika beban pada kelas trafik tertentu berada di bawah bandwidth yang dialokasikan, maka ETS memperbolehkan kelas trafik lain untuk menggunakan bandwidth yang tersedia (tidak terpakai). Qdisc sch_ets dikonfigurasi sebagai disiplin PRIO dan menggunakan kelas lalu lintas untuk menentukan batas bandwidth yang ketat dan bersama. ETS bekerja sebagai kombinasi disiplin ilmu SEBELUMNYA и PRB — jika kelas lalu lintas sangat terbatas, PRIO digunakan, tetapi jika tidak ada lalu lintas dalam antrian, cara kerjanya seperti DRR.
    • Menambahkan program BPF jenis baru BPF_PROG_TYPE_STRUCT_OPS, yang memungkinkan Anda mengimplementasikan penangan fungsi kernel melalui BPF. Saat ini fitur tersebut sudah dapat digunakan untuk mengimplementasikan algoritma pengendalian kemacetan TCP dalam bentuk program BPF. Sebagai contoh diajukan Program BPF dengan implementasi algoritma DCTCP.
    • Diterima menjadi inti perubahan, alat penerjemah alat etos dengan ioctl() untuk digunakan 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 implementasi algoritma manajemen antrian jaringan FQ-PIE (Flow Queue PIE), yang bertujuan untuk mengurangi dampak negatif buffering paket perantara pada peralatan jaringan edge (bufferbloat). FQ-PIE menunjukkan efisiensi tinggi bila digunakan dalam sistem dengan modem kabel.
  • Subsistem Disk, I/O dan Sistem File
    • Untuk sistem file Btrfs ditambahkan implementasi operasi DISCARD yang tidak sinkron (menandai blok yang dibebaskan yang tidak perlu lagi disimpan secara fisik). Awalnya, operasi DISCARD dilakukan secara serempak, yang dapat menyebabkan penurunan kinerja karena drive menunggu perintah terkait selesai. Implementasi asinkron memungkinkan Anda untuk tidak menunggu drive menyelesaikan DISCARD dan melakukan operasi ini di latar belakang.
    • Di XFS dilakukan Membersihkan kode yang menggunakan penghitung waktu 32-bit lama (tipe time_t digantikan oleh time64_t), menyebabkan masalah 2038. Memperbaiki kesalahan dan kerusakan memori yang terjadi pada platform 32-bit. Kode telah dikerjakan ulang agar berfungsi dengan atribut yang diperluas.
    • Untuk sistem file ext4 masuk Optimalisasi kinerja terkait penanganan penguncian inode selama operasi baca dan tulis. Peningkatan kinerja penulisan ulang dalam mode I/O Langsung. Untuk menyederhanakan diagnosis masalah, kode kesalahan pertama dan terakhir disimpan di superblock.
    • Pada sistem file F2FS diimplementasikan kemampuan untuk menyimpan data dalam bentuk terkompresi. Untuk file atau direktori individual, kompresi dapat diaktifkan menggunakan perintah "chattr +c file" atau "chattr +c dir; sentuh direktori/file". Untuk mengompresi seluruh partisi, Anda dapat menggunakan opsi “-o kompres_extension=ext” di utilitas mount.
    • Kernel menyertakan sistem file ZonaFS, yang menyederhanakan pekerjaan tingkat rendah dengan perangkat penyimpanan yang dikategorikan. Drive yang dikategorikan berarti perangkat pada hard disk magnetik atau SSD NVMe, ruang penyimpanan yang dibagi menjadi zona-zona yang membentuk kelompok blok atau sektor, di mana hanya penambahan data berurutan yang diperbolehkan, memperbarui seluruh kelompok blok. FS ZoneFS dikembangkan oleh Western Digital dan mengaitkan setiap zona di drive dengan file terpisah yang dapat digunakan untuk menyimpan data dalam mode mentah tanpa manipulasi di tingkat sektor dan blok, yaitu. Mengizinkan aplikasi menggunakan API file alih-alih mengakses perangkat blok secara langsung menggunakan ioctl.
    • Di NFS, pemasangan partisi melalui UDP dinonaktifkan secara default. Menambahkan dukungan untuk kemampuan menyalin file antar server secara langsung, yang ditentukan dalam spesifikasi NFS 4.2. Menambahkan opsi pemasangan baru "softreval", yang memungkinkan nilai atribut yang di-cache digunakan jika terjadi kegagalan server. Misalnya, saat menentukan opsi ini, setelah server tidak tersedia, tetap ada kemungkinan untuk berpindah sepanjang jalur di partisi NFS dan mengakses informasi yang telah tersimpan di cache.
    • Dilakukan optimalisasi kinerja mekanisme fs-verity, yang digunakan untuk memantau integritas dan otentikasi file individual. Peningkatan kecepatan membaca berurutan berkat penggunaan pohon hash Merkle. Performa FS_IOC_ENABLE_VERITY telah dioptimalkan ketika tidak ada data di cache (pembacaan preemptive pada halaman yang berisi data telah diterapkan).
  • Virtualisasi dan Keamanan
    • Kemampuan untuk menonaktifkan modul SELinux saat berjalan sudah tidak digunakan lagi, dan membongkar SELinux yang sudah diaktifkan akan dilarang di masa mendatang. Untuk menonaktifkan SELinux Anda harus meneruskan parameter "selinux=0" pada baris perintah kernel.
    • Ditambahkan dukungan untuk ruang nama untuk waktu (ruang nama waktu), memungkinkan Anda untuk mengikat status jam sistem ke wadah (CLOCK_REALTIME,
      CLOCK_MONOTONIC, CLOCK_BOOTTIME), gunakan waktu Anda sendiri di dalam container dan, saat memigrasikan container ke host lain, pastikan pembacaan CLOCK_MONOTONIC dan CLOCK_BOOTTIME tetap tidak berubah (perhitungkan waktu setelah memuat, dengan atau tanpa memperhitungkan berada dalam mode tidur ).

    • Kumpulan pemblokiran /dev/random telah dihapus. Perilaku /dev/random mirip dengan /dev/urandom dalam hal mencegah pemblokiran entropi setelah inisialisasi kumpulan.
    • Kernel inti menyertakan driver yang memungkinkan sistem tamu yang menjalankan VirtualBox untuk memasang direktori yang diekspor oleh lingkungan host (VirtualBox Shared Folder).
    • Satu set tambalan telah ditambahkan ke subsistem BPF (petugas BPF), ketika menggunakan mekanisme Retpoline untuk melindungi dari serangan kelas Spectre V2, ini memungkinkan Anda untuk meningkatkan efisiensi pemanggilan program BPF ketika peristiwa terkait dengannya terjadi (misalnya, ini memungkinkan untuk mempercepat pemanggilan penangan XDP ketika a paket jaringan tiba).
    • Menambahkan driver untuk mendukung TEE (Trusted Execution Environment) yang terpasang pada AMD APU.
  • Layanan memori dan sistem
    • BPF telah menambahkan dukungan untuk fungsi global. Pengembangan dilakukan sebagai bagian dari inisiatif untuk menambah dukungan fungsi perpustakaan yang dapat dimasukkan dalam program BPF. Langkah selanjutnya adalah mendukung ekstensi dinamis yang memungkinkan pemuatan fungsi global, termasuk mengganti fungsi global yang ada saat sedang digunakan. Subsistem BPF juga menambahkan dukungan untuk varian operasi peta (digunakan untuk menyimpan data persisten), yang mendukung eksekusi dalam mode batch.
    • Ditambahkan Perangkat “cpu_cooling” memungkinkan Anda mendinginkan CPU yang terlalu panas dengan menempatkannya dalam kondisi idle untuk jangka waktu singkat.
    • Menambahkan panggilan sistem buka di2(), yang menawarkan serangkaian tanda tambahan untuk membatasi resolusi jalur file (larangan melintasi titik pemasangan, tautan simbolik, tautan ajaib (/proc/PID/fd), komponen “../”).
    • Untuk sistem heterogen berdasarkan arsitektur big.LITTLE, yang menggabungkan inti CPU hemat energi yang kuat dan kurang efisien dalam satu chip, parameter uclamp_min disetel saat menjalankan tugas waktu nyata (muncul di kernel 5.3 ada mekanisme untuk mengamankan beban). Parameter ini memastikan bahwa tugas akan ditempatkan oleh penjadwal pada inti CPU yang memiliki kinerja memadai.
    • Kernel dibebaskan dari masalah tahun 2038. Mengganti penangan terakhir yang tersisa, yang menggunakan tipe 32-bit (signed int) time_t untuk penghitung waktu penting, yang, dengan mempertimbangkan laporan dari tahun 1970, akan meluap pada tahun 2038.
    • Peningkatan berkelanjutan pada antarmuka I/O asinkron io_uringdi mana dijamin dukungan untuk operasi baru: IORING_OP_FALLOCATE (reservasi area kosong), IORING_OP_OPENAT,
      IORING_OP_OPENAT2,
      IORING_OP_CLOSE (membuka dan menutup file),
      IORING_OP_FILES_UPDATE (menambah dan menghapus file dari daftar akses cepat),
      IORING_OP_STATX (permintaan informasi file),
      IORING_OP_BACA,
      IORING_OP_WRITE (analog sederhana dari IORING_OP_READV dan IORING_OP_WRITEV),
      IORING_OP_FADVISE,
      IORING_OP_MADVISE (varian panggilan asynchronous posix_fadvise dan madvise), IORING_OP_SEND,
      IORING_OP_RECV (mengirim dan menerima data jaringan),
      IORING_OP_EPOLL_CTL (melakukan operasi pada deskriptor file epoll).

    • Menambahkan panggilan sistem pidfd_getfd(), memungkinkan suatu proses mengambil deskriptor file untuk file yang terbuka dari proses lain.
    • Diimplementasikan mekanisme “bootconfig”, yang memungkinkan, selain opsi baris perintah, untuk menentukan parameter kernel melalui file pengaturan. Untuk menambahkan file tersebut ke image initramfs, utilitas bootconfig diusulkan. Fitur ini dapat digunakan, misalnya, untuk mengkonfigurasi kprobe pada saat boot.
    • Didesain ulang mekanisme menunggu untuk menulis dan membaca data dalam pipa yang tidak disebutkan namanya. Perubahan tersebut memungkinkan untuk mempercepat tugas-tugas seperti perakitan paralel proyek-proyek besar. Namun, optimasi dapat menyebabkan kondisi balapan di GNU karena adanya bug pada rilis 4.2.1, yang telah diperbaiki pada versi 4.3.
    • Menambahkan tanda PR_SET_IO_FLUSHER ke prctl(), yang dapat digunakan untuk menandai proses bebas memori yang tidak boleh dibatasi ketika sistem kehabisan memori.
    • Berdasarkan sistem distribusi memori ION yang digunakan di Android, sebuah subsistem telah diimplementasikan tumpukan dma-buf, yang memungkinkan Anda mengontrol alokasi buffer DMA untuk berbagi area memori antara driver, aplikasi, dan berbagai subsistem.
  • Arsitektur perangkat keras
    • Menambahkan dukungan untuk ekstensi E0PD, yang muncul di ARMv8.5 dan memungkinkan perlindungan terhadap serangan yang terkait dengan eksekusi instruksi spekulatif pada CPU. Proteksi berbasis E0PD menghasilkan overhead yang lebih rendah dibandingkan proteksi KPTI (Kernel Page Table Isolation).
    • Untuk sistem berdasarkan arsitektur ARMv8.5, dukungan untuk instruksi RNG telah ditambahkan, menyediakan akses ke generator bilangan pseudo-acak perangkat keras. Di kernel, instruksi RNG digunakan untuk menghasilkan entropi saat menginisialisasi generator nomor pseudo-acak yang disediakan kernel.
    • Menghapus dukungan untuk MPX (Memory Protection Extensions) yang ditambahkan di kernel 3.19 dan memungkinkan Anda mengatur pemeriksaan pointer untuk memastikan bahwa batas area memori dipatuhi. Teknologi ini tidak banyak digunakan di kompiler dan telah dihapus dari GCC.
    • Untuk arsitektur RISC-V, dukungan untuk alat debugging KASan (Kernel address sanitizer) telah diterapkan, yang membantu mengidentifikasi kesalahan saat bekerja dengan memori.
  • Оборудование
    • Dukungan spesifikasi diterapkan USB 4.0, yang didasarkan pada protokol Thunderbolt 3 dan menyediakan throughput hingga 40 Gbps, dengan tetap menjaga kompatibilitas dengan USB 2.0 dan USB 3.2. Dengan analogi dengan petir Antarmuka USB 4.0 memungkinkan Anda melakukan terowongan protokol yang berbeda melalui satu kabel dengan konektor Tipe-C, termasuk PCIe, Display Port dan USB 3.x, serta implementasi perangkat lunak protokol, misalnya, untuk mengatur tautan jaringan antar host. Implementasinya didasarkan pada driver Thunderbolt yang sudah disertakan dalam kernel Linux dan menyesuaikannya agar berfungsi dengan host dan perangkat yang kompatibel dengan USB4. Perubahan tersebut juga menambahkan dukungan untuk perangkat Thunderbolt 3 ke implementasi perangkat lunak Manajer Koneksi, yang bertanggung jawab untuk membuat terowongan untuk menghubungkan beberapa perangkat melalui satu konektor.
    • Di driver amdgpu ditambahkan dukungan awal untuk teknologi perlindungan salinan HDCP 2.x (Perlindungan Konten Digital Bandwidth Tinggi). Menambahkan dukungan untuk chip AMD Pollock ASIC berdasarkan Raven 2. Menerapkan kemampuan reset GPU untuk keluarga Renoir dan Navi.
    • Driver DRM untuk kartu video Intel ditambahkan Dukungan DSI VDSC untuk chip berdasarkan mikroarsitektur Ice Lake dan Tiger Lake, mmap LMEM (memori lokal perangkat) telah diterapkan, penguraian VBT (Video BIOS Table) telah ditingkatkan, dukungan HDCP 2.2 telah diterapkan untuk chip Coffee Lake.
    • Pekerjaan dilanjutkan untuk menyatukan kode driver amdkfd (untuk GPU diskrit, seperti Fiji, Tonga, Polaris) dengan driver amdgpu.
    • Driver k10temp telah dikerjakan ulang, menambahkan dukungan untuk menampilkan parameter tegangan dan arus untuk CPU AMD Zen, serta informasi yang diperluas dari sensor suhu yang digunakan pada CPU Zen dan Zen 2.
    • Di pengemudi nouveau ditambahkan dukungan untuk mode pemuatan firmware terverifikasi untuk GPU NVIDIA berdasarkan mikroarsitektur Turing (GeForce RTX 2000), yang memungkinkan untuk mengaktifkan dukungan akselerasi 3D untuk kartu ini (diperlukan pengunduhan firmware resmi dengan tanda tangan digital NVIDIA). Menambahkan dukungan untuk mesin grafis TU10x. Masalah dengan Audio HD telah teratasi.
    • Menambahkan dukungan untuk kompresi data saat ditransmisikan melalui DisplayPort MST (Multi-Stream Transport).
    • Menambahkan driver baru "ath11k» untuk chip nirkabel Qualcomm yang mendukung 802.11ax.
      Driver didasarkan pada tumpukan mac80211 dan mendukung mode titik akses, stasiun kerja, dan node jaringan mesh.

    • Melalui sysfs, akses ke pembacaan sensor suhu yang dapat dibaca yang digunakan pada hard drive dan SSD modern disediakan.
    • Berkontribusi perubahan signifikan pada sistem suara ALSA, yang bertujuan untuk menghilangkan kode masalah tahun 2038 (menghindari penggunaan tipe time_t 32-bit di antarmuka snd_pcm_mmap_status dan snd_pcm_mmap_control). Menambahkan dukungan untuk codec audio baru
      Qualcomm WCD9340/WCD9341, Realtek RT700, RT711, RT715, RT1308, Ingenik JZ4770.

    • Ditambahkan driver untuk panel LCD Logic PD 28, Jimax8729d MIPI-DSI, igenic JZ4770, Sony acx424AKP, Leadtek LTK500HD1829, Xinpeng XPP055C272, AUO B116XAK01, GiantPlus GPM940B0,
      BOE NV140FHM-N49,
      Satoz SAT050AT40H12R2,
      Tajam LS020B1DD01D.

    • Ditambahkan dukungan untuk papan ARM dan platform Gen1 Amazon Echo (berbasis OMAP3630), Samsung Galaxy S III mini (GT-I8190), Allwinner Emlid Neutis, Libre Computer ALL-H3-IT, PineH64 Model B, Aibretech Amlogic GX PC,
      Armada SolidRun Clearfog GTR, NXPGateworks GW59xx,
      Pembaca e-book Tolino Shine 3,
      Artis Tertanam COM (i.MX7ULP), SolidRun Clearfog CX/ITX dan HoneyComb (LX2160A), Google Coral Edge TPU (i.MX8MQ),
      Rockchip Radxa Dalang Pembawa, Radxa Rock Pi N10, VMARC RK3399Pro SOM
      ST Ericsson HREF520, Inforce 6640, SC7180 IDP, Atmel/Microchip AM9X60 (ARM926 SoC, Kizboxmini), ST stm32mp15, AM3703/AM3715/DM3725, ST Ericsson ab8505, Unisoc SC9863A, Qualcomm SC7180. Menambahkan dukungan untuk pengontrol PCIe yang digunakan di Raspberry Pi 4.

Pada saat yang sama, Yayasan Perangkat Lunak Bebas Amerika Latin terbentuk
pilihan kernel 5.6 sepenuhnya gratis - Linux gratis 5.6-gnu, dibersihkan dari elemen firmware dan driver yang berisi komponen tidak bebas atau bagian kode, yang cakupannya dibatasi oleh pabrikan. Rilis baru ini menonaktifkan pemuatan blob pada driver untuk AMD TEE, ATH11K, dan Mediatek SCP. Kode pembersihan gumpalan diperbarui di driver dan subsistem AMD PSP, amdgpu dan nouveau.

Sumber: opennet.ru

Tambah komentar