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
30 lines
2.6 KiB
|
2 months ago
|
# 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`.
|