Ubuntu 24.04 generic 커널은 CONFIG_DAMON이 꺼져 있어 /sys/kernel/mm/damon/admin/이 없다. 실제로 쓰려면 커널을 직접 빌드해야 한다. 현재 설정 기반으로 DAMON 옵션만 추가해 빌드·설치·재부팅하고 동작까지 확인한 기록이다.
준비
$ sudo apt-get install -y build-essential libncurses-dev bison flex \
libssl-dev libelf-dev bc dwarves rsync fakeroot debhelper libdw-dev
$ mkdir -p ~/kbuild && cd ~/kbuild
$ curl -O https://cdn.kernel.org/pub/linux/kernel/v7.x/linux-7.1.4.tar.xz
$ tar xf linux-7.1.4.tar.xz && cd linux-7.1.4
설정 — 지금 커널 기반으로 DAMON만 추가
$ cp /boot/config-$(uname -r) .config
$ yes '' | make localmodconfig
./scripts/config --enable CONFIG_DAMON \
--enable CONFIG_DAMON_VADDR \
--enable CONFIG_DAMON_PADDR \
--enable CONFIG_DAMON_SYSFS \
--enable CONFIG_DAMON_RECLAIM \
--enable CONFIG_DAMON_LRU_SORT
yes '' | make olddefconfig
grep -E '^CONFIG_DAMON' .configCONFIG_DAMON=y
CONFIG_DAMON_VADDR=y
CONFIG_DAMON_PADDR=y
CONFIG_DAMON_SYSFS=y
CONFIG_DAMON_RECLAIM=y
CONFIG_DAMON_LRU_SORT=y
빌드 — 실제로 만난 에러
배포판 설정을 그대로 썼더니 vanilla 소스에 없는 Ubuntu 전용 경로/도구에서 두 번 막혔다.
| 에러 | 원인 | 조치 |
|---|---|---|
No rule to make target 'debian/canonical-revoked-certs.pem' | 배포판 전용 인증서 폐기 목록 경로가 설정에 남아있음(vanilla 소스엔 없음) | ./scripts/config --set-str CONFIG_SYSTEM_REVOCATION_KEYS '' |
gawk: not found (modules.builtin.ranges 생성 실패) | 기본 mawk만 있고 GNU awk 없음 | sudo apt-get install -y gawk |
$ make -j$(nproc) bindeb-pkg LOCALVERSION=-damon
...
dpkg-deb: building package 'linux-image-7.1.4-damon' in '../linux-image-7.1.4-damon_7.1.4-4_amd64.deb'.
$ ls -la ~/kbuild/*.deb
-rw-r--r-- 1 noble noble 19673230 linux-image-7.1.4-damon_7.1.4-4_amd64.deb
6코어(Ryzen 5 7600) 기준 처음부터 빌드해도 30분 안팎.
설치와 재부팅
$ sudo dpkg -i ~/kbuild/linux-image-7.1.4-damon_7.1.4-4_amd64.deb
SSH로만 접속 가능한 원격 머신이면 grub-reboot로 이번 한 번만 새 커널로 시도하고, 실패해도 다음 재부팅부터 자동으로 기존 커널로 돌아가게 안전장치를 건다.
$ sudo grep -n "menuentry '" /boot/grub/grub.cfg
menuentry 'Ubuntu, with Linux 7.1.4-damon' ... 'gnulinux-7.1.4-damon-advanced-d651c383-...'
$ sudo grub-reboot 'gnulinux-7.1.4-damon-advanced-d651c383-...'
$ sudo reboot
$ uname -a
Linux noble 7.1.4-damon #4 SMP PREEMPT_DYNAMIC ... x86_64 GNU/Linux
$ ls /sys/kernel/mm/damon/admin/
kdamonds
정상 부팅 확인 후 grub-set-default나 update-grub으로 이 커널을 정식 기본값으로 바꾼다.
실제로 hot/cold 구분해보기
256KB는 계속 건드리고 48MB는 한 번 할당 후 방치하는 워크로드로 확인.
import time
cold = bytearray(48 * 1024 * 1024) # 48MB, 이후 손대지 않음 -> cold
hot = bytearray(256 * 1024) # 256KB, 계속 건드림 -> hot
while True:
for j in range(0, len(hot), 4096):
hot[j] = (hot[j] + 1) % 256# DAMON 켜고 action=stat scheme으로 tried_regions 확인
$ echo 1 > nr_schemes; echo stat > 0/action
$ echo commit > .../kdamonds/0/state
$ echo update_schemes_tried_regions > .../kdamonds/0/state
| 영역 | 크기 | nr_accesses | age |
|---|---|---|---|
| hot 버퍼 주변 (11.75~11.83MB) | ~8KB 단위로 잘게 쪼개짐 | 9~19 | 0 |
| cold 버퍼 포함 구간 | 수십 MB 단위 | 0 | 30~34 |
hot 영역만 접근 횟수가 찍히고 age가 0(방금 갱신)이라는 점, region이 hot 주변에서 잘게 쪼개진 점 모두 실제 접근 패턴과 일치했다.
주의사항
CONFIG_DAMON_STAT_ENABLED_DEFAULT=y면 이미[kdamond.0]가 떠 있어 sysfs로 새로on하면Device or resource busy.echo N > /sys/module/damon_stat/parameters/enabled로 끄고 재시도.- 원격 재부팅은 항상
grub-reboot로 안전장치. 콘솔/IPMI 없는 환경이면 필수. localmodconfig는 지금 로드된 모듈만 남긴다 — 빌드 당시 안 꽂혀 있던 하드웨어 드라이버는 빠질 수 있음.- Secure Boot 켜진 환경이면 서명 없는 커널은 부팅 거부될 수 있음. 끄거나 MOK로 직접 서명.
마무리
현재 설정을 localmodconfig로 정리하고 DAMON 옵션만 추가하는 방식이 처음부터 새로 설정하는 것보다 안전하고 빠르다. 배포판 전용 경로/도구 문제만 해결하면 되고, 원격 재부팅에는 항상 안전장치를 걸 것.