Deepin 擁 "核" 計劃

源起

Deepin 並不是想跟斯塔克工業 (Stark Industry) 競爭武器市場, 而是打算開始維護自己的 Linux 內 "核".

起因為, 在 Deepin 15 發佈後至今不到一個月, 開發團隊就被擊潰了~ 來自論壇上各種電源管理, 顯卡, 網卡, 打印機... 等問題回報, 無法從桌面環境及應用改善.

Deepin 在 15 版時轉向 Debian 並使用官方的內核後, 實測表明相較於 Ubuntu 及 Fedora 等發行版, 同樣的內核版本在集成了相當數量的補丁後, 硬件兼容性有不小的提升, 因此, Deepin 團隊體認到, 解決問題必須從 "心" 開始, 有自己的內核版本, 才能更明快的滿足用戶需求.

短期做法及目標

短期做法的目標在於可用性, 穩定性以及項目管理體系的建設

  • 針對桌面環境進行優化
  • 大版本跟 Debian 官方對齊
  • 集成各大發行版現有補丁
  • 建立持續集成, 發佈體系
  • 建立自動化功能/穩定/壓力/安全/效能測試, 量化內核質量
  • 可運行環境留存 & 源代碼關聯, 問題自動化版本定位
  • 追蹤如 CVE 發佈, 即時修正安全問題

短期目標的達成, 期能提供直觀的測試呈現, 瞭解現況, 進而分析趨勢. 如下圖為針對 Linux 3.5 到 4.4 進行的效能測試結果之一

中長期目標為

中長期目標在擴大內核開發深度及廣度, 貢獻上游, 應用及桌面生態優化

  • 開發並貢獻內核第一手補丁
  • 開發並貢獻內核測試工具
  • 持續與 Debian 官方內核整合
  • 持續招募內核領域專家
  • 從下到上, 持續以新內核特性優化框架及應用
  • 建立驅動數據庫, 追蹤及支持新硬件
  • 加大被測硬件類型, 增加測試群集規模

希望經由以上實務作法, 對市場主流硬件提供良好的支持, 新硬件則能給出相對明確的支持時間點.

內核對桌面及應用有什麼影響?

舉兩個例子.

內核管理了所有的硬件資源, 再以各種不同的方式曝露給桌面及應用取用. 因此, 整個系統的體驗平順與否內核通常要負起大部份的責任. 除內部算法的優化外, 對應用的接口設計也很大一部份的影響了應用開發方式及效率. 例如檔案複製過程

  1. 開啟來源檔案
  2. 開啟目的檔案
  3. 從來源複製一部份資料: 這資料會從內核的文件系統中讀出, 再複一份給應用
  4. 對目的寫入一部份資料: 這資料會將剛讀出的內容從應用再複製到內核的文件系統中, 然後再寫入存儲
    • 持續步驟 3 及 4, 直到檔案內容完整複製
  5. 關閉目的檔
  6. 關閉來源檔

在步驟 3 及 4 時多了花無謂的時間將檔案內容從內核 => 應用 => 內核間來回複製上, 浪費 CPU 運算力及內存頻寬, 還增加了上下文切換 (Context Switch).

4.4 版的內核為了處理這個問題, 新增了 copy_file_range() 系統調用, 流程就變成了

  1. 開啟來源檔案
  2. 開啟目的檔案
  3. 應用告知文件系統從來源檔案的 A 位置複製到目的檔案的 B 位置
    • 持續步驟 3 , 直到檔案內容完整複製
  4. 關閉目的檔
  5. 關閉來源檔

如此檔案內容不需經過應用, 直接在內核中完成, 避免了不必要的內存複製 (Zero Copy), 每個檔案內容片斷的複製輪回系統調用也從 2 個變成 1 個, 減少了上正文切換次數, 節省資源從而提高效率.

上例是內核接口對應用的影響. 內核的機制, 也會影響應用的可用性及資料安全性, 舉個內存管理的例子. 內核會為每個應用進行給分 (/proc/[PID]/oom_score), 內存用得多得分就高. 內存緊張時, 內核會派出 OOM Killer 從高分應用開始宰, 直到滿足內存需求為止.

[Having a process killed to free memory] was really terrible experience because I lost my best score of game I had ever after I switch the phone call while I enjoyed the game

OOM Killer 會造成的問題是, 假設今天遊戲玩得正 high, 但有突發事件要處理所以進行切換應用, 因為視覺效果好的遊戲內存佔用通常較高, 此時系統如果碰巧處於內存緊張的狀態, 內核就有很大的機會將未存檔的遊戲進程宰了...

在 4.3 版內核中新增了閒置內存追蹤機制, 讓應用能告知內核有哪些已配置內存是可以安全的被回收, 應用與內核相互合作將內存回收, 而非內核單方面對應用施暴, 如此可大幅降低內存緊張時資料遺失的機會.

現況及展望

近年來 Linux 內核發展飛速, 以 4.2 版而言, 補丁提交人數來到了新高點 - 1569 人參與貢獻代碼 (279 名為首次提交), 增加代碼行數 80 萬行, 總代碼行數約 2100 萬行! 可以看得出, 內核開發是相當具挑戰性且有意思的工作, 才會如此吸引了全世界為數眾多的牛人參與其中, 相互較勁學習.

Deepin 參與內核開發雖然有點晚, 但是個必須且必然發生的事, 做為後進者, 過程會以謙俾開放的態度前進, 向業界及社區吸收補足相關經驗及知識, 不改以做出讓大家讚同的發行版為目標的初衷.

正在看著本文的您, 如果對於內核, 新技術, 問題與挑戰有著不滅的熱情, 我們非常誠懇的邀請您來加入, 一起為 Linux 內核及開源, 做出一份貢獻!

本文圖片來源