키스톤 멀티코어 SoC 툴 수트: 모든 것을 위한 하나의 플랫폼
  • 2012-02-10
  • 편집부

키스톤 확장을 포함하는 CCStudio 툴 수트는 코드 변경 없이 우수한 시스템 레벨 가시성과 분석 능력을 제공한다. 이것은 멀티코어 및 다중 운영체제 관련 문제를 명확하게 이해하기 위해 가시성을 추구하는 개발자들에게 아주 중요하다. 그런 정교한 가시성이 없다면, 개발자들은 복잡할 멀티코어 문제를 이해하기 위해 맞춤 솔루션과 자사 고유 자원에 의존해야 한다.

글 | 비카스 바시니(Vikas Varshney), 에물레이션 디버그 툴 엔지니어링 매니저
     데비 그린스트리트(Debbie Greenstreet), 무선 기지국 인프라 마케팅 디렉터
     텍사스 인스트루먼트(Texas Instruments)

역사적으로 멀티코어 시스템온칩(System-on-Chip, SoC) 구현과 이용에 있어서 중요한 문제는 그 플랫폼들의 프로그램과 디버그에 적당한 툴이 존재하느냐는 것이다. 개발자가 멀티코어의 성능을 십분 이용하기 위해서는 그런 코어에서 작동하는 효율적으로 분할된 고급 소프트웨어가 매우 중요하다. 복잡한 멀티코어 시스템의 디버깅은 그것들의 병행 처리(concurrent processing) 패러다임과 서브시스템 인터페이스의 한정된 접근성으로 인한 또 다른 복잡성을 수반한다. 툴 수트의 강점은 멀티코어 SoC의 개발과 디버깅에 걸리는 시간, 그리고 최적 SoC 성능을 달성할 능력으로 측정된다.

키스톤 확장(KeyStone extensions)을 지원하는 TI의 Code Composer Studio™(CCStudio) 통합개발환경은 디버깅, 검증 및 추적 기능을 위한 업계 최고의 멀티코어 데이터 시각화 기술을 포함하고 있다. 최근 TI는 ARM짋 RISC 프로세서와 TMS320C66x DSP 코어의 이질적 혼합체를 가진 새로운 키스톤 멀티코어 SoC를 소개했다. 키스톤 디바이스 및 소프트웨어와 공동으로 개발된, 키스톤 확장을 포함하는 CCStudio 툴 수트는 ARM 및 DSP 코어, 가속기 및 주변장치에 가시성을 제공하는 SoC의 단일 시스템-레벨 뷰를 제공한다.

프로세서는 성능이 향상될수록 더 복잡해지고 있다. 프로세서의 복잡성은 개발자들에게 더 높은 수준의 소프트웨어 디버깅과 문제해결(troubleshoot), 관리 능력을 요구한다. 멀티코어 프로세서의 도입과 더불어 구현과 분석의 엄격함은 기하급수적으로 증가하고 있다.
다음 시나리오를 생각해보자: 유능한 엔지니어들로 구성된 어떤 팀이 흥미진진한 새로운 SoC를 기반으로 한 무선기지국을 개발하려고 준비 중이다. 새로운 소자는 경쟁력 있는 새 제품을 빠르고 성공적으로 출시할 수 있다는 기대를 갖게 한다. 선택된 SoC는 RISC 코어와 DSP 코어가 통합된 이종 멀티코어 소자다. 하지만, 이 엔지니어 팀은 ARM 개발팀과 DSP 개발팀으로 나뉘어 있다. 이들은 단일 플랫폼에서 복합 시스템의 문제해결을 위해 함께 일할 필요가 있음을 이해하고 있다. 문제는 SoC의 복잡성을 해결해 줄 가용 툴이 있느냐다.
이 엔지니어링 팀 매니저도 비슷한 점을 우려한다. 새 SoC는 기존 솔루션에 비해 비약적인 성능 발전, 상당한 전력 절감 및 비용 감소를 약속하지만, 매니저는 대체 SoC들을 이용한 통합, 디버그 및 시스템 검사 과정에서 막연한 지연과 불확실한 일정의 원인이 부실한 디버그 및 분석 툴들이었음을 알고 있다. 이 SoC 플랫폼의 한 가지 이점은 여러 제품들에서 소프트웨어 재사용이 보장된다는 점이지만, 매니저는 이 SoC를 지원하는 툴이 정말로 적시에 재사용과 재 테스트를 가능케 할지 우려된다.
끝으로, 이 제품의 비즈니스 매니저도 걱정되는 점이 있다. 점점 더 복잡한 제품들을 이용하는 그녀의 경험상, 그녀는 최신 세대 SoC의 경이로운 새 기능과 이점들에도 불구하고 이것을 활용하는 일과 개발팀에서 신속하게 성공적으로 구현될 수 있는 특징들을 지정하는 일은 사업팀의 몫이라는 것을 잘 알고 있다. 적기 출시(time-to-market)는 제품 전개의 비즈니스 측면에서 중요한 요소이며 제품의 디버깅, 통합, 테스트 및 시운전에서 모든 결함은 수입과 이익에 부정적 영향을 미칠 것이다.
따라서 엔지니어들은 멀티코어 SoC 소자용 개발 툴에서 어떤 고유 기능을 기대하고 있는가?

