# hybrid GC發想 --- ## 核心想法: 1. "盡量"不將資料寫回原zone 2. 盡量將資料寫在附近確保資料連續性不被破壞 3. 經過數輪GC後資料還在附近而不是被推遠 4. 選擇victim zone時同時考慮invalid chunk數量和附近有沒有可用的zone --- ## 架構 - 先檢查前後/後的鄰近zone ![](https://i.imgur.com/r3YUfJM.png) ---- - 先往前找還是往後找? - 將zone進行分成奇數zone和偶數zone - 奇數zone先往後找、偶數zone先往前找 - 資料會傾向於兩個zone裡面循環 ![](https://i.imgur.com/skefhxA.png) ---- - 可能的問題 1. 如果附近的neighbor都沒有空間: - 回到self-packing GC strategy(更新在同一個zone) - 完全不管距離直接寫到其他可用的zone: - 如果完全沒其他zone可用的話? 2. 多遠的zone算neighbor? 3. 順向的寫入可能造成前面的zone完全沒有附近可用的空間 ---- ![](https://i.imgur.com/rbMNbKe.png) ---- ![](https://i.imgur.com/RqhLGxV.png) ---- - 如何選擇victim zone - 如果只考慮invalid chunk可能選到附近完全沒有可用空間的zone - 同時考慮invalid chunk和附近可用空間數量 - 選擇方式(選最大的) - 附近可用空間數量 - valid_chunk - 可能可以用線段樹?
{"metaMigratedAt":"2023-06-17T18:28:50.463Z","metaMigratedFrom":"YAML","title":"hybrid GC發想","breaks":true,"slideOptions":"{\"theme\":\"solarized\",\"transition\":\"convex\",\"backgroundTransition\":\"fade\"}","contributors":"[{\"id\":\"1f7caa22-882c-4815-a334-c06b0eca2ade\",\"add\":1271,\"del\":319}]"}
    261 views