第二次訪談 Reiser4 FS 的開發者 Eduard Shishkin

對 Reiser4 文件系統開發人員 Eduard Shishkin 的第二次訪談已發布。

首先,請提醒讀者您在哪裡工作以及為誰工作。

我在華為德國研究中心擔任首席儲存架構師。在虛擬化部門,我負責處理資料儲存的各個方面。我的活動與特定作業系統無關。

您目前是否致力於主核心分支?

很少,而且只有在我的雇主需要時才這樣做。上一次是大約三年前,我發送補丁來提高使用 9p 協定(該業務的另一個名稱是 VirtFS)的主機上共享儲存的吞吐量。這裡必須指出一個重要的事實:雖然我已經使用Linux很長時間了,但我從來都不是它的粉絲,也就是說,我像其他一切一樣「呼吸均勻」。特別是,如果我發現一個缺陷,我最多可以指出一次。這樣你就可以跟隨某人並說服他們 - 這不會發生。

我記得上次,十年前,您對核心開發風格相當批評。從您(或也許是公司)的角度來看,有什麼變化嗎?如果不是,你認為該怪誰?

我從未看到任何變得更好的改變。社會的主要問題是用政治技術、人際關係、多數意見、民粹主義、「內在聲音」的建議、腐爛的妥協、科學以外的任何東西取代科學。無論人們怎麼說,計算機科學首先是一門精確的科學。如果有人開始在「Linux way」旗幟下或在其他旗幟下宣稱自己的 2x2 價值(與 4 不同),那麼這除了傷害之外不太可能帶來任何其他好處。

所有的麻煩主要是因為決策者的無能和缺乏教育所造成的。如果管理者無能,他就無法做出客觀、充分的決策。如果他也沒有文化,他就無法找到一位有能力的專家來給他正確的建議。很有可能,選擇會落在那些說「看似正確的事情」的騙子身上。腐敗的環境總是圍繞著無能的孤獨領導人而發展。而且,歷史在這方面沒有例外,社區就是對此最明確的證實。

您如何評價 Btrfs 的開發進度?這個FS擺脫了童年疾病嗎?您如何將其定位為「家庭」或企業用途的 FS?

我沒有擺脫它。我11年前提到的一切今天仍然適用。 Btrfs 不適合嚴重需求的問題之一是可用空間問題。我什至沒有談論這樣一個事實:在任何其他 FS 都會在分區上顯示大量可用空間的情況下,用戶被要求運行到存儲中以獲取新磁碟。由於缺乏可用空間而無法完成邏輯磁碟區上的操作也不是最糟糕的事情。最糟糕的是,非特權用戶幾乎總是可以繞過任何磁碟配額,在相當短的時間內剝奪每個人的可用空間。

它看起來像這樣(針對 Linux 核心 5.12 進行測試)。在新安裝的系統上啟動一個腳本,該腳本循環在主目錄中建立具有特定名稱的文件,在特定偏移處向它們寫入數據,然後刪除這些文件。運行該腳本一分鐘後,沒有任何異常情況發生。五分鐘後,分區佔用空間略有增加。兩到三個小時後,電量達到 50%(初始值為 15%)。經過五到六個小時的工作後,腳本崩潰並出現錯誤「分區上沒有可用空間」。此後,您將無法再向分割區寫入 4K 檔案。

出現了一個有趣的情況:您最終沒有向分區寫入任何內容,並且所有可用空間(大約 85%)都消失在某個地方。對遭受此類攻擊的部分進行分析將發現許多樹節點僅包含一個項目(配備金鑰的物件),大小為幾個位元組。也就是說,之前佔據磁碟空間15%的內容結果被均勻地「塗抹」在整個分割區上,這樣就沒有地方可以寫入新檔案了,因為它的金鑰比所有現有的都大,而且空閒的文件也沒有地方可以寫。

此外,這一切都已經發生在基本的Btrfs 配置上(沒有任何快照、子卷等),並且無論您決定如何在該FS 中存儲文件體(作為樹中的“片段”,或作為範圍),都無關緊要。

您將無法讓其他上游檔案系統遭受此類攻擊(無論他們告訴您什麼)。我很早之前就解釋過問題的原因:這是對Btrfs中B樹概念的完全扭曲,這使得它有可能自發性或故意退化。特別是,在某些負載下,您的檔案系統在運行過程中將不斷“崩潰”,無需外部協助。顯然,各種「緊迫」的後台進程只能在單一桌面上挽救局面。

在集體伺服器上,攻擊者總是能夠「領先」他們。系統管理員甚至無法判斷到底是誰欺負了他。在 Btrfs 中解決此問題的最快方法是恢復常規 B 樹的結構,即重新設計磁碟格式並重寫 Btrfs 程式碼的重要部分。這將需要8-10 年的時間,包括調試,前提是開發人員嚴格遵循原始文章中相關演算法和資料結構,並且不玩「破手機」遊戲,就像「Li​​nux 中」習慣(和鼓勵)的那樣。

這裡我們還需要加入開發人員理解這一切所需的時間。這就是事情變得更加困難的地方。無論如何,十年的時間,也不足以讓他們明白。好吧,在那之前你不能指望奇蹟發生。它不會以“你和我不知道的”安裝選項的形式發生,也不會以“只是業務問題”需要準備的補丁的形式發生。對於每一次這樣倉促的“修復”,我都會呈現一個新的退化場景。 B 樹是我最喜歡的主題之一,我必須說這些結構本身不允許自由!

