21
Real-Time Computing and Communications Lab., Hanyang University http://rtcc.hanyang.ac.kr Real-Time Computing and Communications Lab., Hanyang University http://rtcc.hanyang.ac.kr Operating System 12 주차 - Memory management - Real-Time Computing and Communications Lab. Hanyang University [email protected] [email protected] [email protected]

Operating System 12주차 - RTCC Lab.rtcc.hanyang.ac.kr/sitedata/2016_Under_OS/OS_Practice_11_Memory... · 메모리해제 실습1 Out of ... 현재리눅스커널은OOM이발생하면oom_kill.c에구현되어있는OOM_killer가알고리즘에

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Operating System 12주차 - RTCC Lab.rtcc.hanyang.ac.kr/sitedata/2016_Under_OS/OS_Practice_11_Memory... · 메모리해제 실습1 Out of ... 현재리눅스커널은OOM이발생하면oom_kill.c에구현되어있는OOM_killer가알고리즘에

Real-Time Computing and Communications Lab., Hanyang University

http://rtcc.hanyang.ac.kr

Real-Time Computing and Communications Lab., Hanyang University

http://rtcc.hanyang.ac.kr

Operating System 12주차- Memory management -

Real-Time Computing and Communications Lab.

Hanyang University

[email protected]

[email protected]

[email protected]

Page 2: Operating System 12주차 - RTCC Lab.rtcc.hanyang.ac.kr/sitedata/2016_Under_OS/OS_Practice_11_Memory... · 메모리해제 실습1 Out of ... 현재리눅스커널은OOM이발생하면oom_kill.c에구현되어있는OOM_killer가알고리즘에

2Real-Time Computing and Communications Lab., Hanyang University

http://rtcc.hanyang.ac.kr 2Real-Time Computing and Communications Lab., Hanyang University

http://rtcc.hanyang.ac.kr

Contents

메모리해제

실습 1

Out of memory

실습 2

과제

Page 3: Operating System 12주차 - RTCC Lab.rtcc.hanyang.ac.kr/sitedata/2016_Under_OS/OS_Practice_11_Memory... · 메모리해제 실습1 Out of ... 현재리눅스커널은OOM이발생하면oom_kill.c에구현되어있는OOM_killer가알고리즘에

3Real-Time Computing and Communications Lab., Hanyang University

http://rtcc.hanyang.ac.kr 3Real-Time Computing and Communications Lab., Hanyang University

http://rtcc.hanyang.ac.kr

메모리할당실패시

get_page_from_freelist에서페이지 할당 실패 시, __alloc_pages_slowpath를호출

__alloc_pages_slowpath에서여러 방법으로 페이지를 확보한 후 페이지 할당 시도

Page 4: Operating System 12주차 - RTCC Lab.rtcc.hanyang.ac.kr/sitedata/2016_Under_OS/OS_Practice_11_Memory... · 메모리해제 실습1 Out of ... 현재리눅스커널은OOM이발생하면oom_kill.c에구현되어있는OOM_killer가알고리즘에

4Real-Time Computing and Communications Lab., Hanyang University

http://rtcc.hanyang.ac.kr 4Real-Time Computing and Communications Lab., Hanyang University

http://rtcc.hanyang.ac.kr

메모리할당실패시

kswapd 호출

kswapd - 메모리 부족 시 swap으로메모리를 확보하는 kernel thread

각각 zone은 세 가지의 watermark를 가진다. kswapd는 이 값을 참조하면서 수행한다.

wmark_high Freepage가 high 이상 충분히 확보되면 kswapd sleep

wmark_low Freepage가 low 이하로 감소하면 kswapd wake up

wmark_min Freepage가 min 이하로 감소하면 synchronously하게동작(direct reclaim)

Page 5: Operating System 12주차 - RTCC Lab.rtcc.hanyang.ac.kr/sitedata/2016_Under_OS/OS_Practice_11_Memory... · 메모리해제 실습1 Out of ... 현재리눅스커널은OOM이발생하면oom_kill.c에구현되어있는OOM_killer가알고리즘에

5Real-Time Computing and Communications Lab., Hanyang University

http://rtcc.hanyang.ac.kr 5Real-Time Computing and Communications Lab., Hanyang University

http://rtcc.hanyang.ac.kr

메모리할당실패시

__alloc_pages_high_priority

memory zone의 wmark를 고려하지 않고 페이지 할당을 시도함