- 첫째, 개발자들은 프로세싱 구성요소들의 글로벌 뷰(global view of processing elements)가 필요하다. 그들은 특정 프로세싱 코어에서의 이벤트를 볼 필요가 있고, 모든 코어에서 모든 처리를 동시에 볼 필요가 있다.
- 둘째, 그들은 프로세싱 구성요소 간 통신을 시각화(visualize the communication between proce
ssing elements) 할 수 있어야 한다. 과도한 지연의 원인 같은 만만찮은 결함을 식별하기 위해서는 각각의 프로세싱 구성요소들이 실행 중일 때 모든 상호작용의 뷰가 필요하다.
- 멀티코어 툴에 요구되는 핵심 기능은 프로세싱 코어가 적절히 이용되는지 판정하기 위해 SoC의 각 구성요소의 이용을 측정할 수 있는 능력(measure the utilization of each element of the SoC)이다. 개발자들은 과부하에 근접하는 수준까지 프로세싱 구성요소에 작업이 할당되는지, 그리고 그런 경우에 SoC의 균형을 다시 맞출 방법을 결정할 필요가 있다.
-끝으로, 차단된 프로세스(blocked processes)를 확인하고 프로세싱 교착상태(processing deadlock)와 시스템 비효율을 결정할 수 있는 능력이 필요하다. 멀티코어 SoC에서 돌아가는 소프트웨어 솔루션을 개발하는 엔지니어링 팀은 전체 시스템이 실시간으로 작동하고 실리콘 아키텍처 최적화를 위해 설계되고 분할된다는 확신을 가져야 한다. 이것을 확신하기 위해서 소프트웨어 개발자들은 그들 솔루션의 작동 상태를 확실하게 실시간으로 볼 수 있어야 한다. 그 결과는 현장 테스트와 궁극적인 도입을 위해 준비 완료된 통합된 제품이다. 그림 1은 디버깅 체계에서 TI의 키스톤 아키텍처의 한 예를 보여준다.

이러한 요구사항들을 만족하려면, 툴 수트는 SoC의 각 프로세싱 구성요소 및 인터페이스의 성능을 이해하고 보고해야 한다. 툴은 모든 프로세싱 구성요소의 동기화와 타이밍 관계를 보여줄 수 있어야 한다. 각각의 독립 코어 또는 프로그래머블 엔티티(entity)를 보여주는 것으로는 충분치 않다.

TI의 키스톤 멀티코어 SoC 소자를 사용하는 제품 개발자들은 TI의 CCStudio 툴 수트에 기반을 둔 멀티코어 개발 및 디버그 툴을 이용한다. 개발자들은 최적화된 통합 및 테스트 사이클을 보장하면서 심층 시스템 레벨 문제들을 신속하고 효율적으로 확인하고 해결할 수 있다. 또 그들은 일단 제품이 원격 추적 기능과 함께 도입되면, 이 상세 통찰도 이용할 수 있다. 덕분에 현장 문제에 신속히 대응하고, 최종 고객, 서비스 제공자 및 오퍼레이터를 훌륭히 지원할 수 있게 된다. TI는 기존 DSP 멀티코어 통합에 ARM 프로세서를 추가해 첫 번째 이종 멀티코어 소자 세트를 소개함으로써 이제는 키스톤 확장을 포함하는 CCStudio 툴을 통해 동일 수준의 커버리지와 분석을 ARM 개발자들에게 제공한다.

