KR20130039479A - 스레드 프로그레스 트래킹 방법 및 장치 - Google Patents

스레드 프로그레스 트래킹 방법 및 장치 Download PDF

Info

Publication number
KR20130039479A
KR20130039479A KR1020110104061A KR20110104061A KR20130039479A KR 20130039479 A KR20130039479 A KR 20130039479A KR 1020110104061 A KR1020110104061 A KR 1020110104061A KR 20110104061 A KR20110104061 A KR 20110104061A KR 20130039479 A KR20130039479 A KR 20130039479A
Authority
KR
South Korea
Prior art keywords
thread
progress
effective
execution
epc
Prior art date
Application number
KR1020110104061A
Other languages
English (en)
Other versions
KR101892273B1 (ko
Inventor
신용삼
이시화
이승원
손민영
Original Assignee
삼성전자주식회사
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 삼성전자주식회사 filed Critical 삼성전자주식회사
Priority to KR1020110104061A priority Critical patent/KR101892273B1/ko
Priority to US13/588,228 priority patent/US9223615B2/en
Publication of KR20130039479A publication Critical patent/KR20130039479A/ko
Application granted granted Critical
Publication of KR101892273B1 publication Critical patent/KR101892273B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/485Task life-cycle, e.g. stopping, restarting, resuming execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3409Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment for performance assessment
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3466Performance evaluation by tracing or monitoring
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3636Software debugging by tracing the execution of the program
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/30123Organisation of register space, e.g. banked or distributed register file according to context, e.g. thread buffers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/451Execution arrangements for user interfaces
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/508Monitor

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Debugging And Monitoring (AREA)
  • Human Computer Interaction (AREA)

Abstract

마이크로 아키텍쳐를 사용하는 컴퓨터 환경에서 응용 프로그램의 진행 상태 또는 성능을 측정하기 위한 방법 및 장치에 관한 것으로, 스레드 프로그레스 트래킹(Thread Progress Tracking) 장치는 응용 프로그램을 구성하는 스레드(Thread)를 선택하고, 상기 스레드를 구성하는 적어도 하나의 명령어의 수행방식이, 수행 시간이 일정한 유효 수행(effective execution) 방식인지 또는 상기 수행 시간이 일정하지 않은 지연 사이클을 가지는 비 유효 수행(Non-effective execution) 방식인지 기 설정된 기준에 기초하여 결정하며, 상기 비 유효 수행 방식으로 수행되는 명령어를 제외한 상기 유효 수행 방식으로 수행되는 명령어의 수행 시간을 누적하는 유효 프로그레스 카운터(EPC, Effective Progress Counter)에 기초하여 유효 프로그레스 인덱스(EPI, Effective Progress Index)를 생성한다.

Description

스레드 프로그레스 트래킹 방법 및 장치{APPARATUS AND METHOD FOR THREAD PROGRESS TRACKING}
기술분야는 마이크로 아키텍쳐를 사용하는 컴퓨터 환경에서 데이터 처리 및 특정 기능을 수행하는 응용 프로그램의 진행 상태 또는 성능을 측정하기 위한 방법 및 장치에 관한 것이다.
개인 휴대 단말의 보급과 정보 처리 요구량이 증가함에 따라 컴퓨팅 기기들은 점점 복잡하고, 다양한 응용들을 동시에 처리해야 하는 상황에 놓여 있다. 또한, 실시간 처리를 요구하는 멀티미디어와 같은 어플리케이션이 증가함에 따라, 컴퓨팅 기기들의 시스템 성능에 대한 요구량도 점점 증가하고 있으며, 단일 프로세서 만으로는 어플리케이션을 효율적으로 처리할 수 없는 상황에 놓여 있다.
이러한 상황을 극복하기 위해 반도체 집적기술의 발달과 멀티 프로세서 컴퓨팅 기술이 등장하였다. 멀티 프로세서를 사용하는 경우 단일 프로세서보다 에너지 효율 및 성능향상에 있어서 많은 이점이 있다. 그러나 멀티 프로세서를 이용한 시스템의 설계 및 개발은 쉽지 않으며, 특히 동시성을 가지는 시스템의 검증이 어렵다. 실제 동시성을 가진 시스템의 검증 비용은 기존 순차적 시스템 개발기간의 코어 수의 제곱에 비례하여 증가한다. 검증 비용을 줄이기 위한 다양한 방법들이 제안되고 있는데 다양한 방법의 효율적인 구현을 위해 기본적으로 필요한 기능은 다양한 명령어들을 수행하는 응용 프로그램의 성능 및 진행 상황을 정확하게 측정하는 것이다.
일 측면에 있어서, 스레드 프로그레스 트래킹(Thread Progress Tracking) 장치는 응용 프로그램을 구성하는 스레드(Thread)를 선택하는 선택부, 상기 스레드를 구성하는 적어도 하나의 명령어의 수행방식이, 수행 시간이 일정한 유효 수행(effective execution) 방식인지 또는 상기 수행 시간이 일정하지 않은 지연 사이클을 가지는 비 유효 수행(Non-effective execution) 방식인지 기 설정된 기준에 기초하여 결정하는 제어부 및 상기 비 유효 수행 방식으로 수행되는 명령어를 제외한 상기 유효 수행 방식으로 수행되는 명령어의 수행 시간을 누적하여 유효 프로그레스 인덱스(EPI, Effective Progress Index)를 생성하는 유효 프로그레스 카운터(EPC, Effective Progress Counter)를 포함한다.
상기 비 유효 수행(Non-effective execution) 방식은 하드웨어에 기초한 프로세서의 명령어 수준에서 비 유효 수행 방식으로 상기 명령어를 수행하는 하드웨어 비 유효 수행(HWNE, Hardware Non-effective execution) 방식 및 소프트웨어에 기초한 명령어들로 구성된 함수 수준에서 비 유효 수행 방식으로 상기 함수를 수행하는 소프트웨어 비 유효 수행(SWNE, Software Non-effective execution) 방식을 포함할 수 있다.
다른 일 측면에 있어서, 스레드 프로그레스 트래킹(Thread Progress Tracking) 장치는 상기 스레드가 프로세서를 점유하고, 상기 스레드가 수행되는 동안 공유 메모리에 접근하는데 소모된 사이클을 누적하여 메모리 프로그레스 인덱스(MPI, Memory Progress Index)를 생성하는 메모리 프로그레스 카운터(MPC, Memory Progress Counter)를 더 포함할 수 있다.
다른 일 측면에 있어서, 스레드 프로그레스 트래킹(Thread Progress Tracking) 장치는 상기 스레드가 프로세서를 점유하고, 상기 스레드가 수행되는 동안 시스템 커널 수행에 소모된 사이클을 누적하여 커널 프로그레스 인덱스(KPI, Kernel Progress Index)를 생성하는 커널 프로그레스 카운터(KPC, Kernel Progress Counter)를 더 포함할 수 있다.
다른 일 측면에 있어서, 스레드 프로그레스 트래킹 장치는 상기 스레드가 프로세서를 점유하고, 상기 스레드가 수행되는 동안 I/O(Input/Output) 데이터 입출력 코드를 수행하기 위해, 상기 I/O의 상태를 반복적으로 확인하는데 사용된 사이클을 누적하여 입출력 프로그레스 인덱스(IOPI, Iuput Output Progress Index)를 생성하는 입출력 프로그레스 카운터(IOPC, Input Ouput Progress Counter)를 더 포함할 수 있다.
상기 유효 프로그레스 카운터(EPC)는 상기 명령어 수행방식이 유효 수행 방식으로 결정되면, 시스템 클럭에 기초하여 카운트를 수행할 수 있다.
상기 유효 프로그레스 카운터(EPC)는 하드웨어에 기초한 프로세서의 명령어 수준에서 비 유효 수행 방식으로 상기 명령어를 수행하는 하드웨어 비 유효 수행(HWNE) 신호 또는 소프트웨어에 기초한 명령어들로 구성된 함수 수준에서 비 유효 수행 방식으로 상기 함수를 수행하는 소프트웨어 비 유효 수행(SWNE) 신호에 의하여 동작이 제어될 수 있다.
상기 하드웨어 비 유효 수행(HWNE) 신호는 프로세서에서 발생하는 스톨(Stall) 신호에 기초하여 생성될 수 있다.
상기 소프트웨어 비 유효 수행(SWNE) 신호는 명령어들로 구성된 사용자 함수를 수행하는 경우, 별도의 코드(API, Application Programming Interface)를 사용하여 생성될 수 있다.
상기 유효 프로그레스 카운터(EPC)는 상기 스레드가 러닝 상태(running state)에 있지 않으면, 상기 유효 프로그레스 카운터(EPC)가 동작하지 않도록, 소프트웨어 비 유효 수행(SWNE) 신호의 세트를 결정하는 결정부를 포함할 수 있다.
상기 결정부는 러닝 상태인 상기 스레드에 인터럽트(interrupt)가 발생하면, 상기 유효 프로그레스 카운터(EPC)가 동작하지 않도록 상기 소프트웨어 비 유효 수행 (SWNE) 신호를 세트하고, 상기 인터럽트 서비스 루틴 수행 후 다시 상기 스레드가 러닝 상태가 되면, 상기 유효 프로그레스 카운터(EPC)가 동작하도록 상기 소프트웨어 비 유효 수행 (SWNE) 신호를 클리어할 수 있다.
상기 유효 프로그레스 카운터(EPC)는 프로세서 단위로 위치할 수 있다.
다른 일 측면에 있어서, 스레드 프로그레스 트래킹 장치는 각각의 스레드마다, 상기 스레드에 대응하는 유효 프로그레스 인덱스(EPI)를 저장하는 메모리 및 상기 스레드가 러닝 상태에 있으면 현재의 유효 프로그레스 카운터(EPC) 값을 상기 유효 프로그레스 인덱스(EPI)로 하여 상기 메모리로 복사하는 복사부를 더 포함할 수 있다.
다른 일 측면에 있어서, 스레드 프로그레스 트래킹 장치는 제1 스레드가 제2 스레드로 컨텍스트 스위치(context switch)되는 시점에서 상기 유효 프로그레스 카운터(EPC) 값을 상기 유효 프로그레스 인덱스(EPI)로 하여 메모리에 복사하는 복사부 및 상기 제2 스레드에서 상기 제1 스레드로 다시 컨텍스트 스위치 되는 경우, 상기 메모리에 복사된 유효 프로그레스 인덱스(EPI)를 상기 유효 프로그레스 카운터(EPC)로 로딩하는 로딩부를 더 포함할 수 있다.
다른 일 측면에 있어서, 스레드 프로그레스 트래킹 장치는 스케쥴러(Scheduler) 상에서 상기 스레드의 스레드 제어 블록에 비 유효 함수(NE Function)가 수행 중임을 나타내기 위해 설정된 플래그 값이 세트되어 있는지 판단하는 세트 판단부를 더 포함할 수 있다.
상기 세트 판단부는 상기 플래그 값이 세트된 경우에는 소프트웨어 비 유효 수행(SWNE) 신호를 세트하여 상기 유효 프로그레스 카운터(EPC)를 중지시키고, 상기 플래그 값이 세트되지 않은 경우에는 스레드의 코드를 유효하게 수행하는데 사용되지 않은 유효 프로그레스 카운터(EPC) 증가분을 보정할 수 있다.
일 측면에 있어서, 스레드 프로그레스 트래킹 방법은 응용 프로그램을 구성하는 스레드(Thread)를 선택하는 단계, 상기 스레드를 구성하는 적어도 하나의 명령어의 수행방식이, 수행 시간이 일정한 유효 수행(effective execution) 방식인지 또는 상기 수행 시간이 일정하지 않은 지연 사이클을 가지는 비 유효 수행(Non-effective execution) 방식인지 기 설정된 기준에 기초하여 결정하는 단계 및 상기 비 유효 수행 방식으로 수행되는 명령어를 제외한 상기 유효 수행 방식으로 수행되는 명령어의 수행 시간을 누적하는 유효 프로그레스 카운터(EPC, Effective Progress Counter)에 기초하여 유효 프로그레스 인덱스(EPI, Effective Progress Index)를 생성하는 단계를 포함한다.
상기 유효 프로그레스 카운터(EPC)는 하드웨어에 기초한 프로세서의 명령어 수준에서 비 유효 수행 방식으로 상기 명령어를 수행하는 하드웨어 비 유효 수행(HWNE) 신호 또는 소프트웨어에 기초한 명령어들로 구성된 함수 수준에서 비 유효 수행 방식으로 상기 함수를 수행하는 소프트웨어 비 유효 수행(SWNE) 신호에 의하여 동작이 제어될 수 있다.
다른 일 측면에 있어서, 스레드 프로그레스 트래킹 방법은 각각의 스레드마다, 상기 스레드에 대응하는 유효 프로그레스 인덱스(EPI)를 메모리에 저장하는 단계 및 상기 스레드가 러닝 상태에 있으면 현재의 유효 프로그레스 카운터(EPC) 값을 상기 유효 프로그레스 인덱스(EPI)로 하여 상기 메모리로 복사하는 단계를 더 포함할 수 있다.
다른 일 측면에 있어서, 스레드 프로그레스 트래킹 방법은 제1 스레드가 제2 스레드로 컨텍스트 스위치(context switch)되는 시점에서 상기 유효 프로그레스 카운터(EPC) 값을 상기 유효 프로그레스 인덱스(EPI)로 하여 메모리에 복사하는 단계 및 상기 제2 스레드에서 상기 제1 스레드로 다시 컨텍스트 스위치 되는 경우, 상기 메모리에 복사된 유효 프로그레스 인덱스(EPI)를 상기 유효 프로그레스 카운터(EPC)로 로딩하는 단계를 더 포함할 수 있다.
일 측면에 있어서, 스레드 프로그레스 트래킹 방법은 스케쥴러 상에서 수행될 명령어에 따라 준비된 스레드를 선택하는 단계, 상기 스레드에 저장된 유효 프로그레스 인덱스(EPI)를 유효 프로그레스 카운터(EPC)의 초기 값으로 세팅하고, 상기 스레드에 저장된 커널 프로그레스 인덱스(KPI)를 커널 프로그레스 카운터(KPC)의 초기 값으로 세팅하는 단계, 상기 스레드의 스레드 제어 블록에 비 유효 함수(NE Function)가 수행 중임을 나타내기 위해 설정된 플래그 값이 세트되어 있는지 판단하는 단계, 상기 플래그 값이 세트된 경우에는 소프트웨어 비 유효 수행(SWNE) 신호를 세트하여 유효 프로그레스 카운터(EPC)를 중지시키고, 커널 프로그레스 소프트웨어(KPSW, Kernel Progress Software) 신호를 세트하여 커널 프로그레스 카운터(KPC)를 동작시키는 단계 및 상기 플래그 값이 세트되지 않은 경우에는 상기 스레드의 코드를 유효하게 수행하는데 사용되지 않은 유효 프로그레스 카운터(EPC) 증가분을 보정하고, 상기 소프트웨어 비 유효 수행(SWNE) 신호를 클리어하여 상기 중지된 유효 프로그레스 카운터(EPC)를 동작시키며, 상기 커널 프로그레스 소프트웨어(KPSW) 신호를 클리어하여 상기 커널 프로그레스 카운터(KPC)를 중지시키는 단계를 포함한다.
일 측면에 있어서, 스레드 프로그레스 트래킹 방법은 러닝 상태인 스레드에서 스케쥴 이벤트가 발생하면 소프트웨어 비 유효 수행(SWNE) 신호를 세트하여 유효 프로그레스 카운터(EPC)를 중지시키고, 커널 프로그레스 소프트웨어(KPSW) 신호를 세트하여 커널 프로그레스 카운터(KPC)를 동작시키는 단계, 상기 유효 프로그레스 카운터(EPC)가 중지된 상태에서 컨텍스트 스위치 이벤트가 발생하면 상기 중지된 유효 프로그레스 카운터(EPC) 값을 상기 스레드의 유효 프로그레스 인덱스(EPI) 값으로 하여 메모리에 저장하는 단계 및 상기 유효 프로그레스 카운터(EPC)가 중지된 상태에서 상기 스케쥴 이벤트가 종료하면 상기 스레드의 코드를 유효하게 수행하는데 사용되지 않은 유효 프로그레스 카운터(EPC) 증가분을 보정하고, 상기 소프트웨어 비 유효 수행(SWNE) 신호를 클리어하여, 상기 중지된 유효 프로그레스 카운터(EPC)를 동작시키며, 상기 커널 프로그레스 소프트웨어(KPSW) 신호를 클리어하여 상기 커널 프로그레스 카운터(KPC)를 중지시키는 단계를 포함한다.
스레드 프로그레스 트래킹(Thread Progress Tracking) 장치를 이용함으로써 응용 프로그램을 구성하는 스레드의 진행상황을 예측할 수 있어 효율적인 스레드 및 시스템 자원관리를 할 수 있다.
또한, 유효 프로그레스 카운터(EPC, Effective Progress Counter)는 계산이 간단하여 관리에 따른 성능 저하가 거의 발생하지 않으며 기존 카운터에 소프트웨어 비 유효 수행(SWNE) 및 하드웨어 비 유효 수행(HWNE) 신호에 의한 동작/중지 기능만 추가하여 적은 비용으로 구현할 수 있다.
또한, 스레드 프로그레스 트래킹 장치는 프로세서 사이클 수준의 정밀한 스레드 프로그레스 인덱스를 제공하여 멀티 스레딩시 정확한 스레드 관리를 할 수 있다.
또한, 스레드 프로그레스 트래킹 장치는 다중 프로세서 상태에서 병렬 처리되는 프로그램들의 유효한 수행 구간을 매우 적은 런타임 오버헤드(runtime overhead)를 가지고 제공할 수 있다.
또한, 스레드 프로그레스 트래킹 장치는 정밀한 스레드 프로그레스 인덱스를 제공하여 예측 가능한 시스템 제어 기능을 제공하고, 효율적인 부하 분배 및 저전력 관리 기능을 효율적으로 수행할 수 있도록 한다.
또한, 스레드 프로그레스 트래킹 장치는 유효 프로그레스 인덱스를 통하여 스레드의 진행 상황을 정확히 예측할 수 있으므로 동시성을 가진 시스템을 효과적으로 검증하는데 이용될 수 있다.
또한, 스레드 프로그레스 트래킹 장치는 입출력 자원의 충돌율, 메모리 자원의 충돌율 및 커널 자원의 충돌율에 대한 정보를 제공할 수 있다.
도 1은 일반적인 응용 프로그램이 수행되는 컴퓨팅 환경을 나타낸 도면이다.
도 2는 일 실시예에 따라 응용 프로그램의 기능을 수행하는 명령어를 유효 수행 및 비 유효 수행으로 구분하여 나타낸 도면이다.
도 3은 일 실시예에 따른 스레드 프로그레스 트래킹 장치의 블록도이다.
도 4는 다른 일 실시예에 따른 스레드 프로그레스 트래킹 장치의 블록도이다.
도 5는 일 실시예에 따른 유효 프로그레스 인덱스의 개념을 나타낸 도면이다.
도 6은 일 실시예에 따라 스레드의 상태 변화에 따른 프로그레스 카운터의 동작여부를 나타낸 도면이다.
도 7은 일 실시예에 따른 유효 프로그레스 카운터와 스레드 별 유효 프로그레스 인덱스의 관계를 나타낸 예이다.
도 8a는 일 실시예에 따른 유효 프로그레스 카운터(EPC), 메모리 프로그레스 카운터(MPC) 및 커널 프로그레스 카운터(KPC)를 나타낸 도면이다.
도 8b는 일 실시예에 따른 유효 프로그레스 카운터(EPC), 메모리 프로그레스 카운터(MPC) 및 커널 프로그레스 카운터(KPC)를 활성화하는 신호들을 나타낸 도면이다.
도 9는 일 실시예에 따른 스레드 프로그레스 트래킹 방법을 설명하기 위한 흐름도이다.
도 10은 일 실시예에 따른 스레드 프로그레스 트래킹 방법에서, 운영체제의 스케쥴러 동작 중 비유효 함수가 수행되는 경우를 나타낸 흐름도이다.
도 11은 일 실시예에 따른 스레드 프로그레스 트래킹 방법에서, 비유효 함수가 동작하는 경우의 유효 프로그레스 카운터의 동작을 나타낸 흐름도이다.
도 12는 일 실시 예에 따른 하드웨어 비 유효 수행 신호를 발생시키는 과정을 나타낸 흐름도이다.
이하, 일측에 따른 실시예를 첨부된 도면을 참조하여 상세하게 설명한다.
수행되는 응용 프로그램의 정확한 성능 및 진행이 측정 가능하면 측정된 값을 지표화하여 스레드의 성능 개선, 부하 균형 및 저전력 관리에 활용할 수 있다. 또한, 시스템에서 공유 되는 자원들에 대한 충돌 상태를 효율적으로 모니터링하고, 지표화할 수 있다면, 지표는 응용 프로그램의 수행에 필요한 자원할당, 재분배 및 스케줄링을 결정함에 있어서 중요한 정보로 활용될 수 있다. 문제는 어떠한 지표를 생성하여 효율적으로 자원을 분배할 것인가에 있다.
런타임 성능 저하를 발생시키지 않으면서 응용 프로그램의 상태를 정확하고 정밀하게 측정하는 것은 용이하지 않다. 또한, 응용 프로그램의 수행을 구성하는 명령어들의 수행 시간은 일정하지 않다. 또한, 응용 프로그램의 수행시 함께 수행되는 다른 응용 프로그램들의 예상하지 못한 영향으로 인하여, 응용 프로그램의 상태에 대한 정확한 측정이 쉽지 않다. 단일 응용 프로그램이 수행되는 경우에도 단일 응용을 구성하는 여러 스레드들이 함께 수행되면 서로 영향을 미치게 되며, 하나의 스레드로 구성된 경우에도 스레드를 구성하는 명령어들의 수행시간이 일정하지 않기 때문에 응용 프로그램의 상태 측정이 어렵다.
종래 응용 프로그램의 진행 상태를 측정하는 방법은 크게 부가적인 코드를 삽입하는 방법과 퍼포먼스 카운터(performance counter)를 활용하는 방법이 있다. 부가적인 코드를 삽입하는 방법은 비교적 구현이 용이하나, 삽입에 따른 런타임 오버헤드로 인해 응용 프로그램 진행 상태의 정밀한 측정이 불가능하다. 또한, 퍼포먼스 카운터를 활용하는 방법은 비교적 저렴한 비용으로 구현이 가능하나 기본적으로 retired instruction 이벤트를 사용함으로써 스레드간에 클럭 레이트(rate)의 차이가 발생한다. 또한, 가상 클럭의 레이트를 높여 고정밀 지표를 측정하기 위해서는 퍼포먼스 카운터의 인터럽트 오버헤드가 발생하여 응용 프로그램의 성능을 저하시킨다. 따라서, 정밀하면서도 정확한 실제 스레드 프로그레스를 반영하며, 적은 런타임 오버헤드 및 적은 구현 비용이 드는 응용 프로그램의 진행 상태 측정 방법이 요구된다.
도 1은 일반적인 응용 프로그램이 수행되는 컴퓨팅 환경을 나타낸 도면이다.
일반적으로 응용 프로그램은 프로세서 상에서 메모리와 하드웨어 디바이스를 자원으로 하여 정해진 기능을 수행한다. 메모리는 보통의 경우 계층적 구조를 가진다. 이때, 접속(access) 속도가 빠른 메모리는 로컬 버스에 구비되고, 이러게 접속 속도가 빨라 로컬 버스에 구비된 메모리는 내부 메모리 또는 로컬 메모리라고 정의될 수 있다. 접속 속도는 느리지만 저렴한 메모리는 시스템 버스상에 구비될 수 있다. 이렇게 접속 속도는 느리지만 시스템 버스 상에 구비된 메모리는 외부 메모리라고 정의될 수 있다. 또한, 다중 프로세서는 높은 성능의 요구사항을 만족시키기 위해 하나의 시스템에 여러 개의 프로세서들을 집적하여 응용 프로그램을 병렬처리 한다.
일반적으로 응용 프로그램은 하나 이상의 스레드로 구성된다. 따라서, 하나의 프로세서 상에서 다중 스레드가 수행될 수 있다. 하나의 프로세서 상에서 다중 스레드가 수행되는 것을 멀티 스레딩이라고 한다. 응용 프로그램의 성능 및 진행 상태를 측정하기 위해서는 응용 프로그램을 구성하는 스레드의 성능 및 진행 상태를 측정할 수 있어야 한다. 도 1은 일반적으로 구성될 수 있는 컴퓨팅 환경의 일 예이며, 일측에 따른 스레드 프로그레스 트래킹 장치의 적용 환경은 도 1에 도시된 예에 한정되지 않는다.
도 2는 일 실시예에 따라 응용 프로그램의 기능을 수행하는 명령어를 유효 수행 및 비 유효 수행으로 구분하여 나타낸 도면이다.
응용 프로그램은 복수의 스레드들로 구성될 수 있다. 스레드는 특정 기능을 수행하기 위한 명령어들로 구성될 수 있다. 명령어의 수행 방식은 유효 수행(effective execution) 방식 및 비 유효 수행(noneffective execution) 방식으로 구분될 수 있다.
명령어의 수행 방식이 유효 수행 방식인 경우, 명령어의 수행 완료 시점 또는 명령어 그룹의 수행완료 시점은 일정한 사이클을 갖는다. 유효 수행 방식으로 수행되는 명령어들은 대부분 프로세서의 외부 상황과는 독립적으로 수행된다. 또한, 유효 수행 방식으로 수행되는 명령어들은 해당 명령어들의 수행 사이클들이 프로그램 진행을 위해서 반드시 필요한 경우를 의미한다. 또한, 해당 명령어들의 수행 사이클들은 응용 프로그램의 목적에 유효한 명령어들을 수행하는데 필요한 프로세서 사이클들로 측정될 수 있다.
반면, 명령어의 수행 방식이 비 유효 수행 방식인 경우, 명령어 혹은 명령어 그룹의 수행 완료 시점은 일정하지 않은 지연 사이클을 갖는다. 비 유효 수행 방식으로 수행되는 명령어들의 대부분은 입출력단, 메모리 등과 같이 공유되는 자원을 사용해야 하는 경우들이다. 프로세서에서 비 유효 수행 방식의 명령어들이 수행되는 경우, 해당 명령어들의 수행이 완료되기 위해서는 수십 사이클의 지연이 요구될 수 있다. 이러한 지연은 해당 명령어의 수행 시, 프로세서가 접근하려는 공유 자원을 다른 프로세서에서 사용하는 경우 발생할 수 있다. 공유 자원에 다른 프로세서와 동시 접속함으로써 충돌이 발생하고, 충돌로 인하여 지연이 발생할 수 있다.
도 2를 참조하면, 스레드가 수행되는 물리적 시간(Physical time)은 일정하게 증가한다. 이때, 물리적 시간의 증가는 RPI (Real Progress Index, 이하 RPI라 함)로 표시될 수 있다.
유효 수행(effective execution) 방식의 명령어들은 동일한 수행 시간 내에 명령어들이 완료된다. 반면에 비 유효 수행(Noneffective execution) 방식의 명령어들은 다른 스레드들의 수행에 의하여 영향을 받거나, 수행시점에 따라 발생하는 상황 때문에 명령어들의 수행 완료시간이 일정하지 않게 된다.
비 유효 수행은 프로세서의 명령어 수준에서 비 유효 수행을 하는 하드웨어 비 유효 수행(Hardware Noneffective execution, 이하 HWNE라 함)과 명령어들로 구성된 함수 또는 시스템의 커널 수준에서 응용 프로그램의 수행 중에 발생하는 이벤트들로 비 유효 수행을 하는 소프트웨어 비 유효 수행(Software noneffective execution, 이하 SWNE라 함)으로 구분된다. 여기서 시스템의 커널은 일반적인 사용자 응용 프로그램이 아닌 운영체제를 구성하는 시스템 프로그램을 의미할 수 있다. HWNE와 SWNE는 기 설정된 기준에 따라 구분될 수 있다.
실제 스레드의 수행 시간에서 SWNE와 HWNE를 제외한 나머지 부분의 수행 시간은 모두 유효한 수행 시간이라고 할 수 있다. 스레드의 수행에서 SWNE와 HWNE를 제외한 나머지 부분을 수행하는데 필요한 사이클은 매번 동일한 값을 가지므로 SWNE와 HWNE를 제외한 나머지 부분을 지표화하면 스레드의 유효한(effective) 수행 지표로 활용할 수 있다. 여기서 유효한 수행 시간을 나타내는 지표를 유효 프로그레스 인덱스(Effective Progress Index, 이하 EPI라 함)라고 한다. EPI는 다음의 수식으로 표현될 수 있다.
P스레드 = P유효 수행 + P비유효 수행
τ유효 스레드 프로그레스 = τ물리적 - (τSWNE + τHWNE)
여기서 응용 프로그램을 구성하는 프로그램 P스레드 는 유효 수행(P유효 수행)과 비유효 수행(P비유효 수행)으로 구분될 수 있다. 스레드의 유효 프로그레스를 나타내는 시간(τ유효 스레드 프로그레스)은 스레드가 수행되는 물리적 시간(τ물리적) 중에서 SWNE 수행 시간(τSWNE)과 HWNE 수행 시간(τHWNE)을 제거하면 된다.
도 3은 일 실시예에 따른 스레드 프로그레스 트래킹 장치의 블록도이다.
도 3을 참조하면, 일측에 따른 스레드 프로그레스 트래킹 장치는 선택부(310), 제어부(320) 및 유효 프로그레스 카운터(330)를 포함한다.
선택부(310)는 응용 프로그램을 구성하는 적어도 하나의 스레드(Thread)를 선택한다. 선택부(310)는 응용 프로그램을 구성하는 스레드 중에서 사용자가 요구하는 응용 프로그램을 수행할 수 있는 스레드를 선택한다.
제어부(320)는 스레드를 구성하는 명령어들 각각에 대하여, 수행 방식이 수행 시간이 일정한 유효 수행(effective execution) 방식인지 또는 수행 시간이 일정하지 않은 지연 사이클을 가지는 비 유효 수행(Non-effective execution) 방식인지 결정한다.
스레드를 구성하는 명령어들 각각에 대한 유효 수행 방식 또는 비 유효 수행 방식의 판단은 기 설정된 기준에 기초하여 결정할 수 있다. 여기서 기 설정된 기준은 명령어의 수행시간이 일정한 사이클을 가지는지 여부로 정의될 수 있다. 또는 기 설정된 기준은 응용 프로그램의 목적에 유효한 명령어인지 여부로 정의될 수도 있다. 응용 프로그램의 목적에 유효한 명령어란 응용 프로그램의 진행 정도를 나타내는 프로그레스 관점에서 결정될 수 있다. 즉, 응용의 실제 진행 상태를 나타내는데 무의미한 사이클이 소요되는 구간을 비유효 수행 구간으로 정의 할 수 있으며 비유효 수행 구간에서의 프로세서의 명령어들은 비 유효한 명령어로 정의될 수 있다. 비유효 수행 구간은 실제 프로세서의 명령어가 수행되는 프로세서 사이클 중에서 어느 특정 구간이 될 수 있으며, 프로그램 코드 수준에서 어느 특정 영역을 구성하는 명령어 집합(프로그램 소스 코드 블록)으로 구성될 수 있다. 제어부(320)는 명령어가 무엇인지 알면 기 설정된 기준에 기초하여 유효 수행 방식 또는 비 유효 수행 방식 여부를 판단할 수 있다. 이에 대해서는 도 5에서 좀 더 상세히 설명한다. 또한, 기 설정된 기준은 HWNE와 SWNE로 구분되어 정의 될 수 있다.
유효 프로그레스 카운터(330)(Effective Progress Counter, 이하 EPC라 함)는 명령어들 중에서 비 유효 수행 방식으로 수행되는 명령어를 제외한 유효 방식으로 수행되는 명령어에 대하여 유효 프로그레스 인덱스(Effective Progress Index, 이하 EPI라 함)를 생성한다.
EPC(330)는 스레드에서 수행되는 명령어가 유효 수행 방식으로 수행되는 경우에만 카운트를 증가시켜 EPI를 생성할 수 있다. 또는 EPC(330)는 RPI에서 비 유효 수행 방식으로 수행되는 경우를 제거하여 EPI를 생성할 수도 있다. RPI는 스레드가 수행되는 물리적 시간을 나타내는 지표이다.
EPC(330)는 명령어의 수행 방식이 유효 수행 방식으로 결정되면 시스템 클럭에 기초하여 카운트를 수행할 수 있다.
EPC(330)는 프로세서 단위로 위치할 수 있다. 즉, EPC(330)는 프로세서 당 한 개씩 탑재될 수도 있다.
EPC(330)는 HWNE 신호 또는 SWNE 신호에 의하여 동작이 제어될 수 있다. EPC(330)는 HWNE 신호 또는 SWNE 신호가 세트되면 카운트를 중지하고, HWNE 신호 또는 SWNE 신호가 클리어되면 카운트를 재개할 수 있다.
HWNE 신호는 하드웨어에 기초한 프로세서의 명령어 수준에서 비 유효 수행 방식으로 명령어를 수행하는 신호이고, SWNE 신호는 소프트웨어에 기초한 명령어들로 구성된 함수 수준에서 비 유효 수행 방식으로 함수를 수행하는 신호를 의미한다.
HWNE 신호는 프로세서에서 발생하는 스톨(Stall) 신호에 기초하여 생성될 수 있다. SWNE 신호는 명령어들로 구성된 사용자 함수를 수행하는 경우, 별도의 코드(Application Programming Interface, 이하 API라 함)를 사용하여 생성될 수 있다.
도 4는 다른 일 실시예에 따른 스레드 프로그레스 트래킹 장치의 블록도이다.
도 4를 참조하면, 일측에 따른 스레드 프로그레스 트래킹 장치는 선택부(410), 제어부(420), 유효 프로그레스 카운터(430), 세트 판단부(440), 메모리 프로그레스 카운터(450), 커널 프로그레스 카운터(460), 입출력 프로그레스 카운터(470), 복사부(480), 로딩부(490), 메모리(495)를 포함할 수 있다.
선택부(410)는 응용 프로그램을 구성하는 적어도 하나의 스레드(Thread)를 선택할 수 있다.
제어부(420)는 스레드를 구성하는 명령어들 각각에 대하여, 수행 방식이 수행 시간이 일정한 유효 수행(effective execution) 방식인지 또는 수행 시간이 일정하지 않은 지연 사이클을 가지는 비 유효 수행(Non-effective execution) 방식인지 결정할 수 있다.
유효 프로그레스 카운터(430)(Effective Progress Counter, 이하 EPC라 함)는 명령어들 중에서 비 유효 수행 방식으로 수행되는 명령어를 제외한 유효 방식으로 수행되는 명령어에 대하여 유효 프로그레스 인덱스(Effective Progress Index, 이하 EPI라 함)를 생성할 수 있다.
EPC(430)는 결정부(431)를 포함할 수 있다. 결정부(431)는 스레드가 러닝 상태(running state)에 있지 않으면, SWNE 신호의 세트를 결정하여 EPC의 동작여부를 결정할 수 있다.
결정부(431)는 러닝 상태인 스레드에 인터럽트(interrupt)가 발생하면 SWNE 신호를 세트하여, EPC(430)를 중지시킬 수 있다. 결정부(431)는 인터럽트 서비스 루틴 수행 후 다시 스레드가 러닝 상태가 되면 SWNE 신호를 클리어하여, EPC(430)를 동작시킬 수 있다.
세트 판단부(440)는 스케쥴러(Scheduler) 상에서 스레드의 스레드 제어 블록(Thread Control Block)에 플래그 값이 세트되어 있는지 판단할 수 있다. 플래그 값은 비 유효 함수(NE Function, Non-Effective Function)가 수행 중임을 나타내기 위해 설정될 수 있다.
세트 판단부(440)는 플래그 값을 통하여 비 유효 함수의 수행여부를 판단할 수 있다. 세트 판단부(440)는 플래그 값이 세트된 경우에 SWNE 신호를 세트하여 EPC(430)를 중지시킬 수 있다. 세트 판단부(440)는 플래그 값이 세트되지 않은 경우에는 스레드의 코드를 수행하는데 유효하게 사용되지 않은 EPC(430) 증가분을 보정할 수 있다.
메모리 프로그레스 카운터(Memory Progress Counter, 이하 MPC라 함)(450)는 메모리 프로그레스 인덱스(Memory Progress Index, 이하 MPI라 함)를 생성할 수 있다. MPC(450)는 스레드가 프로세서를 점유하고, 스레드가 수행되는 동안 공유 메모리에 접근하는데 소모된 사이클을 누적하여 MPI를 생성할 수 있다. MPI는 스레드 또는 명령어가 비 유효 수행 방식으로 수행되는 일 예이다. MPI는 응용 프로그램 수행 중에 발생한 비 유효 방식 구간 중 공유 메모리에 접근하는 과정에서 발생한 충돌로 소모되는 사이클을 의미할 수 있다.
커널 프로그레스 카운터(Kernel Progress Counter, 이하 KPC라 함)(460)는 커널 프로그레스 인덱스(Kernel Progress Index, 이하 KPI라 함)를 생성할 수 있다. KPC(460)는 스레드가 프로세서를 점유하고, 스레드가 수행되는 동안 시스템 커널 수행에 소모된 사이클을 누적하여 KPI를 생성할 수 있다. KPI는 스레드 또는 명령어가 비 유효 수행 방식으로 수행되는 일 예이다. 시스템 커널 수행의 예로는 인터럽트, 스레드 컨텍스트 스위치(thread context switch), malloc 등의 시스템 함수들이 있다. 이러한 시스템 함수들의 호출에 따라 커널 공유 자원으로의 접근 과정에서 충돌이 발생함으로써 비 유효 수행 구간이 발생할 수 있다.
입출력 프로그레스 카운터(Input Ouput Progress Counter, 이하 IOPC라 함)(470)는 입출력 프로그레스 인덱스(Input Ouput Progress Index, 이하 IOPI라 함)를 생성할 수 있다. IOPC(470)는 스레드가 프로세서를 점유하고, 스레드가 수행되는 동안 I/O(Input/Ouput) 데이터 입출력 코드를 수행하기 위해, I/O의 상태를 반복적으로 확인하는데 사용된 사이클을 누적하여 IOPI를 생성할 수 있다. IOPI는 스레드 또는 명령어가 비 유효 수행 방식으로 수행되는 일 예이다. IOPI는 KPC(460)를 통하여 생성될 수도 있다.
IOPC(470)는 I/O Access를 위한 Polling 방식의 접근 형태에서 실제 I/O를 통한 데이터 송수신의 경우에는 동작하지 않는다. IOPC(470)는 프로세서가 I/O의 상태를 반복적으로 체크하는 코드 수행을 하는 경우에 동작할 수 있다.
스레드 프로그레스 트래킹 장치는 응용 프로그램의 상태를 측정할 수 있는 다양한 성능 지표들을 검출할 수 있다. 이러한 성능 지표에는 RPI, EPI, MPI, KPI 및 IOPI가 포함될 수 있다.
RPI는 스레드가 프로세서에서 수행중 누적된 프로세서 사이클의 누적 값을 의미할 수 있다. 또한, RPI는 스레드의 프로세서 점유율을 나타내는 지표로 사용될 수 있다.
EPI는 스레드의 프로세서 사이클 수준에서 카운트 된 유효 수행 사이클의 누적 값을 의미할 수 있다. 또한, EPI는 스레드의 유효 진행 상태를 나타내는 지표로 사용될 수 있다.
MPI는 스레드의 수행중 공유 자원 접근 충돌에 의해 스톨(Stall)되거나 소모된 사이클의 누적 값을 의미할 수 있다. 또한, MPI는 공유 자원으로의 접근 및 충돌 발생 정도를 나타내는 지표로 사용될 수 있다.
KPI는 스레드의 수행중 시스템 커널 수행에 의해 발생하는 비 유효 사이클의 누적 값을 의미할 수 있다. 또한, KPI는 시스템 커널에서 공유하는 자원으로의 접근 및 충돌 발생 정도를 나타내는 지표로 사용될 수 있다.
IOPI는 스레드의 수행중 I/O 코드를 수행하기 위해 I/O의 상태를 "반복적"으로 확인하는데 사용된 사이클을 의미할 수 있다. 또한, IOPI는 스레드의 I/O 자원으로의 접근 및 충돌 발생 정도를 나타내는 지표로 사용될 수 있다.
스레드 프로그레스 트래킹 장치는 위의 지표들을 활용하여 응용 프로그램을 구성하는 스레드들의 상태를 분석할 수 있다. 예를 들면, 스레드 프로그레스 트래킹 장치는 EPI와 RPI의 차이를 이용하여 응용 프로그램의 프로세서 점유율 대비, 실제 프로그램의 진행 상태를 파악할 수 있다. 이때, EPI와 RPI의 차이를 스레드의 비유효 사이클(Td)이라고 정의할 수 있다.
스레드 프로그레스 트래킹 장치는 비유효 사이클(Td)과 RPI를 이용하여 스레드의 유효 수행율(TE)을 계산할 수 있다. 이때, 유효 수행율(Thread Efficiency, TE)는 다음과 같이 정의할 수 있다. TE=1-(Td/RPI) TE는 스레드의 에너지 효율을 나타내는 지표로 사용될 수 있다.
스레드 프로그레스 트래킹 장치는 비유효 사이클(Td)과 MPI를 이용하여 스레드의 공유 자원 효율(ME)을 계산할 수 있다. 이때, 공유 자원 효율(Thread Shared Memory Efficiency, ME)은 다음과 같이 정의할 수 있다. ME=1-(MPI/Td) ME는 공유 자원에서 충돌하지 않고 유효하게 사용되는 구간의 비율을 나타내는 지표로 사용될 수 있다.
스레드 프로그레스 트래킹 장치는 비유효 사이클(Td)과 IOPI를 이용하여 스레드의 I/O 공유 자원 효율(IOE)을 계산할 수 있다. 이때, I/O 공유 자원 효율(IO Efficiency, IOE)는 다음과 같이 정의할 수 있다. IOE=1-(IOPI/Td) IOE는 I/O 공유 자원에서 충돌하지 않고 유효하게 사용되는 구간의 비율을 나타내는 지표로 사용될 수 있다.
스레드 프로그레스 트래킹 장치는 비유효 사이클(Td)과 KPI를 이용하여 스레드의 커널 공유 자원 효율(KE)을 계산할 수 있다. 이때, 커널 공유 자원 효율(Kernel Efficiency, KE)는 다음과 같이 정의할 수 있다. KE=1-(KPI/Td) KE는 커널 공유 자원에서 충돌하지 않고 유효하게 사용되는 구간의 비율을 나타내는 지표로 사용될 수 있다.
스레드 프로그레스 트래킹 장치는 비유효 사이클(Td)이 소정의 기준보다 큰 경우, MPI, KPI, IOPI를 활용할 수 있다. 스레드 프로그레스 트래킹 장치는 기 설정된 기준보다 MPI가 큰 경우, 공유하고 있는 자원의 배치를 이분화할 수 있다. 또는 분할된 메모리 영역으로 데이터를 분배하도록 할 수 있다. 스레드 프로그레스 트래킹 장치는 기 설정된 기준보다 KPI가 큰 경우, 동적인 파티션이 가능한 시스템 커널이라면, 별도의 분리된 시스템 파티션을 부여하여, 커널 자원간의 충돌을 예방할 수 있다.
복사부(480)는 스레드가 러닝 상태에 있으면 현재의 EPC(430)의 값을 메모리(495)로 복사할 수 있다. 메모리(495)는 각각의 스레드마다 스레드에 대응하는 유효 프로그레스 인덱스(EPI)를 저장할 수 있다.
복사부(480)는 제1 스레드가 제2 스레드로 컨텍스트 스위치(context switch)되는 시점에서 EPC(430)의 값을 EPI로 하여 메모리(495)에 복사할 수 있다. 로딩부(490)는 제2 스레드에서 제1 스레드로 다시 컨텍스트 스위치 되는 경우, 메모리(495)에 복사된 EPI를 EPC(430)로 로딩할 수 있다.
도 5는 일 실시예에 따른 유효 프로그레스 인덱스의 개념을 나타낸 도면이다. 보다 구체적으로, 스레드의 프로그레스 중 HWNE와 SWNE 부분이 제외된 유효 프로그레스 인덱스(EPI)의 개념을 나타낸 도면이다.
도 5는 실제 스레드의 수행 구간에서 SWNE와 HWNE가 제외된 논리적인(logical)인 시간을 지표화한 EPI 개념을 나타낸다. SWNE 및 HWNE가 수행되는 동안 물리적인 시간은 증가하지만 EPI는 증가하지 않는다. 따라서 EPI는 스레드의 절대적인 진행 위치를 나타내는 지표로 사용될 수 있다.
스레드의 수행에 있어서 SWNE 및 HWNE는 기 설정된 기준에 의해 판단될 수 있다. 기 설정된 기준은 현재까지 측정된 명령어 또는 명령어들로 구성된 함수의 수행시간이 일정한 경우와 일정하지 않은 경우를 고려하여 정의될 수 있다. 다만, 기 설정된 기준은 정의될 수 있는 SWNE 및 HWNE의 일 예일뿐 이에 한정되지 않으며 일측에 따른 발명이 속하는 분야에서 통상의 지식을 가진 자가 용이하게 유추할 수 있는 범위를 포함할 수 있다.
다음의 표 1에서 SWNE 및 HWNE의 일 예가 분류되어 있다.
종류


SWNE
스케쥴 타임 러닝 상태를 제외한 모든 스레드 상태
이벤트 또는 타이머 대기(EventWait(), sleep(),…)
인터럽트 관리 인터럽트 관리 명령어
인터럽스 서비스 루틴
동적 자원 할당 메모리 할당/비할당
스레드 생성/종료
비유효 사용자 함수 비지 웨이팅(Busy waiting)
비유효 외부 디바이스 접속 하드웨어 디바이스를 위한 블록 접속(Blocked access)
기타

HWNE
외부 메모리 접속 DRAM 접속
캐시 미스(Cache miss) 명령어/데이터 캐시 미스
브랜치(Branch) 동적 브랜치 예측(Dynamic branch prediction)
기타
표 1에서 비지 웨이팅은 I/O Access를 위한 Polling 방식의 접근 형태에서 실제 I/O를 통한 데이터 송수신의 경우에는 SWNE에 해당하지 않는다. 비지 웨이팅은 I/O의 상태를 체크하기 위해 "반복적"으로 코드를 수행하는 경우에만 SWNE에 해당한다. SWNE 및 HWNE는 표 1에 예시된 경우가 아니더라도 스레드의 기능을 수행하는데 있어서 유효하지 않은 모든 수행 구간을 포함할 수 있다.
도 6은 일 실시예에 따라 스레드의 상태 변화에 따른 프로그레스 카운터의 동작여부를 나타낸 도면이다.
운영체제는 응용 프로그램을 구성하는 여러 스레드들을 통하여 시스템 자원이 효율적으로 활용될 수 있도록 관리 및 스케쥴링 한다. 운영체제에 의하여 스레드가 스케쥴 될 때 도 6과 같은 상태 전이를 하게 된다.
스레드는 러닝 상태(running state)에 있는 경우에만 실질적인 수행이 이루어 질 수 있다. 따라서 스레드 프로그레스 트래킹 장치는 스레드가 러닝 상태가 아닌 경우에는 EPC가 동작하지 않도록 SWNE 신호를 제어한다.
예를 들면, 스레드 프로그레스 트래킹 장치는 스레드가 러닝 중에 인터럽트(interrupt)가 발생하면 SWNE 신호를 세트(set)하여 EPC가 동작하지 않도록 한다. 인터럽트 서비스 루틴 수행 후 스케쥴러 디스패치되어 다시 스레드가 러닝 상태가 되면, 스레드 프로그레스 트래킹 장치는 SWNE 신호를 클리어(clear)하여 EPC가 동작하도록 한다. 즉, 스레드 프로그레스 트래킹 장치는 해당 스레드의 EPI가 유효하게 수행중인 경우에만 생성될 수 있도록 한다.
도 7은 일 실시예에 따른 유효 프로그레스 카운터와 스레드 별 유효 프로그레스 인덱스의 관계를 나타낸 예이다.
도 7을 참조하면, EPC는 프로세서 별로 위치하여 SWNE 신호와 HWNE 신호에 의하여 활성화 여부가 결정될 수 있다.
도 7에서는 OR 논리회로로서 SWNE 신호 또는 HWNE 신호가 세트된 경우에 카운터가 불활성화 되도록 구성되어 있다. 여기서 카운터의 활성화 여부는 카운터의 동작 또는 부동작 여부를 의미한다. SWNE 신호와 HWNE 신호에 의하여 카운터가 제어되는 방식은 OR 논리회로 이외에 다양한 방식으로 가능하다.
스레드 프로그레스 트래킹 장치는 스레드 별로 각각의 EPI를 저장할 수 있는 공유 메모리 공간이 있으며 EPI 메모리에 현재의 EPC 값을 복사할 수 있다. 스레드 프로그레스 트래킹 장치는 EPC를 통해 카운트 된 값을 EPI 메모리에 복사할 수 있다.
이때, 스레드 프로그레스 트래킹 장치는 주기적으로 EPC의 값을 EPI 메모리에 복사할 수도 있다. 그러나 계속적으로 EPC 값을 EPI 메모리에 복사하는 것은 런타임 성능의 저하를 가져오기 때문에 수행 중인 스레드의 EPI는 EPC 자체가 표시 하도록 한다.
그리고 수행 중인 제1 스레드에서 제2 스레드로 컨텍스트 스위치(context switch) 되는 시점에 EPC 값을 EPI 메모리에 복사할 수 있다. 스레드 프로그레스 트래킹 장치는 제2 스레드가 디스패치(dispatch)되어 러닝 상태로 전이되는 경우 제2 스레드의 EPI 메모리에 저장되어 있던 EPI를 EPC로 세트하여 이전 수행 지표인 EPI로부터 EPC가 카운트 되도록 할 수 있다.
또한, 스레드 프로그레스 트래킹 장치는 다시 컨텍스트 스위치 이전의 제1 스레드로 컨텍스트 스위치가 발생하는 경우 제1 스레드에 할당된 EPI 메모리에 저장된 EPI를 로딩하여 EPC의 초기값으로 세트할 수 있다.
또한, EPC는 시스템 클럭에 기초하여 카운트를 할 수 있으며, SWNE 신호 또는 HWNE 신호에 의하여 EPC의 동작이 제어됨으로써 유효 수행에서만 카운트 값이 증가하도록 할 수 있다.
도 8a는 일 실시예에 따른 유효 프로그레스 카운터(EPC), 메모리 프로그레스 카운터(MPC) 및 커널 프로그레스 카운터(KPC)를 나타낸 도면이다.
EPC, MPC 및 KPC는 시스템 클럭에 따라 카운트를 수행할 수 있다. 시스템 클럭에 의하여 RPI가 생성될 수 있다.
EPC는 SWNE 신호 또는 HWNE 신호가 세트되면, 불활성화되어 카운트 동작을 중지시킬 수 있다. SWNE 신호 또는 HWNE 신호가 클리어 된 후에, EPC는 카운트 동작을 다시 시작할 수 있다.
MPC는 MPHW(Memory Progress Hardware)(internal) 신호 또는 MPHW(external) 신호가 세트되면, 활성화되어 카운트 동작을 시작할 수 있다. MPHW(internal) 신호는 하드웨어적인 코어 스톨(Core Stall) 중 내부 데이터의 상황(internal data dependency)에 따라 발생할 수 있다. MPHW(external) 신호는 외부 메모리 로드/저장에 의해 발생한 스톨(stall)에 따라 발생할 수 있다. MPHW(internal) 신호 또는 MPHW(external) 신호가 클리어 된 후에, MPC는 카운트 동작을 중지시킬 수 있다.
KPC는 KPSW(Kernel Progress Software) 신호가 세트되면, 활성화되어 카운트 동작을 시작할 수 있다. KPSW 신호는 시스템 커널을 이용하는 시스템 함수의 호출에 따라 발생할 수 있다. KPSW 신호가 클리어 된 후에, KPC는 카운트 동작을 중지시킬 수 있다.
도 8b는 일 실시예에 따른 유효 프로그레스 카운터(EPC), 메모리 프로그레스 카운터(MPC) 및 커널 프로그레스 카운터(KPC)를 활성화하는 신호들을 나타낸 도면이다.
EPC의 활성화 신호 및 불활성화 신호, KPC의 활성화 신호, MPC의 internal/external 활성화 신호는 코어의 신호들을 이용하여 생성될 수 있다. 제어 로직의 enable_epc 신호, enable_kpc 신호, enable_mpc 신호는 software 적으로 제어될 수 있다. enable_epc 신호는 EPC가 동작을 활성화 시킨다. enable_kpc 신호는 KPC의 동작을 활성화 시킨다. enable_mpc 신호는 MPC의 동작을 활성화시킨다.
예를 들면, EPC의 불활성화 신호에는 irq_detect_latch 신호, core_stall 신호 및 ex_valid 신호가 포함될 수 있다.
스레드 프로그레스 트래킹 장치는 빈번하게 발생하는 인터럽트(interrupt) 구간의 제어를 위해 코어 내부의 interrupt detect 신호인 irq_detect 신호로부터 latch 로직을 이용하여 irq_detect_latch 신호를 생성할 수 있다.
irq_detect_latch 신호는 irq(interrupt request)가 검출되어 코어가 irq를 처리를 하는 사이클 동안 유지될 수 있다.
운영체제의 인터럽트 핸들러 모듈은 인터럽트 구간이 끝나면 irq_detect_latch 신호를 clear할 수 있다.
irq_detect_latch 신호를 이용하는 방식은 EPC의 인터럽트 구간의 제어를 대부분 하드웨어 적으로 수행함으로써, EPC제어에 필요한 성능 감소를 많이 줄일 수 있다.
ex_valid 신호는 인터럽트나 브랜치(branch)에 의하여 이미 채워져 수행 될 파이프라인(pipeline)의 명령어가 유효하지 않음을 나타낸다. 이 경우 파이프라인의 명령어가 수행되는 사이클은 실제 유효하지 않은 수행으로서 EPC 카운터에서 제거되어야 하는 코어 사이클이다. core_stall 신호는 코어 레벨에서 스톨(stall)되는 다양한 경우를 나타낸다. 예를 들어 cache-miss에 의해 데이터를 로딩하기 위해 스톨되는 경우나, 내부 register등의 데이터 의존도에 의해 스톨이 발생하는 등의 모든 코어의 스톨의 발생이 포함될 수 있다.
KPC 활성화 신호에는 software 적으로 제어되는 kpi_swne 신호와 irq_detect_latch 신호가 포함될 수 있다.
MPC는 KPC가 활성화되는 경우에는 동작하지 않을 수 있다. 즉, KPC의 활성화 신호는 MPC의 불활성화 신호가 될 수 있다.
MPC의 활성화 신호로서 external memory load/store stall 신호가 사용될 수 있다, 코어에서 내부 메모리 load/store stall(ext1_ls_stall)신호와 외부 메모리 load/store stall(ext2_ls_stall) 신호가 분리되어 생성될 수 있다면, 분리된 두 신호에 따라 2개의 MPC가 동작할 수 있다.
스레드 프로그레스 트래킹 장치는 MPC1, MPC2의 두 개의 카운터를 운영하여 외부 및 내부 메모리 접근에 따른 충돌율을 별도로 측정할 수 있다.
도 9는 일 실시예에 따른 스레드 프로그레스 트래킹 방법을 설명하기 위한 흐름도이다.
910단계에서, 스레드 프로그레스 트래킹 장치는 응용 프로그램을 구성하는 적어도 하나의 스레드(Thread)를 선택한다. 스레드 프로그레스 트래킹 장치는 사용자가 요구하는 응용 프로그램을 수행하는 스레드를 선택할 수 있다.
920단계에서, 스레드 프로그레스 트래킹 장치는 스레드를 구성하는 명령어들 각각에 대하여, 수행 방식이 수행 시간이 일정한 유효 수행(effective execution) 방식인지 또는 수행 시간이 일정하지 않은 지연 사이클을 가지는 비 유효 수행(Non-effective execution) 방식인지 결정한다.
930단계에서, 스레드 프로그레스 트래킹 장치는 명령어 수행 방식이 비 유효 수행 방식이면 유효 프로그래스 카운터(EPC)를 동작시키지 않고, 비 유효 수행 방식 명령어를 수행한다.
940단계에서, 스레드 프로그레스 트래킹 장치는 적어도 하나의 명령어 중에서 유효 수행 방식으로 수행되는 명령어인 경우에 EPC에 기초하여 EPI를 생성한다. 여기서 EPC는 하드웨어에 기초한 프로세서의 명령어 수준에서 비 유효 수행 방식으로 명령어를 수행하는 하드웨어 비 유효 수행(HWNE) 신호 또는 소프트웨어에 기초한 명령어들로 구성된 함수 수준에서 비 유효 수행 방식으로 함수를 수행하는 소프트웨어 비 유효 수행(SWNE) 신호에 의하여 동작이 제어될 수 있다.
도 10은 일 실시예에 따른 스레드 프로그레스 트래킹 방법에서, 운영체제의 스케쥴러 동작 중 비유효 함수가 수행되는 경우를 나타낸 흐름도이다.
SWNE 신호는 스레드의 러닝 상태에서 비유효 함수가 수행되는 경우에도 발생할 수 있다. 예를 들면, 스레드에 "malloc"과 같은 동적 메모리 할당 시스템 함수가 호출되는 경우 "malloc"의 수행 시간이 일정하지 않다. 스레드 프로그레스 트래킹 장치는 "malloc" 함수를 호출하는 시점에서 결과를 받을 때까지를 SWNE 수행 구간으로 분류하여 해당 구간에서는 EPC가 동작하지 않도록 해야 한다. 이렇게 수행 시간이 일정하지 않은 "malloc"과 같은 함수를 비유효 함수(NE function)라고 한다.
1001단계에서 스레드 프로그레스 트래킹 장치는 운영체제의 스케쥴러를 초기화한다.
1003단계에서 스레드 프로그레스 트래킹 장치는 유효 프로그레스 인덱스(EPI) 모듈을 초기화한다. 초기화 과정은 새로 수행되는 절차와 기존에 수행된 절차가 구별되게 하기 위함이다.
1005단계에서 스레드 프로그레스 트래킹 장치는 스케쥴러 상에서 수행될 명령어에 따라 준비된 스레드를 선택한다. 수행될 명령어는 스레드마다 다르므로 스케쥴러 상에서 정해진 수행 명령어에 따라 스레드가 선택된다.
1007단계에서 스레드 프로그레스 트래킹 장치는 스레드에 저장된 EPI를 유효 프로그레스 카운터(EPC)의 초기 값으로 세팅한다. 또한, 스레드 프로그레스 트래킹 장치는 스레드에 저장된 커널 프로그레스 인덱스(KPI)를 커널 프로그레스 카운터(KPC)의 초기 값으로 세팅한다. 스레드에서 EPC 값이 처음부터 시작된 경우는 0부터 시작될 수도 있지만, 컨텍스트 스위치로 인해 다른 스레드에서 스위치 된 경우에는 EPI 메모리에 저장되어 있는 EPI를 EPC의 초기 값으로 세팅하여 카운트가 시작될 수 있다.
1009단계에서 스레드 프로그레스 트래킹 장치는 스레드의 스레드 제어 블록(Thread Control Block)에 비유효 함수(NE Function)가 수행 중임을 나타내기 위해 플래그가 존재하는지 검토한다.
1011단계에서 스레드 프로그레스 트래킹 장치는 스레드 제어 블록에 플래그가 세트되어 있는지 판단한다.
1013단계에서 스레드 프로그레스 트래킹 장치는 스레드 제어 블록의 플래그 값이 세트되지 않은 경우에는 스레드의 코드를 유효하게 수행하는데 사용되지 않은 유효 프로그레스 카운터 증가분을 보정한다.
1015단계에서 스레드 프로그레스 트래킹 장치는 소프트웨어 비 유효 수행(SWNE) 신호를 클리어하여 중지된 EPC를 동작시킨다. 각각의 구간별 보정해 주어야 하는 EPC 사이클은 미리 정의될 수 있다. 스레드 프로그레스 트래킹 장치는 정의된 값에 따라 EPC를 보정할 수 있다.
보정 가능한 EPC 사이클은 세트, 클리어, 비활성화와 같이 형식적 동작에 필요한 사이클을 포함할 수 있다. 예를 들면, SWNE를 세트(set)하는데 사용된 수행시간이 4 사이클이라면 스레드에서 명령어를 유효하게 수행하는데 필요한 사이클이 아니므로 SWNE를 클리어 하기 전에 EPC 값에서 4 사이클을 빼서 보정한다. 마찬가지로 비유효 함수를 호출하는 경우에도 EPC 값을 보정해야 한다.
스레드 프로그레스 트래킹 장치는 커널 프로그레스 소프트웨어(KPSW, Kernel Progress Software) 신호를 클리어하여 KPC를 중지시킬 수 있다.
1017단계에서 스레드 프로그레스 트래킹 장치는 스레드 제어 블록의 플래그 값이 세트된 경우에는 SWNE 신호를 세트하여 EPC를 중지시킨다. 또한, 스레드 프로그레스 트래킹 장치는 KPSW 신호를 세트하여 KPC를 동작시킨다. 이후 B의 단계로 진행할 수 있다.
1019단계에서 스레드 프로그레스 트래킹 장치는 스레드를 디스패치할 수 있다.
1021단계에서 디스패치된 스레드는 러닝 상태가 된다. SWNE가 클리어 된 뒤에는 EPC가 동작하므로 스레드에 요구된 명령어가 계속하여 수행된다.
1023단계에서 러닝 상태인 스레드에서 스케쥴 이벤트가 발생할 수 있다.
1025단계에서 스레드 프로그레스 트래킹 장치는 SWNE 신호를 세트하여 EPC를 중지시킨다. 스케쥴 이벤트는 인터럽트가 일반적인 예이며, 입출력 대기, 비결정적 함수 호출과 같은 경우를 포함할 수 있다. 스레드 프로그레스 트래킹 장치는 KPSW 신호를 세트하여 KPC를 동작시킨다.
1027단계에서 스레드 프로그레스 트래킹 장치는 스케쥴 이벤트의 일 예로써, 인터럽트가 발생하였는지 판단한다.
1029단계에서 스레드 프로그레스 트래킹 장치는 인터럽트가 발생하면 인터럽트 서비스 루틴을 수행한다. 이때 스레드 프로그레스 트래킹 장치는 SWNE 신호를 세트하여 EPC의 카운트 동작을 중지시킬 수 있다.
1031단계에서 스레드 프로그레스 트래킹 장치는 EPC가 중지된 상태에서 컨텍스트 스위치 이벤트의 발생여부를 판단할 수 있다.
1037단계에서 스레드 프로그레스 트래킹 장치는 컨텍스트 스위치 이벤트가 발생하면 중지된 EPC 값을 스위치 되기 전 스레드의 EPI로 저장한다. 또한, 스레드 프로그레스 트래킹 장치는 컨텍스트 스위치가 발생하는 시점까지 수행된 컨텍스트 결과를 저장한다.
1033단계에서 스레드 프로그레스 트래킹 장치는 EPC가 중지된 상태에서 스케쥴 이벤트가 종료하면 실제 스레드의 코드를 유효하게 수행하는데 사용되지 않은 EPC 증가분을 보정한다.
1035단계에서 스레드 프로그레스 트래킹 장치는 SWNE 신호를 클리어하여 중지된 EPC를 동작시킨다. 또한, 스레드 프로그레스 트래킹 장치는 KPSW 신호를 클리어하여 KPC를 중지시킨다.
또한, 스레드 프로그레스 트래킹 장치는 컨텍스트가 스위치된 후 준비된 스레드를 선택하여 A 지점부터 절차를 반복할 수 있다.
도 11은 일 실시예에 따른 스레드 프로그레스 트래킹 방법에서, 비유효 함수가 동작하는 경우의 유효 프로그레스 카운터의 동작을 나타낸 흐름도이다. 보다 구체적으로, 일반 응용 프로그램 수행 과정에서 사용자 함수가 사용되는 경우의 유효 프로그레스 카운터의 동작을 나타낸다.
1110단계에서 스레드 프로그레스 트래킹 장치는 스레드의 스레드 제어 블록에 사용자 함수가 수행 중임을 나타내기 위해 설정된 플래그 값이 세트되어 있는지 판단한다. 여기서 사용자 함수는 비유효 함수의 일 예이다.
SWNE를 발생시킬 수 있는 여러 가지 경우에 있어서 사용자 함수의 경우는 별도의 API를 제공하여 SWNE 신호가 생성될 수 있도록 한다. 대표적인 경우가 "busy waiting"을 하며 특정 기능을 반복적으로 수행하는 경우이다.
예를 들면, 외부 디바이스의 입력 큐(Queue)가 비어 있는지를 확인하여 비어 있는 경우 데이터를 추가하는 함수인 경우에 외부 디바이스의 상태에 따라 확인에 필요한 지연 시간이 늘어날 수 있다. 따라서 이와 같은 경우 스레드 프로그레스 트래킹 장치는 별도의 API를 제공하여 비 유효 구간에서 EPC가 동작하지 않도록 할 수 있다.
다음의 일 예는 사용자 busy waiting 함수에 대한 처리 방법을 보여 주는 의사 코드(pseudo code)이다. 또한, "SWNESet()", "SWNEClear()" API를 제공하여 사용자가 응용 프래그램의 특성에 따라 실제 유효하지 않은 코드 영역을 정의하여 SWNE 수행 구간으로 설정하도록 할 수 있다.
Figure pat00001
Figure pat00002
다음의 일 예는 io_status_check()에서 획득한 io의 상태에 따라 데이터 전송을 시작하는 프로그램 코드이다.
Figure pat00003
제일 처음 io_status_check함수를 수행하여 OK인 경우 그 이후로 수행된 사이클은 EPI에 포함될 수 있다. OK가 아닌 경우 그 이후의 수행 사이클은 EPI에서 제외하며, IOPI를 증가시켜 IO충돌에 의해 발생된 비유효 사이클 지표로 사용될 수 있다.
반복적인 io_status_check에서 OK가 된 상태에서부터는 IOPI 사이클 증가를 중지하고, EPI가 증가할수 있다. IOPI 사이클을 측정하기 위해 별도의 IOPC를 하드웨어 적으로 사용할 수도 있으며, KPI를 활용하여 IOPI 구간을 측정하는데 사용할 수도 있다.
1120단계에서 스레드 프로그레스 트래킹 장치는 플래그 값이 세트된 경우에는 소프트웨어 비유효 수행(SWNE) 신호를 세트하여 유효 프로그레스 카운터(EPC)를 중지시킬 수 있다. 또한, 스레드 프로그레스 트래킹 장치는 KPSW 신호를 세트하여 KPC를 동작시킨다.
1130단계에서 스레드 프로그레스 트래킹 장치는 사용자 함수를 수행할 수 있다. 사용자 함수는 비유효 함수의 일 예이다.
1140단계에서 스레드 프로그레스 트래킹 장치는 사용자 함수의 수행이 완료되면 설정된 플래그 값을 클리어한다.
1150단계에서 스레드 프로그레스 트래킹 장치는 실제 스레드의 코드를 유효하게 수행하는데 사용되지 않은 EPC 증가분을 보정한다.
1160단계에서 스레드 프로그레스 트래킹 장치는 SWNE 신호를 클리어하여 중지된 EPC를 동작시킬 수 있다. 또한, 스레드 프로그레스 트래킹 장치는 KPSW 신호를 클리어하여 KPC를 중지시킬 수 있다.
도 12는 일 실시 예에 따른 하드웨어 비 유효 수행 신호를 발생시키는 과정을 나타낸 흐름도이다.
1210단계에서 스레드 프로그레스 트래킹 장치는 유효 프로그레스 카운터(EPC)를 초기화한다. 여기서 초기화는 시작되는 명령어 수행 절차가 기존의 명령어 수행 절차로부터 차단되는 것을 의미한다.
1220단계에서 스레드 프로그레스 트래킹 장치는 프로세서의 스톨(stall) 신호를 검토한다. 스레드 프로그레스 트래킹 장치는 스톨 신호 이외에 프로세서의 비유효 수행 구간을 나타낼 수 있는 프로세서의 상태 또는 신호가 있다면 EPC를 제어하는 신호로 사용하여 비 유효 수행 구간에 EPC가 증가하지 않도록 할 수 있다.
1230단계에서 스레드 프로그레스 트래킹 장치는 스톨 신호가 검출되는지 여부를 판단하고, 1250단계에서 스톨 신호가 검출되는 경우에는 하드웨어 비 유효 수행(HWNE) 신호를 세트하여 EPC의 동작을 중지시킨다.
1240단계에서 스레드 프로그레스 트래킹 장치는 스톨 신호가 검출되지 않는 경우에는 HWNE 신호를 클리어하여 EPC의 동작이 중지되어 있다면 다시 동작하도록 한다. EPC의 동작이 중지되지 않은 경우에는 계속해서 동작하도록 한다.
또한, EPC의 비트폭(bit-width)은 프로세서의 사이클을 고려하여 결정될 수 있다. EPC의 비트폭이 너무 작은 경우에는 오버플로우가 자주 발생하여 업데이트 주기를 매우 작게 해야 한다. 따라서, EPC의 비트폭을 64비트 이상으로 하면 카운터 오버플로우가 발생하지 않도록 할 수 있고, 그 결과 카운터 업데이트에 따른 성능 저하를 최소화 할 수 있다. 시스템의 동작 클락이 50MHz 이하라면 클락에 비례하게 EPC의 비트폭을 줄여 구현상의 비용을 최소화할 수 있다.
위에서 설명된 실시 예에 따른 방법들은 다양한 컴퓨터 수단을 통하여 수행될 수 있는 프로그램 명령 형태로 구현되어 컴퓨터 판독 가능 매체에 기록될 수 있다. 상기 컴퓨터 판독 가능 매체는 프로그램 명령, 데이터 파일, 데이터 구조 등을 단독으로 또는 조합하여 포함할 수 있다. 상기 매체에 기록되는 프로그램 명령은 본 발명을 위하여 특별히 설계되고 구성된 것들이거나 컴퓨터 소프트웨어 당업자에게 공지되어 사용 가능한 것일 수도 있다.
이상과 같이 본 발명은 비록 한정된 실시예와 도면에 의해 설명되었으나, 본 발명은 상기의 실시예에 한정되는 것은 아니며, 본 발명이 속하는 분야에서 통상의 지식을 가진 자라면 이러한 기재로부터 다양한 수정 및 변형이 가능하다.
그러므로, 본 발명의 범위는 설명된 실시예에 국한되어 정해져서는 아니 되며, 후술하는 특허청구범위뿐 아니라 이 특허청구범위와 균등한 것들에 의해 정해져야 한다.

Claims (22)

  1. 응용 프로그램을 구성하는 스레드(Thread)를 선택하는 선택부;
    상기 스레드를 구성하는 적어도 하나의 명령어의 수행방식이, 수행 시간이 일정한 유효 수행(effective execution) 방식인지 또는 상기 수행 시간이 일정하지 않은 지연 사이클을 가지는 비 유효 수행(Non-effective execution) 방식인지 기 설정된 기준에 기초하여 결정하는 제어부; 및
    상기 비 유효 수행 방식으로 수행되는 명령어를 제외한 상기 유효 수행 방식으로 수행되는 명령어의 수행 시간을 누적하여 유효 프로그레스 인덱스(EPI, Effective Progress Index)를 생성하는 유효 프로그레스 카운터(EPC, Effective Progress Counter)
    를 포함하는 스레드 프로그레스 트래킹(Thread Progress Tracking) 장치.
  2. 제1항에 있어서,
    상기 비 유효 수행(Non-effective execution) 방식은
    하드웨어에 기초한 프로세서의 명령어 수준에서 비 유효 수행 방식으로 상기 명령어를 수행하는 하드웨어 비 유효 수행(HWNE, Hardware Non-effective execution) 방식; 및
    소프트웨어에 기초한 명령어들로 구성된 함수 수준에서 비 유효 수행 방식으로 상기 함수를 수행하는 소프트웨어 비 유효 수행(SWNE, Software Non-effective execution) 방식
    을 포함하는 스레드 프로그레스 트래킹 장치.
  3. 제1항에 있어서,
    상기 스레드가 프로세서를 점유하고, 상기 스레드가 수행되는 동안 공유 메모리에 접근하는데 소모된 사이클을 누적하여 메모리 프로그레스 인덱스(MPI, Memory Progress Index)를 생성하는 메모리 프로그레스 카운터(MPC, Memory Progress Counter)
    를 더 포함하는 스레드 프로그레스 트래킹 장치.
  4. 제1항에 있어서,
    상기 스레드가 프로세서를 점유하고, 상기 스레드가 수행되는 동안 시스템 커널 수행에 소모된 사이클을 누적하여 커널 프로그레스 인덱스(KPI, Kernel Progress Index)를 생성하는 커널 프로그레스 카운터(KPC, Kernel Progress Counter)
    를 더 포함하는 스레드 프로그레스 트래킹 장치.
  5. 제1항에 있어서,
    상기 스레드가 프로세서를 점유하고, 상기 스레드가 수행되는 동안 I/O(Input/Output) 데이터 입출력 코드를 수행하기 위해, 상기 I/O의 상태를 반복적으로 확인하는데 사용된 사이클을 누적하여 입출력 프로그레스 인덱스(IOPI, Iuput Output Progress Index)를 생성하는 입출력 프로그레스 카운터(IOPC, Input Ouput Progress Counter)
    를 더 포함하는 스레드 프로그레스 트래킹 장치.
  6. 제1항에 있어서,
    상기 유효 프로그레스 카운터(EPC)는
    상기 명령어 수행방식이 유효 수행 방식으로 결정되면, 시스템 클럭에 기초하여 카운트를 수행하는
    스레드 프로그레스 트래킹 장치.
  7. 제1항에 있어서,
    상기 유효 프로그레스 카운터(EPC)는
    하드웨어에 기초한 프로세서의 명령어 수준에서 비 유효 수행 방식으로 상기 명령어를 수행하는 하드웨어 비 유효 수행(HWNE) 신호 또는
    소프트웨어에 기초한 명령어들로 구성된 함수 수준에서 비 유효 수행 방식으로 상기 함수를 수행하는 소프트웨어 비 유효 수행(SWNE) 신호에 의하여 동작이 제어되는
    스레드 프로그레스 트래킹 장치.
  8. 제7항에 있어서,
    상기 하드웨어 비 유효 수행(HWNE) 신호는
    프로세서에서 발생하는 스톨(Stall) 신호에 기초하여 생성되는
    스레드 프로그레스 트래킹 장치.
  9. 제7항에 있어서,
    상기 소프트웨어 비 유효 수행(SWNE) 신호는
    명령어들로 구성된 사용자 함수를 수행하는 경우, 별도의 코드(API, Application Programming Interface)를 사용하여 생성되는
    스레드 프로그레스 트래킹 장치.
  10. 제1항에 있어서,
    상기 유효 프로그레스 카운터(EPC)는
    상기 스레드가 러닝 상태(running state)에 있지 않으면, 상기 유효 프로그레스 카운터(EPC)가 동작하지 않도록, 소프트웨어 비 유효 수행(SWNE) 신호의 세트를 결정하는 결정부
    를 포함하는 스레드 프로그레스 트래킹 장치.
  11. 제10항에 있어서,
    상기 결정부는
    러닝 상태인 스레드에 인터럽트(interrupt)가 발생하면, 상기 유효 프로그레스 카운터(EPC)가 동작하지 않도록 상기 소프트웨어 비 유효 수행(SWNE) 신호를 세트하고, 상기 인터럽트 서비스 루틴 수행 후 다시 상기 스레드가 러닝 상태가 되면, 상기 유효 프로그레스 카운터(EPC)가 동작하도록 상기 소프트웨어 비 유효 수행(SWNE) 신호를 클리어하는
    스레드 프로그레스 트래킹 장치.
  12. 제1항에 있어서,
    상기 유효 프로그레스 카운터(EPC)는
    프로세서 단위로 위치하는 것을 특징으로 하는 스레드 프로그레스 트래킹 장치.
  13. 제1항에 있어서,
    각각의 스레드마다, 상기 스레드에 대응하는 유효 프로그레스 인덱스(EPI)를 저장하는 메모리; 및
    상기 스레드가 러닝 상태에 있으면 현재의 유효 프로그레스 카운터(EPC) 값을 상기 유효 프로그레스 인덱스(EPI)로 하여 상기 메모리로 복사하는 복사부
    를 더 포함하는 스레드 프로그레스 트래킹 장치.
  14. 제1항에 있어서,
    제1 스레드가 제2 스레드로 컨텍스트 스위치(context switch)되는 시점에서 상기 유효 프로그레스 카운터(EPC) 값을 상기 유효 프로그레스 인덱스(EPI)로 하여 메모리에 복사하는 복사부; 및
    상기 제2 스레드에서 상기 제1 스레드로 다시 컨텍스트 스위치 되는 경우, 상기 메모리에 복사된 유효 프로그레스 인덱스(EPI)를 상기 유효 프로그레스 카운터(EPC)로 로딩하는 로딩부
    를 더 포함하는 스레드 프로그레스 트래킹 장치.
  15. 제1항에 있어서,
    스케쥴러(Scheduler) 상에서 상기 스레드의 스레드 제어 블록에 비 유효 함수(NE Function)가 수행 중임을 나타내기 위해 설정된 플래그 값이 세트되어 있는지 판단하는 세트 판단부
    를 더 포함하는 스레드 프로그레스 트래킹 장치.
  16. 제15항에 있어서,
    상기 세트 판단부는
    상기 플래그 값이 세트된 경우에는 소프트웨어 비 유효 수행(SWNE) 신호를 세트하여 상기 유효 프로그레스 카운터(EPC)를 중지시키고,
    상기 플래그 값이 세트되지 않은 경우에는 스레드의 코드를 유효하게 수행하는데 사용되지 않은 유효 프로그레스 카운터(EPC) 증가분을 보정하는
    스레드 프로그레스 트래킹 장치.
  17. 응용 프로그램을 구성하는 스레드(Thread)를 선택하는 단계;
    상기 스레드를 구성하는 적어도 하나의 명령어의 수행방식이, 수행 시간이 일정한 유효 수행(effective execution) 방식인지 또는 상기 수행 시간이 일정하지 않은 지연 사이클을 가지는 비 유효 수행(Non-effective execution) 방식인지 기 설정된 기준에 기초하여 결정하는 단계; 및
    상기 비 유효 수행 방식으로 수행되는 명령어를 제외한 상기 유효 수행 방식으로 수행되는 명령어의 수행 시간을 누적하는 유효 프로그레스 카운터(EPC, Effective Progress Counter)에 기초하여 유효 프로그레스 인덱스(EPI, Effective Progress Index)를 생성하는 단계
    를 포함하는 스레드 프로그레스 트래킹 방법.
  18. 제17항에 있어서,
    상기 유효 프로그레스 카운터(EPC)는
    하드웨어에 기초한 프로세서의 명령어 수준에서 비 유효 수행 방식으로 상기 명령어를 수행하는 하드웨어 비 유효 수행(HWNE) 신호 또는
    소프트웨어에 기초한 명령어들로 구성된 함수 수준에서 비 유효 수행 방식으로 상기 함수를 수행하는 소프트웨어 비 유효 수행(SWNE) 신호에 의하여 동작이 제어되는
    스레드 프로그레스 트래킹 방법.
  19. 제17항에 있어서,
    각각의 스레드마다, 상기 스레드에 대응하는 유효 프로그레스 인덱스(EPI)를 메모리에 저장하는 단계; 및
    상기 스레드가 러닝 상태에 있으면 현재의 유효 프로그레스 카운터(EPC) 값을 상기 유효 프로그레스 인덱스(EPI)로 하여 상기 메모리로 복사하는 단계
    를 더 포함하는 스레드 프로그레스 트래킹 방법.
  20. 제17항에 있어서,
    제1 스레드가 제2 스레드로 컨텍스트 스위치(context switch)되는 시점에서 상기 유효 프로그레스 카운터(EPC) 값을 상기 유효 프로그레스 인덱스(EPI)로 하여 메모리에 복사하는 단계; 및
    상기 제2 스레드에서 상기 제1 스레드로 다시 컨텍스트 스위치 되는 경우, 상기 메모리에 복사된 유효 프로그레스 인덱스(EPI)를 상기 유효 프로그레스 카운터(EPC)로 로딩하는 단계
    를 더 포함하는 스레드 프로그레스 트래킹 방법.
  21. 스케쥴러 상에서 수행될 명령어에 따라 준비된 스레드를 선택하는 단계;
    상기 스레드에 저장된 유효 프로그레스 인덱스(EPI)를 유효 프로그레스 카운터(EPC)의 초기 값으로 세팅하고, 상기 스레드에 저장된 커널 프로그레스 인덱스(KPI)를 커널 프로그레스 카운터(KPC)의 초기 값으로 세팅하는 단계;
    상기 스레드의 스레드 제어 블록에 비 유효 함수(NE Function)가 수행 중임을 나타내기 위해 설정된 플래그 값이 세트되어 있는지 판단하는 단계;
    상기 플래그 값이 세트된 경우에는 소프트웨어 비 유효 수행(SWNE) 신호를 세트하여 유효 프로그레스 카운터(EPC)를 중지시키고, 커널 프로그레스 소프트웨어(KPSW, Kernel Progress Software) 신호를 세트하여 커널 프로그레스 카운터(KPC)를 동작시키는 단계; 및
    상기 플래그 값이 세트되지 않은 경우에는 상기 스레드의 코드를 유효하게 수행하는데 사용되지 않은 유효 프로그레스 카운터(EPC) 증가분을 보정하고, 상기 소프트웨어 비 유효 수행(SWNE) 신호를 클리어하여 상기 중지된 유효 프로그레스 카운터(EPC)를 동작시키며, 상기 커널 프로그레스 소프트웨어(KPSW) 신호를 클리어하여 상기 커널 프로그레스 카운터(KPC)를 중지시키는 단계
    를 포함하는 스레드 프로그레스 트래킹 방법.
  22. 러닝 상태인 스레드에서 스케쥴 이벤트가 발생하면 소프트웨어 비 유효 수행(SWNE) 신호를 세트하여 유효 프로그레스 카운터(EPC)를 중지시키고, 커널 프로그레스 소프트웨어(KPSW) 신호를 세트하여 커널 프로그레스 카운터(KPC)를 동작시키는 단계;
    상기 유효 프로그레스 카운터(EPC)가 중지된 상태에서 컨텍스트 스위치 이벤트가 발생하면 상기 중지된 유효 프로그레스 카운터(EPC) 값을 상기 스레드의 유효 프로그레스 인덱스(EPI) 값으로 하여 메모리에 저장하는 단계; 및
    상기 유효 프로그레스 카운터(EPC)가 중지된 상태에서 상기 스케쥴 이벤트가 종료하면 상기 스레드의 코드를 유효하게 수행하는데 사용되지 않은 유효 프로그레스 카운터(EPC) 증가분을 보정하고, 상기 소프트웨어 비 유효 수행(SWNE) 신호를 클리어하여, 상기 중지된 유효 프로그레스 카운터(EPC)를 동작시키며, 상기 커널 프로그레스 소프트웨어(KPSW) 신호를 클리어하여 상기 커널 프로그레스 카운터(KPC)를 중지시키는 단계
    를 포함하는 스레드 프로그레스 트래킹 방법.
KR1020110104061A 2011-10-12 2011-10-12 스레드 프로그레스 트래킹 방법 및 장치 KR101892273B1 (ko)

Priority Applications (2)

Application Number Priority Date Filing Date Title
KR1020110104061A KR101892273B1 (ko) 2011-10-12 2011-10-12 스레드 프로그레스 트래킹 방법 및 장치
US13/588,228 US9223615B2 (en) 2011-10-12 2012-08-17 Apparatus and method for thread progress tracking

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020110104061A KR101892273B1 (ko) 2011-10-12 2011-10-12 스레드 프로그레스 트래킹 방법 및 장치

Publications (2)

Publication Number Publication Date
KR20130039479A true KR20130039479A (ko) 2013-04-22
KR101892273B1 KR101892273B1 (ko) 2018-08-28

Family

ID=48086879

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020110104061A KR101892273B1 (ko) 2011-10-12 2011-10-12 스레드 프로그레스 트래킹 방법 및 장치

Country Status (2)

Country Link
US (1) US9223615B2 (ko)
KR (1) KR101892273B1 (ko)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103684898B (zh) 2012-09-14 2017-06-23 阿里巴巴集团控股有限公司 一种监测用户请求在分布式系统中运行的方法及装置
US10579274B2 (en) 2017-06-27 2020-03-03 TidalScale, Inc. Hierarchical stalling strategies for handling stalling events in a virtualized environment
US10817347B2 (en) * 2017-08-31 2020-10-27 TidalScale, Inc. Entanglement of pages and guest threads
CN117806979B (zh) * 2024-03-01 2024-05-17 芯来智融半导体科技(上海)有限公司 指令执行时间一致性测试方法、系统、设备及存储介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030233394A1 (en) * 2002-06-14 2003-12-18 Rudd Kevin W. Method and apparatus for ensuring fairness and forward progress when executing multiple threads of execution
KR100531433B1 (ko) * 1999-12-09 2005-11-28 인텔 코오퍼레이션 다중스레드 프로세서내의 이벤트 어커런스를 처리하는방법 및 장치
US20080104610A1 (en) * 2006-10-30 2008-05-01 Norton Scott J Hardware threads processor core utilization
US20110067015A1 (en) * 2008-02-15 2011-03-17 Masamichi Takagi Program parallelization apparatus, program parallelization method, and program parallelization program

Family Cites Families (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2196450B (en) * 1986-10-20 1991-02-13 Mars Inc Data-storing tokens
US5790843A (en) * 1996-09-19 1998-08-04 International Business Machines Corporation System for modifying microprocessor operations independently of the execution unit upon detection of preselected opcodes
US5987598A (en) * 1997-07-07 1999-11-16 International Business Machines Corporation Method and system for tracking instruction progress within a data processing system
US6076157A (en) 1997-10-23 2000-06-13 International Business Machines Corporation Method and apparatus to force a thread switch in a multithreaded processor
US6098169A (en) 1997-12-23 2000-08-01 Intel Corporation Thread performance analysis by monitoring processor performance event registers at thread switch
US6157955A (en) * 1998-06-15 2000-12-05 Intel Corporation Packet processing system including a policy engine having a classification unit
JP3796124B2 (ja) * 2001-03-07 2006-07-12 株式会社ルネサステクノロジ スレッド間優先度可変プロセッサ
IL161107A0 (en) * 2001-09-28 2004-08-31 Tidal Networks Inc Multi-threaded packet processing engine for stateful packet processing
KR100498482B1 (ko) 2003-01-27 2005-07-01 삼성전자주식회사 명령어수에 수행 주기 회수를 가중치로 사용하여 쓰레드를페치하는 동시 다중 쓰레딩 프로세서 및 그 방법
US7082563B2 (en) * 2003-01-31 2006-07-25 Italtel S.P.A. Automated method for generating the cyclic redundancy check for transmission of multi-protocol packets
US7441101B1 (en) * 2003-12-10 2008-10-21 Cisco Technology, Inc. Thread-aware instruction fetching in a multithreaded embedded processor
US7818746B2 (en) * 2005-03-30 2010-10-19 Hewlett-Packard Development Company, L.P. System and method for benchmarking using a multi-threaded load generator
US7383396B2 (en) * 2005-05-12 2008-06-03 International Business Machines Corporation Method and apparatus for monitoring processes in a non-uniform memory access (NUMA) computer system
US7734833B2 (en) * 2005-09-08 2010-06-08 International Business Machines Corporation Method for scheduling operations called by a task on a real-time or non-real time processor
US20090106539A1 (en) 2007-07-05 2009-04-23 Mericas Alexander E Method and system for analyzing a completion delay in a processor using an additive stall counter
US8321868B2 (en) * 2008-01-08 2012-11-27 International Business Machines Corporation Method for counting events in a computer system
JP2010061642A (ja) 2008-07-07 2010-03-18 Intel Corp スレッドのスケジューリングテクニック
US9244732B2 (en) * 2009-08-28 2016-01-26 Vmware, Inc. Compensating threads for microarchitectural resource contentions by prioritizing scheduling and execution
US8249627B2 (en) * 2009-12-21 2012-08-21 Julia Olincy “I am driving/busy” automatic response system for mobile phones
KR101686082B1 (ko) * 2010-07-22 2016-12-28 삼성전자주식회사 결정적 프로그레스 인덱스 기반 락 제어 및 스레드 스케줄링 방법 및 장치
KR102028663B1 (ko) * 2012-07-24 2019-10-04 삼성전자주식회사 에러 검출 방법 및 장치

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100531433B1 (ko) * 1999-12-09 2005-11-28 인텔 코오퍼레이션 다중스레드 프로세서내의 이벤트 어커런스를 처리하는방법 및 장치
US20030233394A1 (en) * 2002-06-14 2003-12-18 Rudd Kevin W. Method and apparatus for ensuring fairness and forward progress when executing multiple threads of execution
US20080104610A1 (en) * 2006-10-30 2008-05-01 Norton Scott J Hardware threads processor core utilization
US20110067015A1 (en) * 2008-02-15 2011-03-17 Masamichi Takagi Program parallelization apparatus, program parallelization method, and program parallelization program

Also Published As

Publication number Publication date
US20130097613A1 (en) 2013-04-18
US9223615B2 (en) 2015-12-29
KR101892273B1 (ko) 2018-08-28

Similar Documents

Publication Publication Date Title
US10545789B2 (en) Task scheduling for highly concurrent analytical and transaction workloads
Herman et al. RTOS support for multicore mixed-criticality systems
US8689221B2 (en) Speculative thread execution and asynchronous conflict events
US8898434B2 (en) Optimizing system throughput by automatically altering thread co-execution based on operating system directives
US20120137295A1 (en) Method for displaying cpu utilization in a multi-processing system
US9244733B2 (en) Apparatus and method for scheduling kernel execution order
US9632842B2 (en) Exclusive access control method prohibiting attempt to access a shared resource based on average number of attempts and predetermined threshold
KR101686082B1 (ko) 결정적 프로그레스 인덱스 기반 락 제어 및 스레드 스케줄링 방법 및 장치
JP2006285350A (ja) Smtプロセッサ用課金処理装置,課金処理方法,および課金処理プログラム
CN111052094B (zh) 使用c状态和睿频加速提高用户空间的自旋锁效率
CN111459622B (zh) 调度虚拟cpu的方法、装置、计算机设备和存储介质
KR101892273B1 (ko) 스레드 프로그레스 트래킹 방법 및 장치
KR101635816B1 (ko) 결정적 프로그레스 인덱스를 이용한 스레드 프로그레스 트래킹 방법 및 장치
Wada et al. Fast interrupt handling scheme by using interrupt wake-up mechanism
Sodan et al. LOMARC—Lookahead matchmaking for multi-resource coscheduling
Lindsay LWFG: A cache-aware multi-core real-time scheduling algorithm
Schade et al. Using Trace Data for Run-Time Optimization of Parallel Execution in Real-Time Multi-Core Systems
Drung et al. Enhance performance of program automatic online judging systems using affinity algorithm and queuing theory in SMP environment
Kale Low-overhead scheduling for improving performance of scientific applications
Kehne et al. LoGA: Low-overhead GPU accounting using events
JP2011008617A (ja) マルチスレッド実行装置、オブジェクトプログラムの生成方法、プログラム
Krappman Identifying and alleviating shared cache contention: Achieving reliability of real-time tasks on a multi-OS and multi-core system
Wang et al. GCMS: A Global Contention Management Scheme in Hardware Transactional Memory
JP2006285987A (ja) Smtプロセッサ用課金処理装置,課金処理方法,および課金処理プログラム

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant