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

Mem shrink

Jul 19, 2015

Download

Software

aceigy6322
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
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

•끗