我們應該在 ext3 上使用 data=writeback 和 barrier=0 掛載嗎?
我們一直在託管公司的 VM 上執行伺服器,並且剛剛註冊了專用主機(AMD Opteron 3250,4 核,8GB RAM,2 x 1TB 軟體 RAID,ext3)。
在執行性能測試時,我們注意到一些 SQLite 事務(插入、刪除和/或更新的組合)比我的 2010 MacBook Pro 花費的時間要長 10 到 15 倍。
經過大量的Google搜尋和閱讀,我們來看看掛載選項,它們是:
data=ordered,barrier=1
我們做了一些實驗,並獲得了最佳性能
data=writeback,barrier=0
我已經閱讀了這些內容,並了解了他們所做工作的基本知識,但我對我們這樣跑步是否是個好主意沒有很好的感覺/感覺?
問題
對於託管服務,考慮上述配置是否明智?
如果我們停電或硬崩潰,那麼我們最終可能會失去數據或文件損壞。如果我們每 15 分鐘拍攝一次數據庫快照,這可能會緩解這種情況,但拍攝快照時數據庫可能不會同步。我們應該(可以?)如何確保這樣一個快照的完整性?
我們還應該考慮其他選擇嗎?
謝謝
第一個建議
如果您不能失去任何數據(我的意思是一旦使用者輸入了新數據,如果在接下來的幾秒鐘內不會失去)並且因為您沒有像 UPS 這樣的東西,那麼我不會刪除寫入障礙,我也不會切換到寫回。
移除寫屏障
如果移除寫屏障,那麼在崩潰或斷電的情況下,文件系統將需要執行 fsck 來修復磁碟結構(請注意,即使屏障打開,大多數日誌文件系統仍然會執行 fsck儘管該雜誌的重播應該已經足夠了)。刪除寫屏障時,建議盡可能刪除任何磁碟記憶體(在硬體上),這有助於將風險降至最低。不過,您應該對此類更改的影響進行基準測試。你可以試試這個命令(如果你的硬體支持的話)
hdparm -W0 /dev/<your HDD>
。請注意,ext3 在元數據更改時使用 2 個屏障,而 ext4 在使用 mount 選項時僅使用一個
journal_async_commit
。儘管Ted T’so 解釋了為什麼在 ext3 的早期發生了一些數據損壞(在Kernel 3.1 之前障礙預設為關閉),但日誌的放置方式除非發生日誌日誌包裝(日誌是循環日誌)數據以安全的順序寫入磁碟- 首先是日誌,其次是數據 - 即使使用硬碟也支持寫入的重新排序。
基本上,當日誌日誌包裝時發生系統崩潰或斷電是很不幸的。但是,您需要保留
data=ordered
. 嘗試data=ordered,barrier=0
另外進行基準測試。如果您可以承受失去幾秒鐘的數據,您可以啟動這兩個選項
data=writeback,barrier=0
,然後嘗試使用該commit=<nrsec>
參數進行試驗。在此處查看此參數的手冊。基本上你給了幾秒鐘,這是 ext3 文件系統將同步其數據和元數據的時間段。您也可以嘗試使用一些關於臟頁(需要寫入磁碟的頁面)的核心可調參數進行調整和基準測試,這裡有一篇很好的文章解釋了有關這些可調參數的所有內容以及如何使用它們。
關於障礙的總結
您應該對更多的可調參數組合進行基準測試:
data=writeback,barrier=0
配合使用hdparm -W0 /dev/<your HDD>
- 採用
data=ordered,barrier=0
data=writeback,barrier=0
與其他掛載選項結合使用並commit=<nrsec>
為 nrsec 嘗試不同的值- 使用選項 3。並嘗試在核心級別對臟頁進行進一步調整。
- 使用 safe
data=ordered,barrier=1
,但嘗試其他可調參數:尤其是文件系統提升器(CFQ、Deadline 或 Noop)及其各自的可調參數。考慮遷移到 ext4 並對其進行基準測試
如前所述,ext4 寫入所需的障礙比 ext3 少。此外,ext4 支持對於大文件可能帶來更好性能的範圍。所以這是一個值得探索的解決方案,特別是因為它很容易從 ext3 遷移到 ext4 而無需重新安裝:官方文件;我在一個系統上做到了這一點,但使用了這個Debian 指南。Ext4 自核心 2.6.32 以來非常穩定,因此在生產中使用是安全的。
最後考慮
這個答案遠非完整,但它為您提供了足夠的材料來開始調查。這在很大程度上取決於要求(在使用者或系統級別),很難有一個簡單的答案,對此感到抱歉。