← Ethernet 상세 목차DUJINLABS.COM

Hardware · Ethernet detailed manual 05 · Linux v6.18.37

5. RX descriptor에서 page_pool과 skb까지 buffer 수명을 추적한다

driver가 빈 buffer를 map해 RX ring에 공급하고, device가 frame을 기록한 뒤 NAPI가 length/status를 검사해 skb로 넘기고 새 buffer로 refill하는 과정을 분리합니다.

상세 표
2
검증 행
16
절차
4 checkpoints
기준
Synopsys DWMAC · Linux NAPI · Linux v6.18.37

CHAPTER 05

5. RX descriptor에서 page_pool과 skb까지 buffer 수명을 추적한다

driver가 빈 buffer를 map해 RX ring에 공급하고, device가 frame을 기록한 뒤 NAPI가 length/status를 검사해 skb로 넘기고 새 buffer로 refill하는 과정을 분리합니다.

refill 선행

RX는 packet이 오기 전에 충분한 buffer가 device ownership으로 준비돼야 합니다. refill 실패는 이후 DMA overflow로 나타날 수 있습니다.

multi-buffer frame

jumbo 또는 작은 buffer 설정에서는 한 frame이 여러 descriptor를 차지합니다. first/last와 누적 length가 필요합니다.

page_pool

page recycling과 DMA mapping 비용을 줄이지만 page가 skb, XDP 또는 ring 중 누구에게 있는지 lifetime을 엄격히 관리합니다.

metadata

checksum, VLAN, RSS hash, timestamp와 error status를 skb에 옮길 때 descriptor format에 맞는 field를 사용합니다.

레지스터와 관측값을 함께 읽는 표

항목소유 블록설정 또는 의미정상 증거실패 해석
RX ring base/lengthDMA channelbuffer 공급 ring모든 entry에 유효 DMA address빈/잘못된 ring
RX tail/currentDMA channelrefill 공개와 consume 위치부하에서 함께 진행tail update 누락
RX descriptor statusdescriptorOWN, first/last, length, errorCPU 회수 시 일관된 framepartial/multi-buffer 조립
DMA missed/overflowDMA channelbuffer 부족/FIFO overflow정상 부하에서 증가 없음refill/NAPI/MTL 병목
MAC RX countersMACgood/error/filter framedescriptor count와 대응DMA 전 drop 분리
page_pool statspage_pool/driveralloc/recycle/releasesteady state에서 재활용page leak 또는 premature recycle

증상에서 첫 실패 경계를 찾는 표

관측 증상직전 통과 증거우선 확인반증 시험판정
MAC good, descriptor 없음MAC filter 통과RX enable/ring/tailDMA channel status와 base readbackMAC-DMA 경계
처음만 받고 멈춤초기 ring 정상refill과 tail updatefree entry 수 tracebuffer 공급 경계
jumbo만 dropMTU frame 정상multi-descriptor와 buffer sizeMTU/BUF_SIZE 조합 sweepframe 조립
checksum error 표시만 이상payload capture 정상descriptor checksum field decodeRX checksum off 비교metadata 해석
page leakpacket 전달 정상skb release/page_pool recycle장시간 page count와 ref tracebuffer lifetime
non-coherent에서 payload 깨짐length/status 정상DMA sync for CPUcache maintenance instrumentationcache ownership
그림 1. 5. RX descriptor에서 page_pool과 skb까지 buffer 수명을 추적한다의 실행 순서왼쪽에서 오른쪽으로 실제 소유권과 관찰 지점이 이동합니다.
01 page allocate/map
02 RX descriptor refill
03 OWN+tail
04 frame DMA
05 OWN clear/status
06 NAPI inspect
07 skb/XDP
08 page recycle 또는 stack

실제 검증 절차

순서실행남길 증거판정 목적
1ring 초기화 후 모든 buffer DMA address와 OWN을 검사합니다.refill completeness입력 조건 확인
2frame sequence와 descriptor first/last/length를 연결합니다.frame 조립표multi-buffer 검증
3MAC good, DMA complete, netdev RX를 같은 packet 수로 비교합니다.counter ladderdrop 경계 찾기
4장시간 부하 후 page_pool inflight/recycle과 memory 사용량을 확인합니다.steady-state 수명leak 검출

주의RX descriptor가 CPU ownership으로 돌아왔어도 streaming DMA buffer는 CPU 접근 전 sync가 필요할 수 있습니다.

공개적으로 다시 확인할 수 있는 자료

공개되지 않은 vendor register나 integration별 offset을 추측해서 채우지 않았습니다. 아래 제조사 자료, architecture 문서와 Linux v6.18.37 원본에서 다시 확인할 수 있는 범위만 사용했습니다.

Linux stmmac driver

Synopsys GMAC/GMAC4/XGMAC, descriptor, NAPI, PTP와 offload 공개 설명

Linux NAPI

schedule, poll budget, completion과 IRQ 재활성화 계약