我如何為自己定位 Btrfs?作為絕對不能稱為檔案系統的東西,更談不上使用。因為,根據定義,FS 是一個作業系統子系統,負責有效管理「磁碟空間」資源,而在 Btrfs 中我們看不到這一點。好吧,想像一下,你來商店買一塊手錶,以免上班遲到,但他們沒有賣給你手錶,而是給你賣了一個帶定時器的電烤架,最多可以烤 30 分鐘。所以,Btrfs 的情況更糟。

瀏覽郵件清單時,我經常遇到這樣的說法:由於磁碟機便宜,有效管理磁碟空間不再相關。這完全是無稽之談。如果沒有有效的磁碟空間管理器,作業系統將變得脆弱且無法使用。無論您電腦上的磁碟容量有多大。

我想就 RHEL 中停止支援 Btrfs 徵求意見。

這裡沒有什麼特別要評論的,一切都很清楚。他們還將其作為“技術預覽”。所以,我沒有經歷這個非常「預覽」的過程。別讓這個標籤永遠掛在身上!但他們無法在全力支持下推出有缺陷的設計產品。 RHEL 是一家企業,即規定的商品-貨幣關係。紅帽不能像在 Btrfs 郵件清單上那樣欺凌使用者。想像這樣的情況:一位客戶花了辛苦賺來的錢購買了磁盤,並支付了您的支持,他想了解在他沒有寫下任何內容後他的磁碟空間去了哪裡。對此你會怎樣回答他呢?

更遠。紅帽的客戶包括知名大型銀行和交易所。想像一下,如果他們受到基於 Btrfs 中提到的漏洞的 DoS 攻擊,會發生什麼事。您認為這件事該由誰負責?對於那些想要指責 GPL 許可證上寫著作者不承擔任何責任的人,我會立即說:“把它藏起來!”紅帽會回答,但方式似乎不夠!但我知道紅帽不會面臨這類問題,因為他們擁有特別強大的 QA 工程師團隊,我有機會與他們密切合作。

為什麼有些公司繼續在其企業產品中支援 Btrfs?

請注意,產品名稱中的前綴“企業”沒有多大意義。企業是與客戶的合約關係中所嵌入的責任衡量標準。據我所知,只有一家基於 GNU/Linux 的企業——RHEL。其他一切,在我看來,都只是作為一個企業呈現出來,而不是一個企業。最後,如果對某物有需求,那麼總會有供應(在我們的例子中,這就是提到的「支持」)。絕對一切都有需求,包括。以及無法使用的軟體。這種需求如何形成以及由誰推動是另一個話題。

因此,在 Facebook 有傳言稱其伺服器上部署了 Btrfs 後,我不會急於下任何結論。此外,基於上述原因,我建議仔細保密這些伺服器的位址。

為什麼最近要花這麼多精力清理 XFS 程式碼?畢竟,最初這是一個第三方檔案系統,而 ext4 已經穩定了很長時間,並且與之前同樣穩定的版本具有連續性。紅帽對 XFS 有什麼興趣?積極開發兩個用途相似的檔案系統(ext4 和 XFS)是否有意義?

我不記得是什麼動機了。該倡議很可能來自紅帽客戶。我記得進行過這樣的研究:在上游的一些檔案系統上,在新一代的高階磁碟機上創建了大量物件。根據結果,XFS 的表現優於 ext4。因此他們開始將其宣傳為最有前途的。無論如何,我不會在這裡尋找任何聳人聽聞的東西。

對我來說,就像他們用肥皂取代了錐子。開發 ext4 和 XFS 沒有任何意義。既可以並行也可以任意選擇。這不會有什麼好處。雖然,在自然界中經常存在著有很大的成長潛力,但沒有成長空間的情況。在這種情況下,各種怪異醜陋的新生長物出現了,每個人都將矛頭指向它們(「哦,看,你這輩子看不到的東西!」)。

您認為隨著 ext4、F2FS(更不用說 Btrfs 中的 RAID)中加密功能的出現,層違規問題已經解決(從負面意義上來說)嗎?

一般來說,任何級別的引入以及關於其不違規的決定通常是一個政策問題,我不承諾在這裡評論任何內容。任何人都對層違規的客觀方面不太感興趣,但我們可以使用「從上面」違規的例子來考慮其中的一些,即在 FS 中實現區塊層上已經存在的功能。這種「違規」是合理的,只有極少數例外。對於每個這樣的情況,您必須先證明兩件事:確實需要它,並且這樣做不會損害系統的設計。

例如,鏡像傳統上是區塊層的活動,但在檔案系統層級實現是有意義的。由於不同的原因。例如,磁碟機上會發生「靜默」資料損壞(位元腐爛)。這是當設備正常工作時,但由於遙遠類星體等發射的硬伽馬量子的影響,塊資料意外損壞。最糟糕的是,如果這個區塊原來是一個FS系統區塊(超級區塊、點陣圖區塊、儲存樹節點等),因為這肯定會導致核心恐慌。

