Linux用戶模式堆棧擴展由Linus Torvalds動手改進

時至今日,Linus Torvalds 實際上已經很少會親自動手寫內核代碼;更多的是忙於監督上游的內核開發社區、審查代碼、管理髮布,並在郵件列表中進行討論。

時至今日,Linus Torvalds 實際上已經很少會親自動手寫內核代碼;更多的是忙於監督上游的內核開發社區、審查代碼、管理髮布,並在郵件列表中進行討論。不過近日,他就爲 Linux 6.5 進行了將近 500 行的 code rework ,以改進用戶模式的堆棧擴展代碼。

Linux用戶模式堆棧擴展由Linus Torvalds動手改進Linux用戶模式堆棧擴展由Linus Torvalds動手改進

他在合併報告中解釋稱:

這修改了我們的用戶模式堆棧擴展代碼,使其在修改 VM 佈局之前始終獲取 mmap_lock 進行寫入。

實際上這是我們在技術上應該做到的事情,但是因爲我們並不嚴格地需要它,所以我們有點偷懶("機會主義" 聽起來好多了,不是嗎?)。並且在我們需要的地方設置了這個 hack,會在不進行適當鎖定的情況下就地擴展堆棧 vma。

而且效果很好。我們只需要改變 vm_start(或者,在 grow-up stacks 的情況下,vm_end),再加上一些使用 anon_vma 鎖和 mm>page_table_lock 的特殊的臨時鎖,這一切都相當簡單明瞭。

也就是說這一切都很好,直到 Ruihan Li 指出,現在 vma 佈局使用 maple tree code,我們真的不只是改變 vm_start 和 vm_end 了,而且 locking 真的被打破了。

一勞永逸地解決這個問題並做適當的 locking 其實並不可怕,但有點痛苦。 我們基本上有三種不同的堆棧擴展情況,它們的工作方式都略有不同。

目前,Linux 6.5 中的這個問題應該已經得到了解決。更多詳情可查看此處。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章