Linux 5.2 內核版本

經過兩個月的開發,Linus Torvalds 引進 核心版本 Linux 5.2。 最顯著的變化包括:Ext4操作模式不區分大小寫、用於掛載檔案系統的單獨系統呼叫、GPU Mali 4xx/6xx/7xx的驅動程式、處理BPF程式中sysctl值變化的能力、device-mapper模組dm-dust,防禦MDS攻擊,支援DSP的聲音開放固件,優化BFQ性能,使PSI(壓力失速資訊)子系統能夠在Android中使用。

新版本包含來自 15100 名開發人員的 1882 個修復,
補丁大小 - 62 MB(更改影響了 30889 個文件,新增了 625094 行程式碼,刪除了 531864 行)。 大約 45% 出現在 5.2 中
更改與設備驅動程式相關,大約 21% 的更改與
對更新特定於硬體架構的程式碼的態度,12%
與網路堆疊相關,3% 與檔案系統相關,3% 與內部相關
內核子系統。 所有變更中,12.4% 由Intel 準備,6.3% 由Red Hat 準備,5.4% 由Google 準備,4.0% 由AMD 準備,3.1% 由SUSE 準備,3% 由IBM 準備,2.7% 由華為準備,2.7% 由Linaro 準備,2.2% 由ARM 準備, 1.6% - 甲骨文。

