← Ethernet 상세 목차DUJINLABS.COM

Hardware · Ethernet detailed manual 04 · Linux v6.18.37

4. ndo_start_xmit에서 TX completion과 BQL까지 추적한다

skb queue 선택, descriptor 수 계산, DMA mapping, checksum/TSO/context 설정, OWN publish, tail write, completion reclaim과 netdev queue wake를 packet ID 하나로 연결합니다.

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

CHAPTER 04

4. ndo_start_xmit에서 TX completion과 BQL까지 추적한다

skb queue 선택, descriptor 수 계산, DMA mapping, checksum/TSO/context 설정, OWN publish, tail write, completion reclaim과 netdev queue wake를 packet ID 하나로 연결합니다.

queue selection

skb queue_mapping이 DMA channel/MTL queue로 어떻게 바뀌는지 확인합니다. traffic class와 실제 hardware queue 번호가 다를 수 있습니다.

stop/wake

남은 descriptor가 부족하면 subqueue를 멈추고 completion reclaim 뒤 깨웁니다. stop 전 재검사와 memory ordering이 중요합니다.

BQL

전송한 byte와 completion byte를 accounting해 software queue를 제한합니다. descriptor free count와 별도 제어입니다.

TX timestamp

hardware timestamp 요청 packet은 completion과 timestamp availability 수명이 추가됩니다.

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

항목소유 블록설정 또는 의미정상 증거실패 해석
TX ring base/lengthDMA channelqueue별 descriptor ringsoftware queue와 일치channel mapping 오류
TX tail/currentDMA channelproducer 공개와 fetch 위치traffic에 따라 진행doorbell/descriptor fetch 정지
TX descriptor statusdescriptorOWN, error, last segmentcompletion 후 OWN clear/error 0underflow/jabber/bus error
MTL TX queue statusMTLFIFO fill, read/write statetraffic과 함께 변동MAC backpressure/underflow
DMA interruptDMA channelTX complete/abnormalcoalescing 정책대로 발생mask 또는 status ack
BQL countersnetdev coresent/completed bytes장기적으로 수렴completion accounting 누락

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

관측 증상직전 통과 증거우선 확인반증 시험판정
xmit 호출, tail 불변qdisc dequeue 성공mapping/descriptor 부족xmit return과 ring index tracedriver enqueue 경계
tail 진행, current 고정descriptor OWN setDMA fetch/base/busDMA status와 IOMMU faultdevice fetch 경계
current 진행, wire 없음DMA가 descriptor 소비MTL/MAC Tx enableFIFO status와 MAC countersDMA-MAC 경계
wire 전송, completion 없음상대 capture 성공TX status/IRQ maskpoll reclaim 강제와 status readcompletion 전달 경계
queue 영구 stopdescriptor가 실제 freewake/BQL accountingstop/wake tracequeue lifecycle
TSO에서만 packet 오류normal skb 성공context descriptor/MSS/checksumTSO off 비교offload descriptor
그림 1. 4. ndo_start_xmit에서 TX completion과 BQL까지 추적한다의 실행 순서왼쪽에서 오른쪽으로 실제 소유권과 관찰 지점이 이동합니다.
01 qdisc
02 ndo_start_xmit
03 queue select
04 DMA map
05 descriptor/context
06 OWN+tail
07 wire
08 TX IRQ/NAPI
09 reclaim+BQL

실제 검증 절차

순서실행남길 증거판정 목적
1skb sequence와 queue_mapping, descriptor start/count를 기록합니다.packet→ring ledgerqueue 경로 고정
2tail/current/MTL status를 TX 직전과 timeout에서 비교합니다.처음 멈춘 blockDMA와 MAC 분리
3completion에서 unmap, skb free, BQL complete 순서를 trace합니다.동일 packet ID수명/회계 검증
4linear, fragmented, checksum, TSO packet을 따로 시험합니다.형식별 pass/faildescriptor path 격리

주의`NETDEV_TX_BUSY`를 반환한 경로에서 skb ownership과 mapping을 이미 소비했는지 반드시 확인합니다. 잘못된 ownership은 재전송 시 이중 해제로 이어집니다.

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

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