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

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

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

EROFS 이미지 다루기 — 생성·검사·추출과 재현 가능한 빌드

읽기 전용 이미지 포맷으로 EROFS를 쓰기로 정하고 나면 그다음 벽은 도구다. SquashFS가 mksquashfs/unsquashfs 두 개로 끝나는 것과 달리 EROFS는 생성·조회·검사·마운트가 네 개 명령으로 나뉘어 있고, 그중 하나는 아예 별도 패키지다.…

Continue ReadingEROFS 이미지 다루기 — 생성·검사·추출과 재현 가능한 빌드

EROFS와 SquashFS 비교 — 압축률과 랜덤 읽기 I/O 증폭 실측

읽기 전용 루트 이미지나 컨테이너 베이스 레이어를 만들 때는 관성적으로 mksquashfs를 쓰게 되는데, 안드로이드와 컨테이너 런타임 쪽에서는 이미 EROFS로 넘어간 지 오래다. 그런데 막상 같은 디렉터리로 두 이미지를 만들어보면 EROFS…

Continue ReadingEROFS와 SquashFS 비교 — 압축률과 랜덤 읽기 I/O 증폭 실측

BCC

커널 내부에서 어떤 프로세스가 어떤 파일을 열고, 어떤 시스템 콜을 얼마나 호출하는지 확인하고 싶을 때 strace는 대상 프로세스 하나에 붙어야 하고 오버헤드도 커서 운영 중인 서버에서 시스템 전체를 훑어보기엔 부담스럽다.…

Continue ReadingBCC

ss로 패킷 드롭·재전송 진단하기

애플리케이션 처리량이 갑자기 떨어졌는데 CPU/메모리는 멀쩡하다면 네트워크 재전송을 의심해봐야 한다. 그런데 netstat -s나 nstat은 시스템 전체 누적 카운터만 보여줘서 정작 어떤 연결이 문제인지는 짚어주지 못한다. 이 글에서는 ss -i로 개별…

Continue Readingss로 패킷 드롭·재전송 진단하기

메모리 단편화와 compaction — /proc/buddyinfo로 확인하기

메모리는 넉넉히 남아 있는데 huge page나 큰 DMA 버퍼 할당이 실패하는 경우가 있다. 총 여유 메모리량과 별개로, 그 여유분이 4KB 단위로 잘게 흩어져 있으면 연속된 큰 블록이 필요한 할당은 실패한다.…

Continue Reading메모리 단편화와 compaction — /proc/buddyinfo로 확인하기

페이지 회수(page reclaim)와 kswapd 동작 원리

메모리 사용량이 갑자기 늘면 시스템이 느려지는데 free -h로 봐도 buff/cache가 넉넉해 보여 원인을 못 짚을 때가 있다. 그 여유분을 실제로 회수해 할당 가능하게 만드는 과정이 kswapd의 페이지 회수(reclaim)인데, 회수 속도가…

Continue Reading페이지 회수(page reclaim)와 kswapd 동작 원리