請注意,塊層(所謂的 RAID 1)提供的鏡像不會讓您避免這個問題。好吧,真的:有人應該檢查校驗和並讀取副本以防失敗?此外,不僅鏡像所有內容,而且僅鏡像元資料也是有意義的。一些重要資料(例如關鍵應用程式的可執行檔)可以儲存為元資料。在這種情況下,他們得到同樣的安全保證。將剩餘資料的保護委託給其他子系統(甚至可能是用戶應用程式)是有意義的 - 我們已經為此提供了所有必要的條件。

這種「經濟」的鏡像有存在的權利,並且它們只能在檔案系統層級進行有效組織。否則,分層違規會為了一些微觀的好處而用重複的程式碼使子系統變得混亂。一個顯著的例子是使用 FS 實作 RAID-5。此類解決方案(在檔案系統中擁有自己的 RAID/LVM)在架構方面殺死了後者。這裡也應該指出的是,分層違規行為是由各種行銷騙子「投放」的。在沒有任何想法的情況下,將長期在相鄰層級實現的功能添加到子系統中,這被視為一個非常有用的新功能並被積極推動。

Reiser4 被指控「自下而上」違反了這些標準。基於檔案系統不像所有其他檔案系統那樣是整體式的,而是模組化的事實,做出了一個未經證實的假設,即它執行上面層級 (VFS) 應該執行的操作。

是否可以談論 ReiserFS v3.6 和 JFS 等產品的消亡?最近,他們的核心幾乎沒有受到關注。它們已經過時了嗎?

這裡我們需要定義一個軟體產品的消亡意味著什麼。一方面,它們被成功使用(畢竟,這就是它們被創建的目的),這意味著它們還活著。另一方面,我不能代表JFS(我了解不多),但ReiserFS(v3)很難適應新趨勢(經過實務檢驗)。這意味著未來開發者關注的不是它,而是那些更容易適合的。從這一面來看,唉,從建築角度來看,它已經死了。我根本不會操縱「道德過時」的概念。例如,它很適用於衣櫃,但不適用於軟體產品。某事物有一個自卑和優越的概念。我絕對可以說,ReserFS v3 現在在所有方面都不如 Reiser4,但在某些類型的工作負載中,它優於所有其他上游 FS。

您了解 FS Tux3 和 HAMMER/HAMMER2 (FS for DragonFly BSD) 的開發嗎?

是的,我們知道。在Tux3中我曾經對他們的快照技術(所謂的「版本指針」)感興趣,但在Reiser4中我們很可能會走不同的路線。我長期以來一直在考慮支援快照,但尚未決定如何為簡單的 Reiser4 磁碟區實現它們。事實上,Ohad Rodeh 提出的新型「惰性」引用計數器技術僅適用於 B 樹。我們沒有。對於Reiesr4中使用的那些資料結構,沒有定義「惰性」計數器——要引入它們,需要解決某些演算法問題,而目前還沒有人解決這個問題。

根據HAMMER報道:我讀了作者的一篇文章。沒興趣。再一次,B 樹。這種資料結構已經完全過時了。我們在上個世紀就放棄了它。

您如何評估對 CephFS/GlusterFS 等網路叢集 FS 不斷增長的需求?這種需求是否意味著開發者的優先重點轉向網路FS而對本地FS的關注不夠?

是的,優先事項已經發生了這種轉變。本地檔案系統的發展已經停滯。唉,現在要做一些對本地銷售有意義的事情相當困難,並不是每個人都能做到。沒有人願意投資他們的發展。這與要求商業組織為數學研究分配資金差不多——他們會毫無熱情地問你如何透過一個新定理賺錢。現在,本地 FS 神奇地“開箱即用”並且“應該始終有效”,如果它不起作用,則會引起未解決的抱怨,例如:“是的,他們在想什麼!”

因此,儘管在該領域仍有大量工作要做,但對當地金融服務缺乏關注。是的,每個人都轉向了分散式存儲,它是建立在現有本地文件系統的基礎上的。現在很時尚。 「大數據」這個詞讓許多人腎上腺素激增,將其與會議、研討會、高薪等聯繫在一起。

在核心空間而不是用戶空間實現網路檔案系統原則上有多合理?

這是一個非常合理的方法,但尚未在任何地方實施。總的來說,網路檔案系統應該在什麼空間實現的問題是一把「雙面刃」。好吧,讓我們來看一個例子。客戶端在遠端機器上記錄資料。它們以髒頁的形式落入她的頁快取中。這是核心空間中「瘦網關」網路檔案系統的工作。然後作業系統遲早會要求您將這些頁面寫入磁碟以釋放它們。然後IO轉發(發送)網路FS模組就發揮作用了。它決定這些頁面將轉到哪台伺服器機器(伺服器節點)。

然後網路堆疊接管(並且,正如我們所知,它是在核心空間中實現的)。接下來,伺服器節點接收帶有資料或元資料的資料包,並指示後端儲存模組(即在核心空間中運行的本機檔案系統)記錄所有這些內容。因此,我們將問題簡化為「發送」和「接收」模組應該在哪裡工作。如果這些模組中的任何一個在用戶空間中運行,這將不可避免地導致上下文切換(由於需要使用核心服務)。此類開關的數量取決於實作細節。

