41
MemShrink [email protected] 임기연 The Performance Of Open Source Application

Mem shrink

Embed Size (px)

Citation preview

Page 1: Mem shrink

MemShrink

[email protected] 임기연

The Performance Of Open Source Application

Page 2: Mem shrink

5.1 소개

• 파이어 폭스

–모질라 재단이 출시한 오픈소스 기반의 인터넷 브라우저

Page 3: Mem shrink

5.1 소개

• 2011년 3월 파이어폭스4 출시

–구글 크롬에 비해 메모리 소비량에서 경쟁력낮음.

–점유율 하락

Page 4: Mem shrink

5.1 소개

• MemShrink 프로젝트

–파이어폭스의 메모리 사용량을 제어하기 위한프로젝트

Page 5: Mem shrink

5.2 기반구조 개요

• 웹 브라우저

–신뢰할수 없는 코드를 실행하기 위한 하나의가상머신(Virtual machine, VM)

신뢰할수 없는 코드

– HTML, CSS, JavaScript 코드 조합 및 파이어폭스 부가 기능과 플러그인 코드

Page 6: Mem shrink

5.2 기반구조 개요

• Gecko layout 엔진

– DOM, 그래픽 렌더링, 페이지 및 텍스트 배치, 네트워킹 스택

• Spidermonkey JS 엔진

– JS 가상 기계의 구현, 쓰레기 수거, JIT( just-in-time) 컴파일 기능

Page 7: Mem shrink

5.2 기반구조 개요

• 크롬

–특별한 내장/ 특권 페이지

• 콘텐트

–크롬이 아닌 보통의 웹 페이지

Page 8: Mem shrink

5.2 기반구조 개요

Page 9: Mem shrink

5.2 기반구조 개요

• 메모리 할당 방식

– Spidermonkey 쓰레기 수거식 메모리(GC힙)

• 특화된 쓰레기 수거식 힙 할당자

• 표준적인 점진적 표시 후 일소 수거기

• 객체, 함수 등 실행중인 JS가 생성한 거의 모든 것이 저장

– Gecko와 Spidermonkey 나머지에 쓰임

• jemalloc

Page 10: Mem shrink

5.2 기반구조 개요

• 메모리 해제 방식

–직접(수동) 해제

–참조 계수를 통한 해제

–쓰레기 수거를 통한 해제

Page 11: Mem shrink

5.2 기반구조 개요

쓰레기 수거를 통한 해제

Page 12: Mem shrink

5.2 기반구조 개요

Page 13: Mem shrink

5.2 기반구조 개요

Page 14: Mem shrink

5.2 기반구조 개요

Page 15: Mem shrink

5.2 기반구조 개요

• Gecko 의 메모리 해제

–메모리 참조 계수(Reference Counting)

–순환마디수거기(Cycle Collector)

• 서로 참조하는 객체를 순환마디라고 하면, 그것들만 관리 하는 수거기

Page 16: Mem shrink

5.2 기반구조 개요

• 할당장 할당자(Arena)

–아주 많은 수의 개별 할당들 모두를 동시에 해제할 수 있을때, 쓰임.

–주힙 할당자로부터 메모리 덩어리(Chunk)를얻어서 분배

–중독(poisoning)같은 보안 기능을 구현을 위해쓰임

Page 17: Mem shrink

5.2 기반구조 개요

Arena

Chunk Chunk Chunk

삭제시, Chunk 만 삭제

잘라서 할당

Page 18: Mem shrink

5.2 기반구조 개요

• 중독(poisoning)

–해제된 메모리가 보안 공격에 악용되지 못하게 해제된 메모리를 덮어씀.

Page 19: Mem shrink

5.3 잰 만큼 얻는다.

• 문제 파악(메모리 누수의 정의)

–어떤 자료 구조가 실제 필요보다 두배나 많은메모리를 사용

–더 이상 쓰이지 않는 메모리가 타이머 만료까지 해제되지 않음.

–커다란 버퍼의 복사본 여러 개가 프로그램 전반에 존재

Page 20: Mem shrink

5.3 잰 만큼 얻는다.

• 커스텀 도구를 만듬

– About:memory

– About:compartments

– DMD(dark matter detector)

– Asure and Save

Page 21: Mem shrink

5.3 잰 만큼 얻는다.

• 커스텀 도구

– About:memory

• 힙에 대한 간단한 통계치를 표시

• 메모리 보고자

• 파이어 폭스 빌드가 없어도, 주소표시줄에 입력만하면 누구나 사용 가능

Page 22: Mem shrink

5.3 잰 만큼 얻는다.

– About:compartments

• 모든 구획의 메모리 사용량과 사용방식 표시

• 전역GC힙을 더 작은 부분힙들의 분리.

• 부분 힙을 구획이라 함.

• About:memory로 결합됨.

Page 23: Mem shrink

5.3 잰 만큼 얻는다.

• Heap-unclassified를 줄이기 위해 노력

