멀티코어 디버깅의 장점

IAR Embedded Workbench for Arm은 동기화된 방식으로 멀티코어 기기의 디버깅을 수행할 수 있는 기능이 있습니다. 이번 순서에서는 멀티코어 디버깅 일반에 대해 알아보고, 특히 IAR Embedded Workbench for Arm에서 이를 어떻게 처리하는지를 중점적으로 살펴 보겠습니다.

왜 멀티코어 디버깅인가?  

오늘날에는 복잡한 어플리케이션에 대한 수요가 늘어나고 있습니다. 그리고 이로 인해 멀티코어 기기의 인기가 높아지는 추세가 뚜렷해 지고 있습니다. 그리고 아시는 바와 같이, “개발에는 항상 디버깅이 따릅니다.” 멀티코어 기기를 사용함으로써, 부하의 균형을 잡고, 서로 다른 아키텍쳐의 장점을 활용할 수가 있습니다. 또한, 여러 개의 기기를 생산하는 것보다 하나의 멀티코어 기기를 생산하는 것이 생산 비용도 낮추어 줄 수 있는 가능성이 있습니다.  

멀티코어 환경 내에서 하나의 코어를 디버깅하는 기능은 오래 전부터 존재해 왔습니다. 하지만 지금 소개 드리고자 하는 내용은 복수의 코어에서 디버깅을 동기화 할 수 있는 기능입니다. 두 개 이상의 코어를 동시에 디버깅 함으로써, 에러와 버그를 좀 더 쉽게 찾아낼 수가 있을 것입니다. 일부 경우에는 당장의 작업 대상이 되어 있지 않은 코어의 기본적인 기능, 예를 들어 시동, 정지, 모니터링 등의 기능을 수행할 수 있게 되면 무척 요 긴한 경우도 있습니다. 현재 작업하고 있는 코어가 다른 코어의 영향을 받고 있을 수도 있기 때문입니다. 

멀티코어 디버깅에서 가장 어려운 부분은 하나의 인터페이스로 두 개의 코어에 접근하는 것입니다.  IAR Embedded Workbench에서는 동일한 두개 이상의 코어, SMP(symmetric multicore preocessing), 또는 서로 다른 아키텍처로 구성된 두 개의 코어인 AMP(asymmetric multicore processing) 기기의 코어를 동시에 디버그 할 수 있습니다. 이때, 하나의 코어는 툴체인 상의 마스터 인스턴스로 디버깅하며, 나머지 하나는 파트너 인스턴스로 처리합니다. 이 두 코어 각 인스턴스 별로 기동, 중지를 별도로 진행하거나, 동시에 기동/중지할 수도 있습니다. 그리고 이 모든 과정이 하나의 개발 환경에서 이루어집니다. 

두 가지 용도 예시 

여기서는 두 가지 서로 다른 용례를 살펴 보도록 하겠습니다. 먼저 하나는 동일한 형식으로 구성된 멀티코어에서 디버깅 작업을 하는 것입니다. SMP에 해당되지요. 나머지 하나는 서로 다른 종류로 구성된 멀티 코어입니다. 이것은 AMP가 되겠습니다. 

대칭형의 멀티코어 디버깅은 IDE 상에서 하나의 인스턴스를 통해 이루어지고, 비 대칭형의 경우는 각각의 코어 별로 IDE 상에서 따로 인스턴스를 사용해야 합니다. 이 중 하나는 마스터가 되고 나머지 하나는 파트너 인스턴스입니다.  

비 대칭 멀티코어 디버깅 

비대칭 멀티코어 프로세싱에서는 두 개의 ARM Cortex - A9 기기를 사용할 수가 있습니다. 또는 하나의 기기에서는 Cortex-M 코어를, 나머지 하나에서는 Cortex-A 코어를 사용하는 기기를 사용하기도 합니다. 아래 예제에서는 Cortex-A 코어용 프로젝트를 마스터로 삼습니다. 해당 프로젝트에서는 또한 공통 메모리 상에 파트너 코어용의 코드도 같이 다운받을 것입니다.  파트너 프로젝트에서 설정이 다른 부분은 하나 밖에 없습니다. 코드를 다운받지 않고, 기기에 연결하기만 한다는 것입니다. 

