Linux Kernel

seccomp-bpf로 리눅스 커널 시스템 콜 화이트리스트 필터링하기

컨테이너 런타임이나 브라우저 샌드박스가 "이 프로세스는 open, socket 같은 시스템 콜을 못 쓰게 막는다"고 할 때, 그 뒤에는 대부분 seccomp-bpf가 있다. Docker나 systemd의 SystemCallFilter=도 결국 libseccomp을 감싼 것일 뿐, 커널이…

Continue Readingseccomp-bpf로 리눅스 커널 시스템 콜 화이트리스트 필터링하기

리눅스 스케줄러 자료구조로 보는 CFS/EEVDF: sched_entity와 cfs_rq

리눅스 6.6부터 CFS를 대체한 EEVDF 스케줄러의 vruntime/eligible time/deadline 같은 개념은 이 블로그의 이전 글에서 다뤘다. 이 글은 그 개념이 실제로 어떤 구조체와 함수로 구현되어 있는지, kernel/sched/fair.c(6.18 기준) 소스를 직접 따라가며…

Continue Reading리눅스 스케줄러 자료구조로 보는 CFS/EEVDF: sched_entity와 cfs_rq

리눅스 커널 futex로 유저스페이스 락 직접 구현하기

pthread_mutex 하나로도 충분히 락을 걸 수 있는데 왜 futex를 직접 만져야 할까. 사실 glibc의 pthread_mutex_lock 자체가 내부적으로 futex(2) syscall 위에 구현되어 있다 — 경쟁이 없을 때는 유저스페이스의 atomic CAS(compare-and-swap) 한…

Continue Reading리눅스 커널 futex로 유저스페이스 락 직접 구현하기

리눅스 커널 DAMON으로 메모리 접근 패턴 모니터링하기

메모리 회수는 LRU 리스트로 hot/cold 페이지를 구분해야 하는데, page table의 accessed bit를 주기적으로 스캔하는 전통적 방식은 메모리가 커질수록 오버헤드가 커진다. DAMON(Data Access MONitor)은 리눅스 5.15부터 커널에 들어온 범용 데이터 접근…

Continue Reading리눅스 커널 DAMON으로 메모리 접근 패턴 모니터링하기

Ubuntu에서 커널을 직접 빌드해 DAMON 활성화하기

Ubuntu 24.04 generic 커널은 CONFIG_DAMON이 꺼져 있어 /sys/kernel/mm/damon/admin/이 없다. 실제로 쓰려면 커널을 직접 빌드해야 한다. 현재 설정 기반으로 DAMON 옵션만 추가해 빌드·설치·재부팅하고 동작까지 확인한 기록이다. 준비 $ sudo apt-get install…

Continue ReadingUbuntu에서 커널을 직접 빌드해 DAMON 활성화하기

리눅스 커널에서 scatter-gather DMA 이해하기

디바이스에 넘길 버퍼가 물리적으로 연속되어 있다는 보장은 없다. vmalloc으로 받은 큰 버퍼는 물리 페이지가 여기저기 흩어져 있고, 네트워크 패킷처럼 여러 조각(헤더+페이로드)을 한 번의 전송으로 묶어야 하는 경우도 흔하다. scatter-gather DMA는…

Continue Reading리눅스 커널에서 scatter-gather DMA 이해하기

pahole과 BTF로 구조체 메모리 레이아웃 확인하기 — 패딩부터 커널 라이브 구조체까지

구조체 필드 순서가 메모리 낭비와 캐시 효율에 영향을 준다는 건 다들 안다. 문제는 "그래서 지금 이 구조체가 얼마나 낭비하고 있는지"를 눈으로 확인하기가 쉽지 않다는 것이다. pahole은 DWARF 디버그 정보나 커널의…

Continue Readingpahole과 BTF로 구조체 메모리 레이아웃 확인하기 — 패딩부터 커널 라이브 구조체까지

리누스 토르발스 “리눅스는 반AI 프로젝트 아니다” — 이미 시행 중인 Assisted-by 태그 정책까지

2024년 10월만 해도 리누스 토르발스는 AI 코딩 도구를 두고 "90%는 마케팅 과장"이라며 무시하겠다고 말했습니다. 2026년 7월 15일, 그는 정반대에 가까운 어조로 리눅스 커널 메일링 리스트에 이렇게 썼습니다. "Linux is not…

Continue Reading리누스 토르발스 “리눅스는 반AI 프로젝트 아니다” — 이미 시행 중인 Assisted-by 태그 정책까지

RCU(Read-Copy-Update) 기초 — rcu_read_lock부터 synchronize_rcu까지 실제로 확인하기

라우팅 테이블이나 설정 캐시처럼 읽기는 압도적으로 많고 쓰기는 어쩌다 한 번인 자료구조에 일반 락(mutex/spinlock)을 쓰면, 정작 서로 방해할 일이 없는 리더끼리도 락 때문에 경합한다. RCU(Read-Copy-Update)는 리더 쪽을 아예 락-프리로 만들어버리는…

Continue ReadingRCU(Read-Copy-Update) 기초 — rcu_read_lock부터 synchronize_rcu까지 실제로 확인하기

Network Block Device 사용법

로컬 디스크가 부족하거나, diskless 클라이언트를 원격 스토리지로 부팅해야 하거나, 원격에 있는 이미지 파일을 로컬 블록 디바이스처럼 다루고 싶을 때가 있다. iSCSI가 이런 용도의 표준이지만 타깃 설정이 상대적으로 번거롭다. NBD(Network Block…

Continue ReadingNetwork Block Device 사용법