Closed MadPlayer closed 9 months ago
오류가 일어나기 직전의 free page 분포입니다.
cpu number가 작은 쪽으로 free page가 몰려있는 상태입니다.
port_alloc 부분을 수정해서 가능한지 확인하겠습니다.
예상되는 mvrlu_free로 처리한 memory는 최종적으로 qp_thread에 의해 free 되기때문에 아래의 코드에 의하면 (kmfree 내부) https://github.com/bigsys-gnu/mvcc-os/blob/9a8eb43a0521677b83f1baace24337b158f8c105/os/sv6/scalefs/kernel/kmalloc.cc#L189-L197
현재 메모리를 해제하는 cpu의 freelist로 반환합니다. 결국 mvrlu로 괸리되는 모든 memory는 해제되면 cpu 0의 freelist로 가게된다는 결론을 얻을 수 있습니다. (qp_thread가 cpu 0으로 할당되어 있기 때문에)
예상되는 mvrlu_free로 처리한 memory는 최종적으로 qp_thread에 의해 free 되기때문에 아래의 코드에 의하면 (kmfree 내부)
현재 메모리를 해제하는 cpu의 freelist로 반환합니다.
결국 mvrlu로 괸리되는 모든 memory는 해제되면 cpu 0의 freelist로 가게된다는 결론을 얻을 수 있습니다.
(qp_thread가 cpu 0으로 할당되어 있기 때문에)
그럼 다른 코어의 freelist가 소진되어 메모리 할당시 성능 병목이 될수도 있겠네요?
그럼 다른 코어의 freelist가 소진되어 메모리 할당시 성능 병목이 될수도 있겠네요?
kbench를 실제 하드웨어에서 실행해도 같은 결과가 나오는지 확인해봐야 할 것으로 보입니다.
qemu user level에 vmimbalbench라는 것을 실행하면 page cycle을 사용하는 것을 볼 수 있었습니다.
chainhash에 mvrlu를 적용해서 scalefs의 작동을 테스트하고 있습니다. 주로 위의 assert를 패스하지 못하는 문제가 있습니다.
assert( ) 발생할때 어떤 함수에서
delete_mnum_inode_safe( )
호출했는지는 찾아보진 않았죠?mnum_to_inum
변수를 mvrlu 적용하지 않으면 문제는 없죠? 연산 ordering이 반드시 지켜져야 하는 부분에는 적용할 수 있을지 좀더 살펴봐야 겠네요.위 오류는 mailbench-ben을 실행한 후에 확인한 것입니다. 원인은 memory leak 문제로 보입니다. 확인하는 방법은 Ctrl+f 를 연타해서 free page 수가 지속적으로 줄어들기만 하는 것을 확인할 수 있었습니다.
scalefs는 파일을 생성하면 생성된 inode 만큼 메모리를 소모하는 구조이므로 memory leak이 문제인지 메모리 자체가 부족한 것인지는 확인해야 할 것으로 보입니다.
scalefs 적용
transaction info chainhash에만 적용하고 실행하면 dbench, lfs-largefile, lfs-smallfile, mailbench, filebench 등이 작동하는 것을 확인했습니다.
transaction info chainhash에만 mvrlu를 적용하여 20 core에서 kbench 실행 후 문제가 없으면 이슈 추가하겠습니다.
scalefs 적용
- inode to mnode
- mnode to inode
- transaction info chainhash 20 core에서 실행시 kbench 오류나며 비정상 종료되는 문제가 있습니다. 그리고 대부분의 benchmark가 inode mnode mapping에서 sanity 문제로 종료합니다.
transaction info chainhash에만 적용하고 실행하면 dbench, lfs-largefile, lfs-smallfile, mailbench, filebench 등이 작동하는 것을 확인했습니다.
transaction info chainhash에만 mvrlu를 적용하여 20 core에서 kbench 실행 후 문제가 없으면 이슈 추가하겠습니다.
kbench 실행은 관련이 없는거 아니에요?
transaction info chainhash 에만 적용하는 경우 대략적인 성능은 어떻던가요?
kbench 실행은 관련이 없는거 아니에요?
kbench의 mvrlu가 kernel과 결합되어 있습니다.
transaction info chainhash 에만 적용하는 경우 대략적인 성능은 어떻던가요?
비교해보지는 않았습니다. 비교 후에 올리겠습니다.
https://github.com/bigsys-gnu/mvcc-os/blob/9a8eb43a0521677b83f1baace24337b158f8c105/os/sv6/scalefs/kernel/scalefs.cc#L396-L409
chainhash에 mvrlu를 적용해서 scalefs의 작동을 테스트하고 있습니다. 주로 위의 assert를 패스하지 못하는 문제가 있습니다.![image](https://user-images.githubusercontent.com/26272729/137493697-5f8ee4f5-1d3f-4e2b-b99f-8c2dbcc40e64.png)
위 오류는 mailbench-ben을 실행한 후에 확인한 것입니다. 원인은 memory leak 문제로 보입니다. 확인하는 방법은 Ctrl+f 를 연타해서 free page 수가 지속적으로 줄어들기만 하는 것을 확인할 수 있었습니다.
scalefs는 파일을 생성하면 생성된 inode 만큼 메모리를 소모하는 구조이므로 memory leak이 문제인지 메모리 자체가 부족한 것인지는 확인해야 할 것으로 보입니다.