主要的 創新:

  • 磁盤子系統、I/O 和文件系統
    • 為 Ext4 添加 支持 工作時不區分檔案名稱中字元的大小寫,僅在使用新屬性「+F」(EXT4_CASEFOLD_FL)的單一空目錄時啟動。 當對目錄設定該屬性時,所有對目錄中的檔案和子目錄的操作都會不考慮字元大小寫,包括搜尋和開啟檔案時都會忽略大小寫(例如檔案Test.txt、此類目錄中的test.txt和test.TXT 將被視為相同)。 預設情況下,檔案系統仍區分大小寫,但具有「chattr +F」屬性的目錄除外;
    • 統一了檔案名稱中UTF-8字元的處理函數,這些函數在執行字串比較和規範化操作時使用;
    • XFS 新增了用於檔案系統健康狀況監控的基礎設施和用於查詢健康狀態的新 ioctl。 已經實現了一項實驗性功能來在線檢查超級塊計數器。
    • 新增了新模組設備映射器“DM-粉塵「,它允許您模擬媒體上壞區塊的出現或從磁碟讀取時出現的錯誤。 此模組可讓您在面對可能出現的故障時簡化應用程式和各種儲存系統的調試和測試;
    • 實施 BFQ I/O 調度程序的顯著效能最佳化。 在高I/O負載的情況下,進行了最佳化 允許 將啟動應用程式等操作時間減少高達 80%。
    • 新增了一系列用於掛載檔案系統的系統呼叫: fsopen(), 開放樹(), fspick(), 文件系統掛載(), 文件系統配置() и move_mount()。 這些系統呼叫可讓您單獨處理掛載的不同階段(處理超級區塊、取得有關檔案系統的資訊、掛載、附加到掛載點),這些階段之前是使用常見的 mount() 系統呼叫執行的。 單獨的呼叫提供了執行更複雜的安裝場景和執行單獨操作的能力,例如重新配置超級區塊、啟用選項、更改安裝點以及移動到不同的命名空間。 此外,單獨處理可讓您準確判斷錯誤程式碼輸出的原因,並為多層檔案系統設定多個來源,例如overlayfs;
    • 非同步 I/O io_uring 介面中新增了新操作 IORING_OP_SYNC_FILE_RANGE,該操作執行相當於系統呼叫的操作 同步文件範圍(),並且還實現了向 io_uring 註冊 eventfd 並接收有關操作完成的通知的功能;
    • 對於CIFS檔案系統,新增了FIEMAP ioctl,提供高效的範圍映射,以及對SEEK_DATA和SEEK_HOLE模式的支援;
    • 在FUSE子系統中 建議 用於管理資料緩存的API;
    • Btrfs 優化了 qgroups 實現,提高了具有多個硬連結的檔案的 fsync 執行速度。 資料完整性檢查程式碼已改進,現在在將資料刷新到磁碟之前考慮到 RAM 中資訊可能受到的損壞;
    • CEPH增加了對透過NFS匯出快照的支援;
    • 改進了「軟」模式下 NFSv4 掛載的實作(「軟」模式下如果存取伺服器出錯,呼叫立即返回錯誤代碼,「硬」模式下直到 FS 掛載後才給出控制)可用性或逾時已恢復) 。 新版本提供了更準確的超時處理、更快的崩潰恢復以及新的「softerr」掛載選項,可讓您更改發生逾時時返回的錯誤代碼(ETIMEDOUT);
    • nfsdcld API 旨在追蹤 NFS 用戶端的狀態,讓 NFS 伺服器在重新啟動時正確追蹤客戶端的狀態。 因此,nfsdcld 守護程式現在可以充當 nfsdcltrack 處理程序;
    • 對於自動飛行服務 添加 模擬檔案中的位元組範圍鎖(位元組範圍鎖定);
  • 虛擬化和安全
    • 已經完成了消除核心中允許從可寫入反射記憶體區域執行程式碼的位置的工作,從而可以阻止攻擊期間可能被利用的潛在漏洞;
    • 新增了新的核心命令列參數“mitigations=”,提供了一種簡化的方法來控制某些技術的啟用,以防止與 CPU 上指令的推測執行相關的漏洞。 傳遞“mitigations=off”將停用所有現有方法,預設模式“mitigations=auto”啟用保護但不影響超線程的使用。 如果保護方法需要,「mitigations=auto,nosmt」模式也會停用超線程。
    • 添加 支援符合 GOST R 34.10-2012(RFC 7091、ISO/IEC 14888-3)的電子數位簽名, 發達 來自 Basalt SPO 的 Vitaly Chikunov。 在本機 TLS 實作中新增了對 AES128-CCM 的支援。 crypto_simd模組增加了對AEAD演算法的支援;
    • 在Kconfig中 添加 一個單獨的“內核強化”部分,其中包含增強內核保護的選項。 目前,新部分僅包含啟用 GCC 檢查增強插件的設定;
    • 內核程式碼差不多 發表 來自 switch 中的非中斷 case 語句(每個 case 區塊後不返回或中斷)。 還需要修復 32 個使用 switch 的情況中的 2311 個,之後在建構核心時就可以使用「-Wimplicit-fallthrough」模式;
    • 對於PowerPC架構,已經實現了對硬體機制的支持,以限制對用戶空間中資料的不必要的核心存取路徑;
    • 新增了阻止程式碼 攻擊 Intel 處理器中的 MDS(微架構資料取樣)類別。 您可以透過SysFS變數“/sys/devices/system/cpu/vulnerability/mds”檢查系統是否有漏洞。 可得到 兩種保護模式:完全模式(需要更新微代碼)和旁路模式(當控制權轉移到用戶空間或客戶系統時,不能完全保證清除 CPU 緩衝區)。 為了控制保護模式,核心中加入了「mds=」參數,該參數可以取值「full」、「full,nosmt」(+禁用超線程)和「off」;
    • 在x86-64系統上,為IRQ、偵錯機制和異常處理程序添加了「堆疊保護頁」保護,其本質是將邊界處的記憶體頁替換為堆疊,存取時會產生異常(頁面錯誤);
    • 新增了 sysctl 設定 vm.unprivileged_userfaultfd,控制非特權程序使用 userfaultfd() 系統呼叫的能力;
  • 網絡子系統
    • 添加 IPv6 閘道支援 IPv4 路由。 例如,您現在可以指定路由規則,例如「ip ro add 172.16.1.0/24 via inet6 2001:db8::1 dev eth0」;
    • 對於 ICMPv6,實作了 ioctl 呼叫 icmp_echo_ignore_anycast 和 icmp_echo_ignore_multicast 以忽略任意播的 ICMP ECHO 和
      多播位址。 添加 限制 ICMPv6 資料包處理強度的能力;

    • 對於 BATMAN(移動自組織網絡的更好方法)網格協議,該協議允許創建分散的網絡,其中每個節點通過相鄰節點連接, 添加 支援從多播到單播的廣播,以及透過 sysfs 進行控制的能力;
    • 在ethtool中 添加 新的快速連結斷開參數,可讓您減少接收有關 1000BaseT 連結斷開事件的資訊所需的時間(正常情況下延遲最多為 750 毫秒);
    • 出現了 機會 將 Foo-Over-UDP 隧道綁定到特定位址、網路介面或套接字(先前的綁定僅透過通用遮罩完成);
    • 在無線堆疊中 假如 實施處理程序的可能性
      用戶空間的OWE(機會無線加密);

    • 在Netfilter中,nat鏈中加入了對inet位址族的支援(例如,現在可以使用一個轉換規則來處理ipv4和ipv6,而無需分離ipv4和ipv6的規則);
    • 在網頁連結中 添加 政權 strict:嚴格驗證所有訊息和屬性的正確性,不允許超出屬性的預期大小,並且禁止在訊息末尾添加額外的資料;
  • 內存和系統服務
    • CLONE_PIDFD標誌已被加入到clone()系統呼叫中,當指定時,以建立的子程序識別的檔案描述符「pidfd」將傳回給父進程。 例如,該文件描述符可用於發送訊號,而不必擔心遇到競爭條件(發送訊號後,目標PID可能會因進程終止而被釋放並被另一個程序佔用);
    • 對於 cgroups 的第二個版本,添加了冷凍機控制器功能,您可以使用該功能停止 cgroup 中的工作並暫時釋放一些資源(CPU、I/O,甚至可能是記憶體)來執行其他任務。 管理是透過 cgroup 樹中的 cgroup.freeze 和 cgroup.events 控製文件完成的。 cgroup.freeze 中的條目 1 凍結目前 cgroup 和所有子群組中的進程。 由於凍結需要一些時間,因此額外提供了一個cgroup.events文件,透過該文件可以了解操作的完成情況;
    • 有擔保 匯出附加到 sysfs 中每個節點的記憶體屬性,這使您可以從使用者空間確定具有異質記憶體的系統中處理記憶體組的性質;
    • PSI(壓力失速資訊)子系統已改進,它允許您分析有關 cgroup 中某些任務或進程集接收各種資源(CPU、記憶體、I/O)的等待時間的資訊。 與平均負載相比,使用 PSI,使用者空間處理程序可以更準確地估計系統負載等級和減速模式。 新版本提供了對設定敏感度閾值的支持,並能夠使用 poll() 呼叫來接收設定的閾值已在特定時間段內觸發的通知。 此功能允許 Android 在早期階段監控記憶體短缺情況,識別問題根源並終止不重要的應用程序,而不會造成用戶注意到的問題。 在壓力測試時,基於 PSI 的記憶體消耗監控工具顯示,與 vmPressure 統計資料相比,誤報率減少了 10 倍;
    • 檢查 BPF 程式的程式碼已經過最佳化,大型程式的檢查速度提高了 20 倍。 最佳化使得 BPF 程式的大小限制從 4096 條指令提高到一百萬條指令;
    • 對於 BPF 程式 的確 存取全域資料的能力,可讓您在程式中定義全域變數和常數;
    • 添加 API,它允許您控制 BPF 程式中 sysctl 參數的變更;
    • 針對MIPS32架構,已經實作了eBPF虛擬機器的JIT編譯器;
    • 對於32位元PowerPC架構,增加了對KASan(核心位址清理器)偵錯工具的支持,這有助於識別使用記憶體時的錯誤;
    • 在 x86-64 系統上,取消了在核心崩潰 (crash-dump) 期間將狀態轉儲放置在 896MB 以上記憶體區域的限制;
    • 對於s390架構,實現了對核心位址空間隨機化(KASLR)的支援以及透過kexec_file_load()載入核心時驗證數位簽章的能力;
    • 針對PA-RISC架構,增加了對核心偵錯器(KGDB)、跳轉標記和kprobes的支援;
  • Оборудование
    • 包含驅動程式 利馬 用於 Mali 400/450 GPU,用於許多基於 ARM 架構的舊晶片。 對於較新的 Mali GPU,添加了 Panfrost 驅動程序,支援基於 Midgard(Mali-T6xx、Mali-T7xx、Mali-T8xx)和 Bifrost(Mali G3x、G5x、G7x)微架構的晶片;
    • 新增了對使用開放韌體的音訊設備的支持 聲音開放固件 (SOF)。 儘管有開放驅動程式可用,但聲音晶片的韌體代碼仍然保持封閉並以二進制形式提供。 Sound Open Firmware專案是由Intel開發的,旨在為與音訊處理相關的DSP晶片創建開放韌體(Google後來也加入了開發)。 目前,該專案已準備好發現Intel Baytrail、CherryTrail、Broadwell、ApolloLake、GeminiLake、CannonLake和IceLake平台聲音晶片的韌體;
    • Intel DRM 驅動程式 (i915) 增加了對晶片的支援
      埃爾克哈特萊克(Gen11)。 新增了 Comet Lake (Gen9) 晶片的 PCI ID。 對 Icelake 晶片的支援已經穩定,還添加了額外的 PCI 設備識別碼。
      包括
      透過mmio 執行寫入操作時在視訊記憶體中的兩個緩衝區之間進行非同步切換(非同步翻轉)的模式,這顯著提高了某些3D 應用程式的效能(例如,3DMark Ice Storm 測試中的效能提高了300-400%)。 增加了技術支援 高清CP2.2 (高頻寬數位內容保護)用於加密透過 HDMI 傳輸的視訊訊號;

    • Vega20 GPU 的 amdgpu 驅動程式 添加 對 RAS(可靠性、可用性、可服務性)的支援以及對 SMU 11 子系統的實驗性支持,該子系統取代了 Powerplay 技術。 對於 GPU Vega12 添加 支援 BACO 模式(總線活動、晶片關閉)。 增加了對 XGMI 的初始支持,XGMI 是一種用於 GPU 互連的高速總線 (PCIe 4.0)。 在 amdkfd 驅動程式中新增了基於 Polaris10 GPU 的卡片所缺少的識別碼;
    • Nouveau 驅動程式增加了對基於 NVIDIA Turing 117 晶片組(TU117,用於 GeForce GTX 1650)的主機板的支援。 在
      核心配置 添加 設定禁用目前版本的 libdrm 中不再使用的過時函數;

    • DRM API 和 amdgpu 驅動程式中新增了對「時間軸」同步物件的支持,使您無需進行經典封鎖。
    • VirtualBox 虛擬 GPU 的 vboxvideo 驅動程式已從 staging 分支移至主結構;
    • 新增了GFX SoC ASPEED晶片的aspeed驅動程式;
    • 新增了對ARM SoC 和Intel Agilex (SoCFPGA)、NXP i.MX8MM、Allwinner (RerVision H3-DVK (H3)、Oceanic 5205 5inMFD、、Beelink GS2 (H6)、Orange Pi 3 (H6))、Rockchip (Orange Pichip (Orange Pichip (Orange Pichip (Orange Pichip (Orange Pichip (Orange Pichip (Orange Pichip (Orange Pichip)》 ) 的支援)板 RK3399、Nanopi NEO4、Veyron-Mighty Chromebook)、Amlogic:SEI Robotics SEI510、
      ST Micro(stm32mp157a、stm32mp157c)、恩智浦(
      埃克曼 ci4x10 (i.MX6DL),

      i.MX8MM EVK(i.MX8MM),

      ZII i.MX7 RPU2(i.MX7),

      ZII SPB4(VF610),

      Zii Ultra (i.MX8M),

      TQ TQMa7S (i.MX7Solo),

      TQ TQMa7D (i.MX7Dual),

      工房光環 (i.MX50),

      Menlosystems M53 (i.MX53))、NVIDIA Jetson Nano (Tegra T210)。

同時,拉丁美洲自由軟體基金會 形成的
選項 完全免費的內核5.2 - Linux-libre 5.2-gnu,清除包含非自由元件或程式碼部分的韌體和驅動程式元素,其範圍由製造商限制。 新版本包括文件上傳
聲音開放固件。 禁用在驅動程式中載入 blob
mt7615、rtw88、rtw8822b、rtw8822c、btmtksdio、iqs5xx、ishtp 和 ucsi_ccg。 ixp4xx、imx-sdma、amdgpu、nouveau 和 goya 驅動程式和子系統以及微程式碼文件中的 blob 清理程式碼已更新。 由於刪除而停止清理 r8822be 驅動程式中的斑點。

來源: opennet.ru

添加評論