디버그 프로세스 시작
애널라이저 수트는 툴 체인의 또 다른 중요한 측면이다. 이것은 코어 레벨과 시스템 레벨에서의 추적 기능과 온칩 하드웨어 이벤트 수누퍼 코드 삽입(hardware event snoopers instr
umentation) 및 소프트웨어 코드 삽입(software instrumentation)을 이용하는 로직 분석 도구의 기능성을 포함하고 있다. 이 수트는 소프트웨어 코드 삽입을 제공하는 키스톤 확장인 멀티코어 시스템 애널라이저(Multicore System Analyzer)도 포함한다. 각 툴은 더 완전한 시스템 솔루션을 위해 서로 동기화하는 다양한 기술을 이용하는 특정 유스 케이스를 지원하도록 설계된다. 결합된 이 수트는 공통 글로벌 시간대에 맞춰 코어와 툴에서 데이터 상관을 제공하고, 툴에서 뷰가 동시에 스크롤 되도록 지원한다.



CCStudio는 DSP 및 ARM을 위한 개발 코드용 툴을 제공할 뿐만 아니라, 그림 2와 같이 개발의 성능 최적화 단계를 지원할 애널라이저 툴 수트도 포함하고 있다. CCStudio는 오랜 특징인 DSP 지원 외에도 리눅스 지원을 결합하기 위해 확장되었다. 리눅스 기반의 ARM 개발자들은 익숙한 리눅스 GDB 디버거를 이용해 CCStudio 환경에서 디버깅 할 수 있다. CCStudio는 리눅스 OS에서 작동하는 ARM 애플리케이션과 실행 과정의 엔드-투-엔드 추적을 가능케 하는 정지 모드의 커널을 동시에 디버그 할 수 있다.

디버거를 통해 코어들을 동시에 컨트롤하는 능력은 동시적 프로그램 상태 검사를 가능케 하는 매우 유용한 멀티코어 디버그 기능이다. 이 기능은 개발자들이 여러 코어에서 돌아가는 동시적 프로그램들의 데드락과 경쟁 상태를 디버깅하려 할 때 매우 중요하다. 동시적 “잠금(locked)” 동작과 정지는 상호작용 가시성을 입자 수준에서 이해할 필요가 있는 대칭형 다중처리(symmetric multi-processing) 환경에서 또 다른 중요한 기능이다. CCStudio의 멀티코어 트리거 기능은 프로세서 간 의존성 및 거동을 조사하기 위해 사용되는 중요한 기능이다. DSP와 ARM 멀티코어 트리거 시나리오에서, 프로세서 또는 프로세서 세트는 외부 프로세스 이벤트를 트리거하도록 혹은 대응하도록 구성할 수 있다. 예를 들어, 프로세서 1에서 중단점(breakpoint)이 충돌하면 프로세서 2에 신호를 보내 다른 디버그 동작을 중단 또는 수행할 수 있다. 이 기법은 간헐적인 고장, 충돌, 런웨이 코드(runaway code) 및 보거스 인터럽트(bogus interrupts)를 식별하는 데 유용하다.

