Closed kjhnet closed 2 years ago
1st step
2nd step
3rd step
4th step
RadixVM
RadixVM은 non-overlapping되는 VMA(virtual memory area)에 대하여 여러 스레드가 동시에 mmap, munmap, pagefault를 허용함
RadixVM을 구현하기 위해 radix-tree 자료구조를 사용하였으며 thread safety를 위해 lock acquire, release(include/radix_array.hh) 를 사용함.
radix-tree lock을 MV-RLU로 대체(또는 일부) 가능한지 고려
include/radix_array.hh
void lock( ) const: cref->get_lock().acquire(bit_spinlock::cli_caller) 에서 hand over hand 방식으로 spinlock을 이용해서 lock
코드상으로는 lock을 잡는 부분에서 thread간 contention이 발생할 것으로 보이는데 Perf나 gdb등으로 확인 필요함
radix tree 간단 분석결과입니다.
다음은 refcache 관련 분석결과입니다.
Radixtree의 마지막 솔루션인 TLB Shootdown은 저희가 건드릴 수 있는 영역이 아닌것 같습니다.
radix tree 간단 분석결과입니다.
- 현재 구현된 radix tree는 노드별로 스핀락을 할당합니다. 각 노드는 메모리 주소 하나에 대응합니다.
- vm에서 메모리 맵을 사용할 때는 주소 범위를 지정해서 lock을 획득 및 반환합니다. 이떄 범위내 각 메모리 주소 (노드)의 락을 순차적으로 처리합니다.
- 구조상으로는 각 노드의 스핀락(bit_spinlock.hh)을 mvrlu로 대체 할 수 있어보이는데 자세한건 해 봐야 알겠습니다..
- 어떤걸 벤치마크로 사용할 지는 아직 확인을 해봐야 하겠지만, vm에서 활용하는 메모리 영역이 겹치는 경우가 많이 있으면 어느정도 성능 비교는 가능해 보입니다.
- 그런데 RadixVM은 겹치지 않는 주소범위에서 scalability를 제공하는 연구기 때문에 과연 벤치마크가 성실하게 겹치는 케이스를 많이 발생하도록 했는지는 확인해 봐야합니다 (중요!) ==> RadixVM 논문 사용한 벤치마크 또는 sv6/scalefs 내에 있는 벤치마크를 이용
다음은 refcache 관련 분석결과입니다.
- 일단 레퍼런스 카운팅을 하는 refcache는 radix tree와는 별개의 부분입니다. (RadixVM의 3가지 솔루션 중 하나)
- refcache(refcache.hh)도 spinlock를 사용하기 때문에 mvrlu로 대체가 가능한지 검토해 보겠습니다. ==> refcache에서 사용하는 spinlock을 mvrlu로 대체하는 부분이 좀더 간단하거나 성능 향상 폭이 클 수 있으니 살펴봅시다. ==> refcache를 평가할 수 있는 적절한 벤치마크 찾기 in scalefs/sv6
Radixtree의 마지막 솔루션인 TLB Shootdown은 저희가 건드릴 수 있는 영역이 아닌것 같습니다.