Collection of debates on O_DIRECT.

有空看看各種不同角色的討論,還是有點意思的。先從Linus的這個開始:O_DIRECT (Larry McVoy; Linus Torvalds) - Yarchive

注意,這個帖子有點長,而且時間跨度有點大。要有點耐心才能看完。

早些年開始學DBMS的人都知道爲什麼要用 O_DIRECT,事實上也有很多的系統就是這樣做的。當初的文件系統其實很弱,很多方面反而是DBMS先搞出來的,二者在發展過程中不斷互相借鑑,互相適配,但又遠遠沒有達到配合默契的程度。在事務處理/日誌恢復,緩衝區算法這些技術方面,DBMS的理論和實踐都要略勝一籌。爲了在磁盤設備上做出比較高性能的數據庫,早期的DBMS廠家費勁了心思,要求文件系統提供O_DIRECT這樣的接口也是可以理解的。只不過閉源軟件沒有興趣把接口定義得那麼好,也不全面考慮DBMS之外的通用性。造成既成事實之後,也沒有哪家文件系統有興趣來扭轉這種局面,更何況開源的文件系統又比較多,要讓DBMS少做點額外的工作,靠文件系統就很難得到一致的性能表現。開源的DBMS中,PostgreSQL是比較喜歡依靠文件系統的,可是遇到了一些麻煩:http://lwn.net/Articles/580542/。其中最典型的問題當屬該文章鏈接的這個:http://www.postgresql.org/message-id/[email protected]

O_DIRECT是如此的混亂,除了上面的長篇大論之外,這裏還有了個專門的討論頁面:Clarifying Direct IO's Semantics - Ext4,而數據中也是參數成堆,令人頭大不已。例如開源數據庫MySQL引入了各種不同的innodb_flush_method參數取值:https://dev.mysql.com/doc/refman/5.7/en/innodb-parameters.html。對着一大堆參數來調優,對於DBA來說實在不是什麼好差事,系統應該稍微智能一點,自己去選擇合適的參數。

發佈了94 篇原創文章 · 獲贊 9 · 訪問量 309萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章