Keluaran kernel Linux 5.1

Selepas dua bulan pembangunan, Linus Torvalds diperkenalkan pelepasan kernel Linux 5.1. Antara perubahan yang paling ketara: antara muka baharu untuk io_uring I/O tak segerak, keupayaan untuk menggunakan NVDIMM sebagai RAM, sokongan untuk memori maya yang dikongsi dalam Nouveau, sokongan untuk pemantauan berskala sistem fail yang sangat besar melalui fanotify, keupayaan untuk mengkonfigurasi pemampatan Zstd tahap dalam Btrfs, pengendali TEO cpuidle baharu, pelaksanaan panggilan sistem untuk menyelesaikan masalah 2038, keupayaan untuk but daripada peranti pemeta peranti tanpa initramf, modul SafeSetID LSM, sokongan untuk patch langsung gabungan.

Utama inovasi:

  • Subsistem cakera, I/O dan sistem fail
    • Melaksanakan antara muka baharu untuk I/O tak segerak - io_uring, yang terkenal kerana sokongannya untuk tinjauan I/O dan keupayaan untuk bekerja dengan atau tanpa penimbalan. Mari kita ingat bahawa mekanisme I/O asynchronous yang dicadangkan sebelum ini "aio" tidak menyokong I/O buffer, hanya boleh beroperasi dalam mod O_DIRECT (tanpa penimbal dan memintas cache), mempunyai masalah dengan mengunci kerana menunggu ketersediaan metadata, dan mempamerkan kos overhed yang besar kerana menyalin data dalam ingatan.

      Dalam API
      pembangun io_uring cuba menghapuskan kekurangan antara muka aio lama. Oleh produktiviti io_uring sangat dekat dengan SPDK dan jauh mendahului libaio apabila bekerja dengan pengundian didayakan. Sebuah perpustakaan telah disediakan untuk menggunakan io_uring dalam aplikasi akhir yang berjalan di ruang pengguna hari raya, yang menyediakan rangka kerja peringkat tinggi ke atas antara muka kernel;

    • Dalam mekanisme penjejakan acara dalam FS fanotify() tambah sokongan untuk menjejak situasi superblock dan perubahan struktur dirent (acara mencipta, memadam dan memindahkan direktori). Ciri yang dibentangkan membantu menyelesaikan masalah kebolehskalaan yang timbul apabila mencipta penjejakan perubahan rekursif dalam sistem fail yang sangat besar menggunakan mekanisme inotify (perubahan langsung sebelum ini hanya boleh dijejaki melalui inotify, tetapi
      prestasi dalam keadaan pengesanan rekursif direktori bersarang besar meninggalkan banyak yang perlu diingini). Sekarang pemantauan sedemikian boleh dilakukan dengan berkesan melalui fanotify;

    • Pada sistem fail Btrfs tambah keupayaan untuk menyesuaikan tahap mampatan untuk algoritma zstd, yang boleh dianggap sebagai kompromi optimum antara lz4 yang cepat tetapi tidak berkesan dan xz mampatan yang perlahan tetapi baik. Dengan analogi dengan cara sebelum ini mungkin untuk menetapkan tahap mampatan apabila menggunakan zlib, sokongan untuk pilihan pelekap "-o compress=zstd:level" telah ditambahkan untuk zstd. Semasa ujian, tahap pertama minimum memberikan pemampatan data sebanyak 2.658 kali dengan kelajuan mampatan 438.47 MB/s, kelajuan penyahmampatan 910.51 MB/s dan penggunaan memori sebanyak 780 MB, dan tahap maksimum 15 memberikan 3.126 kali, tetapi dengan pemampatan kelajuan 37.30 MB/s. membongkar 878.84 MB/s dan penggunaan memori 2547 MB;
    • Ditambah keupayaan untuk but daripada sistem fail yang terletak pada peranti pemeta peranti, tanpa menggunakan initramfs. Bermula dengan keluaran kernel semasa, peranti pemeta peranti boleh digunakan secara langsung semasa proses but, contohnya, sebagai partition dengan sistem fail akar. Partition dikonfigurasikan menggunakan parameter but "dm-mod.create". Modul pemeta peranti yang dibenarkan untuk dimuatkan termasuk: “crypt”, “delay”, “linear”, “snapshot-origin” dan “verity”;
    • Bendera F2FS_NOCOW_FL telah ditambahkan pada sistem fail F2FS yang berorientasikan pemacu Flash, yang membolehkan anda melumpuhkan mod salin atas tulis untuk fail tertentu;
    • Sistem fail dialih keluar daripada kernel Exofs, yang merupakan varian ext2, disesuaikan untuk bekerja dengan storan objek OSD (Peranti Storan Berasaskan Objek). Sokongan untuk protokol SCSI untuk peranti storan objek tersebut juga telah dialih keluar;
  • Maya dan Keselamatan
    • Menambah pilihan PR_SPEC_DISABLE_NOEXEC pada prctl() untuk mengawal pelaksanaan spekulatif arahan untuk proses yang dipilih. Pilihan baharu membolehkan anda melumpuhkan pelaksanaan spekulatif secara selektif untuk proses yang berpotensi diserang oleh serangan Spectre. Kunci bertahan sehingga panggilan pertama ke exec();
    • Modul LSM yang dilaksanakan SafeSetID, yang membolehkan perkhidmatan sistem mengurus pengguna dengan selamat tanpa meningkatkan keistimewaan (CAP_SETUID) dan tanpa mendapat keistimewaan akar. Keistimewaan diberikan dengan mentakrifkan peraturan dalam securityfs berdasarkan senarai putih pengikatan yang sah (dalam bentuk "UID1:UID2");
    • Ditambahkan perubahan peringkat rendah yang diperlukan untuk memuatkan modul keselamatan (LSM) berasaskan tindanan. Memperkenalkan pilihan but kernel "lsm" untuk mengawal modul mana yang dimuatkan dan dalam susunan apa;
    • Sokongan untuk ruang nama fail telah ditambahkan pada subsistem audit;
    • Dikembangkan keupayaan structleak pemalam GCC, yang membolehkan anda menyekat potensi kebocoran kandungan memori. Permulaan mana-mana pembolehubah yang digunakan dalam kod melalui akses rujukan pada tindanan disediakan;
  • Subsistem rangkaian
    • Untuk soket dilaksanakan pilihan baharu "SO_BINDTOIFINDEX" serupa dengan
      "SO_BINDTODEVICE", tetapi mengambil sebagai hujah nombor indeks antara muka rangkaian dan bukannya nama antara muka;

    • Tindanan mac80211 telah menambahkan keupayaan untuk menetapkan berbilang BSSID (alamat MAC) kepada satu peranti. Sebagai sebahagian daripada projek untuk mengoptimumkan prestasi WiFi, timbunan mac80211 telah menambah perakaunan masa siaran dan keupayaan untuk mengagihkan masa siaran antara berbilang stesen (apabila beroperasi dalam mod titik akses, memperuntukkan lebih sedikit masa penghantaran untuk memperlahankan stesen wayarles, dan bukannya mengagihkan masa secara sama rata antara semua stesen);
    • Mekanisme tambahan "kesihatan devlink", yang menyediakan pemberitahuan apabila masalah berlaku dengan antara muka rangkaian;
  • Perkhidmatan memori dan sistem
    • Dilaksanakan penghantaran isyarat selamat yang membenarkan penggunaan semula PID. Sebagai contoh, apabila memanggil bunuh sebelum ini, situasi boleh timbul di mana, sejurus selepas menghantar isyarat, PID sasaran boleh dibebaskan disebabkan penamatan proses dan diduduki oleh proses lain, dan isyarat itu akhirnya akan dihantar ke proses lain. Untuk menghapuskan situasi sedemikian, panggilan sistem baharu pidfd_send_signal telah ditambah, yang menggunakan deskriptor fail daripada /proc/pid untuk memastikan pengikatan proses yang stabil. Walaupun jika PID digunakan semula semasa pemprosesan panggilan sistem, deskriptor fail tidak akan berubah dan boleh digunakan dengan selamat untuk menghantar isyarat kepada proses;
    • Ditambah keupayaan untuk menggunakan peranti memori kekal (persistent-memory, contohnya NVDIMM) sebagai RAM. Sehingga kini, kernel menyokong peranti seperti peranti storan, tetapi kini ia juga boleh digunakan sebagai RAM tambahan. Ciri ini dilaksanakan sebagai tindak balas kepada kehendak pengguna yang sanggup bersabar dengan ketinggalan prestasi dan ingin menggunakan API pengurusan memori kernel Linux asli dan bukannya menggunakan sistem peruntukan memori ruang pengguna sedia ada yang berjalan di atas mmap untuk dax fail;
    • Menambah pengendali melahu CPU baharu (cpuidle, memutuskan bila CPU boleh dimasukkan ke dalam mod penjimatan kuasa dalam; lebih mendalam mod, lebih besar penjimatan, tetapi juga lebih lama masa yang diperlukan untuk keluar dari mod) - TEO (Gabenor Berorientasikan Peristiwa Pemasa ). Sehingga kini, dua pengendali cpuidle telah dicadangkan - "menu" dan "tangga", berbeza dalam heuristik. Pengendali "menu" telah mengetahui masalah dengan membuat keputusan heuristik, untuk menghapuskan yang diputuskan untuk menyediakan pengendali baharu. TEO diletakkan sebagai alternatif kepada pengendali "menu", membolehkan prestasi yang lebih tinggi sambil mengekalkan tahap penggunaan kuasa yang sama.
      Anda boleh mengaktifkan pengendali baharu menggunakan parameter but “cpuidle.governor=teo”;

    • Sebagai sebahagian daripada kerja untuk menghapuskan masalah 2038, disebabkan oleh limpahan jenis time_t 32-bit, termasuk panggilan sistem yang menawarkan pembilang masa 32-bit untuk seni bina 64-bit. Akibatnya, struktur time_t 64-bit kini boleh digunakan pada semua seni bina. Perubahan serupa juga telah dilaksanakan dalam subsistem rangkaian untuk pilihan cap masa soket rangkaian;
    • Ke dalam sistem tampalan panas untuk teras (tampalan langsung) tambah Ciri "Atomic Replace" untuk menggunakan satu siri perubahan secara atom pada satu fungsi. Ciri ini membolehkan anda mengedarkan tampung ringkasan yang meliputi beberapa perubahan sekaligus, bukannya proses aplikasi tampung langsung peringkat demi peringkat dalam susunan yang ditetapkan dengan ketat, yang agak sukar untuk dikekalkan. Walaupun sebelum ini setiap perubahan berikutnya harus berdasarkan keadaan fungsi selepas perubahan terakhir, kini mungkin untuk menyebarkan beberapa perubahan yang terikat pada satu keadaan awal sekaligus (iaitu, penyelenggara boleh mengekalkan satu patch disatukan berbanding kernel asas sebaliknya rantaian tompok yang bergantung antara satu sama lain );
    • Diumumkan sokongan yang tidak digunakan untuk format fail boleh laku a.out dan
      dikeluarkan kod untuk menjana fail teras dalam format a.out, yang berada dalam keadaan terbengkalai. Format a.out telah lama tidak digunakan pada sistem Linux dan penjanaan fail a.out telah lama tidak disokong oleh alatan moden dalam konfigurasi Linux lalai. Selain itu, pemuat untuk fail a.out boleh dilaksanakan sepenuhnya dalam ruang pengguna;

    • Keupayaan untuk mengenal pasti dan mengalih keluar kod yang tidak digunakan telah ditambahkan pada mekanisme pengesahan program BPF. Inti juga termasuk tampalan dengan sokongan spinlock untuk subsistem BPF, menyediakan keupayaan tambahan untuk menguruskan pelaksanaan selari program BPF;
  • Оборудование
    • Dalam pemandu Nouveau tambah sokongan untuk pengurusan memori heterogen, membolehkan CPU dan GPU mengakses kawasan memori disegerakkan biasa. Sistem memori maya dikongsi (SVM, memori maya dikongsi) dilaksanakan berdasarkan subsistem HMM (Pengurusan memori heterogen), yang membenarkan penggunaan peranti dengan unit pengurusan memori mereka sendiri (MMU, unit pengurusan memori), yang boleh mengakses ingatan utama. Khususnya, menggunakan HMM, anda boleh mengatur ruang alamat dikongsi antara GPU dan CPU, di mana GPU boleh mengakses memori utama proses tersebut. Sokongan SVM pada masa ini hanya didayakan untuk GPU keluarga Pascal, walaupun sokongan disediakan untuk GPU Volta dan Turing juga. Lebih-lebih lagi, di Nouveau tambah ioctl baharu untuk mengawal pemindahan kawasan memori proses ke memori GPU;
    • Dalam pemacu Intel DRM untuk GPU Skylake dan kemudian (gen9+) dihidupkan Secara lalai, mod fastboot menghapuskan perubahan mod yang tidak perlu semasa but. Ditambah новые pengecam peranti berdasarkan mikroarkitek Coffelake dan Tasik Ais. Untuk kerepek Coffelake tambah sokongan GVT (maya GPU). Untuk GPU maya dilaksanakan Sokongan VFIO EDID. Untuk panel LCD MIPI/DSI tambah sokongan untuk elemen ACPI/PMIC. Dilaksanakan mod TV baharu 1080p30/50/60 TV;
    • Menambahkan sokongan untuk GPU Vega10/20 BACO pada pemacu amdgpu. Melaksanakan pengurusan kuasa Vega 10/20 dan jadual kawalan lebih sejuk Vega 10. Menambah pengecam peranti PCI baharu untuk GPU Picasso. Ditambah antara muka untuk menguruskan kebergantungan berjadual untuk mengelakkan kebuntuan;
    • Ditambah Pemacu DRM/KMS untuk pemecut skrin ARM Komeda (Mali D71);
    • Sokongan tambahan untuk panel skrin Toppoly TPG110, Sitronix ST7701, PDA 91-00156-A0, LeMaker BL035-RGB-002 3.5 dan Kingdisplay kd097d04;
    • Sokongan tambahan untuk codec audio Rockchip RK3328, Cirrus Logic CS4341 dan CS35L36, MediaTek MT6358, Qualcomm WCD9335 dan Ingenic JZ4725B, serta platform audio Mediatek MT8183;
    • Sokongan tambahan untuk pengawal NAND Flash STMicroelectronics FMC2, Amlogic Meson;
    • Menambahkan sokongan pemecut untuk sistem perkakasan Habana AI;
    • Sokongan tambahan untuk pengawal Ethernet gigabit NXP ENETC dan antara muka wayarles MediaTek MT7603E (PCIe) dan MT76x8.

Pada masa yang sama, Yayasan Perisian Percuma Amerika Latin terbentuk
pilihan kernel percuma sepenuhnya 5.1 - Linux-percuma 5.1-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 mt7603 dan goya. Kod pembersihan gumpalan dikemas kini dalam pemacu dan subsistem wilc1000, iwlwifi, soc-acpi-intel, brcmfmac, mwifix, btmrvl, btmtk dan touchscreen_dmi. Pembersihan gumpalan dalam pemuat perisian tegar lantiq xrx200 telah dihentikan kerana penyingkirannya daripada kernel.

Sumber: opennet.ru

Tambah komen