코어 추적(Core Trace)
트레이스 애널라이저는 코어 레벨에서 작동한다. 여기서는 개발자가 CPU 프로그램 및 데이터 추적을 분석하고 시각화하는 기능이 있다. CCStudio는 관심 지점에서 트레이스 컬렉션(trace collection)을 구성하고 트리거할 여러 방법을 제공한다. 데이터는 온칩 임베디드 트레이스 버퍼(Embedded Trace Buffer, ETB), 또는 XDS 추적 리시버(trace receiver) 하드웨어를 이용해 수집되고, 키스톤 아키텍처 하드웨어 레벨 코드 삽입과 비강제(non-intrusive) 추적 분석을 이용해 트레이스 애널라이저에서 후처리된다. 이를 통해 소프트웨어 설계자는 추적 데이터를 이용해 포괄적 또는 배타적 기능 CPU 사이클 스톨 프로파일링과 캐시 프로파일링을 통찰하여 시스템 성능을 최적화할 수 있다. CCStudio는 DSP 코어와 ARM 코어에 대한 코어 추적 지원을 제공한다. CCStudio는 전통적인 ETM 추적 툴을 포함하고 있어 ARM 리눅스 개발자들은 선호하는 디버그 환경에서 작업할 수 있다.

트레이스 애널라이저는 몇 가지 핵심 기능을 통해 실시간으로 어려운 문제의 디버깅을 가능케 한다. 첫째, 이것은 평가 중인 조건에 도달하기 위해 취해진 단계들을 사용자에게 보여줄 수 있는 함수 호출 그래프를 유지한다. 이것은 상세한 PC 추적 데이터의 로그 뷰도 제공한다. DSP 및 ARM 코어의 소스코드 상관관계(source-code correlation) 기능은 코드의 각 라인이 실행 시스템의 현재 상태와 어떤 관계가 있는지 확인하는 데 도움이 된다. 애널라이저는 컨트롤 찾기, 검색 및 필터링, 확대축소 및 측정 마커, 동시 뷰를 위한 스크롤링 등을 비롯해 첨단 데이터 내비게이션 기능을 제공한다. 이 모든 것들은 CCStudio 툴 상에서 지원된다. 또한 트레이스 애널라이저 결과를 다른 곳에서 보고 분석할 수 있도록 ‘csv’ 형식으로 익스포트(export) 할 수 있다. 코어 추적은 프로그램 실행 시퀀스에 대한 지침 레벨의 가시성을 제공하기 위해 널리 사용되는 기술 중 하나다. 코어 추적은 코드 삽입 없이 코어 레벨 실행 가시성을 제공하고, TI의 키스톤 아키텍처에서 DSP와 ARM 코어 구성요소를 위해 지원된다.

시스템 추적(System Trace)
시스템 레벨 문제의 디버깅을 요구하는 상태를 위해 키스톤 아키텍처는 온칩 시스템 트레이스 모듈을 포함하고 있다. 이 모듈은 핵심 트랜잭션 지점 추적을 통해, 선택된 슬레이브 인터페이스에 대한 각 마스터의 트랜잭션을 “보기” 위하여 하드웨어-가속 소프트웨어 코드 삽입과 하드웨어 버스 모니터링을 제공한다. 시스템 추적 기능을 이용해 개발자는 시스템 트랜잭션을 모니터하고, 데이터를 비강제적으로 포착하고, CCStudio 로직 분석 도구를 이용해 데이터를 후처리 할 수 있다. 시스템 레벨 가시성을 위해, 기술은 코어로부터 추적들의 코드 삽입을 통해 필수 기능을 제공하고, 그것들을 프로세서 외부에서 하드웨어 모니터링 데이터와 결합한다.



로직 애널라이저 툴은 그림 3에 나타낸 바와 같이 유스 케이스들의 데이터 처리와 분석을 보여주는, 시스템 추적 이벤트 및 메시지의 이벤트 타임라인 그래픽 뷰를 제공한다. 이것은 계층적 또는 평면형 표현을 사용해 대량의 이벤트 소스를 관리하고, 확대축소, 측정 마커, 책갈피, 정렬 같은 첨단 기능을 제공한다.

리눅스 소프트웨어 개발자는 로드 가능한 리눅스 시스템 트레이스 모듈(System Trace Module, STM) 캐릭터 모드 디바이스 드라이버를 사용함으로써 시스템 트레이스 기술을 신속히 이용한다. 그 덕분에 애플리케이션 코드의 아무런 변경 없이, 그리고 전통적인 “printf” 디버그 함수의 모든 편의와 함께, 디버그 데이터와 코드 삽입 로그를 STM 포트에 라우팅 할 수 있다. 예를 들면, ARM 리눅스 개발자는 코드 변경 없이 표준 C lib print 함수를 사용하고 출력을 STM 장치에 보낼 수 있다. 이것은 모든 코드 삽입 출력을 시스템 트레이스 포트에 보내고, 이 포트는 자동으로 메시지에 타임스탬프를 설정함으로써 다른 애플리케이션 또는 태스크에서 오는 메시지와 상관시킬 수 있다.

