幾天前,一名使用C++的游戲開發者Malte Skarupke 發表博客稱在為Google的云游戲服務平臺 Google Stadia提供Linux游戲時遇到了問題,并表示問題顯然來自Linux內核的調度程序,尤其是Linux內核的自旋鎖(Spinlock)。
Malte在這篇批評Linux內核調度程序糟糕的文章中指出:“我發現大多數互斥鎖的實現都非常好,而大多數自旋鎖的實現都非常差,雖然Linux的調度程序還算可以,但遠未達到理想狀態。最受歡迎的替代方案MuQSS調度程序也還存在其他問題。另外,Windows調度程序的表現也非常好。”
對于Malte的這篇文章,Linus Torvalds也發表了自己的評論。在交流的過程中,變得慈祥的Linus雖然不同意文章的觀點,但他的言語也不再那么激烈。通篇看下來,"Pure Garbage"應該是唯一一個比較符合Linus以前“暴躁”風格的詞。
Linus Torvalds寫道:“整篇文章似乎都是錯誤的,并且作者所測量的內容與他認為并聲稱的完全不同。首先,自旋鎖只能是如果你實際上知道自己在使用它們時未安排時間才使用...基本上是在釋放鎖之前讀取時間,然后在再次獲取鎖之后讀取時間,并聲稱時間差是沒有鎖之后的時間。這簡直是愚蠢和毫無意義且完全是錯誤的,純屬胡扯!”
Linus繼續補充說:“那么,解決此問題的方法是什么?告訴系統你正在等待鎖的地方使用鎖,并在鎖線程完成時告知你解鎖線程,以便調度程序合理運行,而不是(隨機)運行……再重復一次:除非你真正知道自己在做什么,否則不要在用戶空間中使用自旋鎖,并且要認識到能搞清楚自己在做什么的可能性基本上為零。”
有關更多有趣的技術細節,請參閱Linus的文章全文。
在另一篇文章中,Linus繼續指出游戲開發者的鎖從根本上是錯誤的。換句話說,從他的角度來看,Linux內核至少不應該背全部責任。但是,如在其他實例中所示,Linux內核的調度程序代碼仍有改進的空間。更重要的是,Linus的回應不再像以前那樣充滿“對抗性”,他不同意開發者的觀點,于是指出并一直在耐心解釋那篇博文錯誤的地方。