팀명
Chicken-Dragon Mountain
팀원 명단
유형곤, 김선규, 김태현, 진건승
지도교수
이성호
작품 배경 및 목적
C나 C++와 같은 수동 메모리 관리를 요구하는 프로그래밍 언어에서는 개발자가 필요 없어진 메모리 블록을 적절히 해제해야 한다. 프로그램이 사용하지 않는 메모리 블록을 해제하지 않으면 memory leak이 발생하며, 이는 소프트웨어에서 자주 발생하는 버그 중 하나이다. memory leak은 애플리케이션 성능을 저하시킬 뿐만 아니라 보안 취약점으로도 이어질 수 있기 때문에, 이를 해결하는 것이 매우 중요하다. 이로 인해 최근 연구들은 memory leak이 발생한 정확한 시점을 알아내기 위해 Reference counting을 사용하여 memory leak이 발생한 시점의 코드 위치를 알아낸다. 하지만 제시된 기법들은 Dynamic Binary Instrumentation 기술의 비효율성과 Metadata Look-up의 비효율성 때문에 실용적으로 사용하기 어렵다. 이러한 이유로 프로그램의 overhead가 증가 (100~1000배)되는 문제가 발생한다. 이러한 배경에서, memory leak이 발생한 위치를 효율적으로 찾아내고, 프로그램 성능을 유지하는 새로운 접근법이 필요하다.
작품 내용
본 프로젝트에서는 Memory leak이 발생한 시점을 기존 접근 방식보다 훨씬 빠르고 정확히 찾아내는 새로운 기법을 제시한다. 성능은 Compiler instrumentation과 메모리 블록에서 Referenece count를 얻기 위해 필요한 효율적인 메타데이터 Look up 방식을 활용하여 달성한다. Compiler instrumentation 은 더 효율적이지만, instrumentation 되지 않은 코드로 인해 False Positive (Leak 이 아닌데 Leak 이라고 판별) 및 False Negative (Leak 인데 Leak 이라고 판별 X) 를 발생시킬 수 있으므로, LeakSanitizer 를 PreciseLeakSanitizer와 함께 사용하여 FP, FN 을 줄인다. 효율적인 Metadata Look up를 위해 Multi-level shadow 를 채택하여 빠른 Metadata Look up 을 가능하게 했다. 위 기술들을 활용하여 LLVM 컴파일러를 기반으로 PreciseLeakSanitizer 를 개발하였다. PreciseLeakSanitizer는 Intrumentation 을 위한 LLVM Pass와 Reference counting 을 위한 Runtime Library로 구성된다. LLVM 컴파일러를 활용함으로써, PreciseLeakSanitizer는 LLVM이 지원하는 모든 운영 체제나 명령어를 지원할 수 있다.
Comments