19.8.2. uorb top 명령어를 이용한 시스템 프로파일링
앞서 다룬 listener 명령어가 마치 저격수의 스코프(Scope)처럼 내가 의심하는 단 하나의 타겟 파이프라인만 100배율로 확대하여 그 안의 핏줄(Payload)까지 들여다보는 치밀한 미시적 도구였다면, 지금 소개할 uorb top 명령어는 드론이라는 거대한 행성 전체의 대기 흐름과 교통 체증을 인공위성 궤도에서 한눈에 내려다보는(Bird’s-eye view) 가장 압도적이고 거시적인 레이더망이다.
당신이 만든 커스텀 모듈 코드 단 한 줄이, 비행 제어기 전체의 CPU를 얼마나 갉아먹고 다른 수백 개의 모듈들의 I/O 큐(Queue)를 얼마나 틀어막고 있는지 분석해야 직성이 풀리는 1급 병목 아키텍트라면, NSH 콘솔 창에 접속하자마자 숨 쉴 틈도 없이 이 세 글자 명령어부터 때려박아야 한다.
1. 미시에서 거시로: top의 생태계 진단
리눅스의 유명한 시스템 모니터링 유틸리티인 top과 완벽히 동일한 작명 센스를 가진 uorb top은, 단순히 터미널에 통계를 한 번 뿌리고 끝나는 것이 아니라 **실시간으로 화면을 갱신(Refresh)**하며 VFS 내부의 수백 개 토픽 방들이 벌이는 치열한 데이터 전쟁을 숫자로 중계(Broadcasting)해 준다.
px4> uorb top
이 명령어를 치면 콘솔 화면이 번쩍이며 완전히 새로운 데이터 매트릭스 테이블이 터미널 전체를 뒤덮는다. 여기에는 sensor_gyro부터 vehicle_local_position, 그리고 당신이 방금 만들었던 sensor_test_data까지, 현재 시스템 램(RAM)에 등재된 모든 공식 uORB 채널들이 알파벳 순서대로(혹은 활성도 순으로 정렬되어) 리스트업 된다.
이 거대한 종합 건강 검진표에는 다음과 같은 결정적인 필드들이 매초 파도치며 갱신된다.
- 19.8.2.1 단원:
TOPIC NAME옆에 붙어 나오는INST(인스턴스 개수),SUB(구독자 수),RATE(발행 주파수 Hz),SIZE(바이트 크기) 지표들을 읽어내어 시스템 자원 점유율의 랭킹을 매기는 기본적인 부하 분석(Profiling) 스킬을 배운다. - 19.8.2.2 단원: 이 표의 가장 우측, 피처럼 붉은 글씨로 기록되는
LOSS(혹은DROP)라는 치명적인 숫자의 원인을 해부한다. 왜 큐(Queue) 메모리가 터져나가며 데이터가 링 버퍼 바닥으로 쏟아지는지(Overflow), 그리고 이것이 전체 시스템의 병목(Bottleneck)과 어떤 연관이 있는지를 추적하는 고급 외과 수술 기법을 전수한다.
uorb top이 뿌려주는 이 광활한 매트릭스를 읽어내는 눈을 가지게 되면, “내 모듈 코드가 드론 전체를 느려지게 만들고 있다“는 심증을 명백한 숫자의 물증으로 입증할 수 있게 되며, 남의 코드가 범인일 때도 10초 안에 그 용의자를 색출하여 단두대에 세울 수 있는 권력을 쥐게 된다.