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/device1c00: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.