Linux 5.6 內核版本

經過兩個月的開發,Linus Torvalds 引進 核心版本 Linux 5.6。 最顯著的變化包括:整合 WireGuard VPN 介面、支援 USB4、時間命名空間、使用 BPF 建立 TCP 擁塞處理程序的能力、對 MultiPath TCP 的初始支援、消除核心的 2038 問題、「bootconfig」機制,ZoneFS。

新版本包含來自 13702 名開發人員的 1810 個修復,
補丁大小 - 40 MB(更改影響了 11577 個文件,新增了 610012 行程式碼,
刪除了 294828 行)。 大約 45% 出現在 5.6 中
更改與設備驅動程式相關,大約 15% 的更改與
對更新特定於硬體架構的程式碼的態度,12%
與網路堆疊相關,4% 與檔案系統相關,3% 與內部
內核子系統。

主要的 創新:

  • 網絡子系統
    • 添加 VPN介面的實現 WireGuard基於現代加密方法(ChaCha20、Poly1305、Curve25519、BLAKE2s)實現,易於使用,沒有複雜性,已在許多大型實施中證明了自己,並提供非常高的效能(比 OpenVPN 快 3,9 倍)吞吐量)。 WireGuard 使用加密金鑰路由的概念,其中涉及將私鑰附加到每個網路介面並使用它來綁定公鑰。 以與 SSH 類似的方式交換公鑰以建立連線。 WireGuard 工作所需的加密原語 結轉 從圖書館 作為標準 Crypto API 的一部分並且 包括 進入核心 5.5.
    • 開始 整合支援 MPTCP(多路徑 TCP)所需的元件,MPTCP 是 TCP 協定的擴展,用於組織 TCP 連線的操作,並透過與不同 IP 位址關聯的不同網路介面沿著多條路由同時傳送封包。 對於網路應用來說,這樣的聚合連接看起來就像一個常規的TCP連接,所有的流分離邏輯都由MPTCP來執行。 多路徑 TCP 可用於提高吞吐量和可靠性。 例如,MPTCP 可用於同時使用 WiFi 和 4G 連結在智慧型手機上組織資料傳輸,或透過使用多個廉價連結而不是一個昂貴鏈路連接伺服器來降低成本。
    • 添加 支援網路佇列處理規則 sch_ets (增強的傳輸選擇,IEEE 802.1Qaz),它提供了在不同類別的流量之間分配頻寬的能力。 如果特定流量類別上的負載低於分配的頻寬,則 ETS 允許其他流量類別使用可用(未使用)頻寬。 Qdisc sch_ets 配置為 PRIO 規則,並使用流量類別來定義嚴格和共享的頻寬限制。 ETS 是多學科的結合體 普里奧 и DRR — 如果有嚴格限制的流量類別,則使用 PRIO,但如果佇列中沒有流量,則其工作方式類似於 DRR。
    • 新增了新型 BPF 程式 BPF_PROG_TYPE_STRUCT_OPS,它允許您透過 BPF 實現內核函數處理程序。 目前,該特性已經可以用於以BPF程式的形式實現TCP擁塞控制演算法。 舉個例子 提議的 BPF程式及演算法實現 DCTCP.
    • 被接納為核心 變化、翻譯工具 工具 與 ioctl() 一起使用 網路鏈路介面。 新的介面使得添加擴展變得更加容易,改進了錯誤處理,允許在狀態更改時發送通知,簡化了內核和用戶空間之間的交互,並減少了需要同步的命名列表的數量。
    • 新增FQ-PIE(Flow Queue PIE)網路佇列管理演算法的實現,旨在減少中間資料包緩衝對邊緣網路設備(buffer bloat)的負面影響。 FQ-PIE 在具有電纜數據機的系統中使用時表現出高效率。
  • 磁盤子系統、I/O 和文件系統
    • 對於 Btrfs 檔案系統 添加 DISCARD 操作的非同步實作(標記不再需要實體儲存的已釋放區塊)。 最初,DISCARD 操作是同步執行的,這可能會由於磁碟機等待相應命令完成而導致效能下降。 非同步實作允許您不必等待驅動器完成 DISCARD 並在背景執行此操作。
    • 在 XFS 中 執行 清理使用舊 32 位元時間計數器的程式碼(time_t 類型被 time64_t 取代),導致 2038 問題。 修復了 32 位元平台上發生的錯誤和記憶體損壞。 該程式碼已被重新設計以使用擴展屬性。
    • 到 ext4 檔案系統 製成 與讀寫操作期間處理 inode 鎖定相關的效能最佳化。 改進了直接 I/O 模式下的重寫效能。 為了簡化問題的診斷,第一個和最後一個錯誤代碼儲存在超級區塊中。
    • 在 F2FS 檔案系統上 實施的 以壓縮形式儲存資料的能力。 對於單一檔案或目錄,可以使用命令“chattr +c file”或“chattr +c dir;”啟用壓縮。 觸碰目錄/檔案」。 若要壓縮整個分割區,可以在安裝公用程式中使用“-o compress_extension=ext”選項。
    • 核心包括檔案系統 區域FS,這簡化了分區儲存設備的低階工作。 分區驅動器是指硬磁碟或 NVMe SSD 上的設備,其中的儲存空間被劃分為由區塊或磁區組組成的區域,只允許順序添加數據,從而更新整個區塊組。 FS ZoneFS 由西部數據開發,它將驅動器中的每個區域與單獨的文件相關聯,該文件可用於以原始模式存儲數據,而無需在扇區和塊級別進行操作,即允許應用程式使用檔案 API,而不是使用 ioctl 直接存取區塊設備。
    • 在 NFS 中,預設會停用透過 UDP 掛載分割區。 新增了對在 NFS 4.2 規範中定義的伺服器之間直接複製檔案的功能的支援。 新增了新的掛載選項“softreval”,允許在伺服器發生故障時使用快取的屬性值。 例如,指定此選項時,在伺服器不可用後,仍然可以沿著 NFS 分割區中的路徑移動並存取已在快取中的資訊。
    • 實施 優化fs-verity機制的效能,用於監控單一檔案的完整性和身份驗證。 由於使用 Merkle 雜湊樹,提高了順序讀取速度。 當快取中沒有資料時(已套用搶佔式讀取有資料的頁面),FS_IOC_ENABLE_VERITY 的效能已被最佳化。
  • 虛擬化和安全
    • 在運行時停用 SELinux 模組的功能已被棄用,並且將來將禁止卸載已啟動的 SELinux。 要停用 SELinux,您需要在核心命令列上傳遞“selinux=0”參數。
    • 添加 支援時間命名空間(time namespaces),允許將系統時脈的狀態綁定到容器(CLOCK_REALTIME、
      CLOCK_MONOTONIC、CLOCK_BOOTTIME),在容器中使用自己的時間,並且在將容器遷移到另一台主機時,確保 CLOCK_MONOTONIC 和 CLOCK_BOOTTIME 讀數保持不變(考慮加載後的時間,無論是否處於睡眠模式) )。

    • /dev/random 阻塞池已被刪除。 在池初始化後防止熵阻塞方面,/dev/random 的行為與 /dev/urandom 類似。
    • 核心核心包含一個驅動程序,允許運行 VirtualBox 的客戶系統掛載主機環境導出的目錄(VirtualBox 共用資料夾)。
    • BPF 子系統中新增了一組補丁(BPF調度員),當使用Retpoline機制防禦Spectre V2類攻擊時,它可以讓您在發生與BPF程序相關的事件時提高調用BPF程序的效率(例如,當發生事件時,可以加快XDP處理程序的調用速度)網絡資料包到達)。
    • 新增了驅動程式以支援 AMD APU 中內建的 TEE(可信任執行環境)。
  • 內存和系統服務
    • BPF 增加了對全域函數的支援。 作為新增可包含在 BPF 程式中的函數庫的支援的計劃的一部分,正在進行開發。 下一步將是支援允許載入全域函數的動態擴展,包括在使用時替換現有的全域函數。 BPF 子系統還添加了對映射操作變體(用於存儲持久性資料)的支持,該變體支援以批次模式執行。
    • 添加者 「cpu_cooling」裝置可讓您透過將過熱的 CPU 置於短暫的空閒狀態來冷卻它。
    • 新增系統調用 打開at2(),它提供了一組附加標誌來限製檔案路徑解析(禁止交叉掛載點、符號連結、魔術連結(/proc/PID/fd)、「../」元件)。
    • 對於基於big.LITTLE架構的異質系統,將強大且能效較低的CPU核心組合在一個晶片中,在執行即時任務時設定uclamp_min參數(出現了 在核心 5.3 中,有一種保護負載的機制)。 此參數確保任務將被調度程序放置在具有足夠效能的CPU核心上。
    • 內核已從 2038年的問題。 取代了最後剩下的處理程序,該處理程序使用 32 位元(有符號整數)類型 time_t 作為紀元時間計數器,考慮到 1970 年的報告,該處理程序應該在 2038 年溢出。
    • 異步I/O介面的持續改進 io_uring在其中 假如 支援新操作:IORING_OP_FALLOCATE(保留空區域)、IORING_OP_OPENAT、
      IORING_OP_OPENAT2,
      IORING_OP_CLOSE(開啟和關閉檔案),
      IORING_OP_FILES_UPDATE(從快速存取清單中新增和刪除檔案),
      IORING_OP_STATX(文件資訊請求),
      IORING_OP_READ,
      IORING_OP_WRITE(IORING_OP_READV 和 IORING_OP_WRITEV 的簡化類似物),
      IORING_OP_FADVISE,
      IORING_OP_MADVISE(呼叫 posix_fadvise 和 madvise 的非同步變體)、IORING_OP_SEND、
      IORING_OP_RECV(傳送和接收網路資料),
      IORING_OP_EPOLL_CTL(對epoll檔案描述子執行操作)。

    • 新增系統調用 pidfd_getfd(),允許進程從另一個進程檢索開啟檔案的檔案描述符。
    • 實施的 「bootconfig」機制,除了命令列選項之外,還允許透過設定檔案來確定核心參數。 為了將此類檔案新增至 initramfs 映像中,建議使用 bootconfig 公用程式。 例如,此功能可用於在啟動時設定 kprobes。
    • 重做 一種等待在無名管道中寫入和讀取資料的機制。 這項變更使得加快大型專案的並行組裝等任務成為可能。 然而,由於 4.2.1 版本中的錯誤,優化可能會導致 GNU make 中出現競爭狀況,該錯誤已在 4.3 版本中修復。
    • 在 prctl() 中加入了 PR_SET_IO_FLUSHER 標誌,該標誌可用於標記當系統記憶體不足時不應受到限制的無記憶體進程。
    • 基於Android使用的ION記憶體分配系統,實作了一個子系統 DMA 緩衝區堆,它允許您控制 DMA 緩衝區的分配,以便在驅動程式、應用程式和各種子系統之間共用記憶體區域。
  • 硬體架構
    • 增加了對 E0PD 擴展的支持,該擴展出現在 ARMv8.5 中,可防止與 CPU 上指令的推測執行相關的攻擊。 基於 E0PD 的保護比 KPTI(核心頁表隔離)保護的開銷更低。
    • 對於基於 ARMv8.5 架構的系統,添加了對 RNG 指令的支持,提供對硬體偽隨機數產生器的存取。 在核心中,RNG指令用於在初始化內核提供的偽隨機數產生器時產生熵。
    • 刪除了對內核中添加的 MPX(內存保護擴展)的支持 3.19 並允許您組織指標檢查以確保尊重記憶體區域的邊界。 該技術並未在編譯器中廣泛使用,並從 GCC 中刪除。
    • 對於 RISC-V 架構,已經實現了對 KASan(核心位址清理器)偵錯工具的支持,這有助於識別使用記憶體時的錯誤。
  • Оборудование
    • 實施規範支持 USB 4.0,它基於 Thunderbolt 3 協議,提供高達 40 Gbps 的吞吐量,同時保持與 USB 2.0 和 USB 3.2 的向後相容性。 類推 Thunderbolt USB 4.0 介面可讓您透過具有連接器的單一連接線傳輸不同的協定 C型,包括 PCIe、顯示連接埠和 USB 3.x,以及協定的軟體實現,例如用於組織主機之間的網路連結。 該實作建立在 Linux 核心中已包含的 Thunderbolt 驅動程式的基礎上,並對其進行了調整,以與 USB4 相容的主機和裝置配合使用。 這些變更還在連接管理器的軟體實作中新增了對 Thunderbolt 3 裝置的支持,連接管理器負責建立透過單一連接器連接多個裝置的隧道。
    • 在amdgpu驅動程式中 添加 初步支援 HDCP 2.x(高頻寬數位內容保護)複製保護技術。 增加了對基於 Raven 2 的 AMD Pollock ASIC 晶片的支援。為 Renoir 和 Navi 系列實現了重置 GPU 的功能。
    • Intel 顯示卡的 DRM 驅動程式 添加 DSI VDSC 支援基於 Ice Lake 和 Tiger Lake 微架構的晶片,實現了 LMEM mmap(設備本地內存),改進了 VBT(視頻 BIOS 表)解析,為 Coffee Lake 晶片實現了 HDCP 2.2 支援。
    • 繼續致力於統一 amdkfd 驅動程式程式碼(適用於離散 GPU,例如斐濟、東加、北極星)與 amdgpu 驅動程式。
    • k10temp 驅動程式經過重新設計,增加了對顯示 AMD Zen CPU 電壓和電流參數的支持,以及 Zen 和 Zen 2 CPU 中使用的溫度感測器的擴展資訊。
    • 在新司機中 添加 支援基於圖靈微架構(GeForce RTX 2000)的 NVIDIA GPU 的經過驗證的韌體載入模式,從而可以為這些卡啟用 3D 加速支援(需要下載具有 NVIDIA 數位簽章的官方韌體)。 新增了對 TU10x 圖形引擎的支援。 高清音訊的問題已解決。
    • 新增了透過 DisplayPort MST(多流傳輸)傳輸時的資料壓縮的支援。
    • 新增了新驅動程式“th11k» 適用於支援 802.11ax 的 Qualcomm 無線晶片。
      此驅動程式基於 mac80211 堆疊,支援存取點、工作站和網狀網路節點模式。

    • 透過 sysfs,可以存取現代硬碟和 SSD 上使用的可讀溫度感測器讀數。
    • 已提交 對 ALSA 音響系統進行重大更改,旨在消除程式碼 2038年的問題 (避免在 snd_pcm_mmap_status 和 snd_pcm_mmap_control 介面中使用 32 位元 time_t 類型)。 新增了對新音訊編解碼器的支持
      高通 WCD9340/WCD9341、瑞昱 RT700、RT711、RT715、RT1308、君正 JZ4770。

    • 添加 液晶面板驅動程式 Logic PD 28、Jimax8729d MIPI-DSI、igenic JZ4770、Sony acx424AKP、Leadtek LTK500HD1829、Xinpeng XPP055C272、AUO B116XAK01、GiantPlus GPM
      京東方NV140FHM-N49,
      薩茲SAT050AT40H12R2,
      夏普 LS020B1DD01D。

    • 添加 支援 ARM 板和 Gen1 平台 Amazon Echo(基於 OMAP3630)、Samsung Galaxy S III mini (GT-I8190)、Allwinner Emlid Neutis、Libre Computer ALL-H3-IT、PineH64 Model B、Aibretech Amlogic GX PC、
      Armada SolidRun Clearfog GTR、NXPGateworks GW59xx、
      Tolino Shine 3 電子書閱讀器,
      Embedded Artists COM (i.MX7ULP)、SolidRun Clearfog CX/ITX 與 HoneyComb (LX2160A)、Google Coral Edge TPU (i.MX8MQ)、
      Rockchip Radxa Dalang 載波、Radxa Rock Pi N10、VMARC RK3399Pro SOM
      ST 愛立信 HREF520、Inforce 6640、SC7180 IDP、Atmel/Microchip AM9X60(ARM926 SoC、Kizboxmini)、ST stm32mp15、AM3703/AM3715/DM3725、ST 愛立信、 新增了對 Raspberry Pi 8505 中使用的 PCIe 控制器的支援。

同時,拉丁美洲自由軟體基金會 形成的
選項 完全免費的內核5.6 - Linux-libre 5.6-gnu,清除包含非自由元件或程式碼部分的韌體和驅動程式元素,其範圍由製造商限制。 新版本停用 AMD TEE、ATH11K 和 Mediatek SCP 驅動程式中的 blob 載入。 更新了 AMD PSP、amdgpu 和 nouveau 驅動程式和子系統中的斑點清理程式碼。

來源: opennet.ru

添加評論