← Ethernet 상세 목차DUJINLABS.COM

Hardware · Ethernet detailed manual 06 · Linux v6.18.37

6. DMA channel interrupt와 moderation을 raw status부터 읽는다

MAC common interrupt, DMA channel normal/abnormal interrupt, MTL과 safety status를 분리하고 ISR에서 무엇을 ack·mask한 뒤 어느 NAPI instance를 schedule하는지 queue별로 추적합니다.

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

CHAPTER 06

6. DMA channel interrupt와 moderation을 raw status부터 읽는다

MAC common interrupt, DMA channel normal/abnormal interrupt, MTL과 safety status를 분리하고 ISR에서 무엇을 ack·mask한 뒤 어느 NAPI instance를 schedule하는지 queue별로 추적합니다.

raw와 masked

raw status가 set돼도 mask가 꺼져 CPU IRQ는 오지 않을 수 있습니다. 반대로 shared line은 다른 source 때문에 handler가 실행될 수 있습니다.

ack semantics

W1C status는 읽은 snapshot을 기준으로 필요한 bit만 clear합니다. read-modify-write가 다른 event를 잃게 만들 수 있습니다.

moderation

frame count/timer, RX watchdog와 NAPI를 조합해 IRQ rate를 줄입니다. latency와 throughput tradeoff를 숫자로 봅니다.

queue별 IRQ

여러 channel이 vector를 공유하거나 각각 vector를 가질 수 있습니다. `/proc/interrupts` 한 줄을 queue 하나로 단정하지 않습니다.

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

항목소유 블록설정 또는 의미정상 증거실패 해석
DMA_CH_STATUSDMA channelnormal/abnormal summary와 sourcetraffic과 source bit 일치stale/W1C 처리 오류
DMA_CH_INT_ENDMA channelRX/TX/error mask운용 policy와 일치status 있으나 IRQ 없음
MAC_INT_STATUS/ENMACPMT, LPI, timestamp, PCSDMA와 별도 해석공통 IRQ source 혼동
RX watchdog/coalescingDMA/MACtimer/count thresholdIRQ/packet 비율이 설정과 대응너무 큰 latency 또는 IRQ storm
IRQ controller mappingGIC/APIC/PLIChwirq→virq→CPUaffinity와 counter 증가controller 전달 경계
NAPI stateLinuxscheduled/disabled와 IRQ maskschedule 뒤 mask, complete 뒤 unmasklost interrupt race

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

관측 증상직전 통과 증거우선 확인반증 시험판정
DMA status 있음, CPU IRQ 0device completion 확인mask와 interrupt controller routeINT_EN과 hwirq pending 비교device mask 또는 controller
IRQ storm, packet 적음IRQ route 정상W1C ack와 abnormal sourcestatus snapshot/clear traceack 또는 persistent fault
IRQ 1회 후 정지첫 NAPI 실행complete/unmask 순서IRQ mask와 ring pending 동시 capturelost interrupt race
latency spikepacket loss 없음coalescing timer/budgetmoderation 0과 단계별 비교정책 지연
한 queue만 IRQ 없음다른 channel 정상queue-vector mappingchannel status와 vector affinity 대조per-channel 설정
shared IRQ에서 오인handler 실행 확인실제 status source각 block raw status 저장다른 source가 IRQ를 발생
그림 1. 6. DMA channel interrupt와 moderation을 raw status부터 읽는다의 실행 순서왼쪽에서 오른쪽으로 실제 소유권과 관찰 지점이 이동합니다.
01 DMA completion
02 raw status
03 mask/summary
04 GIC/APIC/PLIC
05 ISR snapshot+ack
06 IRQ mask
07 NAPI schedule
08 poll complete
09 unmask

실제 검증 절차

순서실행남길 증거판정 목적
1queue별 raw status, enable과 Linux IRQ 번호 표를 만듭니다.channel→hwirq→virq ledger번호 공간 연결
2ISR 진입 때 raw/masked/ack 값을 한 번에 기록합니다.W1C 전 snapshotsource 보존
3packet rate를 올리며 IRQ/packet 비율과 p99 latency를 측정합니다.moderation curve정책 조정 근거
4NAPI complete 직전 ring pending과 IRQ mask를 저장합니다.race window 증거lost event 검증

주의W1C status를 디버거로 반복 읽고 쓰면 실제 handler의 ack 순서를 바꿀 수 있습니다. 안전한 snapshot helper를 사용합니다.

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

공개되지 않은 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 재활성화 계약