추상화-최적화 트레이드오프 (The Abstraction-Optimization Tradeoff)
Source
Evernote/Technote scraps/Vivek Haldar The abstraction-optimization tradeoff.1.md
Summary
컴퓨터 과학에서 추상화 수준이 높아질수록 성능 최적화에 필요한 구조적 정보가 손실되는 현상을 설명한다. 고수준의 풍부한 구조(소스 코드, 애플리케이션의 I/O 패턴 지식)는 저수준의 포터블 형식(바이트코드, OS 커널)으로 변환되며 단순화되고 구조가 평평해진다. 이는 상호 운용성과 포터빌리티를 높이지만, 실행 시 최적화를 위해 손실된 구조를 다시 추론해야 하거나 성능 저하를 감수해야 하는 트레이드오프가 발생한다.
Key Points
- 추상화-최적화 트레이드오프: 고수준 추상화는 개발 편의성과 포터빌리티를 제공하지만, 저수준 최적화에 필요한 구조적 정보를 손실시킨다.
- Java 바이트코드 사례: 고수준 Java 소스는 구조가 풍부한 AST로 표현되지만, 포터빌리티를 위해 구조가 단순하고 평평한 바이트코드로 컴파일된다. JVM은 실행 시 최적화를 위해 손실된 구조(제어 흐름 그래프 등)를 다시 추론해야 한다.
- 고수준 중간 표현의 한계: 바이트코드보다 구조를 더 많이 보존하는 고수준 포맷은 최적화에 유리하지만, 특정 언어에 강하게 결합되어 다른 언어와의 상호 운용성이 떨어진다.
- OS I/O 캐싱 사례: 애플리케이션은 데이터 접근 패턴에 대한 풍부한 지식을 가지고 있으나, OS 커널은 이를 알지 못해 LRU 등 일반적인 전략을 사용한다. 애플리케이션의 지식을 OS에 전달(fadvise 등)해야 최적의 성능을 낼 수 있다.
- Exokernel 접근법: OS가 추상화를 제공하지 않고 원시 하드웨어만 관리하여 애플리케이션이 직접 최적화된 추상화를 구현하도록 하는 시도였으나, 복잡성으로 인해 널리 채택되지는 않았다.