멀티코어 시스템 애널라이저
하드웨어 코드 삽입 기반의 코어 및 시스템 추적 기능은 소프트웨어 코드 삽입과, 통합 애플리케이션 소프트웨어를 처리하는 키스톤 요소들의 전체 뷰를 이용해 확장된다. 키스톤 멀티코어 시스템 애널라이저(KeyStone Multicore System Analyzer, MCSA)는 소프트웨어 코드 삽입을 사용해 실시간으로 데이터를 수집하기 위해 API, 인터페이스 및 가이드라인을 정의하는 UIA(Unified Instrumen
tation Architecture)에 기반을 둔다. 이것은 SoC의 서로 다른 부분들로부터 코드 삽입된 구성요소들이 함께 작동하는 것을 가능케 한다.
코어 및 시스템 트레이스 애널라이저에서처럼, MCSA는 생생한 데이터 분석을 지원할 뿐 아니라, 모달리티(modality)를 포착하고 후처리하므로 소프트웨어 개발자의 테스트 일정과 프로세스가 수월해진다. 런타임 로깅의 활성과 비활성이 가능하다. MCSA는 분석 시각화를 쉽게 만들고, 실행 그래프, 지속시간 분석, 상황인지 프로파일(context aware profiles), 로드 분석, 통계 분석 같은 기능들을 제공한다. MCSA의 핵심 장점 중 하나는 이더넷 또는 JTAG 포트를 통해 부분적으로 시스템 분석을 지원한다는 것이다. 또한 이것은 이더넷 또는 원격 디버그 분석을 통해 임베디드 트레이스 버퍼(Embedded Trace Buffer)를 사실상 확장할 수 있다. 이를 통해 원격 소프트웨어 개발자 또는 테스터가 애플리케이션 소프트웨어 통합 및 테스트 프로세스를 지원하고 참여할 수 있다. 이러한 기능들은 배치된 시스템에 원격 접속을 수월케 하여 현장에서 보고되는 버그와 문제에 대한 대응을 크게 향상시킨다.

이 키스톤 SoC 레벨 분석 도구로 무장한 소프트웨어 팀원들은 시스템 레벨 애플리케이션 소프트웨어의 설계 검증 및 디버깅에 효율적으로 착수할 수 있다. 코어 외부의 하드웨어 지원 모니터링 이벤트와 시스템 레벨에서 상관있는 “실행 흐름”은 시스템 전체의 상호작용 문제를 규명하는 데 매우 유용하다. 개발자들은 코어에 삽입된 장치 레벨 글로벌 타임스탬프 정보를 달성한다. 시스템 추적 정보는 공통 글로벌 시간 기반을 수립할 수 있는데, 이것은 시스템 전체의 이벤트 시간을 상관 짓고 교차 의존성을 이해할 강력한 방도이다.
인터커넥트 버스 트래픽 스누퍼들은 연속 시스템 모니터링 모드에서 하드웨어 이벤트와 처리를 트랩하여 버스 주소와 데이터 모니터링에 대한 상당한 가시성을 제공한다. 이 가시성을 통해 팀은 SoC 거동을 분석하고 스푸리어스 트랜잭션 또는 이벤트를 진단할 수 있다. 이 스누퍼들이 수집한 정보는 통일된 관점에서 DSP 및 ARM 코어 버스 레벨 가시성을 제공하면서 코어 추적 정보와 함께 처리되고 상관될 수 있다.
또한 개발자들은 전반적인 버스 및 트래픽 가시성을 강화하기 위해 버스 전송 프로파일러 및 성능 모니터를 이용한다. 채널, 읽기, 쓰기 및 버스트 크기를 위한 DMA 전송 프로파일링이 그 예이다. 몇 가지 핵심적인 성능 최적화 정보 세트를 이용할 수 있다. 제공되는 성능 데이터의 예를 들면 처리량, 채널 인터리빙, 전송 지속시간이 있다. 성능 모니터는 지속적인 데이터 대역폭과 지연 특성에 대한 이해를 돕기 위해 복잡한 SoC 상호연결 네트워크에 대한 비강제 가시성을 제공한다. 이것은 실시간 성능 목표가 달성되어야 하는 경우에 아주 중요하다.