–메모리 보고자가 다루지 않는 메모리 양

– DMD(dark matter detector) 사용

– Ex) 브라우저의 작은 일회성 할당

Page 24: Mem shrink

5.3 잰 만큼 얻는다.

• Measure and Save

– JS힙과 순환 수거식 C++ 힙의 표현들을 파일에 덤프

–분석 스크립트를 만들어서 조사함.

Page 25: Mem shrink

5.4 달성하기 쉬운 과제들

• 좀비 구획 문제

–한 구획이 이미 닫힌 페이지에 들러붙어서, 쓰레기 수거기를 실행해도 사라지지 않음.

–수명이 긴 JS 객체들을 수명이 짧은 JS객체들에 대한 참조를 유지하기 때문에 발생.

Page 26: Mem shrink

5.4 달성하기 쉬운 과제들

• JS 힙의 단편화(fragmentation)

–수명이 긴 객체 몇 개를 수명이 짧은 객체들로가득 찬 덩어리에 끼워 넣으면, 웹 페이지가닫혀도 그 덩어리는 재확보 되지 못함.

–크롬구획과 콘텐트 구획 분리 할당으로 해결.

Page 27: Mem shrink

5.4 달성하기 쉬운 과제들

• Jemalloc의 메모리 할당 기법 문제

–할당 크기를 여러 크기 부류들로 반올림하고그 크기 부류를 연속된 메모리 덩어리에 할당.

–낭비된 공간을 슬롭(slop)이라 함.

Page 28: Mem shrink

5.4 달성하기 쉬운 과제들

• Gecko

– Gmail 에서만 3MB 이상의 슬롭이 절감.

–페이지 배치에 쓰인 검례에서 700M이상 절감.

–브라우저 총 메모리 소비량 절감

• 2GB -> 1.3GB

Page 29: Mem shrink

5.4 달성하기 쉬운 과제들

• SQLite

–메모리 소비량을 추적하기 위해 만든 계장(instrumentation)이 메모리 소비량을 두배로만들면서, 소비량은 실제보다 낮게 보고

–이런 종류의 버그를 광대 신발(clowshoe)이라함

Page 30: Mem shrink

5.5 내 잘못은 아니지만 내 문제

• 파이어 폭스는 풍부한 부가 기능들을 선택할수 있는 확장성 좋은 브라우저로 선전

• 메모리 문제의 상당수는 부가 기능에서 비롯됨.

Page 31: Mem shrink

5.5 내 잘못은 아니지만 내 문제

• 부가 기능은 모질라의AMO(addons.mozilla.org)를 통해 배포

• AMO에는 메모리 누수를 위한 검토방침이있지만, 효과적이지 못함.

• 메모리 누수 교정 동기 부여 방식 검토 후폐지

Page 32: Mem shrink

5.5 내 잘못은 아니지만 내문제

• 기술적으로 해결

–페이지가 다른 곳으로 이동하거나 탭이 닫힐때, 크롬 구역에서 콘텐츠 구역으로 참조를 끊어 버림.

Page 33: Mem shrink

5.6 영속성은 탁월함의 대가

• 2006년 부터 강력한 회귀 검사(Regression testing) 문화 유지

Page 34: Mem shrink

5.6 영속성은 탁월함의 대가

• 작업 부하 고안

–고정된 30개의 탭들에 100개의 페이지 적재

–적재들 사이에 페이지를 읽는 시간 고려 지연을 둠.

–적제 페이지는 모질라의 Tp5 페이지 집합

Page 35: Mem shrink

5.6 영속성은 탁월함의 대가

• 측정 대상 파악

–세 시점의 메모리 소비랑을 측정

• 페이지를 하나도 적제하지 않은 시점

• 모든 페이지를 적재한 후 측정

• 모든 탭을 닫은 후 측정

Page 36: Mem shrink

5.6 영속성은 탁월함의 대가

• 측정 방법

–각 시점 마다 아무 활동 없이 30초가 흐른 후소비량 측정

–강제로 쓰레기 수거기를 작동한 후에 측정

Page 37: Mem shrink

5.6 영속성은 탁월함의 대가

• 최신 개발 버전들에 대해 정기 검사를 실시

• Areweslimyet.com에 메모리 검사 기반구조로 수집한 모든 자료를 띄움.

Page 38: Mem shrink

5.7 공동체

• MemShrink 의 성공 요인

–모질라 공동체의 지원

Page 39: Mem shrink

5.7 공동체

• 모질라 공동체의 지원을 받기 위한 노력

– MemShrink의 구조를 지원받기 쉽도록 설계

–문제 해결의 진척을 보여줌

–개발자들과 공동체 사이의 피드백 루프를 완성함.

Page 40: Mem shrink

참조

• 오픈소스 소프트웨어 성능 최적화 보고서

• 테이비시 암스트롱 엮음. 류광 옮김

Page 41: Mem shrink

•끗