如果這樣的交換器很多,那麼儲存吞吐量(I/O效能)就會下降。如果您的後端儲存由慢速磁碟組成,那麼您不會注意到顯著下降。但如果您有快速磁碟(SSD、NVRAM 等),那麼上下文切換已經成為“瓶頸”,並且透過節省上下文切換,可以顯著提高效能。省錢的標準方法是將模組移至內核空間。例如,我們發現將 9p 伺服器從 QEMU 移至主機上的核心可使 VirtFS 效能提高三倍。

這當然不是網路FS,但它充分體現了事物的本質。這種優化的缺點是可移植性問題。對某些人來說,後者可能至關重要。例如,GlusterFS 核心中根本沒有模組。因此,它現在可以在許多平台上運行,包括 NetBSD。

本地FS可以藉鏡網路FS的哪些概念,反之亦然?

如今,網路FS通常比本地FS有附加元件,所以我不太明白如何從後者藉用一些東西。好吧,事實上,讓我們考慮一家有 4 名員工的公司,每個人都做自己的事情:一個分發,另一個發送,第三個接收,第四個存儲。而這個問題,即公司可以從儲存它的員工那裡借什麼,聽起來有點不正確(它已經擁有了很長一段時間可以從他那裡借的東西)。

但本地FS有很多值得網路FS學習的地方。首先,您應該向他們學習如何在高層聚合邏輯磁碟區。現在所謂的「進階」本機檔案系統專門使用從 LVM 借用的「虛擬設備」技術(與 ZFS 中首次實現的相同的傳染性分層違規)來聚合邏輯磁碟區。換句話說,虛擬位址(區塊號)到實際位址的轉換發生在低階(即,在檔案系統發出 I/O 請求之後)。

請注意,向佈置在區塊層上的邏輯磁碟區(不是鏡像)新增和刪除裝置會導致此類「功能」的供應商對此保持沉默。我說的是真實設備上的碎片,它可以達到可怕的值,而在虛擬設備上一切都很好。然而,很少有人對虛擬設備感興趣:每個人都對真實設備上發生的事情感興趣。但類似 ZFS 的 FS(以及與 LVM 結合的任何 FS)僅適用於虛擬磁碟裝置(從空閒磁碟裝置中分配虛擬磁碟位址,對這些虛擬裝置進行碎片整理等)。他們不知道真實設備上發生了什麼事!

現在想像一下,虛擬設備上的碎片為零(也就是說,那裡只有一個巨大的盤區),您將一個磁碟新增到邏輯磁碟區中,然後從邏輯磁碟區中刪除另一個隨機磁碟,然後重新平衡。還有很多次。不難想像,在虛擬設備上你仍然可以擁有同樣程度的生活,但在真實設備上你不會看到任何好的東西。

最糟糕的是,你甚至無法糾正這種情況!您在這裡唯一能做的就是要求檔案系統對虛擬設備進行碎片整理。但她會告訴你,那裡的一切都很棒——只有一個範圍,碎片為零,而且再好不過了!因此,按區塊層級排列的邏輯磁碟區不適合重複新增/刪除裝置。一種好的方式是,您只需在區塊層級組裝一次邏輯卷,將其交給檔案系統,然後無需對其執行任何其他操作。

此外,獨立FS+LVM子系統的組合不允許考慮聚合邏輯磁碟區的磁碟機的不同性質。事實上,假設您已經從 HDD 和固態設備組裝了一個邏輯磁碟區。但前者需要碎片整理,後者則不需要。對於後者,您需要發出丟棄請求,但對於前者,則不需要,等等。然而,在這種組合中,很難證明這種選擇性。

請注意,在檔案系統上建立自己的 LVM 後,情況並沒有好轉。此外,透過這樣做,你實際上就結束了未來不斷改進它的前景。這真是太糟糕了。不同類型的驅動器可以存在於同一台機器上。如果檔案系統不區分它們,那麼誰會區分呢?

另一個問題就在於所謂的等待。 「Write-Anywhere」檔案系統(如果您在掛載期間指定了適當的交易模型,這也包括 Reiser4)。此類檔案系統必須提供前所未有的強大碎片整理工具。低階捲管理器在這裡無濟於事,只會造成阻礙。事實上,使用這樣的管理器,您的 FS 將只儲存一個裝置(虛擬裝置)的空閒區塊對映。因此,您只能對虛擬裝置進行碎片整理。這意味著您的碎片整理程式將在巨大的單一虛擬位址空間上工作很長一段時間。

如果有許多使用者進行隨機覆蓋,那麼這種碎片整理程序的有用效果將減少到零。你的系統將不可避免地開始變慢,你只能在令人失望的診斷「損壞的設計」面前束手無策。在同一位址空間上執行的多個碎片整理程式只會互相干擾。如果您為每個真實設備維護自己的空閒塊地圖,那就完全是另一回事了。這將有效地並行化碎片整理過程。

但這只有在您擁有高級邏輯磁碟區管理器的情況下才能完成。具有此類管理器的本機檔案系統以前並不存在(至少我不知道)。只有網路檔案系統(例如 GlusterFS)才有這樣的管理器。另一個非常重要的範例是磁碟區完整性檢查 (fsck) 公用程式。如果您為每個子磁碟區儲存自己獨立的空閒區塊映射,則檢查邏輯磁碟區的流程可以有效地並行化。換句話說,具有高階管理器的邏輯磁碟區可以更好地擴展。