마스터 디버그 세션을 시작하면, 파트너 세션을 스폰 합니다. 그리고 나면 화면은 이렇게 보입니다:

running debug session

기존의 단일 코어 세션과 비교할 때 차이점은 다음과 같습니다.  

  • 각 창이 Master 또는 Partner로 표시. 
  • 새로운 Cores 창 사용. 
  • 디버그 툴 바에 새로운 항목 추가 

IDE를 자세히 살펴보시면 몇 가지 흥미로운 변화가 눈에 띄는데, 그 첫번째가 바로 Cores 창이 추가된 점입니다. 

multi core window

이 창을 보시면, 해당 내용은 Cortex-A 코어(굵은 글씨)에 연결되어 있는 IDE 인스턴스로부터 추출된 내용임을 알 수 있습니다. 또 현재는 정지 상태이며, 해당 코어의 PC도 보입니다. 뿐만 아니라 Cortex-M 코어에 대한 정보도 어느 정도 보입니다. 예컨대 현재 실행 여부 등입니다. 

또 한 가지 바뀐 사실은 디버그 툴 바 상에 다음에 같은 내용이 추가되었다는 것입니다:

start and stop cores

먼저 첫번째 두 아이콘은 이들 코어의 상태를 설명해 주는 것이며, 나머지는 새롭게 모든 코어를 켜고 끌 수 있는 제어 버튼입니다. 

툴 바 상의 코어 중 하나에 마우스 커서를 올려 보면, 코어 창에 맞추어 추가적인 정보가 화면에 표시됩니다. 이 툴바에서는 또한 풀 다운 메뉴가 각각의 코어 별로 제공되며, 이를 사용해 선택한 코어의 작동을 중지시키거나, 재개하도록 할 수 있습니다. 

core 1 stopped core 2 stopped

대칭 멀티코어 디버깅 

복수의 코어를 갖추고 있는 대칭형 시스템의 디버깅도 위의 예시와 비슷합니다. 하지만 두 개의 인스턴스 대신 IDE 상에는 오직 하나의 인스턴스 만이 정보를 표시하과 있습니다. 여기서 Watch 창, Memory 창과 같은 일반 디버그 창은 선택한 코어와 관련되어 있는 정보를 표시해 줄 것입니다. 원하는 코어는 Cores 창에서 선택할 수가 있습니다. 

적절한 설정 방법 

설정에 신경을 써야 하는 부분이 존재하지만 많지는 않습니다. 예를 들어 비대칭의 경우, 마스터 세션을 위해서는 멀티코어 마스터가 어느 쪽인지, 그리고 파트너는 어느 쪽인지를 선언을 해 줘야 합니다. 파트너의 경우, 앞서 설명한 바와 같이 마스터가 디바이스의 프로그래밍을 하고 있는 경우, 파트너 디버거 세션에서는 이것을 할 수가 없습니다. 또한, 선택된 리셋 전략은 마스터 세션에는 영향을 미쳐서는 절대 안 됩니다. 그래서 파트너 세션에서 일종의 소프트웨어 리셋을 사용하게 됩니다. 

multi core settings in the IDE

요약 

사실 가장 손이 문제가 많이 나타나는 곳이 바로 셋업 부분입니다. 이러한 셋업이 완료되고 나면, IAR Embedded Workbench for Arm이야 말로 가장 쉽게 디버깅을 할 수 있는 툴이 됩니다. 만일 이전에 단일 코어 디버깅용 툴을 써 보신 분이라면, 이러한 새로운 기능 안에 포함되어 있는 모든 내용을 금방 알아 보실 수가 있습니다. 그리고 이제는 더 이상, 멀티코어 디버깅이 어렵다고들 하는 말이 실감이 나지 않으실 것입니다.

죄송하지만, 당사 사이트에서는 Internet Explorer를 지원하지 않습니다.보다 편안한 사이트를 위해 Chrome, Edge, Firefox 등과 같은 최신 브라우저를 사용해 주시길 부탁드립니다.