안녕하세요~
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판) 선배님과 올해 스터디 진행을 하면서 많은 도움을 주신 김동현(디버깅을 통해 배우는 리눅스 커널의 구조와 원리) 저자님께 무한한 감사를 드립니다.
이파란 드림.
댓글 10
-
djk
2022.10.09 13:57
-
커널열공
2022.10.09 14:13
모두 수고하셨습니다.
-
Min
2022.10.09 18:07
부럽네요. 19기도 꼭 완주하겠습니다. 수고하셨습니다.
-
이파란
2022.10.09 20:15
진심으로 응원합니다!
-
이파란
2022.10.09 23:11
기술적인 관심이 높고 배려해주시고 온화한 성격의 멤버들과 함께했습니다.
(최종 6 명 ÷ 도전자 120명) * 100(%) = 5% 생존율!
위의 and 조건이 없었으면 완주 못했을거라고 확신합니다. -
이파란
2022.10.10 22:26
-
문c(문영일)
2022.10.11 09:14
그 동안 고생 많으셨습니다. ^^*
-
이파란
2022.10.11 20:57
ლ( ╹◡╹ ლ) 한국 리눅서들이 더 발전할 수 있도록 최고의 정보를 정리해주셔서 항상 감사합니다.
-
유희재
2022.10.20 11:56
완주를 축하드립니다. 모두 고생하셨습니다 -
jungcow
2022.12.21 16:54
이제야 알게 되었는데, 정말 멋진 것 같습니다! 고생하셨습니다! 저도 기회가 오면 바로 참여하고 싶네요
.
모두 고생하셨어요. 3년 반동안 많은걸 배웠습니다. 권두진 드림.