Yocto 빌드에서 특정 패키지를 포함/제외하는 방법

Yocto로 이미지를 만들다 보면 패키지 하나를 넣거나 빼야 할 일이 계속 생긴다. 그런데 local.conf에 IMAGE_INSTALL += "strace"라고 적어도 이미지에 strace가 들어가지 않는다. 이미지 레시피가 IMAGE_INSTALL을 다시 할당해버리기 때문인데, 이처럼 변수마다…

Continue ReadingYocto 빌드에서 특정 패키지를 포함/제외하는 방법

[Linux Kernel] ftrace event tracing — 필터·트리거·히스토그램으로 좁혀 보기

커널이 제공하는 트레이스 이벤트는 Ubuntu 24.04 기준 1789개다. 어떤 이벤트를 봐야 할지 모르겠다고 events/enable에 1을 써버리면 1초 만에 수십만 건이 링 버퍼에서 밀려나 사라지고, 정작 보려던 이벤트도 그 안에 묻힌다.…

Continue Reading[Linux Kernel] ftrace event tracing — 필터·트리거·히스토그램으로 좁혀 보기

tcmalloc 사용법

스레드를 늘렸는데 처리량이 비례해서 오르지 않고, 프로파일을 떠보면 _int_malloc이나 __lll_lock_wait 같은 함수가 상위에 올라오는 경우가 있다. glibc의 malloc은 아레나(arena) 단위로 락을 잡기 때문에, 짧은 객체를 자주 할당·해제하는 코드에서는 이 락이…

Continue Readingtcmalloc 사용법

Bash 스크립트 병렬 처리 — xargs -P와 GNU parallel 실측 비교

로그 압축, 이미지 변환, 체크섬 검증처럼 파일 수백 개를 도는 배치 스크립트를 for 루프로 짜면 코어가 6개든 32개든 하나만 쓴다. &로 전부 백그라운드에 던지면 이번엔 수백 개 프로세스가 한꺼번에 떠…

Continue ReadingBash 스크립트 병렬 처리 — xargs -P와 GNU parallel 실측 비교

systemd-nspawn으로 경량 리눅스 컨테이너 직접 만들기

패키지 설치 스크립트를 깨끗한 배포판에서 검증하거나, systemd 유닛이 여러 개 도는 환경을 통째로 재현해야 할 때가 있다. 도커는 컨테이너당 프로세스 하나를 전제로 설계돼 있어 systemd를 PID 1로 올리려면 우회가 필요하고,…

Continue Readingsystemd-nspawn으로 경량 리눅스 컨테이너 직접 만들기

Ubuntu 24.04에서 nftables로 방화벽 규칙 직접 작성하기

Ubuntu에서 방화벽을 만질 일이 생기면 대개 ufw allow 22 한 줄로 끝난다. 그런데 포트 하나를 조건부로 열거나, ICMP 유입량을 제한하거나, 허용 포트 목록을 서비스 재시작 없이 갱신하려고 하면 ufw의 추상화로는…

Continue ReadingUbuntu 24.04에서 nftables로 방화벽 규칙 직접 작성하기

Python netlink 소켓으로 커널 이벤트 실시간 수신하기

인터페이스가 언제 올라오고 IP가 언제 바뀌는지 감시해야 할 때, 흔히 ip monitor를 subprocess로 띄우고 출력을 파싱한다. 텍스트 포맷이 배포판마다 조금씩 달라 깨지기 쉽고, 1초마다 ip addr를 폴링하는 방식은 그 사이에…

Continue ReadingPython netlink 소켓으로 커널 이벤트 실시간 수신하기

core dump 분석으로 크래시 원인 파악하기

프로덕션에서 프로세스가 Segmentation fault로 죽었는데 로그에는 아무것도 안 남았다. 재현도 안 되고, 붙어 있던 디버거도 없다. 이럴 때 유일한 단서가 코어 덤프(core dump)다. 그런데 Ubuntu 24.04를 기본 설정 그대로 쓰면…

Continue Readingcore dump 분석으로 크래시 원인 파악하기