Linux 5.8 內核版本

經過兩個月的開發,Linus Torvalds 引進 核心版本 Linux 5.8。 最顯著的變化包括:KCSAN 競爭條件偵測器、向用戶空間發送通知的通用機制、內聯加密的硬體支援、ARM64 的增強安全機制、對俄羅斯Baikal-T1 處理器的支援、單獨掛載procfs 實例的能力,ARM64呼叫堆疊和BTI的Shadow安全機制的實作。

就整個專案存在期間所有核心的更改數量而言,核心 5.8 成為最大的。 而且,這些變化與任何一個子系統無關,而是涵蓋了核心的不同部分,並且主要與內部返工和清理相關。 最大的變化體現在駕駛員身上。 新版本包含來自 17606 名開發人員的 2081 個修復,影響了核心程式碼儲存庫中約 20% 的檔案。 補丁大小為 65 MB(更改影響了 16180 個文件,新增了 1043240 行程式碼,刪除了 489854 行)。 相比之下,5.7 分支有 15033 個修復,補丁大小為 39 MB。 37 中引入的所有變更中,約5.8% 與裝置驅動程式相關,約16% 的變更與更新特定於硬體架構的程式碼相關,11% 與網路堆疊相關,3% 與檔案系統相關,4% 與文件系統相關。與內部核心子系統相關。

