mem shrink

Post on 19-Jul-2015

181 Views

Category:

Software

4 Downloads

Preview:

Click to see full reader

TRANSCRIPT

MemShrink

aceigy6322@gmail.com 임기연

The Performance Of Open Source Application

5.1 소개

• 파이어 폭스

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

5.1 소개

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

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

–점유율 하락

5.1 소개

• MemShrink 프로젝트

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

5.2 기반구조 개요

• 웹 브라우저

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

신뢰할수 없는 코드

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

5.2 기반구조 개요

• Gecko layout 엔진

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

• Spidermonkey JS 엔진

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

5.2 기반구조 개요

• 크롬

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

• 콘텐트

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

5.2 기반구조 개요

5.2 기반구조 개요

• 메모리 할당 방식

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

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

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

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

– Gecko와 Spidermonkey 나머지에 쓰임

• jemalloc

5.2 기반구조 개요

• 메모리 해제 방식

–직접(수동) 해제

–참조 계수를 통한 해제

–쓰레기 수거를 통한 해제

5.2 기반구조 개요

쓰레기 수거를 통한 해제

5.2 기반구조 개요

5.2 기반구조 개요

5.2 기반구조 개요

5.2 기반구조 개요

• Gecko 의 메모리 해제

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

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

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

5.2 기반구조 개요

• 할당장 할당자(Arena)

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

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

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

5.2 기반구조 개요

Arena

Chunk Chunk Chunk

삭제시, Chunk 만 삭제

잘라서 할당

5.2 기반구조 개요

• 중독(poisoning)

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

5.3 잰 만큼 얻는다.

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

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

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

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

5.3 잰 만큼 얻는다.

• 커스텀 도구를 만듬

– About:memory

– About:compartments

– DMD(dark matter detector)

– Asure and Save

5.3 잰 만큼 얻는다.

• 커스텀 도구

– About:memory

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

• 메모리 보고자

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

5.3 잰 만큼 얻는다.

– About:compartments

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

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

• 부분 힙을 구획이라 함.

• About:memory로 결합됨.

5.3 잰 만큼 얻는다.

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

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

– DMD(dark matter detector) 사용

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

5.3 잰 만큼 얻는다.

• Measure and Save

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

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

5.4 달성하기 쉬운 과제들

• 좀비 구획 문제

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

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

5.4 달성하기 쉬운 과제들

• JS 힙의 단편화(fragmentation)

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

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

5.4 달성하기 쉬운 과제들

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

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

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

5.4 달성하기 쉬운 과제들

• Gecko

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

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

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

• 2GB -> 1.3GB

5.4 달성하기 쉬운 과제들

• SQLite

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

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

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

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

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

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

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

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

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

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

• 기술적으로 해결

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

5.6 영속성은 탁월함의 대가

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

5.6 영속성은 탁월함의 대가

• 작업 부하 고안

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

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

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

5.6 영속성은 탁월함의 대가

• 측정 대상 파악

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

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

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

• 모든 탭을 닫은 후 측정

5.6 영속성은 탁월함의 대가

• 측정 방법

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

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

5.6 영속성은 탁월함의 대가

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

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

5.7 공동체

• MemShrink 의 성공 요인

–모질라 공동체의 지원

5.7 공동체

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

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

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

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

참조

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

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

•끗

top related