숨겨진 문제 해결: 실제
홈페이지홈페이지 > 블로그 > 숨겨진 문제 해결: 실제

숨겨진 문제 해결: 실제

Jul 28, 2023

베냉의 야곱 | 2023년 8월 30일

오늘날 임베디드 소프트웨어 개발에서 가장 과소평가된 기능 중 하나는 실시간 운영 체제(RTOS) 애플리케이션을 추적하는 것입니다. RTOS는 거의 모든 IoT 장치와 연결되지 않은 많은 장치에 적용되었습니다. 개발자는 시스템을 테스트할 때 시스템이 올바르게 작동하는지 측정하기 위해 외부 시스템 동작을 살펴보는 경우가 많습니다. 이 접근 방식의 문제점은 많은 시스템이 50밀리초 미만의 시간 범위에서 결정론적으로 발생해야 하는 동작을 가지고 있다는 것입니다. 추적하지 않으면 시스템이 작동한다고 믿었다가 고객의 손에 들어왔을 때 시스템에 결함이 있고 모든 상황에서 제대로 작동하지 않는다는 사실을 발견하게 될 수도 있습니다. 이 게시물에서는 몇 가지 추적 기능을 안내하고 장치가 현장에 도착할 때까지 발견되지 않았을 수 있는 문제를 발견한 방법의 예를 공유하겠습니다.

몇 가지 구체적인 예를 살펴보기 전에 RTOS 애플리케이션을 추적하는 방법을 이해하는 것이 도움이 됩니다. 일반적으로 대상의 RTOS 애플리케이션에서 이벤트를 추적하는 레코더 라이브러리와 이벤트 데이터를 수신하고 표시하는 시각화 GUI의 두 부분으로 구성됩니다. 개발자는 Percepio Tracealyzer, SEGGER SystemView 및 Microsoft Azure RTOS TraceX와 같은 여러 도구를 통해 이 데이터를 캡처할 수 있습니다. 다른 것들도 많이 있지만 사용하는 도구는 사용 중인 RTOS와 시각화 요구 사항에 따라 달라집니다.

일반적으로 추적 작업을 생성하는 도구 추적 레코더 라이브러리를 설치합니다. 우선순위가 낮은 이 작업은 기록된 이벤트 데이터를 가져와 호스트 애플리케이션에 전송합니다(적어도 스트리밍 모드에서는). 이런 방식으로 코드를 계측할 때 추적 데이터 기록에 추가 CPU 주기가 할당된다는 점을 기억하는 것이 중요하기 때문에 이것을 언급합니다. 이러한 도구를 사용한 경험에 따르면 오버헤드가 너무 작아서 눈치채지 못할 정도입니다(적어도 제가 작업한 모든 응용 프로그램에서는). 릴리스 펌웨어에 추적 레코더를 그대로 둘지 여부를 결정하는 것이 중요합니다. 그렇지 않은 경우 릴리스 펌웨어로 애플리케이션을 테스트하고 검증하십시오!

저는 최근 제품에 대한 검증 테스트를 시작한 엔지니어 팀을 지도했습니다. 그들은 테스트를 통해 시스템이 완벽하게 실행되고 있다고 믿었습니다. 그들은 자신들의 시스템이 출시될 준비가 되었다고 나에게 말했습니다. 그들은 시스템의 원격 측정 타이밍에서 사소한 문제를 발견했습니다. 큰 문제는 아닙니다. 제 경험상 사소한 문제는 없습니다. 사소한 문제는 일반적으로 고객의 손에 들어가면 거대한 문제로 변하는 빙산의 일각입니다. 그래서 우리는 애플리케이션을 추적하고 시스템이 어떻게 완벽하게 작동하는지 확인하기 위해 Percepio Tracealyzer를 설정했습니다.

아래 그림 1을 보면 시스템의 CPU 사용률을 알 수 있습니다. 다이어그램의 각 색상은 서로 다른 작업입니다. x축은 시간이고 y축은 CPU 사용률입니다. 이것이 고객의 손에 들어갈 준비가 된 검증된 시스템처럼 보입니까?

그림 1. CPU 로드가 전체 시간 동안 100%에 도달하는 CPU 사용률 그래프의 예.

불행하게도 문제의 시스템은 CPU를 100% 활용하고 있었습니다. 자세히 살펴보면 중요한 기한을 놓치고 결정론적으로 운영되지 않는 것으로 나타났습니다. 애플리케이션을 추적하여 이러한 문제를 발견하는 데 인간의 관찰은 쓸모가 없었습니다. 만약 이런 제품이 배송되었다면 고객들에게 문제가 발생했을 것입니다. 몇 가지 간단한 추적을 통해 문제를 확인하고 상황을 해결할 수 있습니다. 좀 더 깊이 살펴보면서 해결하는 데 반나절도 채 걸리지 않은 몇 가지 작은 원인을 확인했으며 결과적으로 CPU 사용률은 그림 1에서 그림 2와 같이 나타났습니다.

그림 2. 프로덕션 시스템에 더 적합한 CPU 사용률 그래프의 예.

개선된 CPU 사용률은 훨씬 낮으며 향후 기능을 추가하고 고객이 기한에 응답하고 맞출 수 있는 시스템을 갖출 수 있도록 여유 공간을 남겨둡니다.

RTOS 추적은 CPU 성능 문제만 포착하는 것이 아닙니다. 소프트웨어용 오실로스코프처럼 작동합니다! 스레드가 시각화되면 시스템에서 다양한 패턴을 찾아내고 불일치를 식별할 수 있습니다. 결과적으로 우선순위 역전, 교착 상태, 작업 부족과 같은 문제를 찾을 수 있습니다. 예를 살펴보겠습니다.