XFS:大數(shù)據環(huán)境下Linux文件系統(tǒng)的未來?
Linux有好多種件系統(tǒng),但往往最受關注的是其中兩種:ext4和btrfs。XFS開發(fā)者Dave Chinner近日聲稱,他認為更多的用戶應當考慮XFS。他談到了為了解決XFS中最嚴重的可擴展性問題所做的工作,還談到了他認為將來的發(fā)展走向。如果他說的一點都沒錯,接下來幾年我們在XFS方面有望看到更多的動靜。
XFS經常被認為是適合擁有海量數(shù)據的用戶的文件系統(tǒng)。Dave表示,XFS非常適合扮演這個角色;它對許多工作負載而言向來表現(xiàn)不俗。以前往往問題出在元數(shù)據寫入方面;對生成大量元數(shù)據寫入操作的工作負載缺少有力的支持歷來是該文件系統(tǒng)的薄弱環(huán)節(jié)。簡而言之,元數(shù)據寫入速度很慢,擴展性欠佳,甚至只能適用于單個處理器。
速度到底有多慢?Dave制作了幾張幻燈片,顯示XFS與ext4相比的fs-mark結果。哪怕在單個處理器上,XFS的表現(xiàn)也要差得多(速度只有ext4的一半);如果線程數(shù)量多達8個,情況完全變得更糟;但線程數(shù)量超過8個后,ext4也遇到了瓶頸,速度慢下來。就元數(shù)據頻繁變化的輸入/輸出密集型工作負載(解開tarball文件就是個例子)而言,Dave表示ext4的速度可能比XFS快20倍至50倍。速度這么慢足以表明XFS確實存在嚴重問題。
延遲的日志
結果表明問題其實出在日志的輸入/輸出上。針對元數(shù)據的變化,XFS會生成大量的日志流量。在最糟糕的情況下,幾乎所有的實際輸入/輸出流量都用于日志——而不是用于用戶試圖想要寫入的數(shù)據。多年來人們試圖采用多種辦法來解決這個問題,比如對算法進行重大改變,另外進行許多重大的優(yōu)化和調整。不需要的一點是任何一種磁盤上格式變化,不過這在將來可能由于其他原因而在籌劃之中。
元數(shù)據密集型的工作負載最后可能會在很短的時間內多次改變同一個目錄塊;那些改變每一次都會生成一個記錄,記錄必須寫入到日志中。這正是導致巨大日志流量的根源。解決這個問題的辦法從概念上來說很簡單:延遲日志更新,并且將針對同一目錄塊的變更合并到一個條目中。這些年來,以一種可擴展的方式實際落實這個概念頗費周折,但是現(xiàn)在取得了進展;延遲的日志(delayed logging)將是3.3內核中唯一得到支持的XFS日志模式。
實際的延遲日志技術主要由ext3文件系統(tǒng)借鑒而來。由于這種算法已知切實可行,證明它同樣適用于XFS所需的時間則短得多。除了性能上的優(yōu)點外,這一變化最終促使代碼數(shù)量減少。有誰想詳細了解其工作原理,應該會在內核文檔樹中的filesystems/xfs-delayed-logging.txt找到所需內容。
延遲日志是一大變化,但絕不是唯一的變化。日志空間預留快速路徑是XFS中非常熱門的路徑;現(xiàn)在它是無鎖的,不過慢速路徑現(xiàn)階段仍需要全局鎖。異步元數(shù)據寫回代碼形成了非常分散的輸入/輸出,結果大幅降低了性能?,F(xiàn)在,元數(shù)據寫回在寫出之前已被延遲和分類。用Dave的話來說,這意味著文件系統(tǒng)在做輸入/輸出調度程序的工作。但是輸入/輸出調度程序處理的請求序列通常限制在128個條目,而XFS的延遲元數(shù)據寫回序列可以有數(shù)千個條目,所以有必要在輸入/輸出提交之前在文件系統(tǒng)中完成分類操作。“活動日志項”(Active log item)這種機制可以累計變化,并批量運用變化,以此改進(龐大的)分類日志項列表的性能。元數(shù)據緩存也被移到了頁面緩存器的外面,頁面緩存器往往會在不合適的時間收回頁面。等等。
諸文件系統(tǒng)相比如何?
那么,現(xiàn)在XFS的擴展性如何?如果是一兩個線程,XFS的速度仍比ext4慢一點,但是它可以線性擴展,支持多達8個線程,而ext4的情況比較糟,btrfs的情況要糟得多。對XFS來說擴展性方面的局限性如今出現(xiàn)在虛擬文件系統(tǒng)層核心中的鎖定上,根本不是出現(xiàn)在針對特定文件系統(tǒng)的代碼上?,F(xiàn)在即使對一個線程來說,目錄遍歷速度也更快,對8個線程來說,速度快得多。他表示,這些并不是btrfs開發(fā)人員可能展示給人的那種結果。
[!--empirenews.page--]
現(xiàn)在空間分配方面的可擴展性要比ext4快“幾個數(shù)量級”。這是由于3.2內核中添加了“bigalloc”特性而引起的變化,如果使用了足夠大的塊,這項特性可以將ext4在空間分配方面的可擴展性提高兩個數(shù)量級。遺憾的是,該特性還將小文件的空間使用量增加了同樣數(shù)量,以至于需要160GB來存放內核樹。bigalloc并不是很適合ext4的另外一些選項,而且需要管理員回答復雜的配置問題;在創(chuàng)建文件系統(tǒng)時,管理員必須考慮文件系統(tǒng)在整個使用壽命期間將如何使用。Dave表示,ext4存在架構方面的不足——尤其是使用位圖來用于跟蹤空間,這是上世紀80年代的文件系統(tǒng)存在的典型問題。它根本無法擴展,成為真正超大的文件系統(tǒng)。
btrfs中的空間分配甚至比ext4還要來得慢。Dave表示,問題主要出在閑置空間緩存的走查,目前這是處理器密集型的操作。這不是btrfs中的架構問題,所以它應該有望得到解決,但需要做一番優(yōu)化工作。
Linux文件系統(tǒng)的未來
這方面有何進展?現(xiàn)階段,XFS中的元數(shù)據性能和可擴展性可以被認為是已得到解決的問題。現(xiàn)在性能瓶頸出現(xiàn)在虛擬文件系統(tǒng)(VFS)層,所以需要在這方面開展下一輪工作。但是未來面臨的一大挑戰(zhàn)在于可靠性方面;這可能需要XFS文件系統(tǒng)作出一些相當大的變化。
可靠性不僅僅是不丟失數(shù)據這么簡單——但愿XFS在這方面已經做得很到位,這在將來其實是個可擴展性問題。讓數(shù)千兆兆字節(jié)(PT)的文件系統(tǒng)下線、運行一款文件系統(tǒng)檢查和修復工具,這根本不切實際;將來,這項工作其實需要在線進行。這就需要把成熟可靠的故障檢測機制融入到文件系統(tǒng)當中,以便可以實時驗證元數(shù)據正確無誤。其他一些文件系統(tǒng)也在實施驗證數(shù)據的機制,但是這似乎超出了XFS的范圍。Dave表示,數(shù)據驗證工作最好是在存儲陣列層面或應用程序層面完成。
“元數(shù)據驗證”意味著,讓元數(shù)據自我描述,保護文件系統(tǒng),防范被存儲層指錯方向的寫入。添加校驗和技術還不夠——核驗和只能證明現(xiàn)有的是被寫入的。以適當方式自我描述的元數(shù)據能夠檢測寫入到錯誤地方的塊,并且?guī)椭匦陆M裝完全壞掉的文件系統(tǒng)。它還能防止“"reiserfs問題”,即文件系統(tǒng)的修復工具被過時的元數(shù)據或存儲在待修復的文件系統(tǒng)中的文件系統(tǒng)映像里面的元數(shù)據搞糊涂。
讓元數(shù)據可以自我描述需要作出許多變化。每個元數(shù)據塊將包含文件系統(tǒng)的UUID;每個塊中還有塊和索引節(jié)點(inode)的編號,那樣文件系統(tǒng)就能驗證元數(shù)據來自預期的地方。將來會有檢驗和機制,用來檢測受到損壞的元數(shù)據塊,還會有所有者標識符,用來將元數(shù)據與歸屬的索引節(jié)點或目錄關聯(lián)起來。反向映射分配樹將讓文件系統(tǒng)可以迅速確認任何某個塊屬于哪個文件。
不用說,目前的XFS磁盤上格式并不提供存儲所有這些額外數(shù)據的機制。這意味著磁盤上格式會有變化。據Dave聲稱,不打算提供任何形式的向前或向后格式兼容;格式變化將是真正重大的變化。開展這項工作是為了便于完全自由地設計一種長期服務于XFS用戶的新格式。雖然正在改變格式來添加上述的可靠性功能,但是開發(fā)人員也會為目錄結構中的d_type、NFSv4版本計數(shù)器、索引節(jié)點創(chuàng)建時間以及可能更多對象添加空間。最大的目錄大小(目前只有區(qū)區(qū)32GB)也會得到提高。
[!--empirenews.page--]
這一切將帶來許多優(yōu)點:主動檢測文件系統(tǒng)受損情況、定位和更換缺乏聯(lián)系的塊以及更好的在線文件系統(tǒng)修復。Dave表示,這意味著在將來很長一段時間,對Linux環(huán)境下的大數(shù)據應用程序而言,XFS仍將是最出色的文件系統(tǒng)。
從btrfs的角度來看,這一切又意味著什么呢?Dave表示,btrfs顯然不是針對處理元數(shù)據密集型工作負載的文件系統(tǒng)而優(yōu)化;有一些嚴重的可擴展性問題成為了攔路虎。對于處于早期開發(fā)階段的一款文件系統(tǒng)來說,這完全在意料之中。其中一些問題需要借以時日才能克服,但可能存在這種情況:其中一些問題可能無法得到解決。另一方面,btrfs中的可靠性功能開發(fā)得很完善,這款文件系統(tǒng)完全能夠提供在接下來幾年預期的存儲功能。
而ext4存在架構可擴展性問題。據Dave的結果顯示,它不再是速度最快的文件系統(tǒng)。有幾個方案可用來改進可靠性,其磁盤上格式顯露了老態(tài)。ext4支持在不遠將來的存儲需求有難度。
考慮到這點,Dave在最后拋出了一個問題。由于其豐富功能,btrfs不日將取代ext4,成為許多Linux發(fā)行版中的默認文件系統(tǒng)。與此同時,ext4在處理大多數(shù)工作負載方面性能不如XFS,包括它在傳統(tǒng)上表現(xiàn)更強勁的應用領域。一些可擴展性問題甚至出現(xiàn)在了更小的服務器系統(tǒng)上。“匯聚半完成的項目”并不總是能取得很好的效果;Dave表示,ext4并不如人們想象的那么穩(wěn)定或久經測試。于是他問道:為什么我們仍需要ext4?
有人可能認為,ext4開發(fā)人員會想出很好的辦法來回答這個問題,但是目前還沒有人回答得了。