此外,使用低階的磁碟區管理器,您將無法組織完整的快照。使用 LVM 和類似 ZFS 的檔案系統,您只能拍攝本機快照,而不能拍攝全域快照。本機快照可讓您立即回滾僅常規檔案操作。並且沒有人會回滾邏輯卷操作(新增/刪除設備)。讓我們來看一個例子。在某個時間點,當您擁有包含 100 個檔案的兩個裝置 A 和 B 的邏輯磁碟區時,您會拍攝系統 S 的快照,然後建立另外 XNUMX 個檔案。

之後,將裝置 C 加入磁碟區中,最後將系統回滾到快照 S。正如您可能已經猜到的那樣,將有 100 個文件,但將有 3 個設備 - 這些是相同的設備 A、B 和 C,儘管在創建快照時系統中只有兩個設備(A 和 B )。新增設備 C 操作沒有回滾,如果您現在從電腦中刪除設備 C,它會損壞您的數據,因此在刪除之前您需要先執行昂貴的操作以從重新平衡邏輯磁碟區中刪除該設備,這會將所有資料從裝置C 分散到裝置A 和B。 。

因此,全域快照很好,因為它們可以讓您避免從具有大量資料的邏輯磁碟區(到邏輯磁碟區)中昂貴地刪除(新增)裝置(當然,如果您記得對系統進行「快照」)在正確的時間)。讓我提醒您,建立快照並將檔案系統回滾到快照是即時操作。可能會出現這樣的問題:如何才能立即回滾邏輯卷上花了三天時間的操作?但這是可能的!前提是您的檔案系統設計正確。三年前我就提出了這個「3D快照」的想法,去年我為這項技術申請了專利。

本機檔案系統應該向網路檔案系統學習的下一件事是將元資料儲存在單獨的裝置上,就像網路檔案系統將元資料儲存在單獨的機器(所謂的元資料伺服器)上一樣。有些應用程式主要使用元數據,透過將元數據放置在昂貴的高效能儲存設備上可以大大加速這些應用程式的速度。使用 FS+LVM 組合,您將無法展示這種選擇性:LVM 不知道您傳遞給它的區塊上有什麼(那裡的資料或元資料)。

與 FS+LVM 組合相比,在 FS 中實現您自己的低階 LVM 不會獲得太多好處,但您可以做的很好的事情就是使 FS 變得混亂,以便以後無法使用其程式碼。 ZFS 和 Btrfs 急於推出虛擬設備,都是分層違規如何在架構方面殺死系統的明顯例子。而且,無需在檔案系統中建置自己的低階LVM。相反,您需要將設備聚合到較高層級的邏輯磁碟區中,就像某些網路檔案系統對不同機器(儲存節點)所做的那樣。確實,由於使用了糟糕的演算法,他們的做法令人厭惡。

絕對糟糕的演算法的例子是 GlusterFS 檔案系統中的 DHT 轉換器和 Ceph 檔案系統中所謂的 CRUSH 映射。我所看到的演算法在簡單性和良好的可擴展性方面都沒有令我滿意。所以我必須記住代數並自己發明一切。 2015 年,在嘗試透過雜湊函數進行捆綁時,我想出了一些適合我的東西併申請了專利。現在我可以說,將這一切付諸實踐的嘗試是成功的。我認為新方法在可擴展性方面沒有任何問題。

是的,每個子卷都需要一個單獨的結構,例如記憶體中的超級區塊。這很可怕嗎?一般來說,我不知道誰會「煮沸海洋」並在一臺本地電腦上創建數十萬或更多設備的邏輯磁碟區。如果有人可以向我解釋這一點,我將非常感激。同時,對我來說,這是行銷廢話。

內核塊設備子系統的變化(例如blk-mq的出現)如何影響FS實現的要求?

他們沒有產生任何影響。我不知道塊層上會發生什麼,從而需要設計一個新的檔案系統。這些子系統的交互介面很差。從驅動程式方面來看,FS應該只受到新型磁碟機出現的影響,先調整區塊層,然後是FS(對於reiser4,這意味著新插件的出現)。

新型媒體(例如 SMR 或無處不在的 SSD)的出現是否意味著檔案系統設計面臨全新的挑戰?

是的。而這些都是FS發展的正常誘因。挑戰可能會有所不同並且完全出乎意料。例如,我聽說過一些驅動器,其中 I/O 操作的速度高度依賴於資料塊的大小及其偏移量。在Linux中,FS區塊的大小不能超過頁面大小,這樣的磁碟機預設不會顯示其全部功能。但是,如果您的檔案系統設計正確,那麼就有機會從中獲得更多好處。

除了您之外,目前還有多少人在使用 Reiser4 程式碼?

比我想要的少,但我也沒有遇到資源嚴重短缺的情況。我對 Reiser4 的發展速度非常滿意。我不會「趕馬」——這不是正確的區域。在這裡,“如果你開車更安靜,你就會繼續前進!”現代檔案系統是最複雜的核心子系統,錯誤的設計決策可能會毀掉人類隨後幾年的工作。

透過提供志工來實施某件事,我總是保證這些努力一定會帶來正確的結果,這可能是迫切需要的。如您所知,不可能同時有很多這樣的保證。同時,我也無法忍受那些無恥地宣傳明顯無法使用的軟體的“功能”的“人物”,欺騙數百名用戶和開發者,同時在內核峰會上坐著微笑。

