Copy On Write(COW) 的罪與罰

緣起

對計算機有些了解的人,或多或少會對 Copy On Write 有些聽聞。我接觸這個名詞最早是在操作系統的進程管理中,當子進程從父進程中 fork 出來時,其和父進程共享大部分的數據,對子進程而言這塊內存是只讀的。通過這么做,可以避免在子進程中創(chuàng)建時額外分配內存帶來的開銷。

進程管理的細節(jié)

子進程修改內存(案例1)

如果子進程要對共享的內存進行修改,那么內存管理系統就會分配額外的一塊內存,然后將父進程的內存拷貝過去,然后子進程可以在這塊拷貝過去的內存進行修改。

父進程修改內存(案例2)

書本上一般沒提到的是如果是父進程修改內存,那么這塊內存就會被修改,這個時候子進程怎么辦呢?當然還是拷貝一塊內存給它啊。本部分為猜測,無代碼驗證。

存儲卷管理領域的快照流派

在存儲卷管理領域里面,有個技術叫做快照,其從本質上來說就是記錄了在指定的時刻,指定卷的所有的塊狀態(tài)。一旦快照被創(chuàng)建,那么意味著后續(xù)任何對現有磁盤塊的更改都必須做額外處理。處理有兩種流派,一種叫做 COW(Copy On Write)另外一種叫做ROW(Redirect On Write)。

COW 流派

這種流派跟進程管理的案例2類似,如果存儲發(fā)現某個磁盤塊要被更改,那么它會檢查所有的快照,看看這些快照是不是已經對這塊磁盤空間的數據進行了拷貝,如果沒有的話則進行拷貝。待拷貝完畢后,數據會寫入到該磁盤塊。

優(yōu)缺點

  • 缺點:在快照比較多的情況下,存在只針對一次寫,需要發(fā)生一次讀取和多次寫入的情況,性能會急劇降低。快照可能會占用大量空間。
  • 優(yōu)點:數據的連續(xù)性比較好,對未來連續(xù)數據讀取有優(yōu)勢。在SSD下這個優(yōu)點不是很明顯。

ROW 流派

這種流派跟進程管理的案例1類似,如果存儲發(fā)現某個磁盤塊要被更改,那么它會檢查所有快照,如果發(fā)現這個磁盤塊被快照使用,那么會找到一塊新的空間,將數據拷貝到新空間,然后在新空間進行數據修改。這種方式和 COW 有個本質上不一樣,即其最開始并不是跟蹤所有分配的卷的塊,而是剛開始就要跟蹤寫入,而寫入的內容可以分布在任意地方。隨著寫入范圍的增加,其跟蹤的塊會越來越多,直到和分配的卷一樣大小。

優(yōu)缺點

  • 缺點:由于數據不是在原地修改,可能會導致數據碎片化嚴重,導致讀取效率低下。這個缺點在 SSD 下不明顯,但是在機械盤下就會成為瓶頸。
  • 優(yōu)點:多個快照對性能影響很有限。可以合并多個隨機寫入變?yōu)榇髩K的順序寫入,性能能夠較大的提高。和 COW 相比,快照比較省空間。

兩大流派的補充

在這里,我為什么會認為 COW 流派以開始就跟蹤所有卷內磁盤塊呢?那是因為在實現中,這么做在 COW 的情況下只有些許額外的存儲開銷,但是能夠極大的簡化實現難度。無論剛開始磁盤塊上有沒有有意義的數據,其實也判斷不出來數據是不是有意義的,最終這些磁盤塊都是會被文件系統使用到,不會有空間被浪費的。
但是在 ROW 的情況下,如果以開始就假定這些磁盤塊有數據,意味著后續(xù)文件系統再也沒有機會往這些磁盤塊寫東西了。這就是一個錯誤的實現了。
相比而言,前者是靜態(tài)的,簡潔的。后者則是動態(tài)的,復雜的。

現實的實現

  • LVM:COW,預先分配指定大小空間給快照,實驗可以觀察到快照空間的增長規(guī)律。
  • ZFS,Btrfs:ROW,原來的數據不被覆蓋,Btrfs 可以設置為非這種模式

現實世界中的混用

Wikipedia 中將兩者都稱之為 copy on write。

參考

https://en.wikipedia.org/wiki/Copy-on-write#In_computer_storage
https://storageswiss.com/2016/04/01/snapshot-101-copy-on-write-vs-redirect-on-write/
https://en.wikipedia.org/wiki/Snapshot_(computer_storage)#Implementations
https://en.wikipedia.org/wiki/ZFS#Copy-on-write_transactional_model

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容