rv6 icon indicating copy to clipboard operation
rv6 copied to clipboard

`Lfs` TODO 목록

Open travis1829 opened this issue 2 years ago • 0 comments

lfs TODO 목록

  • Lfs 초기화 관련

    • [ ] 현재, Lfs::{superblock, itable, segmanager, imap} 함수는 매번 Lfs가 현재 초기화된 상태인지를 확인해보는데, 이러한 불필요한 검사를 피할 수 있도록 하기 위해, 이미 initialized된 Fs만을 가리키는 FsRef등을 추가하면 좋을 것 같습니다.
      • Ufs도 동일한 issue가 있음
  • crash recovery

    • [ ] checkpointing이 이루어지기 전에 crash가 일어나면 마지막 checkpointing 이후 commit한 segment들의 내용이 날아가게 됩니다. 이를 위해 sprite-lfs와 비슷하게, checkpoint에 마지막으로 commit한 segment를 가리키는 pointer를 넣고, 각각의 segment가 다음 segment를 가리키는 pointer를 저장하게 한 후, crash recovery 과정에서는 마지막 checkpoint에서 출발하여 segment들을 traverse하며 scan하도록 하면 좋을 것 같습니다.
  • tx 관련

    • [ ] FS의 mutation은 반드시 tx를 시작한 후에만 이루어져야 합니다. tx가 없으면 Lock을 acquire하더라도 Deref만 가능하도록 하고, tx를 제공해야 DerefMut가 가능하도록 하면 좋을 것 같습니다.
  • cleaner 관련

    • [ ] 현재, Lfs의 cleaner는 매우 간단한 방식으로 evict할 segment를 고르고 있습니다. Lfs paper에 소개된 방법 등의 더 효율적인 방법을 사용하면 성능을 향상시킬 수 있습니다.
      • 참고 : SEGSIZE가 10 정도로 작은 편이어서 그런지, usertests 특성상 cleaner를 돌릴때 쯤에는 live block가 하나도 없는 segment가 꽤 많습니다.
    • [ ] 현재 구현에서는 cleaner가 불필요하게 Imap/Inode를 여러 번 disk에 write하고 있습니다. cleaner가 끝나기 직전 마지막에 한번만 해도 될 것 같스니다.
    • [ ] Lfs paper에서 소개한 것과 비슷하게 version number를 활용하면 좋을 것 같습니다.
  • checkpointing 관련

    • [ ] 현재, Lfs는 checkpointing을 매우 자주하고 있습니다. Lfs paper등에서 소개한 것처럼 30초마다, 또는 총 몇 Byte의 데이터를 write할때 마다 등의 방식으로 바꾸면 좋을 것 같습니다.
  • assert! 관련

    • [ ] 기본적으로 kernel의 입장에서는 연결된 device에 저장된 내용이 항상 손상되었을 수도 있다는 점을 염두해야합니다. 이를 감안하여, disk를 read해야하는 곳들에 assert!를 더 추가해야할 것으로 보이니다.
  • Branded 관련

    • [ ] 만약 여러개의 Lfs, VirtioDisk등이 존재할 수 있다면, 각각의 Inode, Imap, Segment, Tx 등이 어디서 온 건지를 구분해야 할 수 있습니다.
  • naming convention

    • [ ] block_no, bno, disk_block_no 등의 용어가 혼용되고 있습니다. 어떠한 경우에는 disk의 block number를, 어떠한 경우에는 inode/imap/segment의 n번째 block을 의미하고 있는데, 용어를 분명하게 나누면 좋겠습니다.
  • conversion

    • [ ] u32usize의 conversion이 많이 일어나고 있는데, 지금은 문제가 없지만 추후 usize가 달라지면 문제가 생길 수 있으므로 관련 코드들을 조심해서 정리해야할 수 있을 것 같습니다.
  • dev 관련

    • [ ] 현재 Lfs는 kernel내에 한개의 FS 및 한개의 dev만 존재한다고 가정한 곳들이 있습니다. 이러한 부분들을 조금씩 고치면 좋을 것 같습니다.

travis1829 avatar Jun 12 '22 15:06 travis1829