Page 6: Operating System 12주차 - RTCC Lab.rtcc.hanyang.ac.kr/sitedata/2016_Under_OS/OS_Practice_11_Memory... · 메모리해제 실습1 Out of ... 현재리눅스커널은OOM이발생하면oom_kill.c에구현되어있는OOM_killer가알고리즘에

6Real-Time Computing and Communications Lab., Hanyang University

http://rtcc.hanyang.ac.kr 6Real-Time Computing and Communications Lab., Hanyang University

http://rtcc.hanyang.ac.kr

메모리할당실패시

__alloc_pages_direct_compact

high order allocation을 위해서 synchronous하게 메모리를 compact함

Page 7: Operating System 12주차 - RTCC Lab.rtcc.hanyang.ac.kr/sitedata/2016_Under_OS/OS_Practice_11_Memory... · 메모리해제 실습1 Out of ... 현재리눅스커널은OOM이발생하면oom_kill.c에구현되어있는OOM_killer가알고리즘에

7Real-Time Computing and Communications Lab., Hanyang University

http://rtcc.hanyang.ac.kr 7Real-Time Computing and Communications Lab., Hanyang University

http://rtcc.hanyang.ac.kr

메모리할당실패시

__alloc_pages_direct_reclaim

메모리 확보를 위해 synchronous하게메모리를 회수한다. 이 과정에서 swapping이적극적으로 사용됨

Page 8: Operating System 12주차 - RTCC Lab.rtcc.hanyang.ac.kr/sitedata/2016_Under_OS/OS_Practice_11_Memory... · 메모리해제 실습1 Out of ... 현재리눅스커널은OOM이발생하면oom_kill.c에구현되어있는OOM_killer가알고리즘에

8Real-Time Computing and Communications Lab., Hanyang University

http://rtcc.hanyang.ac.kr 8Real-Time Computing and Communications Lab., Hanyang University

http://rtcc.hanyang.ac.kr

LRU(Least Recently Used)

Linux 에서 “Used”된 메모리는, inactive, active 두 가지 상태로 나뉘어진다.

(Buffer, Page cache memory) Active : The total amount of buffer or page cache memory, in kilobytes, that

is in active use. This is memory that has been recently used and isusually not reclaimed for other purposes

Inactive : The total amount of buffer or page cache memory, in kilobytes, thatare free and available. This is memory that has not been recently usedand can be reclaimed for other purposes.

Page 9: Operating System 12주차 - RTCC Lab.rtcc.hanyang.ac.kr/sitedata/2016_Under_OS/OS_Practice_11_Memory... · 메모리해제 실습1 Out of ... 현재리눅스커널은OOM이발생하면oom_kill.c에구현되어있는OOM_killer가알고리즘에

9Real-Time Computing and Communications Lab., Hanyang University

http://rtcc.hanyang.ac.kr 9Real-Time Computing and Communications Lab., Hanyang University

http://rtcc.hanyang.ac.kr

메모리할당실패시

__alloc_pages_may_oom

Page 10: Operating System 12주차 - RTCC Lab.rtcc.hanyang.ac.kr/sitedata/2016_Under_OS/OS_Practice_11_Memory... · 메모리해제 실습1 Out of ... 현재리눅스커널은OOM이발생하면oom_kill.c에구현되어있는OOM_killer가알고리즘에

10Real-Time Computing and Communications Lab., Hanyang University

http://rtcc.hanyang.ac.kr 10Real-Time Computing and Communications Lab., Hanyang University

http://rtcc.hanyang.ac.kr

OOM Demo program

OOM 실습을하기에앞서실습환경을통일하기위해VirtualBox 설정으로들어가서할당되어있는메모리를1024MB로바꾸도록합니다.

Page 11: Operating System 12주차 - RTCC Lab.rtcc.hanyang.ac.kr/sitedata/2016_Under_OS/OS_Practice_11_Memory... · 메모리해제 실습1 Out of ... 현재리눅스커널은OOM이발생하면oom_kill.c에구현되어있는OOM_killer가알고리즘에

11Real-Time Computing and Communications Lab., Hanyang University

http://rtcc.hanyang.ac.kr 11Real-Time Computing and Communications Lab., Hanyang University

http://rtcc.hanyang.ac.kr

Out of memory

위 과정에서 충분한 메모리를 확보하지 못하였을 경우 Out of memory가 발생한다.

현재 리눅스 커널은 OOM이발생하면 oom_kill.c에 구현되어 있는 OOM_killer가알고리즘에따라 task의 포인트를 계산하고 가장 높은 포인트를 가진 프로세스를 kill합니다.

select_bad_process oom_badness 에서 각각 프로세스 쓰레드를 돌며 badness 점수를계산한다.

Page 12: Operating System 12주차 - RTCC Lab.rtcc.hanyang.ac.kr/sitedata/2016_Under_OS/OS_Practice_11_Memory... · 메모리해제 실습1 Out of ... 현재리눅스커널은OOM이발생하면oom_kill.c에구현되어있는OOM_killer가알고리즘에

12Real-Time Computing and Communications Lab., Hanyang University

http://rtcc.hanyang.ac.kr 12Real-Time Computing and Communications Lab., Hanyang University

http://rtcc.hanyang.ac.kr

Kernel tunning 1

oom_score_adj (oom score adjustment)

프로세스의OOM badness score 계산에이용되는값

/proc/<pid>/oom_score_adj에저장되고 -1000 ~ 1000 범위의값을가짐

oom_score_adj == -1000인경우, 해당프로세스는OOM killer에의해 kill을잘당하지않음(OOM DISABLE)

Page 13: Operating System 12주차 - RTCC Lab.rtcc.hanyang.ac.kr/sitedata/2016_Under_OS/OS_Practice_11_Memory... · 메모리해제 실습1 Out of ... 현재리눅스커널은OOM이발생하면oom_kill.c에구현되어있는OOM_killer가알고리즘에

13Real-Time Computing and Communications Lab., Hanyang University

http://rtcc.hanyang.ac.kr 13Real-Time Computing and Communications Lab., Hanyang University

http://rtcc.hanyang.ac.kr

Kernel tunning 2

oom_kill_allocating_task

/proc/sys/vm/oom_kill_allocating_task에위치

값을변경하여OOM에대한동작을변경할수있음

값확인

• $ cat /proc/sys/vm/oom_kill_allocating_task

값변경

• $ echo 0 > /proc/sys/vm/oom_kill_allocating_task

Value Action

0 tasklist에있는 모든 task에대해 heuristic한방법으로 kill

할 task를선택

not 0 OOM 상황을 trigger한 task를선택해서 kill

Page 14: Operating System 12주차 - RTCC Lab.rtcc.hanyang.ac.kr/sitedata/2016_Under_OS/OS_Practice_11_Memory... · 메모리해제 실습1 Out of ... 현재리눅스커널은OOM이발생하면oom_kill.c에구현되어있는OOM_killer가알고리즘에

14Real-Time Computing and Communications Lab., Hanyang University

http://rtcc.hanyang.ac.kr 14Real-Time Computing and Communications Lab., Hanyang University

http://rtcc.hanyang.ac.kr

Kernel tunning 3

overcommit_memory

/proc/sys/vm/overcommit_memory에 위치

값을변경하여OOM에 대한동작을변경할수있음

값확인

• $ cat /proc/sys/vm/overcommit_memory

값변경

• $ echo 0 > /proc/sys/vm/overcommit_memory

Value Action

0 커널이 overcommit을 허용할지를 결정할 때, 이미 정의되어 있는 Heuristic

한 방식을 적용하여 결정 (default)

- 메모리 요구가 있을 때여유 공간이 없는 경우, 실행중인 프로세스를 강제종료하여 메모리를 확보

1 항상 overcommit을 수행

2 overcommit이 특정 값을 넘어가지 않도록 방지- 전체 commit 값 = [Swap space size] + [RAM size] * [overcommit_ratio] /

100

Page 15: Operating System 12주차 - RTCC Lab.rtcc.hanyang.ac.kr/sitedata/2016_Under_OS/OS_Practice_11_Memory... · 메모리해제 실습1 Out of ... 현재리눅스커널은OOM이발생하면oom_kill.c에구현되어있는OOM_killer가알고리즘에

15Real-Time Computing and Communications Lab., Hanyang University

http://rtcc.hanyang.ac.kr 15Real-Time Computing and Communications Lab., Hanyang University

http://rtcc.hanyang.ac.kr

Kernel tunning 4

overcommit_ratio

/proc/sys/vm/overcommit_ratio에위치

전체 RAM size에대해얼마만큼의비율을overcommit 해줄것인가를결정

값확인 (default 50)

• $ cat /proc/sys/vm/overcommit_ratio

값변경

• $ echo 0 > /proc/sys/vm/overcommit_ratio

Page 16: Operating System 12주차 - RTCC Lab.rtcc.hanyang.ac.kr/sitedata/2016_Under_OS/OS_Practice_11_Memory... · 메모리해제 실습1 Out of ... 현재리눅스커널은OOM이발생하면oom_kill.c에구현되어있는OOM_killer가알고리즘에

