Keluaran kernel Linux 5.9

Selepas dua bulan pembangunan, Linus Torvalds diperkenalkan pelepasan kernel Linux 5.9. Antara perubahan yang paling ketara: mengehadkan import simbol daripada modul proprietari kepada modul GPL, mempercepatkan operasi penukaran konteks menggunakan arahan pemproses FSGSBASE, sokongan untuk pemampatan imej kernel menggunakan Zstd, mengolah semula keutamaan benang dalam kernel, sokongan untuk PRP (Protokol Redundansi Selari), penjadualan sedar lebar jalur dalam penjadual tarikh akhir, pembungkusan awalan halaman memori, bendera keupayaan CAP_CHECKPOINT_RESTOR, panggilan sistem close_range(), peningkatan prestasi dm-crypt, penyingkiran kod untuk tetamu Xen PV 32-bit, memori papak baharu mekanisme pengurusan, pilihan "menyelamat" dalam Btrfs, sokongan untuk penyulitan sebaris dalam ext4 dan F2FS.

Versi baharu termasuk 16074 pembetulan daripada pembangun 2011,
saiz tampung - 62 MB (perubahan mempengaruhi 14548 fail, 782155 baris kod telah ditambahkan, 314792 baris telah dipadamkan). Kira-kira 45% daripada semua dibentangkan dalam 5.9
perubahan berkaitan dengan pemacu peranti, kira-kira 15% daripada perubahan adalah
sikap terhadap mengemas kini kod khusus untuk seni bina perkakasan, 13%
berkaitan dengan timbunan rangkaian, 3% kepada sistem fail dan 3% kepada dalaman
subsistem kernel.

