Martin Maas, Chris Kennelly, Khanh Nguyen, Darryl Gove, Kathryn S. McKinley, Paul Turner ACM ISMM 2021
개요
Motivation & Importance
TLB압력을 줄이기 위해서 Huge page를 써야 한다. Huge page를 사용하면 Internal fragmentation문제를 겪게 된다. 이를 해결하기 위해서, Huge page-aware memroy allocator(E.g., TCMALLOC)과 같은 경우에는 Linux THP를 사용하는 것이 아니라, Huge page를 할당하고 내부적으로 관리하는 방식으로 Huge page를 관리한다. 그러나 Ware-house scale의 Application에서 전체 Ware-house 메모리의 사용량을 고려하지 않고, 내부적인 Policy를 사용하는 것은 Sub-optimal한 결과를 가져온다. 예를 들어서, 만약 Application이 Huge page를 Release하고 바로 요청한다면, 불필요한 OS-Interaction이 발생할 것이다. 이러한 경우에 Additional system calls, page faults가 발생하고, Huge page를 Base page(4KB)로 쪼개는 비용, 그 밖에 Management비용이 추가로 든다. 이는 증가된 Latency peak으로 이어질 수 있다.
Background
Fragmentation
단순히 Fragmentation을 "Application이 사용하는 양 / 전체 할당 메모리 양"으로 정의하면, 여러개의 Application이 동시에 작동하는 경우 현재 Resource scheduling을 정확히 반영하지 못한다. 따라서 더 흔한 Fragmentation의 정의는 Average fragmentation이다. 그러나 Resource scheduling은 Scheduling delay와 Memory Peak의 빈도에 영향을 받기 때문에 Misleading한 Metric이 될수도 있다.
Main Idea

- Realized Fragmentation: 일정 시간 간격 $T_{\text{schedule}}$ 동안 반환된 메모리가 해당 기간 내에 다시 요청되지 않을 경우, 반환 가능한 최대 메모리 양을 의미한다.
이 지표는 현재 시스템에서 사용되지 않는 메모리 중 다른 작업에 유용하게 재사용될 수 있었던 메모리의 양을 포착한다. Realized Fragmentation은 과거의 활동 이력을 포함한 시계열 데이터가 필요하다.
- Tracking realized fragmentation: 이 지표를 기록하려면, 메모리 할당자가 일정 시간 간격(𝑇_schedule) 동안의 메모리 사용 이력을 캡처할 수 있는 새로운 기능이 필요하다. 그러나 이 이력을 캡쳐하기 위해서는 시계열 안에서, 최대 Peak을 추적해야 한다. 따라서 일정 시간 간격에서의 최대 Peak를 오버헤드 없이 구할 수 있는 방법이 필요하다. 이를 위해서 시계열을 1초 단위로 나누고, 모든 할당에 대해서 시계열을 업데이트 하는 것이 아니라, page heap영역에 영향을 주는 할당/해제 동작에 대해서만 시계열을 업데이트한다.
- Adaptive huge page release: 고정된 메모리 반환 속도(static release rate)를 사용하는 대신, 예측된 미래 수요에 기반하여 동적으로 반환량을 결정하는 메모리 할당기 정책이다. 최근 시간 구간동안 사용된 메모리는 높은 확율로 다음 구간에서도 다시 사용될 것이라는 가정을 기반으로, Realized Fragmentation을 통해서 Static한 Release policy가 아니라 Adaptive한 Release policy를 사용하도록 하였다. 현재 할당된 메모리 양이 구간에서의 최대 사용량 아래로 떨어지지 않도록 유지하도록 정책을 설정하였다. 자세한 내용은 논문 참고.