vmemmap에 대하여
커널은 물리 페이지마다 struct page를 하나씩 둔다. 버디 할당기(buddy allocator)와 페이지 폴트 경로는 pfn과 struct page를 계속 맞바꾼다. 그런데 물리 주소 공간에는 구멍이 있다. QEMU q35 머신에 6GiB를 주면 RAM이…
커널은 물리 페이지마다 struct page를 하나씩 둔다. 버디 할당기(buddy allocator)와 페이지 폴트 경로는 pfn과 struct page를 계속 맞바꾼다. 그런데 물리 주소 공간에는 구멍이 있다. QEMU q35 머신에 6GiB를 주면 RAM이…
머지된 코드는 git log로 쉽게 볼 수 있다. 반면 앞으로 무엇이 들어올지는 메일링 리스트, 학회 발표, 메인테이너의 반응을 함께 봐야 알 수 있다. 기여할 주제를 고르려면 바로 이 "아직 머지되지…
mm 서브시스템은 릴리스마다 수십 개의 패치 시리즈를 받는다. 머지 메시지만 읽어서는 어떤 흐름이 몇 릴리스에 걸쳐 이어지는지 보이지 않는다. 예를 들어 스왑 테이블 작업은 7.0부터 7.2까지 네 단계로 나뉘어 들어왔고,…
리눅스 커널 메모리 관리(mm) 서브시스템은 mm/ 디렉터리에만 C 파일이 165개 있고, 릴리스마다 340~550개 커밋이 들어온다. 관심 있는 주제의 패치를 쓰려면 먼저 코드가 어느 트리를 거쳐 메인라인에 들어가는지, 누가 리뷰하는지, 지금…
리눅스 커널 7.4에서 x86의 __get_user()와 __put_user()가 사라집니다. 두 매크로는 오랫동안 "검사를 한 번만 하고 빠르게 접근하는" 최적화 수단이었습니다. 하지만 SMAP(Supervisor Mode Access Prevention)이 보편화된 뒤로는 x86에서 오히려 더 느려졌습니다. 이번…
64비트 Arm과 x86 리눅스에서는 스레드 하나마다 16KB의 커널 스택이 잡힙니다. 이 메모리는 스왑할 수 없습니다. 스레드 하나만 보면 작은 양이지만, 유휴 상태의 Android 기기에도 스레드가 5,000개쯤 있습니다. 수백만 스레드가 도는…
커널을 바꿔가며 시험할 때 라즈베리파이 펌웨어에만 의존하면 매번 전원을 내리고 SD 카드를 빼서 파일을 갈아끼워야 한다. U-Boot 프롬프트까지 올려놨다면 그 자리에서 커널을 골라 올리고 부트 인자를 바꿔 다시 부팅할 수…
Android 기기는 처음부터 메인라인과 상당히 다른 커널을 써 왔습니다. GKI(Generic Kernel Image)가 도입되면서 그 차이는 많이 줄었습니다. 그래도 지금 출시되는 기기의 커널에는 여전히 out-of-tree 변경이 대량으로 들어 있습니다. Android가 이런…
리누스 토발즈가 10월 18일(현지 시간) 리눅스 커널 7.3을 릴리스했습니다. 평소처럼 9주 개발 주기였지만 숫자는 평소와 전혀 다릅니다. 프로젝트 역사상 처음으로 한 주기의 전체 커밋이 2만 건을 넘었습니다. 개발자 수는 7.2가…
4편까지는 스케줄러가 하는 일을 밖에서 들여다보기만 했다. 스케줄링 정책 자체를 바꾸려면 kernel/sched/를 고쳐 커널을 다시 빌드하고 재부팅해야 했고, 정책 하나 시험하는 데 빌드 주기가 통째로 들어갔다. 커널 6.12에 정식 합류한…