CToolsLib
CTool이라는 인에이블러(enablers) 수트는 CCStudio 툴 수트와 그것의 키스톤 확장을 뒷받침하는 일차적 온칩 디버그 및 추적 기술이다. 이것은 IEEE 1149.1 (JTAG)을 비롯해 SoC 시스템 레벨, 서브시스템 및 코어 지원 등 몇 개 층에서 툴을 제공한다. CTool을 이용해 키스톤 툴 수트는 전통적인 JTAG 외부 에뮬레이터 기반의 디버그를 지원하고, 외부 디버거 또는 추적 컬렉터가 필요 없이 현장(JTAG-less) 디버그 및 추적 기능도 제공한다. CToolsLib 포트폴리오의 사용을 통해, 소프트웨어 개발자들은 CTools 디버그 및 추적 기능에 쉽게 전달할 수 있는 임베디드 타깃 API 컬렉션을 이용한다. CToolsLib API들은 소스코드에 제공되므로 엔지니어는 현장에서 디버깅을 해야 할 필요가 있을 경우, 현장 디버깅 과정에서 접근을 위해 애플리케이션에 그것들을 쉽게 삽입할 수 있다. API는 C 언어로 작성되고 HTML 문서와 데이터 구조를 포함한다. 라이브러리 수트는 AET(Advanced Event Triggering), 임베디드 추적 버퍼(embedded trace buffer), 시스템 추적, DSP 추적, ARM 추적, 그리고 멀티코어 내비게이터(Multicore Navigator)와 테라넷(TeraNet) 같은 키스톤 SoC 특징을 위한 코드 삽입 등의 기능을 포함하고 있다. 또한 CCStudio는 애널라이저 수트로 현장 디버그 및 추적 정보를 불러오고 분석하는 유틸리티도 제공한다.

CCStudio 이클립스 에코시스템
CCStudio는 이클립스 IDE 플랫폼의 일부이다. 이것은 다른 이클립스 구성요소들을 이용하거나 이것을 엄격한 시스템에 플러그인 하는 옵션으로, 디버그 및 검사 옵션을 키스톤 소프트웨어 개발팀에게까지 확장한다. 키스톤 확장을 가진 CCStudio는 방대한 양의 시스템 레벨 및 SoC 구성요소 레벨 분석을 제공하며 외부 디버거가 있거나 없거나 유연성을 제공한다. 이클립스와의 통합은 CCStudio를 보충하기 위해 이클립스 기능성을 결합할 수 있거나 또는 이클립스 구성요소들이 각 개발자에게 보다 익숙하기 때문에, 개발자들에게 유연성을 제공한다.

결론
키스톤 확장을 포함하는 CCStudio 툴 수트는 코드를 변경할 필요 없이 우수한 시스템 레벨 가시성과 분석 능력을 제공한다. 이것은 멀티코어 및 다중 운영체제 관련 문제를 더 잘 이해하기 위해 가시성을 추구하는 개발자들에게 아주 중요하다. 그런 정교한 가시성이 없다면, 개발자들은 복잡한 멀티코어 문제를 이해하기 위해 맞춤 솔루션과 자사 고유 자원에 의존해야 한다. 이것은 문제해결까지 수일 또는 몇 주가 걸릴 수도 있다. TI의 툴 수트를 이용하면, 그림 4와 같이 적정 수준의 정보와 가시성을 제공하는 비강제 디버그 및 분석 능력이 몇 분 내에 가능하여 개발시간이 단축된다. 결과적으로, 고객들은 고성능 제품이 제때 배달되리라는 확신을 가질 것이다.

<저작권자(c)스마트앤컴퍼니. 무단전재-재배포금지>



  • 100자평 쓰기
  • 로그인

TOP