안녕하세요~

IAMROOT 커널 16차를 통해 스터디를 하였고, 현재 다양한 리눅스 커널 컨텐츠를 유튜브 세미나 및 포스팅 중인 이파란입니다.

 

[공지] IAMROOT.ORG 2019년도(16기) 신규 스터디 모집 공고
 - http://www.iamroot.org/xe/index.php?document_srl=204834&mid=Notice

 

2019년 5월 18일 첫 모임을 가진 후 약 120명이 3개팀으로 분리하여 시작하였습니다. 

초반 ARM 커널 5.1 기준 코어 부분을 라인 바이 라인으로 스터디하는 것을 목표로 팀이 달려왔고,
탈퇴하는 인원이 많아져 스터디 인원을 보충하여 유지하기 위해 2019년 11월 2일 에는 3개 팀 모두가 통합을 하였습니다.

 

스터디 중에 메모리 매니지먼트 서브시스템이 생각보다 오래걸렸고,
1년 이상 스터디를 진행하셨던 분들도 커널 코어 분석 필요성에 의문을 느끼시면서 2번째 다수 탈퇴가 발생했습니다.

 

하지만! 이 기간동안 트레이스 포인트 백 트레이스와 히스토리 위주의 분석이 굉장히 중요함을 느끼게 되었습니다.

이후에 한국 커널 메인테이너 분들과 대화하면서, 이 때 얻었던 노하우의 중요함을 더욱 공감할 수 있었구요.

 

커널 코어 분석 노하우와 KDump 와 QEMU 동적 분석 등을 활용하여 실제 자료구조도 확인하고 그림도 좀 더 많이 그려보면서 이후 서브시스템은 비교적 순조롭고 유쾌하게 중요한 부분을 하나씩 알아가면서 재미있게 진행했습니다.

 

어려운 여정을 갈 때는 함께할 수 있는 동료들이 소중합니다.

모두가 점점 성장하면서 스터디 멤버들과 같은 주제를 보아도 단 기간에 더 많은 통찰력을 가질 수 있더라구요.

저는 스터디 시간 코드 리뷰를 많이 맡게되면서 16차 스터디 유지에 더 집중하게되었네요. ^^

IAMROOT 의 철학을 느낄 수 있었습니다.


마지막까지 남은 6명이 164주차(10/8)를 마지막으로 스터디를 완료하였습니다.
벌써 만 3년 반이 다 되었네요.


혼자서 커널 코어를 분석하고 잘 알고 활용할 수 있는 역량을 가지는 데에는 코어 분석 자체만 수 년의 장기 시간 투자가 필요하다고 확신합니다.

즉, 시스템 소프트웨어에 대한 단단한 기본기(컴퓨터 아키텍쳐, 각 서브시스템과 연결 고리에 대한 빅 피쳐 + 멘탈 관리 ^.^)를 만들어가지 않는 이상 스스로 지쳐 포기할 수 밖에 없다는 결론을 지었습니다.

 

스터디를 진행하면서 제가 느낀 커널 코어 서브시스템의 이해도 단계는 크게 다음과 같은데요.
 1. 서브시스템의 주요 기능(트레이스 포인트에 대한) 이해
 2. 서브시스템의 버그, 코드 보완 가능
 3. 서브시스템의 기능 단위 개발 가능
 4. 서브시스템 메인테이닝

 

제 인생 20대 후반을 장식해준 IAMROOT 커널 코어 서브시스템의 전반적인 분석은 컴퓨터에 대한 새로운 관점을 만들어주었습니다.

 

이번 스터디 종료는 또 다른 새로운 시작으로의 여정을 가기 위한 준비라고 생각합니다.

 

참고로 아래는 저희가 3년이 넘는 기간동안 스터디하고 분석한 내용들의 제목입니다.

 

- - - - -    아    래   - - - - -

 

1. 메모리 관리

 

 1) MMU
   - 캐시(tlb, coherent)
   - 페이지 테이블(pgd, pud, pmd, pte)
   - 매핑(fixmap, kmap, vmap, vmemmap, ioremap, rmap)

 

 2) 메모리 모델
   - NUMA
   - sparse
   - ZONE, zonelist
   - memmap

 

 3) 커널 메모리 관리
   - memblock
   - page 할당자 (buddy, pcp)
   - 페이지 회수 (memcgroup, watermark, lru, kswapd, compaction, reclaim, swap)
   - per-cpu
   - slub, kmem-cache
   - kmalloc
   - vmalloc

 


