You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
현재, 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
u32와 usize의 conversion이 많이 일어나고 있는데, 지금은 문제가 없지만 추후 usize가 달라지면 문제가 생길 수 있으므로 관련 코드들을 조심해서 정리해야할 수 있을 것 같습니다.
dev 관련
현재 Lfs는 kernel내에 한개의 FS 및 한개의 dev만 존재한다고 가정한 곳들이 있습니다. 이러한 부분들을 조금씩 고치면 좋을 것 같습니다.
The text was updated successfully, but these errors were encountered:
lfs TODO 목록
Lfs 초기화 관련
Lfs::{superblock, itable, segmanager, imap}
함수는 매번Lfs
가 현재 초기화된 상태인지를 확인해보는데, 이러한 불필요한 검사를 피할 수 있도록 하기 위해, 이미 initialized된Fs
만을 가리키는FsRef
등을 추가하면 좋을 것 같습니다.crash recovery
tx 관련
FS
의 mutation은 반드시tx
를 시작한 후에만 이루어져야 합니다.tx
가 없으면 Lock을 acquire하더라도Deref
만 가능하도록 하고,tx
를 제공해야DerefMut
가 가능하도록 하면 좋을 것 같습니다.cleaner 관련
Lfs
의 cleaner는 매우 간단한 방식으로 evict할 segment를 고르고 있습니다. Lfs paper에 소개된 방법 등의 더 효율적인 방법을 사용하면 성능을 향상시킬 수 있습니다.SEGSIZE
가 10 정도로 작은 편이어서 그런지, usertests 특성상 cleaner를 돌릴때 쯤에는 live block가 하나도 없는 segment가 꽤 많습니다.Imap
/Inode
를 여러 번 disk에 write하고 있습니다. cleaner가 끝나기 직전 마지막에 한번만 해도 될 것 같스니다.checkpointing 관련
Lfs
는 checkpointing을 매우 자주하고 있습니다. Lfs paper등에서 소개한 것처럼 30초마다, 또는 총 몇 Byte의 데이터를 write할때 마다 등의 방식으로 바꾸면 좋을 것 같습니다.assert!
관련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
u32
와usize
의 conversion이 많이 일어나고 있는데, 지금은 문제가 없지만 추후usize
가 달라지면 문제가 생길 수 있으므로 관련 코드들을 조심해서 정리해야할 수 있을 것 같습니다.dev
관련Lfs
는 kernel내에 한개의 FS 및 한개의 dev만 존재한다고 가정한 곳들이 있습니다. 이러한 부분들을 조금씩 고치면 좋을 것 같습니다.The text was updated successfully, but these errors were encountered: