Guillermo Austin Kim

Sources

Posts

998 posts

[리눅스커널] 메모리관리: 메모리 존 자료구조 struct zone 분석하기

Guillermo Austin Kim|2019년 8월 28일

이전 소절에서 메모리 존에 대한 기본 개념을 소개했습니다. 존(Zone)은 비슷한 속성의 페이지를 묶어서 관리하려고 만든 것입니다. 이어서 각 존의 속성과 세부 동작을 표현하는 자료구조인 struct zone에 대해서 살펴보겠습니다. 커널에서 메모리 존 별 세부 정보는 어디서 확인할 수 있을까요?  contig_page_data 전역 변수 내 node_zones 필드에서 확인할 수 있다. 전역 변수 contig_page_data의 node_zones 배열은 다음과 같은 각 존 별 속성 정보를 저장합니다. 오더별 잔여 페이지 갯수 워터마크 정보페이지 종류별 다음은 struct zone 구조체 선언부입니다.[https://github.com/raspberrypi/linux/blob

[리눅스커널] 메모리관리: 메모리 존(Zone) 종류와 개념 소개

Guillermo Austin Kim|2019년 8월 28일

리눅스 메모리 시스템에서 존(Zone)은 유사한 속성의 페이지들을 집합입니다. 커널에서 페이지들을 다음과 같은 존으로 나눠서 관리합니다.ZONE_NORMALZONE_HIGH_MEMZOME_MOVEABLE  다음 그림은 존과 페이지과의 관계도입니다. [그림 14.22] 존과 페이지와의 관계 위 그림에서 보이듯 하나의 존 내부에 여러 개 페이지들이 속해 있습니다. 이렇게 존(Zone)은 비슷한 속성의 여러 개 페이지들을 관리하기 위한 자료구조이자 메모리 계층입니다. 리눅스 커널에서 존은 시스템 관점으로 메모리 사용량을 볼 수 있는 미니맵입니다. 이번 절에서는 존의 개념과 자료 구조와 관련 소스 코드를 분석하겠습니다. 메모리 존(Zone) 종류와 개념 소개 리눅스 시스템에서는 비슷한 속성의

[리눅스커널] 스케줄링: 프로세스를 깨운다는 것은 무엇을 의미할까?

Guillermo Austin Kim|2019년 8월 27일

여러분은 운영체제나 커널에서 다음과 같은 문장을 많이 읽어 봤을 것입니다.  프로세스 A를 깨우는 동작이다. 여기서 '프로세스를 깨운다.'란 문장의 의미는 무엇일까요? 이 내용을 이번 절에서 다루고자 합니다. 만약 누군가 'A 프로세스를 깨운다.'라고 말한다면 커널 입장에서 다음과 같이 해석할 수 있습니다.  스케줄러에게 프로세스 실행 요청을 한다. 즉, A 프로세스를 깨운다라는 말은 A 프로세스 실행 요청을 한다는 뜻을 지닙니다. 프로세스 실행 요청을 하고 나면 누가 실행시킬까요? 스케줄러가 다음에 어떤 프로세스를 실행할지 결정을 합니다. 정리하겠습니다. 누군가 'A 프로세스를 깨운다.' 라고 말하면 커널에서 다음과 같이 해석할 수 있습니다. A 프로세스 실행 요청을 한다

[리눅스커널] CFS: vruntime을 ftrace로 확인하는 실습 따라해보기

Guillermo Austin Kim|2019년 8월 27일

여러분이 이 부분까지 포기하지 않고 읽었다면 다음과 같은 의문이 생길 것입니다.  리눅스 시스템에서 vruntime 은 실제 어떤 값일까? 이번 소절에서는 vruntime을 ftrace에서 보는 방법을 소개합니다. ftrace에서 sched_stat_runtime 이벤트를 키면 다음과 같은 프로세스의 실행 정보를 출력할 수 있습니다. vruntime 프로세스 실행 시각 sched_stat_runtime ftrace 이벤트 키는 방법 소개 sched_stat_runtime 이벤트 메시지를 분석하기 앞서 이벤트를 키는 방법을 먼저 알아보겠습니다. 다음 명령어를 입력하면 sched_stat_runtime 이벤트를 킬 수 있습니다.1 #!/bin/bash2 3 echo 0 > /sys/ke

[리눅스커널] 스케줄링: CFS 세부 함수 분석 - vruntime 관리 세부 함수 분석

Guillermo Austin Kim|2019년 8월 27일

이번 소절에서는 vruntime 핵심 동작과 관련된 커널 소스 코드를 분석합니다. 프로세스를 vruntime 기준으로 CFS 런큐 레드 블랙 트리에 등록CFS가 다음 프로세스를 레드 블랙 트리에서 선택(pick)하는 과정 프로세스를 vruntime 기준으로 CFS 런큐 레드 블랙 트리에 등록프로세스는 실행 요청을 할 때 자신을 런큐에 등록합니다. 이 과정에서 다음 동작을 처리합니다.  CFS는 실행 요청을 한 프로세스의 vruntime과 이미 런큐에 등록된 프로세스들의 vruntime을 비교한 후, 레드 블랙 트리에 등록을 한다. 세부 동작은 enqueue_entity() 함수에서 확인할 수 있습니다.[https://github.com/raspberrypi/linux/blob/rp