Linux Kernel

메모리가 작은 시스템을 위한 커널 경량화 (5) — 커널 메모리 관리 옵션 검토

지금까지는 커널에 "무엇을 넣을지"(드라이버, 컴파일 옵션, initramfs)를 다뤘다. 이번 편은 각도를 바꿔 커널이 메모리 자체를 어떻게 다루는지 — Page Cache, Swap, Memory Reclaim, Watermark, MGLRU, 그리고 끌 수 있는 디버깅…

Continue Reading메모리가 작은 시스템을 위한 커널 경량화 (5) — 커널 메모리 관리 옵션 검토

메모리가 작은 시스템을 위한 커널 경량화 (4) — 빌드 최적화와 initramfs 축소

(3)편에서 Kconfig 옵션만으로 bzImage를 31% 줄였다. 여기서 한 걸음 더 들어가면 두 갈래 길이 남는다 — 컴파일러가 코드를 어떻게 만들어내는지(최적화 옵션, LTO)와, 애초에 커널 이미지에 무엇을 실어 보낼지(built-in vs module,…

Continue Reading메모리가 작은 시스템을 위한 커널 경량화 (4) — 빌드 최적화와 initramfs 축소

메모리가 작은 시스템을 위한 커널 경량화 (3) — Kconfig 옵션으로 커널 이미지 줄이기

(1)편에서 defconfig 커널의 베이스라인을 잡았고, (2)편에서는 initrd 사용 여부에 따른 트레이드오프를 확인했다. 두 편 모두 커널 설정 자체는 defconfig 그대로였다 — 실제로는 여기서부터가 진짜 경량화 작업이다. defconfig는 온갖 하드웨어를 지원하기…

Continue Reading메모리가 작은 시스템을 위한 커널 경량화 (3) — Kconfig 옵션으로 커널 이미지 줄이기

메모리가 작은 시스템을 위한 커널 경량화 (2) — initrd 사용에 따른 영향

지난 편에서는 initrd 없이 root=/dev/vda로 직접 부팅하는 구성으로 defconfig 커널의 베이스라인을 측정했다. 하지만 실제 임베디드/컨테이너 이미지에서는 initrd(정확히는 initramfs)를 쓰는 구성도 흔하다 — 루트 파일시스템 드라이버를 모듈로 빼두고 initramfs에서 필요한 것만…

Continue Reading메모리가 작은 시스템을 위한 커널 경량화 (2) — initrd 사용에 따른 영향

메모리가 작은 시스템을 위한 커널 경량화 (1) — 측정 방법론과 베이스라인

컨테이너나 저사양 임베디드 보드처럼 메모리가 1GB 이하로 제한된 환경에서는 배포판 defconfig 커널조차 여유 공간을 상당히 잡아먹는다. 배포판 커널은 다양한 하드웨어를 지원하기 위해 수많은 드라이버와 서브시스템을 켜둔 상태라, 실제 타깃 환경에서는…

Continue Reading메모리가 작은 시스템을 위한 커널 경량화 (1) — 측정 방법론과 베이스라인

Arm GIC v3와 Pseudo-NMI에 대한 이해

x86에는 IRQ 마스크와 무관하게 항상 들어오는 진짜 NMI(Non-Maskable Interrupt) 핀이 있지만, ARM에는 그런 하드웨어가 없다. 그런데 PMU(성능 카운터) 오버플로우 인터럽트처럼 "일반 IRQ가 막혀 있는 구간에서도 반드시 들어와야" 정확한 프로파일링이 되는…

Continue ReadingArm GIC v3와 Pseudo-NMI에 대한 이해

[ARM] arch_has_hw_pte_young() 이해

MGLRU(Multi-Gen LRU) 페이지 에이징이나 fork() 이후 CoW(Copy-on-Write) 처리처럼, 커널이 "이 페이지가 최근에 접근됐는가"를 알아야 하는 곳이 많다. 이걸 알아내는 방법은 두 가지다 — 오래된 PTE에 접근할 때마다 일부러 페이지 폴트를…

Continue Reading[ARM] arch_has_hw_pte_young() 이해

Linux 커널 모듈 개발 입문 — Hello World부터 모듈 파라미터, /proc 인터페이스까지

커널에 기능을 하나 추가하려고 매번 전체 커널을 재컴파일하고 재부팅해야 한다면 개발 사이클이 너무 느려진다. Loadable Kernel Module(LKM)은 이 문제를 insmod/rmmod만으로 런타임에 코드를 넣고 뺄 수 있게 해준다. 이 글에서는 최소…

Continue ReadingLinux 커널 모듈 개발 입문 — Hello World부터 모듈 파라미터, /proc 인터페이스까지

Ubuntu Livepatch로 재부팅 없이 커널 보안 패치 적용하기

커널 보안 패치가 나와도 프로덕션 서버는 재부팅 창을 잡기가 쉽지 않다. 클러스터 전체를 순차적으로 내렸다 올리는 동안 서비스 영향을 감수해야 하고, 그 사이 취약점은 그대로 열려 있다. Canonical Livepatch는 실행…

Continue ReadingUbuntu Livepatch로 재부팅 없이 커널 보안 패치 적용하기