rv6
rv6 copied to clipboard
`Lfs` TODO 목록
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!
를 더 추가해야할 것으로 보이니다.
- [ ] 기본적으로 kernel의 입장에서는 연결된 device에 저장된 내용이 항상 손상되었을 수도 있다는 점을 염두해야합니다. 이를 감안하여, disk를 read해야하는 곳들에
-
Branded
관련- [ ] 만약 여러개의
Lfs
,VirtioDisk
등이 존재할 수 있다면, 각각의Inode
,Imap
,Segment
,Tx
등이 어디서 온 건지를 구분해야 할 수 있습니다.
- [ ] 만약 여러개의
-
naming convention
- [ ]
block_no
,bno
,disk_block_no
등의 용어가 혼용되고 있습니다. 어떠한 경우에는 disk의 block number를, 어떠한 경우에는 inode/imap/segment의 n번째 block을 의미하고 있는데, 용어를 분명하게 나누면 좋겠습니다.
- [ ]
-
conversion
- [ ]
u32
와usize
의 conversion이 많이 일어나고 있는데, 지금은 문제가 없지만 추후usize
가 달라지면 문제가 생길 수 있으므로 관련 코드들을 조심해서 정리해야할 수 있을 것 같습니다.
- [ ]
-
dev
관련- [ ] 현재
Lfs
는 kernel내에 한개의 FS 및 한개의 dev만 존재한다고 가정한 곳들이 있습니다. 이러한 부분들을 조금씩 고치면 좋을 것 같습니다.
- [ ] 현재