QEMU 공유 파일시스템 virtiofs vs virtio-9p — 설정과 실측 비교
게스트에 소스를 올려 빌드하거나 호스트가 만든 산출물을 게스트에서 바로 읽으려면 디스크 이미지에 복사하는 것보다 호스트 디렉터리를 그대로 공유하는 쪽이 편하다. QEMU에는 이걸 하는 방법이 두 가지 있다. 오래된 virtio-9p(-virtfs)와, FUSE…
게스트에 소스를 올려 빌드하거나 호스트가 만든 산출물을 게스트에서 바로 읽으려면 디스크 이미지에 복사하는 것보다 호스트 디렉터리를 그대로 공유하는 쪽이 편하다. QEMU에는 이걸 하는 방법이 두 가지 있다. 오래된 virtio-9p(-virtfs)와, FUSE…
정수 오버플로나 배열 범위 밖 접근처럼 C의 미정의 동작(undefined behavior)은 대개 크래시 없이 조용히 지나간다. 컴파일 경고로 잡히는 것은 상수로 접근하는 뻔한 경우뿐이고, 인덱스나 시프트 값이 런타임에 결정되면 경고가 나오지…
-O0에서 잘 돌던 코드가 -O2로 올리면 값이 달라진다. 디버거로 들여다보면 메모리에는 올바른 값이 들어 있는데 함수가 엉뚱한 값을 반환한다. 대개 범인은 두 가지다. 서로 다른 타입의 포인터로 같은 메모리를 건드리는…
빌드 스크립트를 돌리면 로그는 파일에 남겨야 하는데 진행 상황은 화면으로 봐야 하고, 두 명령의 출력을 비교하려면 임시 파일을 두 개 만들어야 하고, while read로 센 개수가 루프를 벗어나면 0으로 돌아와…
6편까지 1단계를 끝내면서 "파라미터를 더 주면 학습 손실은 계속 내려간다"는 것을 확인했다. 문제는 그렇게 줄인 손실이 새 데이터에서는 더 나빠질 수 있다는 점이다. 5편에서 은닉 뉴런을 늘렸을 때 평가 손실이…
메모리 문제는 대부분 사후에 발견된다. OOM으로 프로세스가 죽은 뒤 dmesg 한 줄이 남고, 그 전까지 누가 얼마나 잡아먹고 있었는지는 알 수 없다. /proc/meminfo나 /proc/slabinfo는 지금 이 순간의 스냅샷이라 어떤 작업이…
4편까지는 스케줄러가 하는 일을 밖에서 들여다보기만 했다. 스케줄링 정책 자체를 바꾸려면 kernel/sched/를 고쳐 커널을 다시 빌드하고 재부팅해야 했고, 정책 하나 시험하는 데 빌드 주기가 통째로 들어갔다. 커널 6.12에 정식 합류한…
CPU 사용률이 100%가 아닌데도 응답이 느린 서버가 있다. 태스크가 실행 가능(runnable) 상태로 런큐에서 기다린 시간, 즉 런큐 지연(run queue latency)이 원인인 경우가 많은데 top이나 vmstat에는 이 값이 나오지 않는다. /proc/PID/schedstat에…
같은 vfs_read()를 관측하더라도 BPF 프로그램을 붙일 수 있는 훅은 kprobe, fentry, tracepoint, raw tracepoint 등 여러 가지다. 훅마다 인자에 접근하는 방법, 커널 버전이 바뀔 때의 안정성, 이벤트당 비용이 다르다. 고빈도…
eBPF 프로그램은 이벤트 하나를 처리하고 끝나는 짧은 함수라서, 이벤트 사이에 상태를 유지하거나 결과를 유저 공간에 넘기려면 BPF 맵이 필요하다. 문제는 맵 종류가 30가지가 넘고, 잘못 고르면 카운트가 조용히 유실되거나 이벤트가…