CHAPTER 07
7. ethtool, loopback과 counter ladder로 PHY 문제를 재현한다
하나의 ping 대신 동일한 sequence 번호를 가진 frame을 보내 PHY, MAC, DMA와 userspace counter의 첫 감소 지점을 찾습니다. loopback 위치를 바꿔 송신과 수신 경계를 단계적으로 넓힙니다.
counter ladder
PHY symbol error, MAC CRC/good frame, DMA descriptor, netdev와 socket count는 서로 다른 drop 지점을 나타냅니다.
loopback 위치
MAC, PCS, PHY digital, PHY analog, external plug loopback은 포함하는 회로 범위가 다릅니다. 위치를 기록하지 않은 loopback 성공은 의미가 약합니다.
ethtool dump
`ethtool`, `-S`, `--phy-statistics`, `--show-eee`, `-m` 출력은 driver 지원 범위가 다릅니다. raw register와 교차 확인합니다.
재현 행렬
speed, duplex, cable, partner, temperature, cold/warm, EEE와 traffic direction을 한 번에 하나씩 바꿉니다.
레지스터와 관측값을 함께 읽는 표
| 항목 | 소유 블록 | 설정 또는 의미 | 정상 증거 | 실패 해석 |
|---|---|---|---|---|
| PHY basic/link | PHY | AN과 resolved tuple | 시험 조건과 일치 | 기본 link 조건 불일치 |
| PHY error counters | PHY PCS/PMA | symbol, receive, false carrier | 정상 기준 대비 증가 없음 | MDI/SI/clock 경계 |
| MAC MMC counters | MAC | good, CRC, alignment, length, pause | 보낸 frame와 방향별 일치 | MAC 전후 drop 위치 |
| DMA counters | DMA/driver | descriptor complete, overflow, missed | MAC good frame와 근접 | ring/FIFO 경계 |
| netdev stats | Linux | packets/bytes/errors/dropped | DMA 처리량과 일치 | driver/stack drop |
| socket/application | userspace | sequence와 latency | 손실 없이 최종 도착 | protocol/queue/application 경계 |
증상에서 첫 실패 경계를 찾는 표
| 관측 증상 | 직전 통과 증거 | 우선 확인 | 반증 시험 | 판정 |
|---|---|---|---|---|
| PHY symbol부터 증가 | TX stimulus 정상 | cable/magnetics/analog | internal PHY loopback과 external loopback 비교 | PHY 외부 또는 PMA |
| symbol 0, MAC CRC 증가 | PHY PCS 정상 | PHY-MAC interface timing | RGMII/SGMII loopback | MAC interface 경계 |
| MAC good, DMA 감소 | frame filter 통과 | descriptor/FIFO | ring dump와 overflow counter | DMA 경계 |
| DMA complete, netdev 감소 | descriptor CPU ownership | driver drop reason | NAPI trace와 skb allocation | driver/NAPI 경계 |
| netdev RX, socket 감소 | stack 진입 | routing/netfilter/socket queue | drop monitor와 packet trace | network stack/userspace |
| 장시간 후에만 실패 | 초기 모든 단계 통과 | counter wrap, thermal, EEE, ring wrap | 시간축과 환경 센서 동시 기록 | 누적/경계조건 문제 |
실제 검증 절차
| 순서 | 실행 | 남길 증거 | 판정 목적 |
|---|---|---|---|
| 1 | 시험 전 모든 가능한 counter를 raw/이름 두 형태로 저장합니다. | baseline snapshot | 증분 계산 기반 |
| 2 | 고정 개수의 sequence frame을 한 방향씩 전송합니다. | 송신 수와 시간 범위 | 양방향 혼입 방지 |
| 3 | 시험 후 counter delta를 한 행에 정렬합니다. | 첫 감소 지점 | 실패 경계 확정 |
| 4 | loopback 위치를 MAC→PCS→PHY→external 순서로 넓힙니다. | 위치별 pass/fail | 최소 실패 범위 식별 |
주의일부 통계 register는 read-to-clear이거나 폭이 작아 wrap됩니다. 수집 주기와 clear 동작을 기록하지 않으면 delta가 틀립니다.
공개적으로 다시 확인할 수 있는 자료
공개되지 않은 vendor register나 integration별 offset을 추측해서 채우지 않았습니다. 아래 제조사 자료, architecture 문서와 Linux v6.18.37 원본에서 다시 확인할 수 있는 범위만 사용했습니다.
Linux PHY Abstraction Layer
PHY 장치, MDIO, link 상태와 PHY driver의 공개 Linux 계약
Linux phylink
PHY, fixed-link, in-band PCS와 MAC callback의 관계
Linux Ethernet controller binding
phy-mode, phy-handle, fixed-link와 managed 속성
Linux v6.18.37 phy_device.c
PHY 장치 생성, attach, start/stop과 상태 갱신
Linux v6.18.37 phylink.c
link resolve, MAC config, link up/down 실행 경로
TI DP83867IR/CR datasheet
strap, RGMII/SGMII, extended register, clock, interrupt와 진단 기능
TI DP83867 RGMII timing budget
0.25ns 단계 internal delay와 setup/hold margin 계산 및 측정 절차
Linux DP83867 driver
DT 속성, RGMIIDCTL, FIFO, impedance, interrupt와 downshift 초기화
Linux RTL8211F driver
paged register, RGMII TX/RX delay, ALDPS, CLKOUT, EEE, WOL과 interrupt 처리
Microchip LAN8841 product and datasheet
RGMII, IEEE 1588v2, cable diagnostics와 제조사 데이터시트
Linux LAN8841 driver in micrel.c
KSZ9131 공통 초기화, LAN8841 errata, PTP, interrupt와 cable test 경로