[리눅스커널] 메모리관리: 슬랩(Slab) 메모리 할당자를 이루는 주요 개념
By Guillermo Austin Kim | 2019년 7월 30일 |
리눅스 커널 메모리 서브 시스템 개발자들은 다음과 같은 목표로 메모리 성능 개선을 해왔습니다.- 메모리 할당 속도- 메모리가 파편화 최소화 물론 메모리을 빨리 할당하고 되도록 잔여 메모리를 많이 남기려는 목적입니다. 슬랩(Slab)이란 필자가 언급했듯이 커널 메모리 관리의 핵심 중 하나인 '슬랩(Slab)의 개념'은 매우 어렵습니다. 그래서 이해를 돕기 위해 구내 식당을 예를 들면서 '슬랩(Slab)'을 설명하겠습니다. 구내 식당에 온 사람들은 먼저 무엇을 먹을지 선택합니다. 일일이 메뉴를 지정해 알려주면 식당은 이에 맞게 음식을 준비했습니다. 그런데 문제가 생겼습니다. 점심 시간에 손님이 많이 몰려오면 음식을 준비하는 시간이 오래 걸렸기 때문입니다. 그래서 식당 관리자들이 다음과 같은 주제로 궁
[리눅스커널] 워크큐(workqueue): Trace32로 워크큐 자료 구조 디버깅하기
By Guillermo Austin Kim | 2019년 2월 21일 |
이번 시간에는 임베디드 디버깅 프로그램인 Trace32를 써서 워크큐 자료구조를 점검합니다. 리눅스 커널 시스템에서 커널 크래시가 나면 생성되는 vmcore를 올려 확인한 내용입니다. 참고로, vmcore는 라즈베리파이가 아니라 다른 ARM64비트 아키텍처를 적용한 시스템에서 받았습니다. 먼저 시스템 워크큐 전역 변수를 확인합니다.var.view %type %string system_wq1 (static struct workqueue_struct *) system_wq = 0xFFFFFFC632C15080 -> (2 (struct list_head) pwqs = ((struct list_head *) next = 0xFFFFFFC63A3B2870 3 (struct list_head)
[리눅스커널][디버깅] 슬럽(슬랩) 오브젝트 레드존 데이터 구조 T32로 메모리 디버깅(2)
By Guillermo Austin Kim | 2019년 4월 1일 |
할당(Alloc)된 슬럽 오브젝트 데이터 스트럭처 파악하기 이전 포스팅에서는 Free 슬럽 오브젝트 주소인 0xC0067BC0 기준으로 어떤 패턴의 자료구조인지 파악했습니다. 이번 시간에서는 이미 할당된 슬럽 오브젝트의 데이터 스트럭처를 파악하겠습니다. ________address|_data________|value_____________|symbol NSD:C0067A80| 41 1A 17 00 0x171A41 //<-- "kmalloc-64" 슬럽 오브젝트 시작 주소 NSD:C0067A84| 11 00 00 00 0x11 NSD:C0067A88| 01 00 00 00 0x1 NSD:C0067A8C| 01 00 00
[리눅스커널][스케줄링] 선점 스케줄링 지연 함수 preempt_enable()/preempt_disable() 소개
By Guillermo Austin Kim | 2019년 2월 14일 |
선점 스케줄링 지연 함수 preempt_enable()/preempt_disable() 소개 리눅스 커널에서 선점 스케줄링을 동작을 잠시 지연할 수 있는 함수를 지원합니다. preempt_disable(): 선점 지연 활성화preempt_enable(): 선점 지연 비활성화 preempt_disable() 함수 이름은 "선점"을 의미하는 "preempt" 단어에 "불능"란 단어인 "disable"의 조합입니다.즉, preempt_disable() 함수를 실행하면 선점 스케줄을 지연할 수 있습니다. 마찬가지로 preempt_enable() 함수를 실행하면 선점 스케줄링을 활성화합니다. preempt_disable() 함수와 preempt_enable() 함수의 기본 원리를 알아보기 앞서 커널