Open kyungmin-Earnest-Lim opened 1 year ago
do_reclaim -> dmz_reclaim_rnd_data : reclaim the random data zone by moving its valid data blocks to a free sequential zone
-> dmz_first_valid_block(zmd, bzone, &chunk_block) : &chunk_block for call by reference , find the first valid block from chunk_block in zone. if such a block is found, its number is returned using chunk_block and the total number of valid blocks from chunk_block is returned. by *chunk_block
-> dmz_reclaim_buf(zrc, dzone) : the buffer zone is empty or its valid blocks are after the data zone write pointer ? start this function
-> dmz_reclaim_seq_data(zrc, dzone) : reclaim the data zone by merging it into the buffer zone so that the buffer zone itself can be later reclaimed (나중에 버퍼 존이 reclaim될 수 있게 data zone을 buffer zone에 머지함으로서 reclaim)
bzone -> random zone에 있는 buffer zone
dmz_reclaim_rnd_data : dzone -> szone -> random access zone에 있는 zone을 sequential data zone으로 reclaim -> 이미 쓰고 있는 zone이 아닌 free한 sequential zone으로 옮긴다. -> goto again 문을 통해 free한 sequential zone이 szone에 할당될때까지 반복 -> szone이 할당되면 dzone(random data zone)에서 szone(free sequential zone)으로 이동 -> 위는 dmz_merge_valid_block이 아닌 copy인 이유는 buf -> dzone 혹은 dzone -> buf로 이동하는 과정이므로 서로다른 bitmap을 가지고 있어서 merge해야 했지만, 지금은 하나의 zone을 옮기는 것이므로 bitmap은 변함없음 그래서 copy -> ret ==0 -> reclaim_copy가 잘되었으면 -> if(ret) -> reclaim_copy에서 오류가 난 경우 szone이 필요없으니 free해주는 과정 -> else -> copy가 잘되었다면 mapping되어있던 chunk data를 옮긴 곳으로 remap
dmz_reclaim_buf : bzone -> dzone -> buffer에서 sequential zone으로 reclaim시키는 함수 -> 옮겨야하는 zone에 연결되어있는 data를 unmapping한 후 reset시킨다. -> dzone이 가리키는 buffer에서 data를 가져온 것이므로 chunk data와 mapping되어있는 dzone을 새로 remap할 필요가 없다.
dmz_reclaim_seq_data : dzone -> bzone -> data zone에 있는 valid block을 buffer로 옮기는 함수이다. -> dzone의 valid block을 bzone(buffer로 옮긴다. -> 실제로 chunk data와 mapping된 dzone의 valid block들을 다른 zone(buffer)로 옮겼기 때문에 옮긴 곳으로 remap해주는 과정이 필요하다. -> dzone과 bzone이 연결된 곳을 모두 unmap한 후 valid block이 모두 옮겨진 dzone을 free -> 새로운 데이터가 있는 zone(buffer zone + data zone)에 원래 연결되어있던 chunk data를 mapping
dmz_reclaim 내부구조
dm_zone 내부구조 - zone의 기본 정보를 담고있는 struct
dmz_reclaim_work -> dmz_do_reclaim 수행
dmz_do_reclaim 내부 동작