Rilis kernel Linux 5.1

Setelah dua bulan pengembangan, Linus Torvalds diperkenalkan rilis kernel Linux 5.1. Di antara perubahan yang paling menonjol: antarmuka baru untuk I/O asinkron io_uring, kemampuan untuk menggunakan NVDIMM sebagai RAM, dukungan untuk memori virtual bersama di Nouveau, dukungan untuk pemantauan skalabel pada sistem file yang sangat besar melalui fanotify, kemampuan untuk mengonfigurasi kompresi Zstd level di Btrfs, penangan TEO cpuidle baru, implementasi panggilan sistem untuk menyelesaikan masalah 2038, kemampuan untuk melakukan booting dari perangkat pemeta perangkat tanpa initramfs, modul LSM SafeSetID, dukungan untuk patch langsung gabungan.

Utama inovasi:

  • Subsistem Disk, I/O dan Sistem File
    • Menerapkan antarmuka baru untuk I/O asinkron - io_uring, yang terkenal karena dukungannya terhadap polling I/O dan kemampuannya untuk bekerja dengan atau tanpa buffering. Mari kita ingat bahwa mekanisme I/O asinkron “aio” yang diusulkan sebelumnya tidak mendukung buffered I/O, hanya dapat beroperasi dalam mode O_DIRECT (tanpa buffering dan melewati cache), mengalami masalah penguncian karena menunggu ketersediaan metadata, dan menunjukkan biaya overhead yang besar karena penyalinan data ke memori.

      Di dalam API
      Pengembang io_uring mencoba menghilangkan kekurangan antarmuka aio lama. Oleh produktifitas io_uring sangat dekat SPDK dan jauh lebih unggul dari libaio ketika bekerja dengan polling diaktifkan. Sebuah perpustakaan telah disiapkan untuk menggunakan io_uring pada aplikasi akhir yang berjalan di ruang pengguna libur, yang menyediakan kerangka kerja tingkat tinggi melalui antarmuka kernel;

    • Dalam mekanisme pelacakan peristiwa di FS fanotify() ditambahkan dukungan untuk melacak situasi perubahan superblock dan struktur langsung (peristiwa membuat, menghapus dan memindahkan direktori). Fitur yang disajikan membantu memecahkan masalah skalabilitas yang muncul saat membuat pelacakan perubahan rekursif dalam sistem file yang sangat besar menggunakan mekanisme inotify (perubahan langsung sebelumnya hanya dapat dilacak melalui inotify, tetapi
      kinerja dalam kondisi pelacakan rekursif dari direktori bersarang besar masih banyak yang diinginkan). Kini pemantauan seperti itu dapat dilakukan secara efektif melalui fanotify;

    • Pada sistem file Btrfs ditambahkan kemampuan untuk menyesuaikan tingkat kompresi untuk algoritma zstd, yang dapat dianggap sebagai kompromi optimal antara lz4 yang cepat namun tidak efektif dan kompresi xz yang lambat namun bagus. Dengan analogi dengan bagaimana sebelumnya dimungkinkan untuk mengatur tingkat kompresi saat menggunakan zlib, dukungan untuk opsi pemasangan “-o kompres=zstd:level” telah ditambahkan untuk zstd. Selama pengujian, level pertama minimum memberikan kompresi data sebanyak 2.658 kali dengan kecepatan kompresi 438.47 MB/s, kecepatan dekompresi 910.51 MB/s dan konsumsi memori 780 MB, dan level maksimum 15 disediakan 3.126 kali, namun dengan kompresi kecepatan 37.30 MB/s, unpacking 878.84 MB/s dan konsumsi memori 2547 MB;
    • Ditambahkan kemampuan untuk melakukan booting dari sistem file yang terletak di perangkat pemeta perangkat, tanpa menggunakan initramfs. Dimulai dengan rilis kernel saat ini, perangkat pemeta perangkat dapat langsung digunakan selama proses booting, misalnya sebagai partisi dengan sistem file root. Partisi dikonfigurasi menggunakan parameter boot “dm-mod.create”. Modul pemeta perangkat yang diperbolehkan untuk memuat meliputi: “crypt”, “delay”, “linear”, “snapshot-origin” dan “verity”;
    • Bendera F2FS_NOCOW_FL telah ditambahkan ke sistem file F2FS yang berorientasi pada Flash drive, yang memungkinkan Anda menonaktifkan mode salin-saat-tulis untuk file tertentu;
    • Sistem file dihapus dari kernel eksof, yang merupakan varian ext2, diadaptasi untuk bekerja dengan penyimpanan objek OSD (Perangkat Penyimpanan Berbasis Objek). Dukungan terhadap protokol SCSI untuk perangkat penyimpanan objek tersebut juga telah dihapus;
  • Virtualisasi dan Keamanan
    • Menambahkan opsi PR_SPEC_DISABLE_NOEXEC ke prctl() untuk mengontrol eksekusi instruksi spekulatif untuk proses yang dipilih. Opsi baru memungkinkan Anda menonaktifkan eksekusi spekulatif secara selektif untuk proses yang berpotensi diserang oleh serangan Spectre. Kunci tersebut bertahan hingga panggilan pertama ke exec();
    • Modul LSM yang diimplementasikan SafeSetID, yang memungkinkan layanan sistem mengelola pengguna dengan aman tanpa meningkatkan hak istimewa (CAP_SETUID) dan tanpa mendapatkan hak akses root. Hak istimewa diberikan dengan menentukan aturan dalam keamanan berdasarkan daftar putih pengikatan yang valid (dalam bentuk “UID1:UID2”);
    • Menambahkan perubahan tingkat rendah yang diperlukan untuk pemuatan modul keamanan (LSM) berbasis tumpukan. Memperkenalkan opsi boot kernel "lsm" untuk mengontrol modul mana yang dimuat dan dalam urutan apa;
    • Dukungan untuk ruang nama file telah ditambahkan ke subsistem audit;
    • Diperluas kemampuan structleak plugin GCC, yang memungkinkan Anda memblokir potensi kebocoran konten memori. Inisialisasi variabel apa pun yang digunakan dalam kode melalui akses referensi pada tumpukan disediakan;
  • Subsistem jaringan
    • Untuk soket diimplementasikan opsi baru "SO_BINDTOIFINDEX" mirip dengan
      "SO_BINDTODEVICE", tetapi menggunakan argumen nomor indeks antarmuka jaringan dan bukan nama antarmuka;

    • Tumpukan mac80211 telah menambahkan kemampuan untuk menetapkan beberapa BSSID (alamat MAC) ke satu perangkat. Sebagai bagian dari proyek untuk mengoptimalkan kinerja WiFi, tumpukan mac80211 telah menambahkan penghitungan waktu udara dan kemampuan untuk mendistribusikan waktu udara di antara beberapa stasiun (saat beroperasi dalam mode titik akses, mengalokasikan lebih sedikit waktu transmisi untuk memperlambat stasiun nirkabel, daripada mendistribusikan waktu secara merata di antara semua stasiun);
    • Mekanisme tambahan "kesehatan tautan dev", yang memberikan pemberitahuan bila terjadi masalah dengan antarmuka jaringan;
  • Layanan memori dan sistem
    • Diimplementasikan pengiriman sinyal aman yang memungkinkan penggunaan kembali PID. Misalnya, ketika memanggil kill sebelumnya, situasi dapat muncul ketika, segera setelah mengirimkan sinyal, PID target dapat dibebaskan karena penghentian proses dan ditempati oleh proses lain, dan sinyal tersebut akhirnya diteruskan ke proses lain. Untuk menghilangkan situasi seperti itu, panggilan sistem baru pidfd_send_signal telah ditambahkan, yang menggunakan deskriptor file dari /proc/pid untuk memastikan pengikatan proses yang stabil. Bahkan jika PID digunakan kembali selama pemrosesan panggilan sistem, deskriptor file tidak akan berubah dan dapat digunakan dengan aman untuk mengirim sinyal ke proses;
    • Ditambahkan kemampuan untuk menggunakan perangkat memori permanen (memori persisten, misalnya NVDIMM) sebagai RAM. Hingga saat ini, kernel mendukung perangkat seperti perangkat penyimpanan, namun kini dapat juga digunakan sebagai RAM tambahan. Fitur ini diterapkan sebagai respons terhadap keinginan pengguna yang bersedia menghadapi kelambatan kinerja dan ingin menggunakan API manajemen memori kernel Linux asli daripada menggunakan sistem alokasi memori ruang pengguna yang berjalan di atas mmap untuk dax mengajukan;
    • Menambahkan pengendali idle CPU baru (cpuidle, memutuskan kapan CPU dapat dialihkan ke mode hemat daya yang mendalam; semakin dalam modenya, semakin besar penghematannya, namun juga semakin lama waktu yang dibutuhkan untuk keluar dari mode) - TEO (Timer Events Oriented Governor ). Hingga saat ini, dua penangan cpuidle telah diusulkan - "menu" dan "tangga", berbeda dalam heuristik. Penangan "menu" mengetahui masalah dalam pengambilan keputusan heuristik, untuk menghilangkannya diputuskan untuk menyiapkan penangan baru. TEO diposisikan sebagai alternatif pengendali "menu", memungkinkan kinerja yang lebih tinggi dengan tetap mempertahankan tingkat konsumsi daya yang sama.
      Anda dapat mengaktifkan handler baru menggunakan parameter boot “cpuidle.governor=teo”;

    • Sebagai bagian dari pekerjaan untuk menghilangkan masalah tahun 2038, yang disebabkan oleh meluapnya tipe time_t 32-bit, mencakup panggilan sistem yang menawarkan penghitung waktu 32-bit untuk arsitektur 64-bit. Hasilnya, struktur time_t 64-bit kini dapat digunakan di semua arsitektur. Perubahan serupa juga telah diterapkan pada subsistem jaringan untuk opsi timestamp soket jaringan;
    • Ke dalam sistem hot patching untuk inti (live patching) ditambahkan Fitur “Penggantian Atom” untuk menerapkan serangkaian perubahan secara atom ke satu fungsi. Fitur ini memungkinkan Anda untuk mendistribusikan patch ringkasan yang mencakup beberapa perubahan sekaligus, alih-alih proses penerapan patch langsung secara bertahap dalam urutan yang ditentukan secara ketat, yang cukup sulit untuk dipertahankan. Jika sebelumnya setiap perubahan berikutnya harus didasarkan pada keadaan fungsi setelah perubahan terakhir, sekarang dimungkinkan untuk menyebarkan beberapa perubahan yang terikat pada satu keadaan awal sekaligus (yaitu, pengelola dapat mempertahankan satu patch terkonsolidasi yang relatif terhadap kernel dasar). dari rantai tambalan yang bergantung satu sama lain);
    • Diumumkan tidak lagi mendukung format file a.out yang dapat dieksekusi dan
      dihapus kode untuk menghasilkan file inti dalam format a.out, yang dalam keadaan ditinggalkan. Format a.out sudah lama tidak digunakan pada sistem Linux, dan pembuatan file a.out sudah lama tidak didukung oleh alat modern dalam konfigurasi default Linux. Selain itu, pemuat untuk file a.out dapat diimplementasikan sepenuhnya di ruang pengguna;

    • Kemampuan untuk mengidentifikasi dan menghapus kode yang tidak digunakan telah ditambahkan ke mekanisme verifikasi program BPF. Kernel juga menyertakan patch dengan dukungan spinlock untuk subsistem BPF, memberikan kemampuan tambahan untuk mengelola eksekusi paralel program BPF;
  • Оборудование
    • Di pengemudi Nouveau ditambahkan dukungan untuk manajemen memori heterogen, memungkinkan CPU dan GPU mengakses area memori umum yang disinkronkan. Sistem memori virtual bersama (SVM, memori virtual bersama) diimplementasikan berdasarkan subsistem HMM (Manajemen memori heterogen), yang memungkinkan penggunaan perangkat dengan unit manajemen memorinya sendiri (MMU, unit manajemen memori), yang dapat mengakses memori utama. Secara khusus, dengan menggunakan HMM, Anda dapat mengatur ruang alamat bersama antara GPU dan CPU, di mana GPU dapat mengakses memori utama dari proses tersebut. Dukungan SVM saat ini hanya diaktifkan untuk GPU keluarga Pascal, meskipun dukungan juga diberikan untuk GPU Volta dan Turing. Apalagi di Nouveau ditambahkan ioctl baru untuk mengontrol migrasi area memori proses ke memori GPU;
    • Dalam driver Intel DRM untuk GPU Skylake dan yang lebih baru (gen9+) termasuk Secara default, mode fastboot menghilangkan perubahan mode yang tidak perlu saat boot. Ditambahkan новые pengidentifikasi perangkat berdasarkan mikroarsitektur Coffelake dan Ice Lake. Untuk keripik Coffelake ditambahkan Dukungan GVT (Virtualisasi GPU). Untuk GPU virtual diimplementasikan Dukungan VFIO EDID. Untuk panel LCD MIPI/DSI ditambahkan dukungan untuk elemen ACPI/PMIC. Diimplementasikan mode TV baru TV 1080p30/50/60;
    • Menambahkan dukungan untuk GPU Vega10/20 BACO ke driver amdgpu. Menerapkan manajemen daya Vega 10/20 dan tabel kontrol pendingin Vega 10. Menambahkan pengidentifikasi perangkat PCI baru untuk GPU Picasso. Ditambahkan antarmuka untuk mengelola dependensi yang dapat dijadwalkan untuk menghindari kebuntuan;
    • Ditambahkan Driver DRM/KMS untuk akselerator layar ARM Komeda (Mali D71);
    • Menambahkan dukungan untuk panel layar Toppoly TPG110, Sitronix ST7701, PDA 91-00156-A0, LeMaker BL035-RGB-002 3.5 dan Kingdisplay kd097d04;
    • Menambahkan dukungan untuk codec audio Rockchip RK3328, Cirrus Logic CS4341 dan CS35L36, MediaTek MT6358, Qualcomm WCD9335 dan Ingenic JZ4725B, serta platform audio Mediatek MT8183;
    • Menambahkan dukungan untuk pengontrol NAND Flash STMicroelectronics FMC2, Amlogic Meson;
    • Menambahkan dukungan akselerator untuk sistem perangkat keras Habana AI;
    • Menambahkan dukungan untuk pengontrol gigabit Ethernet NXP ENETC dan antarmuka nirkabel MediaTek MT7603E (PCIe) dan MT76x8.

Pada saat yang sama, Yayasan Perangkat Lunak Bebas Amerika Latin terbentuk
pilihan kernel 5.1 sepenuhnya gratis - Linux gratis 5.1-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 mt7603 dan goya. Kode pembersihan gumpalan yang diperbarui di driver dan subsistem wilc1000, iwlwifi, soc-acpi-intel, brcmfmac, mwifiex, btmrvl, btmtk, dan touchscreen_dmi. Pembersihan gumpalan di pemuat firmware lantiq xrx200 telah dihentikan karena penghapusannya dari kernel.

Sumber: opennet.ru

Tambah komentar