主要的 創新:

  • 虛擬化和安全
    • 提供了核心模組的加載,這些模組的程式碼部分同時設定了允許執行和寫入的位元。 這項變更是作為一個更大項目的一部分實現的,目的是使核心不再使用允許同時執行和寫入的記憶體頁。
    • 現在可以建立單獨的 procfs 實例,允許使用多個 procfs 掛載點,使用不同的選項掛載,但反映相同的進程標識符命名空間(pid 命名空間)。 先前,所有 procfs 掛載點僅鏡像一種內部表示形式,對掛載參數的任何變更都會影響與相同進程 ID 命名空間關聯的所有其他掛載點。 可能需要安裝不同選項的領域之一是為嵌入式系統實現輕量級隔離,能夠隱藏 procfs 中某些類型的進程和資訊節點。
    • ARM64 平台已實現對此機制的支持
      影子呼叫堆疊,由 Clang 編譯器提供,用於防止在堆疊緩衝區溢位時覆蓋函數的回傳位址。 保護的本質是在將控制權轉移給函數之後將返回地址保存在單獨的“影子”堆疊中,並在退出函數之前檢索該地址。

    • 新增了對 ARM64 平台的指令支持 ARMv8.5-BTI (分支目標指示器)以保護不應分支的指令集的執行。 阻止轉換到程式碼的任意部分是為了防止在使用面向返回的程式設計技術(ROP - 返回導向的程式設計)的漏洞中創建小工具;攻擊者不會嘗試將其程式碼放入記憶體中,而是對已經存在的程式碼進行操作以返回控制指令結尾的機器指令,從中建立呼叫鏈以獲得所需的功能)。
    • 新增了對區塊設備內聯加密的硬體支援(內嵌加密)。 Inlinep 加密裝置通常內建於磁碟機中,但邏輯上位於系統記憶體和磁碟之間,根據核心指定的金鑰和加密演算法透明地加密和解密 I/O。
    • 新增了「initrdmem」核心命令列選項,可讓您在將初始啟動映像放入 RAM 時指定 initrd 的實體記憶體位址。
    • 新增了新功能:CAP_PERFMON,用於存取 perf 子系統並執行效能監控。 CAP_BPF,它允許先前需要 CAP_SYS_ADMIN 權限的某些 BPF 操作(例如載入 BPF 程式)(CAP_SYS_ADMIN 權限現在分為 CAP_BPF、CAP_PERFMON 和 CAP_NET_ADMIN 的組合)。
    • 添加者 一個新的 virtio-mem 設備,可讓您將記憶體熱插拔到客戶系統中。
    • 如果裝置驅動程式使用重疊記憶體區域,則實作了對 /dev/mem 中映射操作的呼叫。
    • 增加漏洞防護 CROSSTalk/SRBDS,它允許您恢復在另一個 CPU 核心上執行的某些指令的結果。
  • 內存和系統服務
    • 在定義程式碼格式化規則的文件中, 公認 關於使用包容性術語的建議。 不建議開發者使用「主/從」和「黑名單/白名單」的組合,以及單獨使用「從」一詞。 這些建議僅涉及這些術語的新用途。 核心中已存在的指定單字的提及將保持不變。 在新程式碼中,如果需要支援使用者空間中公開的 API 和 ABI,以及更新程式碼以支援其規範需要使用某些術語的現有硬體或協議,則允許使用標記的術語。
    • 包含調試工具 KCSAN (Kernel Concurrency Sanitizer),專為動態檢測而設計 競爭條件 核心內部。 在 GCC 和 Clang 中建置時支援使用 KCSAN,並且需要在編譯時進行特殊修改以追蹤記憶體存取(使用讀取或修改記憶體時觸發的斷點)。 KCSAN 的開發重點是誤報預防、可擴充性和易用性。
    • 添加 通用機制 將通知從核心傳遞到用戶空間。 該機制基於標準管道驅動程序,可讓您透過用戶空間中打開的通道有效地分發來自核心的通知。 通知接收點是以特殊模式開啟的管道,允許從核心接收的訊息累積在環形緩衝區中。 讀取是透過通常的 read() 函數執行的。 通道擁有者確定需要監視內核中的哪些來源,並可以定義過濾器來忽略某些類型的消息和事件。 在這些事件中,目前僅支援對鍵的操作,例如新增/刪除鍵以及變更其屬性。 這些事件計劃在 GNOME 中使用。
    • 繼續開發「pidfd」功能,以協助處理 PID 重複使用情況(pidfd 與特定進程關聯且不會更改,而在與 PID 關聯的目前進程終止後,PID 可以與另一個進程關聯)。 新版本新增了使用 pidfd 將進程附加到命名空間的支援(允許在執行 setns 系統呼叫時指定 pidfd)。 使用pidfd可以透過一次呼叫控制進程對多種類型命名空間的附加,顯著減少必要的系統呼叫次數並以原子模式實現附加(如果附加到其中一個命名空間失敗,其他命名空間將無法連接) 。
    • 新增了新的系統呼叫 faccessat2(),與
      faccessat() 帶有符合 POSIX 建議的標誌的附加參數(以前這些標誌是在 C 庫中模擬的,新的 faccessat2 允許它們在核心中實現)。

    • 在C組中 添加 memory.swap.high 設定可用於減慢佔用過多交換空間的任務。
    • 至異步 I/O 接口 io_uring 新增了對 tee() 系統呼叫的支援。
    • 新增機制》BPF迭代器,旨在將核心結構的內容輸出到用戶空間。
    • 假如 使用環形緩衝區在 BPF 程式之間進行資料交換的能力。
    • 走進機制 帕達塔,旨在組織核心中任務的並行執行,增加了對具有負載平衡的多執行緒任務的支援。
    • 在 pstore 機制中,它允許您將有關崩潰原因的偵錯資訊保存在記憶體區域中,這些資訊在重新引導之間不會遺失, 添加 用於將資訊保存到區塊設備的後端。
    • 來自 PREEMPT_RT 內核分支 搬家了 本地鎖的實作。
    • 添加 新的緩衝區分配 API (AF_XDP),旨在透過 XDP(eXpress 資料路徑)支援簡化網路驅動程式的編寫。
    • 對於RISC-V架構,已經實現了使用KGDB調試核心元件的支援。
    • 在 4.8 版本之前,可用於建置核心的 GCC 版本的要求已提高。 在下一個版本中,計劃將標準提高到 GCC 4.9。
  • 磁盤子系統、I/O 和文件系統
    • 在裝置映射器中 添加 新的 dm-ebs(模擬區塊大小)處理程序,可用於模擬較小的邏輯區塊大小(例如,模擬 512K 磁區大小磁碟上的 4 位元組磁區)。
    • F2FS 檔案系統現在支援使用 LZO-RLE 演算法進行壓縮。
    • 在 dm-crypt 中 添加 支援加密密鑰。
    • Btrfs 改進了直接 I/O 模式下讀取操作的處理。 安裝時 加速的 檢查已刪除的子節和沒有父級的目錄。
    • CIFS中新增了「nodelete」參數,允許在伺服器上進行正常的權限檢查,但禁止用戶端刪除檔案或目錄。
    • Ext4 改進了錯誤處理 歐洲石油公司 當使用多線程時。 xattr 增加了對 GNU Hurd 中使用的 gnu.* 命名空間的支援。
    • 對於 Ext4 和 XFS,啟用了與單一檔案和目錄相關的 DAX 操作支援(直接存取檔案系統,繞過頁面快取而不使用區塊裝置層級)。
    • 在系統呼叫中 統計數據() 添加了標誌 STATX_ATTR_DAX,指定時使用 DAX 引擎檢索資訊。
    • 外加法 添加 支援引導區驗證。
    • 在FAT中 改進的 主動載入 FS 元素。 測試慢速 2TB USB 硬碟表示測試完成時間從 383 秒減少到 51 秒。
  • 網絡子系統
    • 在控制網橋操作的程式碼中 添加 協議支持 MRP (媒體冗餘協定),它允許透過循環多個乙太網路交換器來實現容錯。
    • 至交通管制系統 (Tc) 添加 新的「門」操作,可以定義處理和丟棄某些資料包的時間間隔。
    • 核心和 ethtool 實用程式中新增了對測試連接的網路電纜和網路設備自我診斷的支援。
    • IPv6 堆疊中新增了對 MPLS(多協定標籤交換)演算法的支持,以便使用多協定標籤交換路由資料包(IPv4 之前支援 MPLS)。
    • 新增了對透過 TCP 傳輸 IKE(網際網路金鑰交換)和 IPSec 封包的支援(RFC 8229) 繞過可能的 UDP 阻塞。
    • 添加者 網路區塊裝置 rnbd,它允許您使用 RDMA 傳輸(InfiniBand、RoCE、iWARP)和 RTRS 協定來組織對區塊裝置的遠端存取。
    • 在 TCP 堆疊中 添加 支援選擇性確認 (SACK) 回應中的範圍壓縮。
    • 對於 IPv6 實施的 TCP-LD 支援(RFC 6069,長時間連線中斷)。
  • Оборудование
    • Intel 顯示卡的 i915 DRM 驅動程式預設支援 Intel Tiger Lake (GEN12) 晶片,為此 實施的 能夠使用 SAGV(系統代理 Geyserville)系統根據功耗或性能要求動態調整頻率和電壓。
    • amdgpu 驅動程式增加了對 FP16 像素格式的支援以及使用視訊記憶體(TMZ,可信任記憶體區域)中加密緩衝區的功能。
    • 增加了對 AMD Zen 和 Zen2 處理器的功率感測器以及 AMD Ryzen 4000 Renoir 的溫度感測器的支援。 AMD Zen 和 Zen2 支援透過介面檢索功耗資訊 RAPL (運行平均功率限制)。
    • 為 Nouveau 驅動程式新增了對 NVIDIA 修改器格式的支援。 對於 gv100,已經實現了使用隔行掃描模式的功能。 新增了 vGPU 檢測。
    • MSM (Qualcomm) 驅動程式新增了對 Adreno A405、A640 和 A650 GPU 的支援。
    • 添加 用於管理 DRM(直接渲染管理器)資源的內部框架。
    • 增加了對小米紅米 Note 7 和三星 Galaxy S2 智慧型手機以及 Elm/Hana Chromebook 筆記型電腦的支援。
    • 新增液晶面板驅動:華碩TM5P5 NT35596、星空KR070PE2T、麗台LTK050H3146W、維信諾rm69299、京東方tv105wum-nw0。
    • 新增了對 ARM 板和平台 Renesas「RZ/G1H」、Realtek RTD1195、Realtek RTD1395/RTD1619、Rockchips RK3326、AMLogic S905D、S905X3、S922XH、Olimex A20-OLinui
      、Beacon i.MX8m-Mini、高通 SDM660/SDM630、Xnano X5 電視盒、Stinger96、Beaglebone-AI。

    • 新增MIPS處理器Loongson-2K(簡稱Loongson64)的支援。 CPU龍芯3增加了對KVM hypervisor虛擬化的支援。
    • 添加
      支援俄羅斯Baikal-T1處理器和基於該處理器的系統單晶片 BE-T1000。 Baikal-T1 處理器包含兩個運作頻率為 5600 GHz 的 P32 MIPS 5 r1.2 超標量核心。 此晶片包含L2 快取(1 MB)、DDR3-1600 ECC 記憶體控制器、1 個10Gb 乙太網路連接埠、2 個1Gb 乙太網路連接埠、PCIe Gen.3 x4 控制器、2 個SATA 3.0 連接埠、USB 2.0、GPIO 、UART、SPI、I2C。 該處理器為虛擬化、SIMD 指令和支援 GOST 28147-89 的整合硬體加密加速器提供硬體支援。 該晶片採用 Imagination Technologies 授權的 MIPS32 P5600 Warrior 處理器核心單元開發。

同時,拉丁美洲自由軟體基金會 形成的
選項 完全免費的內核5.8 - Linux-libre 5.8-gnu,清除包含非自由元件或程式碼部分的韌體和驅動程式元素,其範圍由製造商限制。 新版本禁用了 Atom ISP Video、MediaTek 7663 USB/7915 PCIe、Realtek 8723DE WiFi、Renesas PCI xHCI、HabanaLabs Gaudi、增強型異步採樣率轉換器、Maxim Integrated MAX98390 家庭擴音器、Microsemi Z38060C、L2C、L86C、S6656個家庭揚聲器、Microse ZXNUMX EEPROM 從機。 更新了 Adreno GPU、HabanaLabs Goya、xXNUMX 觸控螢幕、vtXNUMX 和 btbcm 驅動程式和子系統中的斑點清理程式碼。

來源: opennet.ru

添加評論