有公司表示願意支持Reiser4的開發嗎?

是的,有這樣的建議,包括。並來自主要供應商。但為此我不得不搬到另一個國家。可惜我已經不再是30歲了,我不能在哨聲一響就掙脫而去。

Reiser4 目前缺少哪些功能?

簡單磁碟區沒有「調整大小」功能,類似於 ReiserFS(v3) 中的功能。此外,使用 DIRECT_IO 標誌的檔案操作也不會造成損害。接下來,我希望能夠將一個卷分成“語義子卷”,這些子卷沒有固定的大小,並且可以作為獨立卷安裝。這些問題對於想要嘗試「真正的事情」的初學者來說是有好處的。

最後,我希望擁有具有簡單實作和管理的網路邏輯磁碟區(現代演算法已經允許這樣做)。但Reiser4絕對不會有RAID-Z、擦除、可用空間快取、128位元變數和其他在某些檔案系統開發人員缺乏創意的背景下出現的行銷廢話。

所有可能需要的東西都可以透過插件來實現嗎?

如果我們只談論實現它們的介面和插件(模組),那麼就不是一切。但是,如果您還在這些介面上引入關係,那麼除此之外,您將擁有更高層次多態性的概念,您已經可以掌握這些概念了。想像一下,假設您凍結了一個物件導向的執行時間系統,更改了指令指標的值以指向實現相同 X 介面的另一個插件,然後解凍系統以使其繼續執行。

如果最終用戶沒有註意到這樣的“替換”,那麼我們就說系統在 X 介面中具有零階多態性(或者係統在 X 介面中是異構的,這是同一回事)。如果現在您不僅擁有一組接口,而且還擁有它們之間的關係(接口圖),那麼您可以引入更高階的多態性,這將表徵系統在任何接口的「鄰域」中已經存在的異構性。我很早以前就介紹過這樣的分類,但不幸的是,它從未發生過。

因此,借助插件和此類更高的多態性,您可以描述任何已知的功能,以及「預測」那些從未被提及的功能。我還沒能嚴格證明這一點,但我也不知道有反例。總的來說,這個問題讓我想起了菲利克斯·克萊因的《埃爾蘭根計劃》。有一次,他試圖將所有幾何學表示為代數(特別是群論)的一個分支。

現在主要問題是——Reiser4 升級到主核心的進展如何?您在上次採訪中談到過有關此檔案系統架構的出版物嗎?從您的角度來看,這個問題有多重要?

總的來說,我們已經要求納入主分支三年了。 Reiser 在提出拉取請求的公共線程中的最後評論仍未得到答复。因此,所有進一步的問題都不適合我們。我個人不明白為什麼我們需要「合併」到特定的作業系統。在 Linux 上,光線不會像楔子一樣會聚。因此,有一個單獨的儲存庫,其中有針對不同作業系統的多個分支連接埠。任何需要它的人都可以克隆相應的連接埠並用它做任何你想做的事(當然,在許可證範圍內)。好吧,如果有人不需要它,那就不是我的問題。至此,我建議考慮解決「升級到Linux主核心」的問題。

關於 FS 架構的出版物是相關的,但到目前為止,我只找到時間來研究我的新結果,我認為這是一個更高的優先事項。另一件事是,我是數學家,數學領域的任何出版物都是定理及其證明的總結。在沒有證據的情況下發表任何東西都是低品味的表現。如果我徹底證明或反駁任何關於FS架構的說法,那麼結果將是一堆堆疊很難理解的東西。誰需要它?這可能就是為什麼一切都繼續保持原來的形式——原始碼和註釋。

過去幾年 Reiser4 有哪些新變化?

期待已久的穩定終於實現了。最後出現的一個錯誤是導致目錄「不可刪除」的錯誤。困難在於,它僅在名稱雜湊衝突的背景下以及目錄記錄在樹節點中的特定位置出現。但是,我仍然不建議將 Reiser4 用於生產:為此,您需要與生產系統管理員進行積極互動。

我們終於實現了我們長期以來的想法——不同的交易模型。先前,Reiser4 僅運行硬編碼的 Macdonald-Reiser 模型。這造成了設計問題。特別是,快照在這樣的事務模型中是不可能的——它們將被稱為“OVERWRITE SET”的原子組件損壞。 Reiser4目前支援三種事務模型。在其中之一(Write-Anywhere)中,原子組件 OVERWRITE SET 僅包含系統頁面(磁碟位圖的圖像等),無法「拍照」(先有雞還是先有蛋的問題)。

所以現在可以以最好的方式實現這些圖片。在另一個事務模型中,所有修改的頁面僅進入覆蓋集(也就是說,它本質上是純日記)。該模型適合那些抱怨 Reiser4 分區快速碎片化的人。現在,在此模型中,您的分割區碎片化速度不會比 ReiserFS (v3) 快。所有三個現有模型(有一些保留)都保證操作的原子性,但是失去原子性並僅保留部分完整性的模型也可能有用。此類模型可用於所有類型的應用程式(資料庫等),這些應用程式已經承擔了其中一些功能。將這些模型添加到Reiser4非常容易,但我沒有這樣做,因為沒有人問我,而且我個人也不需要它。