Utama inovasi:

  • Perkhidmatan memori dan sistem
    • Diketatkan perlindungan terhadap penggunaan lapisan GPL untuk memautkan pemacu proprietari dengan komponen kernel yang dieksport hanya untuk modul di bawah lesen GPL. Bendera TAINT_PROPRIETARY_MODULE kini diwarisi dalam semua modul yang mengimport simbol daripada modul dengan bendera ini. Jika modul GPL cuba mengimport simbol daripada modul bukan GPL, maka modul GPL itu akan mewarisi label TAINT_PROPRIETARY_MODULE dan tidak akan dapat mengakses komponen kernel yang tersedia hanya untuk modul berlesen GPL, walaupun modul tersebut telah mengimport simbol daripada sebelumnya. kategori "gplonly". Kunci terbalik (hanya mengeksport EXPORT_SYMBOL_GPL dalam modul yang mengimport EXPORT_SYMBOL_GPL), yang boleh memecahkan kerja pemacu proprietari, tidak dilaksanakan (hanya bendera modul proprietari yang diwarisi, tetapi bukan pengikatan GPL).
    • Ditambah sokongan enjin kcompactd untuk halaman memori pra-pembungkusan di latar belakang untuk menambah bilangan halaman memori besar yang tersedia untuk kernel. Mengikut anggaran awal, pembungkusan latar belakang, dengan kos overhed minimum, boleh mengurangkan kelewatan apabila memperuntukkan halaman memori yang besar (halaman besar) sebanyak 70-80 kali berbanding dengan mekanisme pembungkusan yang digunakan sebelum ini, dilancarkan apabila timbul keperluan (atas permintaan ). Untuk menetapkan sempadan pemecahan luaran yang kcompactd akan sediakan, sysctl vm.compaction_proactiveness telah ditambahkan.
    • Ditambah sokongan untuk pemampatan imej kernel menggunakan algoritma zstandard (zstd).
    • Sokongan untuk arahan pemproses telah dilaksanakan untuk sistem x86 FSGSBASE, yang membolehkan anda membaca dan menukar kandungan daftar FS/GS dari ruang pengguna. Dalam kernel, FSGSBASE digunakan untuk mempercepatkan operasi penukaran konteks dengan menghapuskan operasi tulis MSR yang tidak perlu untuk GSBASE, dan dalam ruang pengguna ia mengelakkan panggilan sistem yang tidak perlu untuk menukar FS/GS.
    • Ditambah parameter "allow_writes" membolehkan anda melarang perubahan pada daftar MSR pemproses daripada ruang pengguna dan mengehadkan akses kepada kandungan daftar ini untuk membaca operasi, kerana menukar MSR boleh membawa kepada masalah. Secara lalai, penulisan belum lagi dilumpuhkan, dan perubahan pada MSR ditunjukkan dalam log, tetapi pada masa hadapan ia dirancang untuk menukar akses lalai kepada mod baca sahaja.
    • Ke antara muka I/O tak segerak io_uring Menambah sokongan penuh untuk operasi baca buffer tak segerak yang tidak memerlukan benang kernel. Sokongan rakaman dijangka dalam keluaran akan datang.
    • Dalam tarikh akhir penjadual I/O dilaksanakan perancangan berdasarkan kapasiti, membenarkan membuat keputusan yang betul tentang sistem tidak simetri seperti sistem berasaskan ARM DynamIQ dan besar.LITTLE, yang menggabungkan teras CPU cekap tenaga yang berkuasa dan kurang cekap dalam satu cip. Khususnya, mod baharu membolehkan anda mengelakkan ketidakpadanan penjadualan apabila teras CPU yang perlahan tidak mempunyai sumber yang sesuai untuk menyelesaikan tugas tepat pada masanya.
    • Model penggunaan tenaga dalam kernel (rangka kerja Model Tenaga) kini menerangkan bukan sahaja tingkah laku penggunaan kuasa CPU, tetapi juga meliputi peranti persisian.
    • Panggilan sistem close_range() telah dilaksanakan untuk membolehkan proses menutup keseluruhan julat deskriptor fail terbuka sekaligus.
    • Daripada pelaksanaan konsol teks dan pemacu fbcon kod dialih keluar, yang menyediakan keupayaan untuk menatal semula teks secara pemrograman (CONFIG_VGACON_SOFT_SCROLLBACK) dengan lebih daripada jumlah memori video mod teks VGA.
    • Direka semula algoritma untuk memberikan keutamaan kepada benang dalam kernel. Pilihan baharu memberikan ketekalan yang lebih baik merentas semua subsistem kernel apabila memberikan keutamaan kepada tugas masa nyata.
    • Menambah sysctl sched_uclamp_util_min_rt_default untuk mengawal tetapan rangsangan CPU untuk tugas masa nyata (contohnya, anda boleh menukar tingkah laku tugas masa nyata dengan cepat untuk menjimatkan kuasa selepas bertukar kepada kuasa bateri atau pada sistem mudah alih).
    • Persediaan telah dibuat untuk melaksanakan sokongan untuk teknologi Transparent Huge Pages dalam cache halaman.
    • Enjin fanotify melaksanakan bendera baharu FAN_REPORT_NAME dan FAN_REPORT_DIR_FID untuk melaporkan nama induk dan maklumat FID unik apabila kejadian penciptaan, pemadaman atau pergerakan berlaku untuk item direktori dan objek bukan direktori.
    • Untuk cgroups dilaksanakan pengawal memori papak baharu, yang terkenal kerana memindahkan perakaunan papak dari peringkat halaman memori ke peringkat objek kernel, yang memungkinkan untuk berkongsi halaman papak dalam cgroup yang berbeza, dan bukannya memperuntukkan cache papak yang berasingan untuk setiap cgroup. Pendekatan yang dicadangkan memungkinkan untuk meningkatkan kecekapan penggunaan papak, mengurangkan saiz memori yang digunakan untuk papak sebanyak 30-45%, dengan ketara mengurangkan penggunaan memori keseluruhan kernel dan mengurangkan pemecahan memori.
    • Dalam subsistem bunyi ALSA ΠΈ Timbunan USB, sesuai dengan baru diterima pakai cadangan mengenai penggunaan istilah inklusif dalam kernel Linux; istilah politik yang tidak betul telah dibersihkan. Kod tersebut telah dibersihkan daripada perkataan "hamba", "tuan", "senarai hitam" dan "senarai putih".
  • Maya dan Keselamatan
    • Apabila membina kernel menggunakan pengkompil Clang muncul keupayaan untuk mengkonfigurasi (CONFIG_INIT_STACK_ALL_ZERO) pemula automatik kepada sifar semua pembolehubah yang disimpan pada tindanan (apabila membina, nyatakan "-ftrivial-auto-var-init=zero").
    • Dalam subsistem seccomp, apabila menggunakan mod kawalan proses dalam ruang pengguna, tambah peluang penggantian deskriptor fail ke dalam proses yang dipantau untuk mencontohi panggilan sistem sepenuhnya yang membawa kepada penciptaan deskriptor fail. Fungsi ini mendapat permintaan dalam sistem kontena terpencil dan pelaksanaan kotak pasir untuk Chrome.
    • Untuk seni bina xtensa dan csky, sokongan telah ditambah untuk mengehadkan panggilan sistem menggunakan subsistem seccomp. Untuk xtensa, sokongan untuk mekanisme audit juga dilaksanakan.
    • Ditambah bendera keupayaan baharu CAP_CHECKPOINT_RESTORE, yang membolehkan anda memberikan akses kepada keupayaan yang berkaitan dengan pembekuan dan memulihkan keadaan proses tanpa memindahkan keistimewaan tambahan.
    • GCC 11 menyediakan semua ciri yang anda perlukan
      alat penyahpepijatan KCSAN (Kernel Concurrency Sanitizer), direka untuk mengesan keadaan perlumbaan secara dinamik dalam kernel. Oleh itu, KCSAN kini boleh digunakan dengan kernel yang dibina dalam GCC.

    • Untuk AMD Zen dan model CPU yang lebih baharu tambah sokongan untuk teknologi P2PDMA, yang membolehkan anda menggunakan DMA untuk pemindahan data terus antara memori dua peranti yang disambungkan ke bas PCI.
    • Mod telah ditambahkan pada dm-crypt yang membolehkan anda mengurangkan kependaman dengan melakukan pemprosesan data kriptografi tanpa menggunakan baris gilir kerja. Mod ini juga diperlukan untuk operasi yang betul dengan dizonkan peranti blok (peranti dengan kawasan yang mesti ditulis secara berurutan, mengemas kini keseluruhan kumpulan blok). Kerja telah dilakukan untuk meningkatkan daya pengeluaran dan mengurangkan kependaman dalam dm-crypt.
    • Kod dialih keluar untuk menyokong tetamu 32-bit berjalan dalam mod paravirtualisasi yang menjalankan hypervisor Xen. Pengguna sistem sedemikian harus beralih kepada menggunakan kernel 64-bit dalam persekitaran tetamu atau menggunakan mod maya penuh (HVM) atau gabungan (PVH) dan bukannya paravirtualisasi (PV) untuk menjalankan persekitaran.
  • Subsistem cakera, I/O dan sistem fail
    • Pada sistem fail Btrfs dilaksanakan pilihan pelekap "menyelamat" yang menyatukan akses kepada semua pilihan pemulihan lain. Sokongan untuk pilihan "alloc_start" dan "subvolrootid" telah dialih keluar, dan pilihan "inode_cache" telah ditamatkan. Pengoptimuman prestasi telah dibuat, terutamanya mempercepatkan pelaksanaan operasi fsync(). Ditambah keupayaan untuk menggunakan jenis checksum alternatif selain daripada CRC32c.
    • Ditambah keupayaan untuk menggunakan penyulitan sebaris (Penyulitan Dalam Talian) dalam sistem fail ext4 dan F2FS, untuk membolehkan pilihan pelekap "sulit talian" disediakan. Mod penyulitan sebaris membolehkan anda menggunakan mekanisme penyulitan yang terbina dalam pengawal pemacu, yang menyulitkan dan menyahsulit input/output secara telus.
    • Dalam XFS terjamin tetapan semula inod (siram) dalam mod tak segerak sepenuhnya yang tidak menyekat proses semasa melakukan operasi pembersihan memori. Menyelesaikan isu kuota lama yang menyebabkan amaran had lembut dan had inod tidak dijejaki dengan betul. Pelaksanaan bersatu sokongan DAX untuk ext4 dan xfs.
    • Dalam Ext4 dilaksanakan peta bit peruntukan blok pramuat. Digabungkan dengan mengehadkan pengimbasan kumpulan yang tidak dimulakan, pengoptimuman mengurangkan masa yang diperlukan untuk memasang partition yang sangat besar.
    • Dalam F2FS tambah ioctl F2FS_IOC_SEC_TRIM_FILE, yang membolehkan anda menggunakan arahan TRIM/buang untuk menetapkan semula data yang ditentukan secara fizikal dalam fail, sebagai contoh, untuk memadam kekunci akses tanpa meninggalkan sisa data pada pemacu.
      Dalam F2FS juga tambah mod kutipan sampah baharu GC_URGENT_LOW, yang berfungsi dengan lebih agresif dengan menghapuskan beberapa semakan kerana berada dalam keadaan terbiar sebelum memulakan pemungut sampah.

    • Dalam bcache, bucket_size untuk takat telah ditingkatkan daripada 16 kepada 32 bit sebagai persediaan untuk mendayakan cache peranti yang dizonkan.
    • Keupayaan untuk menggunakan penyulitan sebaris berdasarkan penyulitan perkakasan terbina dalam yang disediakan oleh pengawal UFS telah ditambahkan pada subsistem SCSI (Storan Flash Universal).
    • Parameter baris arahan kernel baharu "debugfs" telah ditambah, yang membolehkan anda mengawal ketersediaan pseudo-FS dengan nama yang sama.
    • Pelanggan NFSv4.2 menyediakan sokongan untuk atribut fail lanjutan (xattr).
    • Dalam dm-habuk tambah antara muka untuk memaparkan sekali gus senarai semua blok buruk yang dikenal pasti pada cakera (β€œdmsetup message dust1 0 listbadblocks”).
    • Untuk md/raid5, parameter /sys/block/md1/md/stripe_size telah ditambahkan untuk mengkonfigurasi saiz blok STRIPE.
    • Untuk peranti storan NVMe tambah sokongan untuk arahan pengezonan pemacu (ZNS, NVM Express Zoned Namespace), yang membolehkan anda membahagikan ruang storan kepada zon yang membentuk kumpulan blok untuk kawalan yang lebih lengkap ke atas peletakan data pada pemacu.
  • Subsistem rangkaian
    • Dalam Netfilter tambah keupayaan untuk menolak paket pada peringkat sebelum pemeriksaan penghalaan (ungkapan REJECT kini boleh digunakan bukan sahaja dalam rantai INPUT, FORWARD dan OUTPUT, tetapi juga pada peringkat PREROUTING untuk icmp dan tcp).
    • Dalam nftables tambah keupayaan untuk mengaudit peristiwa yang berkaitan dengan perubahan konfigurasi.
    • Dalam nftables dalam API netlink tambah sokongan untuk rantai tanpa nama, yang namanya diberikan secara dinamik oleh kernel. Apabila anda memadamkan peraturan yang dikaitkan dengan rantaian tanpa nama, rantaian itu sendiri dipadamkan secara automatik.
    • BPF menambah sokongan untuk iterator untuk melintasi, menapis dan mengubah suai elemen tatasusunan bersekutu (peta) tanpa menyalin data ke dalam ruang pengguna. Iterator boleh digunakan untuk soket TCP dan UDP, membenarkan atur cara BPF untuk mengulangi senarai soket terbuka dan mengekstrak maklumat yang mereka perlukan daripadanya.
    • Menambah jenis program BPF baharu BPF_PROG_TYPE_SK_LOOKUP, yang dilancarkan apabila kernel mencari soket pendengaran yang sesuai untuk sambungan masuk. Menggunakan program BPF seperti ini, anda boleh membuat pengendali yang membuat keputusan tentang soket sambungan yang harus dikaitkan, tanpa dikekang oleh panggilan sistem bind(). Sebagai contoh, anda boleh mengaitkan soket tunggal dengan julat alamat atau port. Selain itu, sokongan untuk bendera SO_KEEPALIVE telah ditambahkan pada bpf_setsockopt() dan keupayaan untuk memasang pengendali BPF_CGROUP_INET_SOCK_RELEASE, dipanggil apabila soket dilepaskan, telah dilaksanakan.
    • Sokongan protokol dilaksanakan PRP (Protokol Redundansi Selari), yang membenarkan penukaran berasaskan Ethernet kepada saluran sandaran, telus untuk aplikasi, sekiranya berlaku kegagalan mana-mana komponen rangkaian.
    • Tumpukan mac80211 tambah sokongan untuk rundingan saluran WPA/WPA2-PSK empat peringkat dalam mod titik akses.
    • Menambah keupayaan untuk menukar penjadual qdisc (disiplin beratur) untuk menggunakan algoritma pengurusan baris gilir rangkaian FQ-PIE (Flow Queue PIE) secara lalai, bertujuan untuk mengurangkan kesan negatif penimbalan paket perantaraan pada peralatan rangkaian tepi (bufferbloat) dalam rangkaian dengan modem kabel.
    • Ciri baharu telah ditambahkan pada MPTCP (MultiPath TCP), sambungan 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. Menambahkan sokongan untuk kuki syn, DATA_FIN, penalaan automatik penimbal, diagnostik soket dan bendera REUSEADDR, REUSEPORT dan V6ONLY dalam setsockop.
    • Untuk jadual penghalaan maya VRF (Penghalaan Maya dan Pemajuan), yang membolehkan mengatur operasi beberapa domain penghalaan pada satu sistem, mod "ketat" telah dilaksanakan. Dalam mod ini, jadual maya hanya boleh dikaitkan dengan jadual penghalaan yang tidak digunakan dalam jadual maya lain.
    • Pemacu wayarles ialah ath11k tambah menyokong frekuensi 6GHz dan pengimbasan spektrum.
  • ΠžΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΠ΅
    • Kod dialih keluar untuk menyokong seni bina UniCore, dibangunkan di Pusat Mikropemproses Universiti Peking dan dimasukkan ke dalam kernel Linux pada tahun 2011. Seni bina ini tidak diselenggara sejak 2014 dan tidak mempunyai sokongan dalam GCC.
    • Sokongan untuk seni bina RISC-V telah dilaksanakan kcov (antara muka debugfs untuk menganalisis liputan kod kernel), kmemleak (sistem pengesanan kebocoran memori), perlindungan tindanan, tanda lompat dan operasi tanpa geli (berbilang tugas tanpa isyarat pemasa).
    • Untuk seni bina PowerPC, sokongan untuk baris gilir spinlock telah dilaksanakan, yang telah meningkatkan prestasi dengan ketara dalam situasi konflik kunci.
    • Untuk seni bina ARM dan ARM64, mekanisme peraturan frekuensi pemproses didayakan secara lalai jadual waktu (gabenor cpufreq), yang secara langsung menggunakan maklumat daripada penjadual tugas untuk membuat keputusan tentang menukar frekuensi dan boleh segera mengakses pemacu cpufreq untuk menukar frekuensi dengan cepat, serta-merta melaraskan parameter operasi CPU kepada beban semasa.
    • Pemacu DRM i915 untuk kad grafik Intel termasuk sokongan untuk cip berdasarkan seni bina mikro Tasik Rocket dan menambah sokongan awal untuk kad diskret Intel Xe DG1.
    • Pemacu Amdgpu menambah sokongan awal untuk GPU AMD Navi 21 (Navy Flounder) dan Navi 22 (Sienna Cichlid). Sokongan tambahan untuk pengekodan video UVD/VCE dan enjin pecutan penyahkodan untuk GPU Kepulauan Selatan (Radeon HD 7000).
      Menambahkan sifat untuk memutarkan paparan sebanyak 90, 180 atau 270 darjah.

      Menariknya, pemacu untuk AMD GPU adalah pemacu terbesar dalam kernel - ia mempunyai kira-kira 2.71 juta baris kod, iaitu kira-kira 10% daripada jumlah saiz kernel (27.81 juta baris). Pada masa yang sama, 1.79 juta baris diambil kira oleh fail pengepala yang dijana secara automatik dengan data untuk daftar GPU, dan kod C ialah 366 ribu baris (sebagai perbandingan, pemacu Intel i915 termasuk 209 ribu baris, dan Nouveau - 149 ribu).

    • Dalam pemandu Nouveau tambah sokongan untuk semakan integriti bingkai demi bingkai menggunakan CRC (Pemeriksaan Redundansi Kitaran) dalam enjin paparan GPU NVIDIA. Pelaksanaannya adalah berdasarkan dokumentasi yang disediakan oleh NVIDIA.
    • Pemacu tambahan untuk panel LCD: Frida FRD350H54004, KOE TX26D202VM0BWA, CDTech S070PWS19HP-FC21, CDTech S070SWV29HG-DC44, Tianma TM070JVHG33 dan Xingbangda XBD599.
    • Subsistem audio ALSA menyokong Intel Silent Stream (mod kuasa berterusan untuk peranti HDMI luaran untuk menghapuskan kelewatan apabila memulakan main balik) dan peranti baharu untuk mengawal pencahayaan pengaktifan mikrofon dan butang bisu, dan juga menambah sokongan untuk peralatan baharu, termasuk pengawal Longson 7A1000.
    • Sokongan tambahan untuk papan, peranti dan platform ARM: Pine64 PinePhone v1.2, Lenovo IdeaPad Duet 10.1, ASUS Google Nexus 7, Acer Iconia Tab A500, Qualcomm Snapdragon SDM630 (digunakan dalam Sony Xperia 10, 10 Plus, XA2, XA2 Plus dan XA2 Ultra), Jetson Xavier NX, Amlogic WeTek Core2, Aspeed EthanolX, lima papan baharu berdasarkan NXP i.MX6, MikroTik RouterBoard 3011, Xiaomi Libra, Microsoft Lumia 950, Sony Xperia Z5, MStar, Microchip Sparx5, Intel Keem Bay, Amazon Alpine v3, Renesas RZ/G2H.

Pada masa yang sama, Yayasan Perisian Percuma Amerika Latin terbentuk
pilihan kernel percuma sepenuhnya 5.9 - Linux-percuma 5.9-gnu, dibersihkan daripada perisian tegar dan elemen pemacu yang mengandungi komponen bukan bebas atau bahagian kod, yang skopnya dihadkan oleh pengilang. Keluaran baharu melumpuhkan pemuatan gumpalan dalam pemacu untuk WiFi rtw8821c dan SoC MediaTek mt8183. Kod pembersihan gumpalan dikemas kini dalam Habanalabs, Wilc1000, amdgpu, mt7615, i915 CSR, Mellanox mlxsw (Spectrum3), r8169 (rtl8125b-2) dan pemacu dan subsistem skrin sentuh x86.

Sumber: opennet.ru

Tambah komen