You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

30 lines
2.6 KiB

# WCH 부팅 지연 진단 — 2026-09-09
## 장비에서 확인한 사실
- 커널: `5.10.160 #22`, ARM64, TERA CORA-X48 PRO K FET3568J-C.
- 부팅 150.52초와 279.04초에 CPU0 RCU stall 발생.
- 279초 덤프의 CPU0 PC가 `READ_UART_IIR.isra.0`, `wch_ser_interrupt`에 반복적으로 위치함.
- 319.47초 `irq 95: nobody cared`, 핸들러 `wch_interrupt`, 이어서 `Disabling IRQ #95`.
- PCI `0000:01:00.0`, vendor/device `1c00:4353`, IRQ95, 드라이버 `wchpciserial`.
- 장비 매핑에서 이 PCI 장치는 CH01–CH24에 해당함. 다른 장치 `0002:21:00.0`은 IRQ99.
- `modules.builtin`에 `drivers/tty/serial/wch/wch.ko`, `wch_pre.ko`가 등록되어 있음. 현재 드라이버는 커널 내장 구성.
- CR 자동 탐색: 부팅 30초 뒤 시작, 5초 주기, 응답 제한 150ms, 채널 간 20ms. 모뎀 링크 스캔은 꺼져 있음.
- 측정 시 가용 메모리 약 1.5GB. 웹이 실제 사용하는 API는 `127.0.0.1:8084`; 장애 후 로그인 정책 요청은 약 14ms.
## 판단과 한계
WCH 인터럽트 처리 경로의 커널 정체가 확인됐다. UI 지연과 관련될 가능성이 높지만, 자동 탐색·포트 초기 설정·외부 입력 중 어떤 동작이 최초 촉발 조건인지는 아직 분리 검증하지 않았다. 150초 스택 자체는 파일 조회/블록 I/O 경로이므로 모든 stall을 동일한 원인으로 단정하지 않는다.
IRQ 비활성화 후 UI 응답이 빨라져도 시리얼 통신 복구를 의미하지 않는다. 초기 계정 해시 생성을 줄인 API 변경은 이 커널 장애를 해결하지 않는다.
## 다음 수정에 필요한 것
실제 커널 #22의 BSP 소스, 설정, 빌드 도구 및 WCH 드라이버 패치가 필요하다. 현재 작업 공간과 검색한 사용자 폴더에서는 해당 소스를 찾지 못했고 장비에도 `/usr/src`가 없다. 매핑 파일은 `target-bsp/docs/snapshots/20260721-wch-legacy-intx-loopback/manifest.json`을 근거로 참조한다.
소스 확보 후 `wch_ser_interrupt`의 반복 종료 조건, IIR 읽기 및 인터럽트 원인 제거, IRQ 반환값과 PCI INTx 처리, 포트 open/close/termios 적용 시 인터럽트 상태 변경을 확인한다. 코드 검토 전 `irqpoll` 추가, IRQ 강제 재활성화, 드라이버 교체는 적용하지 않았다.
수정 검증은 부팅 초기부터 커널 로그를 연속 수집하며 UI 응답과 CH01–CH48 실제 송수신을 함께 확인해야 한다. 자동 탐색을 일시 중지하는 비교 실험은 기능 변화와 복원 절차를 명시하고 수행한다.
원시 로그: `../runtime/perf-console-20260909.log`.