16Real-Time Computing and Communications Lab., Hanyang University

http://rtcc.hanyang.ac.kr 16Real-Time Computing and Communications Lab., Hanyang University

http://rtcc.hanyang.ac.kr

실습 2

oomTest.c

Page 17: Operating System 12주차 - RTCC Lab.rtcc.hanyang.ac.kr/sitedata/2016_Under_OS/OS_Practice_11_Memory... · 메모리해제 실습1 Out of ... 현재리눅스커널은OOM이발생하면oom_kill.c에구현되어있는OOM_killer가알고리즘에

17Real-Time Computing and Communications Lab., Hanyang University

http://rtcc.hanyang.ac.kr 17Real-Time Computing and Communications Lab., Hanyang University

http://rtcc.hanyang.ac.kr

실습 2

sudo swapoff –a : linux swapoff 후진행

ctrl + c 로터미널 3개에 signal을 보내서거의동시에메모리를할당시작하게함

Page 18: Operating System 12주차 - RTCC Lab.rtcc.hanyang.ac.kr/sitedata/2016_Under_OS/OS_Practice_11_Memory... · 메모리해제 실습1 Out of ... 현재리눅스커널은OOM이발생하면oom_kill.c에구현되어있는OOM_killer가알고리즘에

18Real-Time Computing and Communications Lab., Hanyang University

http://rtcc.hanyang.ac.kr 18Real-Time Computing and Communications Lab., Hanyang University

http://rtcc.hanyang.ac.kr

실습 2

pid :2261이 oom에 의해 kill dmesg로도 확인할수 있음

Page 19: Operating System 12주차 - RTCC Lab.rtcc.hanyang.ac.kr/sitedata/2016_Under_OS/OS_Practice_11_Memory... · 메모리해제 실습1 Out of ... 현재리눅스커널은OOM이발생하면oom_kill.c에구현되어있는OOM_killer가알고리즘에

19Real-Time Computing and Communications Lab., Hanyang University

http://rtcc.hanyang.ac.kr 19Real-Time Computing and Communications Lab., Hanyang University

http://rtcc.hanyang.ac.kr

실습 2

adj 값 변경후

pid : 2189는 oom에 의해죽지않음을볼 수 있다.

Page 20: Operating System 12주차 - RTCC Lab.rtcc.hanyang.ac.kr/sitedata/2016_Under_OS/OS_Practice_11_Memory... · 메모리해제 실습1 Out of ... 현재리눅스커널은OOM이발생하면oom_kill.c에구현되어있는OOM_killer가알고리즘에

20Real-Time Computing and Communications Lab., Hanyang University

http://rtcc.hanyang.ac.kr 20Real-Time Computing and Communications Lab., Hanyang University

http://rtcc.hanyang.ac.kr

과제

1. OOM 상황이발생하였을때, oom_killer 가어떻게동작하는지분석한다.

2. `__alloc_pages_may_oom` 부터분석을시작하며단순히함수콜관계뿐만아니라그의미도(함수의기능, 중요코드)단계별로서술한다.

3. 또한보고서를작성할시 다음의내용을반드시포함하도록한다.

1. (1) oom_killer가 죽일수없는프로세스가하는일 + oom_killer내에서이작업을수행하는코드

2. (2) oom_killer가 희생자를선정할때 사용하는point 값이계산되는코드와각각의변수의의미

3. (3) adj가사용되는부분의코드와의미

4. select_bad_process, oom_badness 함수를고쳐Process 중요도를고려한oom killer 구현

많은가산점부여!!!!

Page 21: Operating System 12주차 - RTCC Lab.rtcc.hanyang.ac.kr/sitedata/2016_Under_OS/OS_Practice_11_Memory... · 메모리해제 실습1 Out of ... 현재리눅스커널은OOM이발생하면oom_kill.c에구현되어있는OOM_killer가알고리즘에

21Real-Time Computing and Communications Lab., Hanyang University

http://rtcc.hanyang.ac.kr 21Real-Time Computing and Communications Lab., Hanyang University

http://rtcc.hanyang.ac.kr

과제

Due : 2016/06/02 23:59

보고서

표지

OOM 이란?

OOM 정책함수콜관계도

각각의단계별의미분석 + 앞에과제명세에서요구한내용

후기

보고서위의내용을포함해서메일로제출

[email protected]

메일제목 : [운영체제]과제_학번_임정택

양식을지키지않을시불이익이있을수있습니다.