元數據校驗和出現了,我最近用“經濟”鏡像”(仍然不穩定的材料)補充了它們。如果任何區塊的校驗和失敗,Reiser4立即從副本裝置讀取對應的區塊。請注意,ZFS 和 Btrfs 無法執行此操作:設計不允許這樣做。在那裡,您必須執行一個名為“scrub”的特殊後台掃描過程,並等待它到達有問題的區塊。程式設計師形像地將此類事件稱為「拐杖」。

最後,異質邏輯磁碟區出現了,它提供了ZFS、Btrfs、區塊層以及FS+LVM 組合原則上無法提供的一切- 平行擴展、O(1) 磁碟位址分配器、子磁碟區之間的透明資料遷移。後者還具有使用者介面。現在,您可以輕鬆地將最熱的資料移至磁碟區上效能最高的磁碟機。

此外,還可以將任何髒頁緊急刷新到此類驅動器,從而顯著加快經常調用 fsync(2) 的應用程式的速度。我注意到,稱為 bcache 的區塊層功能根本不提供這種操作自由。新的邏輯卷是基於我的演算法(有相應的專利)。該軟體已經相當穩定,完全可以嘗試、測量性能等。唯一的不便之處在於,目前您需要手動更新磁碟區配置並將其儲存在某處。

到目前為止,我已經能夠實現 10% 的想法,但是,我已經成功完成了我認為最困難的事情 - 將邏輯卷與執行 reiser4 中所有延遲操作的閃存過程連接起來。這一切仍然在實驗性的「format41」分支。

Reiser4 通過 xfstests 了嗎?

至少在我準備最後一個版本時是這樣。

原則上是否可以使用插件使Reiser4成為網路(集群)FS?

這是可能的,甚至是必要的!如果您基於正確設計的本機檔案系統建立網路文件,結果將非常令人印象深刻!在現代網路檔案系統中,我對使用任何本機檔案系統實現的後端儲存層級的存在不滿意。這種層次的存在完全沒有道理。網路FS必須直接與區塊層交互,而不是要求本地FS建立任何其他服務檔案!

一般來說,將檔案系統分為本地和網路是邪惡的。它源自於三十年前所使用的演算法的不完善,並且尚未提出任何替代方案。這也是為什麼大量不必要的軟體元件(各種服務等)出現的原因。一種好的方式是,每台機器上應該只安裝一個核心模組形式的 FS 和一組用戶實用程式 - 一個叢集節點。這個FS既是本地的又是網路的。僅此而已!

如果 Linux 上的 Reiser4 沒有任何效果,我想為 FreeBSD 提供一個 FS(引用之前的採訪:「...FreeBSD...具有學術根源...這意味著我們很有可能將找到與開發人員的共同語言”)?

因此,正如我們剛剛發現的那樣,Linux 上的一切都已經完美地進行了:有一個單獨的工作 Reiser4 端口,以我們存儲庫的 master 分支的形式。我沒有忘記 FreeBSD!提供!我已經準備好與熟悉 FreeBSD 內部結構的人密切合作。順便說一句:我真正喜歡他們社區的一點是,那裡的決定是由更新的獨立專家委員會做出的,這與政府欺騙常任理事國無關。

您如何評價當今的 Linux 使用者社群?它變得更加「流行」了嗎?

鑑於我的工作性質,我很難評估這一點。大多數用戶都會向我提出錯誤報告並要求修復該部分。用戶就是用戶。有些人比較精明,有些人則比較不那麼精明。每個人都受到同樣的待遇。好吧,如果使用者忽略我的指令,那麼請原諒:我也會輸入忽略命令。

是否可以預測未來五到十年檔案系統的發展?您認為 FS 開發人員可能面臨的主要挑戰是什麼?

是的,要做出這樣的預測並不困難。上游已經很久沒有開發文件系統了。僅創建這樣的外觀。本地文件系統的開發人員遇到了與不良設計相關的問題。這裡需要注意一下。我不認為程式碼的所謂「儲存」、「舔」和移植就是開發和開發。我不會將稱為“Btrfs”的誤解歸類為一種發展,原因我已經解釋過。

每個補丁只會讓問題變得更糟。出色地。總有各種各樣的“傳道者”,對他們來說“一切都有效”。基本上,這些都是小學生和逃課的學生。想像一下:這對他有效,但教授卻無效。這是多麼令人腎上腺素激增啊!在我看來,最大的危害是那些「工匠」熱衷於將Btrfs的美妙特性「擰」到systemd、docker等各種層上。 - 這已經類似於轉移。

現在讓我們嘗試對五到十年進行預測。我已經簡要地列出了我們將在 Reiser4 中做什麼。來自上游的本地 FS 開發人員面臨的主要挑戰將是(是的,它已經成為)無法獲得一份體面的薪水工作。在資料儲存領域沒有任何想法的情況下,他們會繼續嘗試修補這些不幸的VFS、XFS和ext4。在這種背景下,VFS 的情況顯得特別滑稽,讓人想起一家沒有廚師、也不期望有廚師的餐廳的瘋狂現代化。

現在,VFS 程式碼無任何條件地同時鎖定多個記憶體頁並邀請底層 FS 對它們進行操作。引入這一點是為了提高 Ext4 在刪除操作上的效能,但很容易理解,這種並發鎖定與高階事務模型完全不相容。也就是說,您將無法簡單地在核心中新增對某些智慧型檔案系統的支援。我不知道Linux其他領域的情況如何,但就文件系統而言,這裡的任何開發都不太可能與Torvalds在實踐中奉行的政策相兼容(學術項目被踢出,騙子們不知道什麼是B樹,發放了無盡的信任信用)。因此,我們設定了緩慢衰退的路線。當然,他們會極力冒充「發展」。

