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