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 동작 원리

리눅스 OOM Killer 동작 원리와 oom_score_adj 튜닝

메모리가 정말 바닥나면 커널은 프로세스 하나를 희생시켜서라도 시스템 전체가 멈추는 걸 막는다. 문제는 OOM Killer가 고르는 희생양이 항상 원하는 프로세스가 아니라는 점이다 — 메모리를 많이 쓴다는 이유만으로 DB가 먼저 죽고,…

Continue Reading리눅스 OOM Killer 동작 원리와 oom_score_adj 튜닝