此外,檔案系統的「託管人」意識到僅靠「儲存」賺不到多少錢,因此會嘗試從事更有利可圖的業務。通常,這些是分散式檔案系統和虛擬化。也許他們會將流行的 ZFS 移植到它還不存在的其他地方。但它和所有來自上游的FS一樣,就像一棵新年樹:如果你可以在上面掛一些其他小東西,那麼你就無法再深入了。我承認基於 ZFS 構建一個嚴肅的企業系統是可能的,但既然我們現在正在討論未來,我只能悲傷地說 ZFS 在這方面是無望的:通過他們的虛擬設備,這些傢伙已經切斷了氧氣為了自己和子孫後代的進一步發展。 ZFS 已成為過去。而ext4和XFS連前天都沒有。

值得單獨一提的是「下一代Linux檔案系統」這個聳人聽聞的概念。可以說,這是一個完全政治和行銷的項目,旨在為 Linux 中「將檔案系統的未來固定在特定字元後面」提供機會。事實上,Linux 曾經「只是為了好玩」。但現在它主要是一個賺錢機器。它們是在一切可能的情況下製作的。例如,創造一個好的軟體產品是非常困難的,但聰明的「開發者」早就意識到根本不需要緊張:你可以成功地銷售在各種公共場合宣布和推廣的不存在的軟體事件- 最主要的是演示幻燈片應該包含更多“功能”。

文件系統非常適合此目的,因為您可以放心地在十年內就結果討價還價。好吧,如果後來有人抱怨缺少這個結果,那他根本不了解檔案系統!這讓人想起金融金字塔:最頂端的是引發這場混亂的冒險家,以及少數“幸運”的人:他們“撤回了股息”,即獲得發展資金、獲得高薪經理工作、在會議上「露面」等等。

接下來是那些「不幸」的人:他們會計算損失,處理將無法使用的軟體產品部署到生產中的後果,「等等。還有很多。嗯,在金字塔的底部有大量開發人員“鋸切”無用的程式碼。他們是最大的輸家,因為浪費的時間無法挽回。這樣的金字塔對托瓦爾茲和他的同夥來說極為有利。這些金字塔越多,對他們來說就越好。為了供給這樣的金字塔,任何東西都可以被帶入核心。當然,在公開場合他們的說法恰恰相反。但我不是透過言語而是透過行動來判斷。

因此,「Linux 檔案系統的未來」是另一個備受推崇但幾乎不可用的軟體。在 Btrfs 之後,這樣一個「未來」的位置大機率會被 Bcachefs 取代,這是用檔案系統跨越 Linux 區塊層的另一個嘗試(壞榜樣是會傳染的)。典型的是:存在與 Btrfs 相同的問題。我懷疑了很長一段時間,然後不知怎的,我忍不住查看了程式碼——這是真的!

Bcachefs 和 Btrfs 的作者在創建他們的檔案系統時,積極使用了其他人的資源,但對其了解甚少。這種情況很容易讓人想起孩子們的遊戲「破手機」。我可以大致想像這段程式碼將如何包含在內核中。事實上,沒有人會看到「耙子」(稍後大家都會踩到它們)。在對程式碼風格、對不存在的違規行為的指控等進行無數次爭論之後,將得出關於作者的「忠誠度」、他與其他開發人員「互動」的程度以及這一切如何成功的結論。賣給企業。

最終結果不會引起任何人的興趣。二十年前,也許我會感興趣,但現在提出的問題不同了:是否有可能推廣這一點,以便在未來十年內讓某些人就業。而且,唉,人們並不習慣對最終結果感到好奇。

一般來說,我強烈建議不要從頭開始重新發明檔案系統。因為即使是重大的金融投資也不足以在十年內獲得有競爭力的東西。當然,我說的是嚴肅的項目,而不是那些打算「推入」核心的項目。所以,更有效的表達自己的方式就是加入真正的發展,就像我們一樣。當然,這並不容易做到——但任何高級專案都是如此。

首先,你需要獨立解決我將要提出的問題。之後,我確信你的意圖是認真的,我將開始提供幫助。傳統上,我們只使用自己的開發成果。壓縮演算法和一些雜湊函數除外。我們不會派開發人員去參加會議,然後我們不會像大多數新創公司那樣坐下來結合其他人的想法(「也許會發生什麼」)。

我們自己開發所有演算法。我目前對資料儲存科學的代數和組合方面感興趣。特別是有限域、漸進、不等式證明。普通程式設計師也有工作,但我必須立即警告您:所有「查看另一個 FS 並執行相同操作」的建議都將被忽略。旨在透過 VFS 與 Linux 更緊密整合的補丁也將發佈到那裡。

所以,我們沒有耙子,但我們了解我們需要向何處移動,我們相信這個方向是正確的。這種理解並不是以來自天上的嗎哪的形式出現的。讓我提醒您,我們擁有 29 年的開發經驗,兩個從頭開始編寫的檔案系統。以及相同數量的資料恢復實用程式。這很多!

來源: opennet.ru

添加評論