bigsys-gnu / mvcc-os

KhronOS, a scalable operating systems based on sv6 (MIT) with MV-RLU (multi-version concurrency control mechanism)
Other
1 stars 0 forks source link

MV-RLU Apply Questions #76

Closed MadPlayer closed 2 years ago

MadPlayer commented 2 years ago

https://github.com/bigsys-gnu/mvcc-os/blob/f4b64c0eb24b194bccb98b81711cf1c01aa61088/os/sv6/scalefs/include/chainhash.hh#L35-L41

이 부분은 chainhash에 list 하나를 전부 삭제하는 부분입니다. 위와 같은 코드를 mvrlu에서 어떻게 실행하는지 예시가 없어서 질문드립니다. 실제 kbench에 기존에 mvrlu 방식으로 모든 list의 node를 복사 (mvrlu_try_lock)한 후에 일일히 삭제하니 deadlock 혹은 infinite loop 혹은 과도하게 시간이 많이 걸리는 것을 확인했습니다.

kbench에서는 list를 사용한 모든 thread가 종료한 상황 (mvrlu_flush_log를 적어도 2번한 상황)에서 다음과 같이 진행하였더니 일단 seg fault는 발생하지 않았습니다.

https://github.com/MadPlayer/mvcc-os/blob/bench_opt/os/sv6/scalefs/kernel/sysbench.cc#L626-L633

하지만 실제로 chainhash를 사용하는 thread들은 모두 종료한 것도 아니므로 이러한 경우 어떻게 해야 하는지 질문드립니다.

bigsys-gnu commented 2 years ago

https://github.com/bigsys-gnu/mvcc-os/blob/f4b64c0eb24b194bccb98b81711cf1c01aa61088/os/sv6/scalefs/include/chainhash.hh#L35-L41

이 부분은 chainhash에 list 하나를 전부 삭제하는 부분입니다. 위와 같은 코드를 mvrlu에서 어떻게 실행하는지 예시가 없어서 질문드립니다. 실제 kbench에 기존에 mvrlu 방식으로 모든 list의 node를 복사 (mvrlu_try_lock)한 후에 일일히 삭제하니 deadlock 혹은 infinite loop 혹은 과도하게 시간이 많이 걸리는 것을 확인했습니다.

kbench에서는 list를 사용한 모든 thread가 종료한 상황 (mvrlu_flush_log를 적어도 2번한 상황)에서 다음과 같이 진행하였더니 일단 seg fault는 발생하지 않았습니다.

https://github.com/MadPlayer/mvcc-os/blob/bench_opt/os/sv6/scalefs/kernel/sysbench.cc#L626-L633

하지만 실제로 chainhash를 사용하는 thread들은 모두 종료한 것도 아니므로 이러한 경우 어떻게 해야 하는지 질문드립니다.

chainhash를 사용한 스레드가 테스트(benchmark 등) 종료되면 모두 종료된다고 가정하면 괜찮죠? 그렇다면 일단 종료된다고 가정하고 해봅시다.

MadPlayer commented 2 years ago

MV-RLU scalefs inum_to_mnum과 mnum_to_inum에 적용해서 몇 가지 명령이 동작하는 것을 확인했습니다. 다만 multi thread로 파일 시스템을 점근해보지는 않았습니다.

bigsys-gnu commented 2 years ago

MV-RLU scalefs inum_to_mnum과 mnum_to_inum에 적용해서 몇 가지 명령이 동작하는 것을 확인했습니다. 다만 multi thread로 파일 시스템을 점근해보지는 않았습니다.

  • ls
  • mv
  • mkdir
  • cat
  • echo 등이 정상적으로 동작합니다.

네 진전이 많았네요. scalefs에 있는 간단한 벤치마크를 돌려보면 좋을거 같아요. (@deho0701 필요한 실험이 있는 경우 대호학생에게 요청을 해주세요)

MadPlayer commented 2 years ago

기존에 작성한 코드에 버그가 있어서 수정하고 testrecovery라는 테스트를 qemu 16 core에서 수행했고 동작하는 것을 확인했습니다. branch는 https://github.com/MadPlayer/mvcc-os/tree/apply-mvrlu 입니다.

mvrlu 젹용은 추가로 blocknum_to_queue에도 적용하였습니다.

bigsys-gnu commented 2 years ago

기존에 작성한 코드에 버그가 있어서 수정하고 testrecovery라는 테스트를 qemu 16 core에서 수행했고 동작하는 것을 확인했습니다. branch는 https://github.com/MadPlayer/mvcc-os/tree/apply-mvrlu 입니다.

mvrlu 젹용은 추가로 blocknum_to_queue에도 적용하였습니다.

testrecovery는 Scalefs의 벤치마크중 하나로 포함되는거에요 아니면 자체 test용도로 봐야 할까요. 물론 recovery 시간도 중요한 벤치마크 대상이에요.