2. 커널 동기화 기법

 

 1) 동기화 오브젝트
   - barrier(smb, dsb, isb)
   - atomic operation (exclusive load & store)
   - spinlock (compare and swap, ticket, queued)
   - mutex, futex
   - rcu

 


3. 태스크 스케줄 관리

 

 1) 인터럽트
   - arm 64 exception 벡터 & 핸들러
   - GICv3 (vic, irq chip, irq domain)
   - bottom-half(softirq, workqueue, threaded IRQ, tasklet)
   - mm fault 핸들러

 

 2) 타이머 & 시간
   - 클럭(CCF, clock source, clock event)
   - dynamic timer, timer wheel
   - 스케줄 틱(sched tick, jiffies, tick device, time-keeping, nohz)
   - 커널 sleep API (interruptible, uninterruptible)

 

 3) 태스크 스케줄링
   - 단위(nice, priority, weight, vruntime, schedule entity, runqueue)
   - cpu-load, pelt
   - preemption
   - 스케줄러 클래스(rt, cfs)
   - 로드밸런싱
   - fork & clone (pid, copy on write)


 4. 기타
   - KDump (CONFIG_DEBUG_)
   - control group
   - proc & sysfs 인터페이스
   - DTB
   - pl011 uart driver
   - 자료 구조(list, hlist, radix tree, rb tree, bitmask, bitmap)

 

* 참고
   - 분석한 소스(커널 v5.1 기준) 위치

      - https://github.com/iamroot16/linux
   - 스터디 히스토리(~121 주차)

      - https://rawcdn.githack.com/iamroot16/study-log-tree/main/README.html
   - 스터디 히스토리(126~ 주차)

      - https://docs.google.com/spreadsheets/d/1njOsrGHQfHOGQyQjjL5ncDXD3k7w606DfkuzMkQxV3Y/

 

(끝)

 

p.s: 마지막으로 이러한 스터디를 할 수 있도록 지원해준 IAMROOT 문영일(코드로 알아보는 ARM 리눅스 커널 2판) 선배님과 올해 스터디 진행을 하면서 많은 도움을 주신 김동현(디버깅을 통해 배우는 리눅스 커널의 구조와 원리) 저자님께 무한한 감사를 드립니다.

 

이파란 드림.

번호 제목 글쓴이 날짜 조회 수
공지 [공지] IAMROOT 19차 커널 스터디 오리엔테이션 (zoom 접속 안내) [5] 문c(문영일) 2022.05.07 875
공지 [공지] IAMROOT 18차 커널 스터디 오리엔테이션 안내 [마감] [2] 문c(문영일) 2021.05.17 1248
공지 커널 스터디를 위한 문c 가이드입니다. [10] 문c(문영일) 2021.04.27 6441
1197 커널20기 모임 질문입니다. [16] 고미c 2023.04.29 816
1196 [커널 19차] 42 주차 이태백 2023.03.11 209
1195 아키텍처 스터디 모집 [4] 구본규 2022.10.21 824
1194 [커널 16차] 졸업 소회 [5] file 이파란 2022.10.18 978
» [공지] 커널 16차 스터디를 종료합니다. (고생많으셨습니다!) [10] 이파란 2022.10.09 2293
1192 [커널 16차] 164주차 [3] 이파란 2022.10.01 307
1191 [커널 16차] 163주차 [3] 이파란 2022.09.25 100
1190 [커널 16차] 162주차 [2] 이파란 2022.09.17 117
1189 [커널 16차] 161주차 [3] 이파란 2022.09.03 105
1188 [커널 16차] 160주차 [2] 이파란 2022.08.27 68
1187 [커널 16차] 159주차 [1] 이파란 2022.08.20 65
1186 [커널 16차] 158주차 [1] 이파란 2022.08.13 92
1185 [커널 16차] 157주차 [2] 이파란 2022.08.06 83
1184 [커널 16차] 156주차 [1] 이파란 2022.07.31 64
1183 [커널 16차] 155주차 [1] 이파란 2022.07.23 85
1182 [커널 16차] 154주차 [3] 이파란 2022.07.17 76
1181 [커널 16차] 153주차 [2] 이파란 2022.07.09 84
1180 [커널 16차] 152주차 [5] 이파란 2022.07.03 335
1179 [커널 16차] 151주차 이파란 2022.06.26 90
1178 [커널 16차] 150주차 [3] 이파란 2022.06.19 105
XE Login