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가 틀립니다.
내부 패킷 생성기와 외부 계측기는 서로 다른 경로를 봅니다
위의 counter ladder를 다이 내부 시험에도 적용하려면 주입 위치, 되돌림 위치, 검사 위치를 먼저 구분합니다. 내장 생성기가 MAC 가까이에서 프레임을 만들고 검사기가 돌아온 결과를 대조하더라도, 외부 케이블이나 광모듈을 지나지 않는 경로라면 그 부품을 시험한 결과가 아닙니다. 생성기·검사기가 있다는 사실만으로 모든 내부 경합이나 오류를 검출한다고 주장할 수도 없습니다.
AMD PG138 v8.0의 Basic Pattern Generator는 두 모드를 구분합니다. loopback 모드에서는 RX FIFO의 데이터가 주소 교환 모듈을 거쳐 TX FIFO로 전달되고, generator 모드에서는 생성기가 TX 데이터를 제공하고 RX 데이터는 검사기가 확인합니다. 따라서 시험 기록에는 단순히 “루프백 통과”라고 쓰지 말고 어떤 모드·입력·비교 기준을 사용했는지 적습니다. 이 예시는 AXI 1G/2.5G Ethernet의 해당 블록 설명이며 다른 고속 MAC IP의 내부 구조를 증명하지 않습니다.
AMD AM017의 GTM 루프백처럼 near-end와 far-end, PCS와 PMA의 선택에 따라 되돌리는 위치도 달라집니다. PRBS는 의사 난수 비트열을 생성·비교하는 시험이며, 그 통과만으로 MAC 프레임의 길이·순서·내용과 소프트웨어 전달까지 검증했다고 보지 않습니다. 실제 선택한 경로와 클록·리셋 조건은 해당 트랜시버 문서로 확인합니다.
외부 트래픽 시험은 실제 전기·광 채널과 상대 장비를 포함할 수 있습니다. Keysight와 Credo의 2024년 공개 시연은 외부 AEC를 통한 1.6T Layer 2 송수신·계측을 설명합니다. 이를 근거로 “외부 장비로는 1.6T를 시험할 수 없다”고 일반화하지 않습니다. 이 제조사 시연은 특정 TeraBIST 구현의 실리콘 측정이나 우위 검증이 아니며, 웨이퍼 ATE의 접근 지점·시험 목적과도 구분합니다.
- 생성한 프레임의 길이·내용·시퀀스와 전송률, 오류 주입 조건 및 검사기의 비교 규칙을 고정합니다. 지원하지 않는 자극을 시험했다고 기록하지 않습니다.
- 내부 루프백과 외부 링크에 가능한 한 같은 트래픽 조건을 적용하고, 주입·반환·검사 지점을 각각 표시합니다. 포함되지 않은 회로와 매체도 함께 적습니다.
- 송수신 개수, 프레임 CRC와 지원되는 FEC 통계, 지연·온도·실패 시점을 나란히 남깁니다. 카운터의 위치·단위·초기화 조건을 맞추고 위의 PHY→MAC→DMA→소켓 경로와 연결해 해석합니다.
내부 경로가 통과해도 외부 채널과 상호운용 시험은 남을 수 있고, 외부 링크가 통과해도 시험하지 않은 내부 경계 조건은 남습니다. 구성도는 시험 배치를 설명하는 자료이지 오류 검출률·전력·실리콘 동작을 측정한 결과가 아닙니다. 여기서는 공개 문서로 시험 경계를 대조했으며 실제 장비 시험은 수행하지 않았습니다.
English summary. Record injection, loopback and checker locations separately. Internal packet tests, PRBS checks and external link measurements exercise different paths; none alone proves complete MAC, channel and software coverage.
공개적으로 다시 확인할 수 있는 자료
공개되지 않은 제조사 레지스터나 제품별 오프셋은 추측하지 않았습니다. 아래의 제조사 자료, 아키텍처 문서, 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 경로