F2FS 오버프로비저닝·NAT 예약 최적화로 실사용 공간 확보하기
전에 F2FS 메타데이터 구조를 분석하면서 512MB 볼륨은 오버프로비저닝(GC 예약 공간) 비율이 자동으로 10%까지 붙는다는 걸 실측했다. "그럼 -o 값을 직접 낮게 지정하면 그만큼 실사용 공간이 늘어나겠지"라고 생각하기 쉬운데, 실제로 mkfs.f2fs…
전에 F2FS 메타데이터 구조를 분석하면서 512MB 볼륨은 오버프로비저닝(GC 예약 공간) 비율이 자동으로 10%까지 붙는다는 걸 실측했다. "그럼 -o 값을 직접 낮게 지정하면 그만큼 실사용 공간이 늘어나겠지"라고 생각하기 쉬운데, 실제로 mkfs.f2fs…
다섯 편에 걸쳐 Kconfig 옵션, 컴파일러 최적화, initramfs, VM 서브시스템을 하나씩 만졌다. 이번 편에서는 그 모든 변경을 한 커널에 합쳐 defconfig 베이스라인과 최종 비교를 하고, 시리즈 제목이기도 한 "메모리가 작은…
지금까지는 커널에 "무엇을 넣을지"(드라이버, 컴파일 옵션, initramfs)를 다뤘다. 이번 편은 각도를 바꿔 커널이 메모리 자체를 어떻게 다루는지 — Page Cache, Swap, Memory Reclaim, Watermark, MGLRU, 그리고 끌 수 있는 디버깅…
(3)편에서 Kconfig 옵션만으로 bzImage를 31% 줄였다. 여기서 한 걸음 더 들어가면 두 갈래 길이 남는다 — 컴파일러가 코드를 어떻게 만들어내는지(최적화 옵션, LTO)와, 애초에 커널 이미지에 무엇을 실어 보낼지(built-in vs module,…
(1)편에서 defconfig 커널의 베이스라인을 잡았고, (2)편에서는 initrd 사용 여부에 따른 트레이드오프를 확인했다. 두 편 모두 커널 설정 자체는 defconfig 그대로였다 — 실제로는 여기서부터가 진짜 경량화 작업이다. defconfig는 온갖 하드웨어를 지원하기…
지난 편에서는 initrd 없이 root=/dev/vda로 직접 부팅하는 구성으로 defconfig 커널의 베이스라인을 측정했다. 하지만 실제 임베디드/컨테이너 이미지에서는 initrd(정확히는 initramfs)를 쓰는 구성도 흔하다 — 루트 파일시스템 드라이버를 모듈로 빼두고 initramfs에서 필요한 것만…
컨테이너나 저사양 임베디드 보드처럼 메모리가 1GB 이하로 제한된 환경에서는 배포판 defconfig 커널조차 여유 공간을 상당히 잡아먹는다. 배포판 커널은 다양한 하드웨어를 지원하기 위해 수많은 드라이버와 서브시스템을 켜둔 상태라, 실제 타깃 환경에서는…
프로세스 이름 표시, 부모가 죽었을 때 자식 정리, 권한 상승 차단, 코어 덤프 생성 여부처럼 프로세스 자체의 커널 레벨 동작을 세밀하게 제어하고 싶을 때가 있다. 리눅스는 이런 잡다한 제어를 위해…
LXC(Linux Containers)는 리눅스 커널의 컨트롤 그룹(cgroup)과 네임스페이스만으로 격리된 실행 환경을 만드는 컨테이너 기술로, Docker가 내부적으로 쓰던 기반 기술이기도 하다. Docker처럼 이미지 레이어나 오케스트레이션 기능은 없지만, 그만큼 가볍고 VM에 가까운 방식으로…
KVM은 커널에 이미 내장된 모듈이라 별도 하이퍼바이저를 설치할 필요는 없지만, 막상 "이 머신에서 KVM이 되는지"를 확인하려고 하면 CPU 플래그, 커널 모듈, /dev/kvm 권한이 뒤섞여 헷갈리기 쉽다. 특히 클라우드 인스턴스나 중첩…