歡迎光臨
每天分享高質量文章

微軟研究員:fork() 已落後,需要淘汰

來源:開源中國社區

 

 

www.oschina.net/news/105857/a-fork-in-the-road

微軟研究人員發表論文稱用於創建行程的 fork 系統呼叫方式已經很落後,並且對操作系統的研究與發展產生了極大的負面影響,需要淘汰,作者同時提出了替代方案。

 

 

相信每位開發者都對操作系統中的 fork() 有一定的瞭解,至少知道它是用來創建行程的。fork 系統呼叫方式在 20 世紀 70 年代被創造出來,它通常與 exec() 組合使用,非常簡單卻很強大,被認為是一種天才式的設計、Unix 的偉大思想,至今 50 餘年一直作為 POSIX 操作系統的原語存在,同時幾乎每個 Unix shell、主要 Web 和資料庫服務器、Google Chrome、Redis 甚至 Node.js 都使用 fork。

 

然而微軟系統研究實驗室 Redmond 的研究人員 3 月份卻發表了一篇論文,表示 fork 作為操作系統原語繼續存在,阻礙了對操作系統的研究,“它是來自另一個時代的遺物,不適合現代系統,並且會帶來一系列負面影響”,研究人員認為是時候將 fork 淘汰了。

 

fork 簡單已成神話

 

論文中承認了 fork API 的優點,包括簡單與緩解併發性,也肯定了 fork 在歷史上的重要貢獻,但更多地是列出了它在現代操作系統研究與發展中的弊端。

 

研究人員認為 fork 本身就存在許多問題,另一方面,fork 在操作系統的研究與發展上也起了限製作用,論文指出有明確的證據表明支持 fork 限制了 OS 體系結構的變化,並限制了操作系統適應硬體演進的能力。

 

乍一看可能會覺得 fork 很簡單,而這也是它的一大特征,但是實際上,“這是一個具有欺騙性的神話”。

 

fork 的語意已經影響了每個創建行程狀態的新 API 的設計,POSIX 規範現在列出了關於如何將父狀態複製到子進度的 25 個特殊情況,包括檔案鎖定、定時器、異步 IO 操作與跟蹤等。此外,許多系統呼叫標誌控制 fork 關於記憶體映射(Linux madvise() 標記 MADV_DONTFORK/DOFORK/WIPEONFORK 等)、檔案描述符(O_CLOEXEC、FD_CLOEXEC)和執行緒(pthread_atfork())的行為。任何重要的操作系統工具都必須通過 fork 記錄其行為,並且用戶樣式庫必須做好準備,以便隨時 fork 它們的狀態。fork 已經不再簡單。

 

fork 不是執行緒安全的,Unix 行程支持執行緒,但 fork 創建的子行程只有一個執行緒(呼叫執行緒的副本),當一個執行緒在 fork 時,如果另一個執行緒此時進行記憶體分配並持有堆鎖,任何在子行程中分配記憶體的嘗試(從而獲得相同的鎖)都將立即發生死鎖。

 

fork 很慢,fork 的性能一直是個問題,此前使用寫時複製技術使其性能可接受,但是在今天,建立寫時複製映射本身都成了一個性能問題,比如 Chrome 在 fork  時會經歷了長達 100 毫秒的延遲,Node.js 應用在 exec 之前 fork 時,可以被阻塞幾秒鐘。fork+exec 與 spawn 的性能對比情況可以通過本文開頭的圖片直觀看到。

 

fork 無法擴展,系統規模的設計首先要避免不必要的共享,但 fork 行程會與其父行程共享所有內容,由於 fork 複製了行程操作系統狀態的各個方面,這樣複製與取用計數成本會比較低,所以 fork 其實是趨向於將狀態集中在單片內核中,這就使得難以實現一些新技術,比如用於安全性和可靠性的內核劃分。

 

fork 與異構硬體不兼容,它將行程的抽象與包含它的硬體地址空間混為一談。fork 將行程的定義限製為單個地址空間,並且是在某個核心上運行的單個執行緒。但現代硬體和在其上運行的程式並不是這樣,硬體異構化越來越嚴重,使用有內核旁路 NIC 的 DPDK 或帶有 GPU 的 OpenCL 的行程無法安全地 fork,因為操作系統無法複製 NIC/GPU 上的行程狀態。這個問題至少已經困擾了 GPU 程式員十年,而隨著未來的芯片上系統包含越來越多的狀態加速器,情況只會變得更糟。

 

“GET THE FORK OUT OF MY OS!

 

論文提出了替代 fork 的方案:包括一個高級 Spawn API 和一個低級類微內核 API 的組合。涉及到 posix_spawn()、vfork()、跨行程操作、clone()、改進寫時複製記憶體等內容。

 

fork 的問題越來越嚴重,作者最後總結出必須做三件事來糾正這種情況,不僅要棄用 fork,還要改善替代方案,同時糾正我們關於 fork 的教學內容,不能再錯誤地宣揚 fork 的能力與設計水平。

 

論文地址:

  • https://www.microsoft.com/en-us/research/publication/a-fork-in-the-road

已同步到看一看
赞(0)

分享創造快樂