Linux 核心的五大創新
想知道什麼是 Linux 核心上真正的(不是那種時髦的)創新嗎?
在科技行業,創新這個詞幾乎和革命一樣到處氾濫,所以很難將那些誇張的東西與真正令人振奮的東西區分開來。Linux 核心被稱為創新,但它又被稱為現代計算中最大的奇蹟,一個微觀世界中的龐然大物。
撇開營銷和模式不談,Linux 可以說是開源世界中最受歡迎的核心,它在近 30 年的生命時光當中引入了一些真正的規則改變者。
Cgroups(2.6.24)
早在 2007 年,Paul Menage 和 Rohit Seth 就在核心中新增了深奧的控制組(cgroups)功能(cgroups 的當前實現是由 Tejun Heo 重寫的)。這種新技術最初被用作一種方法,從本質上來說,是為了確保一組特定任務的服務質量。
例如,你可以為與你的 WEB 服務相關聯的所有任務建立一個控制組定義(cgroup),為例行備份建立另一個 cgroup ,再為一般作業系統需求建立另一個 cgroup。然後,你可以控制每個組的資源百分比,這樣你的作業系統和 WEB 服務就可以獲得大部分系統資源,而你的備份程式可以訪問剩餘的資源。
然而,cgroups 如今變得這麼著名是因其作為驅動雲技術的角色:容器。事實上,cgroups 最初被命名為程式容器。當它們被 LXC、CoreOS 和 Docker 等專案採用時,這並不奇怪。
就像閘門開啟後一樣,“容器” 一詞就像成為了 Linux 的同義詞一樣,微服務風格的基於雲的“應用”概念很快成為了規範。如今,已經很難擺脫 cgroups 了,它們是如此普遍。每一個大規模的基礎設施(如果你執行 Linux 的話,可能還有你的膝上型電腦)都以一種合理的方式使用了 cgroups,這使得你的計算體驗比以往任何時候都更加易於管理和靈活。
例如,你可能已經在電腦上安裝了 Flathub 或 Flatpak,或者你已經在工作中使用 Kubernetes 和/或 OpenShift。不管怎樣,如果“容器”這個術語對你來說仍然模糊不清,則可以 通過 Linux 容器從背後獲得對容器的實際理解。
LKMM(4.17)
2018 年,Jade Alglave、Alan Stern、Andrea Parri、Luc Maranget、Paul McKenney 以及其他幾個人的辛勤工作的成果被合併到主線 Linux 核心中,以提供正式的記憶體模型。Linux 核心記憶體[一致性]模型(LKMM)子系統是一套描述 Linux 記憶體一致性模型的工具,同時也產生用於測試的用例(特別命名為 klitmus)。
隨著系統在物理設計上變得越來越複雜(增加了更多的中央處理器核心,快取記憶體和記憶體增長,等等),它們就越難知道哪個中央處理器需要哪個地址空間,以及何時需要。例如,如果 CPU0 需要將資料寫入記憶體中的共享變數,並且 CPU1 需要讀取該值,那麼 CPU0 必須在 CPU1 嘗試讀取之前寫入。類似地,如果值是以一種順序方式寫入記憶體的,那麼期望它們也以同樣的順序被讀取,而不管哪個或哪些 CPU 正在讀取。
即使在單個處理器上,記憶體管理也需要特定的任務順序。像 x = y
這樣的簡單操作需要處理器從記憶體中載入 y
的值,然後將該值儲存在 x
中。在處理器從記憶體中讀取值之前,是不能將儲存在 y
中的值放入 x
變數的。此外還有地址依賴:x[n] = 6
要求在處理器能夠儲存值 6
之前載入 n
。
LKMM 可以幫助識別和跟蹤程式碼中的這些記憶體模式。它部分是通過一個名為 herd
的工具來實現的,該工具(以邏輯公式的形式)定義了記憶體模型施加的約束,然後列舉了與這些約束一致性的所有可能的結果。
低延遲補丁(2.6.38)
很久以前,在 2011 年之前,如果你想在 Linux 上進行多媒體工作,你必須得有一個低延遲核心。這主要適用於錄音時新增了許多實時效果(如對著麥克風唱歌和新增混音,以及在耳機中無延遲地聽到你的聲音)。有些發行版,如 Ubuntu Studio,可靠地提供了這樣一個核心,所以實際上這沒有什麼障礙,這只不過是當藝術家選擇發行版時的一個重要提醒。
然而,如果你沒有使用 Ubuntu Studio,或者你需要在你的發行版提供之前更新你的核心,你必須跳轉到 rt-patches 網頁,下載核心補丁,將它們應用到你的核心原始碼,編譯,然後手動安裝。
後來,隨著核心版本 2.6.38 的釋出,這個過程結束了。Linux 核心突然像變魔術一樣預設內建了低延遲程式碼(根據基準測試,延遲至少降低了 10 倍)。不再需要下載補丁,不用編譯。一切都很順利,這都是因為 Mike Galbraith 編寫了一個 200 行的小補丁。
對於全世界的開源多媒體藝術家來說,這是一個規則改變者。從 2011 年開始事情變得如此美好,到 2016 年我自己做了一個挑戰,在樹莓派 v1(型號 B)上建造一個數字音訊工作站(DAW),結果發現它執行得出奇地好。
RCU(2.5)
RCU,即讀-拷貝-更新,是電腦科學中定義的一個系統,它允許多個處理器執行緒從共享記憶體中讀取資料。它通過延遲更新但也將它們標記為已更新來做到這一點,以確保資料讀取為最新內容。實際上,這意味著讀取與更新同時發生。
典型的 RCU 迴圈有點像這樣:
- 刪除指向資料的指標,以防止其他讀操作引用它。
- 等待讀操作完成它們的關鍵處理。
- 回收記憶體空間。
將更新階段劃分為刪除和回收階段意味著更新程式會立即執行刪除,同時推遲迴收直到所有活動讀取完成(通過阻止它們或註冊一個回撥以便在完成時呼叫)。
雖然 RCU 的概念不是為 Linux 核心發明的,但它在 Linux 中的實現是該技術的一個定義性的例子。
合作(0.01)
對於 Linux 核心創新的問題的最終答案永遠是協作。你可以說這是一個好時機,也可以稱之為技術優勢,稱之為黑客能力,或者僅僅稱之為開源,但 Linux 核心及其支援的許多專案是協作與合作的光輝範例。
它遠遠超出了核心範疇。各行各業的人都對開源做出了貢獻,可以說都是因為 Linux 核心。Linux 曾經是,現在仍然是自由軟體的主要力量,激勵人們把他們的程式碼、藝術、想法或者僅僅是他們自己帶到一個全球化的、有生產力的、多樣化的人類社群中。
你最喜歡的創新是什麼?
這個列表偏向於我自己的興趣:容器、非統一記憶體訪問(NUMA)和多媒體。無疑,列表中肯定缺少你最喜歡的核心創新。在評論中告訴我。
via: https://opensource.com/article/19/8/linux-kernel-top-5-innovations
作者:Seth Kenlon 選題:lujun9972 譯者:heguangzhi 校對:wxy
訂閱“Linux 中國”官方小程式來檢視
相關文章
- Linux核心是什麼?Linux核心的五大功能!Linux
- 高效|五大模式和兩大創新,看懂智慧製造具體呈現模式
- TDengine 3.0 三大創新詳解
- Linux核心的五大功能!Linux怎麼學?Linux
- Linux新核心:提升系統效能Linux
- Linux核心是如何建立一個新程式的?Linux
- 庫克談蘋果新品 產品線將迎來巨大創新蘋果
- 認識linux核心(linux核心的作用)Linux
- 遊戲商業化的又一重大創新——詳解Battle Pass遊戲BAT
- 微軟Windows 7 RC十大創新特性全接觸微軟Windows
- 詳解Linux 2.6核心新變化(2)(轉)Linux
- 詳解Linux 2.6核心新變化(1)(轉)Linux
- linux記憶體管理(六)- 核心新struct - folioLinux記憶體Struct
- 把兩塊晶片壓成一塊:EUV以來半導體制造的最大創新晶片
- php核心分析(五)-zvalPHP
- Hibernate的五大核心介面
- 華為雲釋出15大創新服務 攜手夥伴及開發者共創新價值
- Linux核心同步機制之(五):Read Write spin lock【轉】Linux
- KPMGCIO調查報告:89%的CIO加大創新投資力度對抗不確定性GC
- 開源新聞速遞:Linux 4.6 核心釋出Linux
- Linux 3.16 核心中有什麼新東西?Linux
- Linux 核心的故事Linux
- 五年26個版本:Linux系統核心全程回顧-- performance testLinuxORM
- Linux核心之 核心同步Linux
- Android核心和Linux核心的區別AndroidLinux
- 直面“雙碳”挑戰 盤點開放計算的四大創新舉措
- Rust for Linux 新補丁:為 Linux 核心增加對 Rust 作為第二語言的支援RustLinux
- 《2021中國網路安全十大創新趨勢》釋出
- 20242822《Linux核心原理與分析》第五週作業Linux
- 商業創新的核心要素
- Linux核心的framebuffer相關的核心程式碼註釋Linux
- 推薦五篇 OpenStack 的新指南
- LINUX 核心的型別(轉)Linux型別
- 戴文的Linux核心專題:13配置核心(9)Linux
- linux核心和windows核心的一些區別LinuxWindows
- 戴文的Linux核心專題:07 配置核心 (3)Linux
- 戴文的Linux核心專題:08 配置核心(4)Linux
- 創新實訓(五)