태그: #kernel
GPU·LLM·MLOps·쿠버네티스, 그리고 마음가짐에 관한 글 · 31 편
커널을 빌드하고 부팅하기 — 내 노트북 말고 VM에서
커널을 직접 빌드해 본 사람과 그렇지 않은 사람 사이에는 넘기 힘든 선이 하나 있습니다. 이 글은 그 선을 넘는 절차를 처음부터 끝까지 정리합니다. defconfig와 menuconfig와 localmodconfig가 각각 무엇을 해 주는지, .config 파일이 실제로 무엇을 통제하는지, 디버그 심볼이 빌드 시간과 디스크를 어떻게 잡아먹는지, 그리고 병렬 빌드 옵션이 어디서 한계에 부딪히는
2026-08-19 · 28 분 읽기 #linux#kernel#kbuild#kconfig#qemu커널을 관측하고 디버깅하기 — printk, ftrace, kprobes, 그리고 QEMU와 GDB
커널 디버깅에는 사용자 공간과 결정적으로 다른 제약이 하나 있습니다. 멈춰 세우면 시스템 전체가 멈춘다는 것입니다. 그래서 커널 관측 도구는 대부분 멈추지 않고 들여다보는 쪽으로 발달했습니다. 이 글은 그 도구들을 실제로 쓰는 순서대로 정리합니다. 먼저 모두가 실제로 가장 많이 쓰는 printk와 dmesg를, 그다음 oops 메시지를 소스 줄 번호로 되돌리는 트리 안의 스크립트들을, 이어서
2026-08-19 · 31 분 읽기 #linux#kernel#ftrace#kprobes#perf커널 소스에서 길 찾기 — clone부터 "이 동작을 하는 코드"를 찾아내기까지
커널 학습에서 실제로 가장 자주 쓰게 되는 기술은 읽기가 아니라 찾기입니다. 어떤 트리를 받을지부터 정리합니다. mainline, stable, longterm이 각각 무엇이고 kernel.org의 릴리스 표를 어떻게 읽는지, torvalds 트리와 stable 트리 중 무엇을 clone해야 하는지, 얕은 복제가 언제 손해로 돌아오는지를 다룹니다. 그다음이 이 글의 본론입니다. 알고 있는 동
2026-08-19 · 29 분 읽기 #linux#kernel#kernel-source#git#cscope시스템 콜 하나를 끝까지 따라가기 — read가 커널 안에서 지나는 길
커널이 읽을 수 있는 코드라는 것을 확인하는 가장 좋은 방법은 시스템 콜 하나를 처음부터 끝까지 따라가 보는 것입니다. read(2)를 골라 사용자 공간의 호출부터 커널 안의 실제 구현, 그리고 반환까지 실제 파일 경로와 함수 이름과 함께 추적합니다. x8664에서 인자가 어느 레지스터에 실려 오는지, dosyscall64가 번호를 어떻게 함수로 바꾸는지, SYSCALLDEFINE3 매크로가
2026-08-19 · 31 분 읽기 #linux#kernel#syscall#vfs#x86첫 커널 패치 보내기 — 코드보다 절차가 관문인 이유
커널에 첨 기여할 때 막히는 곳은 대개 코드가 아니라 절차입니다. 첫 패치가 반려되는 이유의 상당수는 로직이 아니라 형식이고, 그 형식은 전부 커널 트리 안에 문서로 들어 있습니다. 이 글은 scripts/checkpatch.pl과 scripts/getmaintainer.pl이 각각 무엇을 답해주는지, Signed-off-by가 왜 필수이며 무엇을 증명하는지, 커밋 메시지가 왜 75열이고 -
2026-08-19 · 12 분 읽기 #linux#kernel#patch#git-send-email#checkpatch커널 C는 응용 C가 아니다 — 메모리 할당과 동시성의 규칙
문법은 같은 C인데 규칙이 다릅니다. 커널에서는 어떤 함수를 어디서 부를 수 있는지가 문맥에 따라 갈리고, 그 규칙을 어기면 컴파일은 통과하고 대신 시스템이 멈춥니다. 이 글은 그 규칙들을 공식 문서 기준으로 정리합니다. 먼저 스택이 사용자 공간의 수백분의 일이라는 사실에서 출발해, kmalloc과 vmalloc과 kvmalloc이 언제 갈리는지, GFP 플래그가 실제로 무엇을 허용하고 금지
2026-08-19 · 31 분 읽기 #linux#kernel#kmalloc#gfp#spinlock커널 공부는 어디서 시작하는가 — 4,300만 줄 앞에서 길을 잃지 않는 법
리눅스 커널을 공부하겠다고 마음먹은 사람이 가장 먼저 부딪히는 것은 개념이 아니라 규모입니다. 실제로 트리를 받아 세어 본 숫자로 커널이라는 코드베이스가 어떤 물건인지 먼저 보여 주고, 그중 몇 퍼센트를 평생 열어 볼 일이 없는지 정직하게 짚습니다. 그다음 현실적인 진입 경로를 읽기·관측·기여 세 갈래로 나눠 각각이 누구에게 맞는지, 왜 처음부터 순서대로 읽겠다는 계획이 거의 항상 실패하는지
2026-08-19 · 30 분 읽기 #linux#kernel#kernel-source#learning#c커널 모듈 작성 — 가장 작은 모듈부터 파라미터와 GPL 심볼까지
앞의 네 편이 남의 코드를 읽는 일이었다면 이 글부터는 커널 안에서 실행되는 코드를 직접 씁니다. 로드되기만 하는 가장 작은 모듈을 먼저 만들고, 그것이 왜 그 형태여야 하는지를 moduleinit과 MODULELICENSE의 실제 정의를 열어 확인합니다. 트리 밖에서 모듈을 빌드하는 Makefile은 커널 공식 문서의 예제를 그대로 따라가고, insmod와 rmmod와 modinfo와 ls
2026-08-19 · 27 분 읽기 #linux#kernel#kernel-module#kbuild#printkTriton Gluon — 컴파일러가 숨기던 레이아웃을 손으로 쓰는 언어
Gluon은 Triton과 같은 컴파일러 스택 위에 올라간 하위 레벨 GPU 언어로, Triton이 감춰 두던 레이아웃·공유 메모리·워프 특수화를 커널 작성자에게 그대로 넘깁니다. 존재 이유는 명확합니다 — Triton 컴파일러가 잘 못 뽑는 코드를 만났을 때, 지금까지는 손쓸 방법이 없었기 때문입니다. 이 글은 Gluon이 무엇을 노출하는지, BlockedLayout이 실제로 무엇을 뜻하는
2026-07-16 · 33 분 읽기 #gpu#triton#kernel#compiler#performancesched_ext 서브 스케줄러 — 커널 7.1에 절반만 도착한 cgroup별 스케줄러
리눅스 7.1(2026년 6월 14일)에 schedext의 cgroup 서브 스케줄러 지원이 들어갔습니다. 목표는 분명합니다 — cgroup 트리 어디에나 BPF 스케줄러를 붙이고, 부모 스케줄러가 자식들에게 CPU를 동적으로 배분해서, 컨테이너나 애플리케이션 도메인마다 자기 워크로드에 맞는 스케줄링 정책을 돌리는 것입니다. 동기는 cpuset 하드 파티셔닝이 주지 못하는 유연성이고, 멀티테
2026-07-16 · 24 분 읽기 #linux#kernel#scheduler#cgroups#bpfeBPF Verifier는 멈춘 곳만 알려준다 — 거부 235건을 재현해 측정한 진단 격차
eBPF를 써 본 사람이라면 누구나 겪는 일이 있습니다. Verifier가 프로그램을 거부하는데, 에러 메시지는 아무 잘못도 없어 보이는 줄을 가리킵니다. 2026년 7월에 나온 논문 하나가 이 답답함을 처음으로 수치화했습니다. 저자들은 Stack Overflow, GitHub 이슈, 수정 커밋, 커널 셀프테스트에서 후보 936건을 모아 커널 6.15.11 + clang 18이라는 고정 툴체
2026-07-16 · 33 분 읽기 #ebpf#linux#kernel#debugging#developer-experiencebcachefs가 이레이저 코딩의 experimental 딱지를 뗀 이야기 — 그리고 그게 무슨 뜻인지
2025년 9월 29일 리누스 토발즈는 커밋 하나로 커널에서 bcachefs 코드 117,483줄을 지웠고, bcachefs는 ZFS처럼 DKMS 모듈로 배포되는 파일시스템이 됐습니다. 드라마는 그것으로 끝났고, 2026년의 진짜 뉴스는 따로 있습니다 — bcachefs의 이레이저 코딩(RAID5/6에 해당하는 기능)이 experimental 딱지를 뗐습니다. 그런데 이 사실을 옮긴 문장 하
2026-07-16 · 29 분 읽기 #linux#kernel#filesystem#bcachefs#storage저지연 트레이딩 시스템을 위한 커널 튜닝 — 마이크로초와의 전쟁
HFT와 마켓메이킹처럼 마이크로초가 손익을 가르는 도메인에서 리눅스 커널을 어떻게 튜닝하는지 정리합니다. CPU 격리, NUMA 정렬, 커널 바이패스 스펙트럼, C-state 고정, PTP 시간 동기화, 그리고 꼬리지연 측정 방법론까지 실전 레시피 중심으로 다룹니다.
2026-06-13 · 31 분 읽기 #linux#kernel#low-latency#trading#performance컨테이너는 거짓말이다 — cgroups와 네임스페이스로 본 커널의 진실
컨테이너라는 커널 객체는 존재하지 않습니다. 네임스페이스 7종 투어, cgroup v2 파일 인터페이스 직접 조작, unshare와 pivotroot로 만드는 미니 컨테이너, overlayfs, capabilities, seccomp까지 — 컨테이너를 이루는 커널 기능을 하나씩 해부하고 쿠버네티스와의 연결, 디버깅 기법을 정리합니다.
2026-06-13 · 27 분 읽기 #linux#kernel#container#cgroups#namespaceseBPF 기초 완전 정복 — 프로그램, 맵, 그리고 Verifier의 세계
eBPF가 리눅스 커널 프로그래밍을 어떻게 바꿨는지 처음부터 끝까지 정리합니다. 프로그램 타입과 맵, Verifier의 동작 원리를 이해하고, libbpf와 CO-RE 기반의 첫 eBPF 프로그램을 직접 만들어 봅니다.
2026-06-13 · 33 분 읽기 #ebpf#linux#kernel#libbpf#observability패킷의 여정 — 리눅스 커널 네트워킹 스택 따라가기
NIC에 도착한 패킷이 DMA, 링버퍼, NAPI, IP/TCP 계층을 거쳐 애플리케이션 소켓까지 도달하는 전체 경로를 해부합니다. RSS/RPS/RFS 멀티코어 분산, GRO/GSO/TSO 오프로드, XDP, 소켓 버퍼 튜닝과 실전 성능 진단 시나리오까지 다룹니다.
2026-06-13 · 33 분 읽기 #linux#kernel#networking#tcp#xdp리눅스 CPU 스케줄러의 진화 — CFS에서 EEVDF까지
vruntime과 레드블랙 트리로 공정성을 구현한 CFS의 원리부터, 지연 민감 워크로드의 한계를 해결하기 위해 커널 6.6에서 기본이 된 EEVDF까지 스케줄러의 진화를 따라갑니다. cgroup CPU 제어와 쿠버네티스 스로틀링 진단, 저지연 워크로드 격리 레시피, 테일 레이턴시 튜닝 시나리오를 다룹니다.
2026-06-13 · 30 분 읽기 #linux#kernel#scheduler#cfs#eevdf리눅스 메모리 계층 해킹 — swap, zram, 그리고 VRAM을 스왑으로 쓰는 역발상
GPU의 VRAM을 NBD 블록 디바이스로 노출해 스왑으로 쓰는 nbd-vram 프로젝트가 Hacker News에서 화제가 됐습니다. 이를 출발점으로 리눅스 메모리 관리의 기초, swappiness와 zram/zswap 튜닝, OOM 대응, cgroup v2 메모리 제어, 컨테이너 환경의 함정까지 실전 중심으로 정리합니다.
2026-06-12 · 28 분 읽기 #linux#memory#swap#zram#kerneleBPF가 관측성을 삼키고 있다
커널 안에서 샌드박스된 프로그램을 안전하게 돌린다는 아이디어가 관측성 판을 뒤집고 있습니다. kprobe·uprobe·tracepoint·XDP로 어디에나 후크를 걸고, 검증기가 안전을 보장하며, 애플리케이션 코드를 한 줄도 고치지 않고 추적합니다. Cilium·Falco·Pixie·bpftrace가 왜 사이드카를 대체하는지, 그리고 eBPF가 못 하는 것은 무엇인지 실무 관점에서 정리합니다
2026-06-11 · 26 분 읽기 #ebpf#observability#linux#kernelLinux 스케줄러 완전 가이드 2025: CFS, EEVDF, Real-Time, Deadline — 프로세스는 어떻게 CPU를 나눠 쓰는가
당신의 컴퓨터에는 수백 개의 프로세스가 동시에 돌고 있다. Linux CFS, 2023년 도입된 EEVDF, real-time/deadline 클래스, cgroup 스케줄링까지 — 프로세스 스케줄링의 모든 것을 720줄로 완전 분석한다.
2026-04-15 · 43 분 읽기 #linux#scheduler#cfs#eevdf#realtime