當前位置: 妍妍網 > 碼農

Linus Torvalds:你的程式碼好惡心

2024-03-15碼農

Bcachefs 檔案系統自從被納入 Linux 6.7 內核的上遊版本以來,一直保持著良好的執行狀態。

但現如今,隨著 Bcachefs 的功能更新被送出到 Linux 6.9 合並視窗, 引發了 Linus Torvalds 對其中一些 proposed code 的不滿

維護者 Kent Overstreet 將針對 Linux 6.9 的 Bcachefs 改動的拉取請求 總結為

  • Subvolume children btree ;是為 walking subvolumes 提供使用者空間界面所必需的,計劃在稍後提供

  • 對目錄結構檢查進行了大量改進

  • 改進了日誌管道 ,顯著提高了 high iodepth write workloads 的效能

  • Discard path 改進 :Discard path 更加高效,並且不再不必要地重新整理日誌

  • Buffered write path 現在可以避免占用 inode lock

  • 調出用於 XFS 的各種庫程式碼 :time stats、mean_and_variance、darray、eytzinger、thread_with_file

  • 新的 mm helpe r:
    memalloc_flags_{save|restore}

  • mempool now does kvmalloc mempools

  • 但讓 Linus Torvalds 感到不解的是,這些修補程式把 Bcachefs 程式碼中的一些元素移到了一些 library-type 的程式碼中,以至於可以輕松地被其他檔案系統重用。

    Linus Torvalds 在回應相關 PR 時表示:「 我看了看 'make random bcachefs code be a library function' 的內容,覺得毫無意義,最終決定在沒有進一步解釋的情況下我不會使用它(老實說,我不認為這些解釋站得住腳) 。」

    並直言 "stdio_redirect_printf ()" 和 darray_char 都很「惡心」 ——建議 Overstreet 將其保留在自己的程式碼中就好, 不要試圖送出上來

    如果實在不死心的話,建議他先做好以下幾點:

  • 多添加註釋

  • 進行更合理的命名 ,減少惡心和完全無意義的 interfaces ("DARRAY ()")。

  • 而且,僅僅找到一個其他檔案系統來共享這種程式碼並不足以證明它是一個合理的 interfaces 和合理的命名。

    但是,最主要的問題是瘋狂的數學計算。該死的,我們很久以前就討論過 "mean and variance" 這種愚蠢的垃圾。當時就錯了,現在還是錯的。你沒有解釋為什麽它不能使用簡單得多的 MAD(median absolute deviation),而不是使用 variance。這個錯誤的決定直接導致無意義地使用過於復雜的 128 位數學。

    我當時稱其為瘋狂的過度工程化,而就我所知,除了一些輕微的型別名稱細節外,絕對沒有任何變化。

    只要你把它改成某種只適用於 bcachefs 的東西,我就不介意。但現在,你卻試圖把這些垃圾作為通用庫程式碼推向市場,讓其他人也能使用,這就意味著,我會介意這種過度設計的 interfaces。

    在其他方面,time_stats 看上去就像是一個有名稱和用途的正常 interfaces,但使用了這種可怕的基礎架構後,它就變得不倫不類了。

    在 Overstreet 爭辯之後,Linus 進一步補充道:

    加權版本的程式碼字面上沒有任何變化。

    variance value 是不同的,但 MAD 和 standard deviation 之間的區別基本上只是一個 constant factor(不同的分布會有所不同,但那又怎樣?任何特定情況都會有特定的分布)。那麽,為什麽 constant factor 會對指數加權產生任何影響呢?

    不管怎樣,請隨意將您的程式碼保存在 bcachefs 中。也許 xfs 甚至想復制該程式碼。我不在乎,這看起來很愚蠢,但這是檔案系統的選擇。但如果我們要把它打造成一個通用的內核庫,它就必須是健全的。不要讓人們僅僅為了隨機統計元素而進行 64 位平方根和 128 位除法。

    因此,就目前情況而言,Linus Torvalds 並沒有接受這個針對 Linux 6.9 內核的 Bcachefs 拉取請求。

    至於後續如何,就要看新的 PR 會不會放棄這些修補程式或以其他方式重新修改以滿足 Linus 的要求。

    相關連結

    https://lore.kernel.org/lkml/CAHk-=wg3djFJMeN3L_zx3P-6eN978Y1JTssxy81RhAbxB==L8Q@mail.gmail.com/

    熱門文章

    -

    獲取新鮮開源資訊
    網羅全球開源軟體
    暢讀硬核技術文章
    品味高級趣味梗圖

    ⬇️歡迎關註OSCHINA公眾號 「設為星標」