KR20090017586A - Api의 성능을 측정하는 방법, 컴퓨터 시스템, 및 컴퓨터판독가능 매체 - Google Patents

Api의 성능을 측정하는 방법, 컴퓨터 시스템, 및 컴퓨터판독가능 매체 Download PDF

Info

Publication number
KR20090017586A
KR20090017586A KR1020087030148A KR20087030148A KR20090017586A KR 20090017586 A KR20090017586 A KR 20090017586A KR 1020087030148 A KR1020087030148 A KR 1020087030148A KR 20087030148 A KR20087030148 A KR 20087030148A KR 20090017586 A KR20090017586 A KR 20090017586A
Authority
KR
South Korea
Prior art keywords
api
data
memory allocation
timing
computer
Prior art date
Application number
KR1020087030148A
Other languages
English (en)
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 마이크로소프트 코포레이션
Publication of KR20090017586A publication Critical patent/KR20090017586A/ko

Links

Images

Classifications

    • 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
    • G06F11/3476Data logging
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • 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
    • G06F11/3419Recording 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 by assessing time
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/18Complex mathematical operations for evaluating statistical data, e.g. average values, frequency distributions, probability functions, regression analysis
    • 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/3452Performance evaluation by statistical analysis
    • 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/3648Software debugging using additional hardware
    • G06F11/3652Software debugging using additional hardware in-circuit-emulation [ICE] arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/865Monitoring of software

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Data Mining & Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Software Systems (AREA)
  • Mathematical Physics (AREA)
  • Pure & Applied Mathematics (AREA)
  • Algebra (AREA)
  • Probability & Statistics with Applications (AREA)
  • Databases & Information Systems (AREA)
  • Operations Research (AREA)
  • Evolutionary Biology (AREA)
  • Bioinformatics & Computational Biology (AREA)
  • Bioinformatics & Cheminformatics (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Debugging And Monitoring (AREA)

Abstract

API(Application Programming Interface)의 성능을 측정하는 방법은 타겟 API를 선택하는 단계 및 API에 의해 호출되는 함수들의 목록을 생성하기 위해 상기 선택된 API의 함수 호출을 위한 메모리 할당을 추적하는 단계를 포함한다. 개개의 함수들은 API 내에서 따로따로 호출되고 각각에 대한 타이밍 및 메모리 할당이 수집되어 기록된다. 기록된 결과는 밑이 2인 로그 방법에 따라 버킷화되고 특정 API의 성능을 나타내기 위해 API 사용자에 의해 액세스될 수 있다.
Figure P1020087030148
API 성능 프로파일, 타이밍, 메모리 할당, 버킷, 함수 호출

Description

API의 성능을 측정하는 방법, 컴퓨터 시스템, 및 컴퓨터 판독가능 매체{AN AUTOMATED METHOD AND SYSTEM FOR COLLECTING AND REPORTING API PERFORMANCE PROFILES}
다른 공학 분야와는 달리, 소프트웨어 엔지니어는 설계 결정을 할 때 참고할 수 있는 정량적 정보를 거의 가지고 있지 않다. API 성능 비용의 총괄적인 카탈로그가 없다. 이 경우, 용어 "API"는 미국 워싱턴주 레드몬드 소재의 마이크로소프트사로부터 입수가능한 "Windows
Figure 112008085047455-PCT00001
운영 체제 API"에서와 같은 일련의 함수라기보다는 "InvalidateRect API"에서와 같은 단 하나의 함수를 말한다.
그에 부가하여, 이 상황은 대부분의 API가 그의 비용이 단 하나의 숫자로 특징지워질 수 없다는 사실에 의해 복잡하게 된다. 비용이 많은 서로 다른 방식(메모리 사용, CPU 사용, I/O 비용, 기타 등등)으로 측정될 수 있고, 입력 파라미터는 물론 컨텍스트 또한 이용가능한 하드웨어에 의존할 수 있다. 그 결과, 일반적으로 API의 성능을 특징지우려는 시도가 전혀없다. 이것으로 인해 엔지니어들은 설계 결정을 할 때 이용할 수 있는 선험적 안내가 없는 유감스런 상황에 놓여 있다. 이들은 더군다나 프로토타이핑, 단순히 추측하는 것, 비용 문제를 완전히 무시하는 것, 또는 단지 낙관하는 것에 기댈 수 밖에 없다. 이들 후자의 선택 항목들은 모두 너무 흔하다. 따라서, API 데이터의 수집이 API 성능 또는 리소스 비용의 유용 한 정보를 제공하는 데 아주 바람직하다.
따라서, API 동작에 대한 아주 정확한 메모리 할당 및 실행 시간 데이터를 수집하는 것이 바람직하다. 한가지 목적은 특정의 API 컴포넌트가 의도된 사용에 타당한 메모리 및 타이밍 특성을 갖는지에 관하여 API 소비자가 정보에 기초한 결정을 할 수 있도록 이들에게 데이터를 제공하는 것일 수 있다. 할당 및 타이밍 둘다가 함수들이 어떻게 사용되느냐에 따라 변하기 때문에, 데이터는 양호하게는 광범위한 실세계 시나리오들에 걸쳐 할당 및 타이밍의 통계적 분포를 반영할지도 모른다. 이 분포는 API의 거동의 문제를 해결하는 것은 물론 이들 특성을 소비자에게 문서로 제공하는 데 사용될지도 모르는 '성능 프로파일'을 구성할 수 있다.
메모리 할당이 거의 100% 정확도로 측정될 수 있을지라도, 실행 시간을 측정하는 것은 불확실성 투성이다. 측정 자체가 전체 실행 시간의 일부분을 차지하며, 이는 데이터를 왜곡시킨다. 단 한번의 프로파일링 실행으로 일련의 상호의존적인 함수들의 타이밍 특성들을 수집할 때 특히 그렇다. 호출 트리(call tree)에서 하위에 있는 함수 호출들에 대한 측정 오버헤드가 누적되어 호출 트리에서 상위에 있는 함수들에 대한 결과를 변경시킨다. 예를 들어, 타이트 루프(tight loop)에서 함수 A가 함수 B를 수천번 호출하고 동일한 실행에서 A 및 B의 타이밍을 측정하는 경우, B에 대한 누적 측정 비용이 A에 대한 결과를 극적으로 변경시킬 수 있다. 기존의 도구들은 누적 측정 에러를 차감함으로써 문제를 해결하려고 하지만, 이 방법은 통계적으로 의미있는 결과를 내지 못한다.
일반적으로, 기존의 API 측정 방법은 특정의 실행에 관한 상세한 비용 정보 를 기록할 수 있는 프로파일링 도구와 관련하여 사용된다. 그렇지만, 이들 시스템은 총괄적인 데이터 수집에는 부적합한데, 그 이유는 측정하는 동작 자체가 비용을 교란시키기 때문이다. 이들은 단 한번의 실행으로 전체 프로그램에 관한 가능한 한 많은 정보를 수집하도록 설계되어 있다. 다양한 실행에 걸쳐 특정의 API에 관한 정보를 수집하는 것이 바람직하다. 본 발명은 이들 및 기타 문제를 해결한다.
이 요약은 이하에서 상세한 설명에 더 기술되는 선택된 개념들을 간략화된 형태로 소개하기 위해 제공된 것이다. 이 요약은 청구된 발명 대상의 주요 특징들 또는 필수적인 특징들을 확인하기 위한 것이 아니며 청구된 발명 대상의 범위를 제한하기 위해 사용되기 위한 것도 아니다.
일 실시예에서, API(Application Programming Interface)의 성능을 측정하는 방법은 타겟 API를 선택하는 단계 및 API에 의해 호출되는 함수들의 목록을 생성하기 위해 상기 선택된 API의 함수 호출을 위한 메모리 할당을 추적하는 단계를 포함한다. 개개의 함수들은 타이밍 및 메모리 할당 데이터를 측정하기 위해 따로따로 호출된다. 기록된 결과는 밑이 2인 로그 방법(a log base 2 method)에 따라 버킷화되고 특정 API의 성능을 나타내기 위해 API 사용자에 의해 액세스될 수 있다.
다른 실시예에서, 사용자 기계 상에 존재하는 랜덤하게 선택된 API의 성능 정보의 분산 수집 방법은 프로파일러 시스템에 의해 가능하게 된다. 프로파일러 시스템은 자발적인 사용자에게 배포되고 비간섭적 방식으로 사용자 컴퓨터 상의 애플리케이션의 API 성능을 측정한다. 수집된 데이터는 중앙 저장 서비스로 전달되고, 이곳에서 API 정보가 수집되고 다수의 API의 성능을 나타내는 정보의 버킷으로 정리된다. 이 정보는 소프트웨어 개발자 등의 통상적인 API 사용자가 이용가능하게 되어 있다.
도 1은 API 프로파일러 시스템의 예시적인 소프트웨어 아키텍처를 나타낸 블록도.
도 2는 본 발명의 측면들에 따른, API를 측정하는 예시적인 방법을 나타낸 예시적인 흐름도.
도 3은 본 발명의 측면들에 따른, 분산 API 측정 방식의 예시적인 방법을 나타낸 예시적인 흐름도.
도 4는 예시적인 호스트 컴퓨팅 환경을 나타낸 블록도.
API 성능 프로파일러
일 실시예에서, API 성능 프로파일을 수집 및 보고하는 자동화된 방법 및 시스템이 제공된다. 이 실시예는 애플리케이션을 개발하는 데 도움을 주기 위해 개발자 또는 도구에 의해 사용될 수 있는 성능 프로파일 또는 지문을 생성하기 위해 실행 중인 코드의 고도로 정확하고 경험적인 관찰 결과를 수집하는 것에 중점을 두고 있다. 이 자동화된 방법은 전용의 성능 프로파일러, 모든 공개적으로 보이는 진입점에 대한 데이터를 발생하기 위해 바이너리를 전수적으로 실행해보는 자동화된 시스템, 이러한 데이터를 분석 도구에 의해 사용될 수 있는 형태로 존속시키는 메카니즘, 및 함수 성능 특성을 이해하는 데 도움이 되도록 프로파일을 그래픽으로 렌더링하는 시스템을 사용한다. 한 방식에서, 프로파일러는 가시적인 API에 대한 정확한 실행 시간 정보를 수집한다. 다른 방식에서, 프로파일러는 함수를 호출할 시에 일어나는 메모리 할당에 관한 상세를 수집한다.
도 1은 API 성능을 측정하기 위해 컴퓨팅 플랫폼에서 실행될 수 있는 API 프로파일러에 대한 예시적인 소프트웨어 아키텍처(100)를 나타낸 것이다. 한가지 이러한 시스템이 공용 언어 기반구조에 대한 ECMA 335 표준의 Microsoft
Figure 112008085047455-PCT00002
CLR™ 구현이다. 테스트 중인 API(102)는 일반적으로 관찰 및 기록을 위해 설치될 수 있는 자체 특성(in-situ characteristic)을 보여준다. CRL™과 호환될 수 있는 메모리 할당 프로파일러(104)는 주어진 API 성능 시나리오를 실행하고 그 메서드에 대한 함수 호출의 횟수의 카운트를 할당된 바이트의 수의 밑이 2인 로그에 대한 이산값으로 기록한다. 메모리 할당 프로파일러는 포함적 및 배타적 할당값을 따로 측정하여 기록한다. 포함적 메모리 할당값(inclusive memory allocation value)은 함수가 호출한 함수들에 의해 할당된 메모리 전부를 포함하여 그 함수에 의해 할당된 바이트의 수이다. 배타적 메모리 할당값(exclusive memory allocation value)은 함수 자체의 일부인 코드 블록에서 할당된 바이트의 수이다.
타이밍 프로파일러(106)도 역시 CLR™과 호환될 수 있고 추가 입력으로서 지정된 메서드의 JIT(Just in Time) 컴파일에 전념한다. 이것은 실행 동안의 유일한 추가 오버헤드가 조사 중인 특정의 메서드에 대한 호출에 대한 것이고 다른 메서드에 대한 호출에 대해서는 오버헤드가 없도록 행해진다. 타이밍 프로파일러는 또한 테스트 중인 API(102)에 관련된 타이밍 정보를 측정하여 기록한다.
조정 모듈(coordination module)(108)은 주어진 관리 코드 시나리오를 실행하는 스크립트를 입력으로서 받고 먼저 이 스크립트를 사용하여 테스트 중인 API(102)에 대해 할당 프로파일러(104)를 실행시킨다. 이어서, 조정 모듈은 할당 단계에서 어느 메서드들이 실행되었는지에 관한 정보를 사용하여 타이밍 프로파일러(106) 하에서 이 시나리오를 반복적으로 재실행한다. 조정 모듈은 또한 타이밍 프로파일러(106)가 동일 실행에서 상호의존적인 함수들의 타이밍을 측정하도록 지시받지 않게 해준다. 달리 말하면, 조정 모듈은 동일한 호출 스택에 나타날지도 모르는 임의의 2개의 함수를 동시에 측정하지 않음으로써 임의의 실행 쓰레드에서 기껏해야 하나의 측정이 진행되도록 한다. 따라서, 테스트 중인 API(102)의 실제 성능을 마스킹할지도 모르는 어떤 부차적인 함수도 측정 및 기록되지 않는다. 본 발명의 한 측면에서, 동일한 호출 스택에 결코 나타나지 않는 함수들은 동시에 측정 및 기록되어도 된다. 예를 들어, 3개의 함수 A, B, C가 주어진 경우, 함수 A 및 B만이 동일한 호출 스택에 나타나는 경우, A 및 C는 동시에 측정 및 기록되어서는 안된다. 그렇지만, 함수 A 및 B는 함수 B 및 C와 마찬가지로 동시에 기록될 수 있다.
병합 도구 모듈(merging tool module)(110)은 메모리 할당 프로파일러(104) 및 타이밍 프로파일러(106)의 모든 실행으로부터의 결과들을 테스트 중인 API(102) 각각에 대한 단 하나의 결과 테이블(112)로 결합한다. 테스트 중인 특정의 API(102)에 대한 결과 테이블은 포함적 및 배타적 메모리 할당의 밑이 2인 로그 버 킷화(log base 2 bucketing)는 물론 실행 시간의 밑이 2인 로그 버킷화를 보여줄 수 있다. 병합 도구 모듈은 또한 몇개의 서로 다른 실행으로부터의 결과들을 결합하여 테스트 중인 API(102)의 광범위한 사용을 대표하는 테이블을 생성하는 데 사용될 수 있다. 따라서, 테스트 중인 API(102)에 대해 단 하나의 실습 통계는 물론 다수의 호출 통계가 수집될 수 있다.
테스트 중인 임의의 API(102)의 결과 테이블(112) 데이터를 각각의 함수에 대해 히스토그램으로 렌더링하는 그래픽 사용자 인터페이스(114)는 개발자가 테스트 중인 주어진 API(102)를 구성하는 함수들의 성능 특성에 관하여 추론을 할 수 있게 해준다. 일 실시예에서, 테스트 중인 특정의 API(102)에 대한 결과 테이블(112) 내의 수집된 API 성능 정보는 밑이 2인 로그 방법을 사용하여 크기별로 정리 또는 버킷화될 수 있다. 그에 부가하여, 이 데이터를 분석함으로써 API 성능 프로파일이 생성될 수 있다.
이들 성능 프로파일은 API 소유자는 물론 API 소비자 둘다에게 유용한 정보를 전달한다. 어떤 프로파일은, 예를 들어, API를 사용하기 시작하기 위한 착수 비용이 있고 그 이후의 후속 호출들은 어떤 메모리 소모도 수반하지 않음을 나타낼지도 모른다. 다른 프로파일은 메모리 할당 및 실행 시간 둘다가 API 호출에 제공되는 데이터에 대해 선형 관계로 또는 다른 관계로 증가하는 것을 나타낼지도 모른다. 이들 프로파일은 API 개발자에 대해 API 제품 품질을 보장하기 위해 또는 어떤 원하는 성능 특성을 만족시켜야만 하는 새로운 API를 개발하기 위해 분석 및 분류될 수 있다.
비제한적인 예로서, API Object.Equals 또는 GetHashCode() 오버라이드와 같은 성능에 민감한 코드가 본 발명의 측면들을 사용하여 특성 파악되고 프로파일링될 수 있다. 개발자와 같은 이들 API의 사용자는 프로파일링된 API가 그의 설계에 대해 갖게 될 성능을 예측하기 위해 공개된 프로파일 정보에 액세스함으로써 양호한 설계 실습을 할 수 있다.
어떤 실시예들에서, 도 1의 소프트웨어 아키텍처 모듈이 네트워크-접속된 컴퓨터로부터의 다운로드를 통해 또는 CD-ROM(이에 한정되지 않음) 등의 컴퓨터 판독가능 매체를 통해 실행을 위해 컴퓨터에 제공될 수 있다. 다운로드 후에, 도 1의 컴퓨터 아키텍처 또는 모듈은 실행을 기다리면서 컴퓨터 RAM에 존재할지도 모른다.
본 발명의 한 측면에서, API 프로파일러는 타이밍 데이터가 단 한번의 패스(pass)로 달성될 수 있는 것보다 더 높은 정확도로 수집되도록 하기 위해 동일한 API 실습 시나리오에 걸쳐 몇번의 패스를 사용할 수 있다. 도 2는 API 프로파일러의 예시적인 방법을 나타낸 흐름도(200)이다.
처음에, API 프로파일러는 특성 파악할 타겟 API를 제공받는다(단계 202). 이어서, 이 API에 의해 호출되는 모든 함수에 대한 메모리 할당을 추적하도록 메모리 할당 프로파일러가 실행된다(단계 204). 그 결과, 테스트 중인 API에 의해 호출되는 모든 함수들의 목록이 생성된다(단계 206).
이 목록이 획득되었으면, 시스템은 목록 내의 각각의 함수에 대해 한번씩 그 시나리오를 재실행하고 다른 함수들 모두와 완전히 분리하여 각각의 함수의 타이밍을 측정한다(단계 208). 각각의 함수 실행에 대해, API 프로파일러에 의해 타이밍 및 메모리 할당 파라미터 데이터가 수집되고 그 결과들이 기록된다(단계 210). 이 단계는 주어진 실행에서 추적되고 있는 개개의 함수에 대해 일어나는 오버헤드만을 측정하는 효과를 갖는다. 호출 트리에서 하위에 있는 함수들에 의해 유입되는 누적 에러가 없다는 이점이 있다.
대안의 실시예에서, 이 방법은, 할당 단계에서 함수들의 목록을 단지 수집하기 보다는, API 프로파일러가 어느 함수들이 스택에 함께 나타날 수 있고 어느 함수들이 그렇지 않은지도 계산할 수 있도록 일반화될 수 있다. 그러면, 실행마다 2개 이상의 함수들을 측정하면서도 여전히 동일한 높은 정확도를 보장하는 것이 가능하게 된다. 호출 스택 그룹을 갖는 API를 실행하는 것으로부터의 메모리 및 할당 정보가 제시하기 위한 결과 테이블로 병합될 수 있다. 일 실시예에서, 이 제시는 각각의 함수 또는 일군의 함수에 대한 히스토그램을 통한 것일 수 있다.
개개의 실행으로부터의 결과들이 기록되면, 개별적인 결과들이 제시하기 위해 처리된다(단계 212). 이 단계의 일부로서, API 프로파일러는 함수들 각각에 대한 각각의 호출에 대해, 현재의 실행에서 무엇이 측정되는지에 따라, 실행 시간 또는 할당된 바이트의 밑이 2인 로그를 추적함으로써 타이밍 및 메모리 할당에 대한 가능한 값들의 범위를 표현할 수 있다. 메모리 할당 또는 실행 시간이 동일한 밑이 2인 로그 값을 갖는 호출들의 버킷에 대한 카운트를 증가시키기 위해 각각의 밑이 2인 로그 엔트리가 사용된다. 개별적인 실행 모두로부터의 결과들이 서로 병합된다(단계 212). 최총 결과는 메모리 할당 및 타이밍에 대한 각각의 이산 밑이 2인 로그 값에 대한 카운트를 갖는 이 시나리오에서의 모든 함수들의 테이블이다. 광범위한 시나리오에 걸쳐 API에서의 함수들에 대한 더 대표적인 조사 결과를 얻기 위해 몇개의 시나리오로부터의 결과들을 병합하는 것도 가능하다.
비제한적인 일 실시예에서, API 성능 데이터 수집 메서드에 대한 의사 코드는 다음과 같다.
Figure 112008085047455-PCT00003
Figure 112008085047455-PCT00004
Figure 112008085047455-PCT00005
이상의 의사 코드 예에서, 측정되는 파라미터가 측정 프로세스에 의해 과도 하게 방해받지 않는 한, 디스크 I/O, 네트워크 사용, 또는 임의의 다른 API에 영향을 받는 파라미터(API-influenced parameter)의 측정이 행해질 수 있도록 타이밍 및 할당의 파라미터도 보강될 수 있다.
이상의 예시적인 의사 코드에서, log2(n)이 n의 밑이 2인 로그보다 작거나 같은 최대 정수를 의미한다는 것에 유의한다. 데이터를 버킷으로 특성 파악하는 것은 API의 성능을 버킷들에 넣는 것을 포함할 수 있다. 기본적으로, 측정된 파라미터는 '2의 멱승 버킷'을 산출하기 위해 밑이 2인 로그를 사용하여 가장 가까운 정수로 버림(round down)된다. 이것은 이진 표현에서 최상위 비트의 위치를 찾아내고 그 데이터를 성능의 카테고리인 적당한 버킷에 넣음으로써 구현될 수 있다. 게다가, 측정된 API 파라미터의 평균(average), 중간값(mean) 및 표준 편차와 같은 기본 통계치가 계산될 수 있도록 합산 및 제곱의 합산이 버킷화된다. 이러한 통계치는 사용자에게 측정된 API의 성능에 관한 관련 정보를 제공한다.
비제한적인 예에서, 이하의 프로그램을 가정하자.
Figure 112008085047455-PCT00006
Figure 112008085047455-PCT00007
API 데이터 프로파일러를 사용하여, 전체 프로그램이 할당 프로파일러를 통해 실행되고 이하의 호출 시퀀스를 100번 보게 된다.
A(1) - 3 바이트를 할당함 log2(3) = 1
B(1) - 107 바이트를 할당함 log2(107) = 6
C(1) - 819 바이트를 할당함 log2(819) = 9
A(2) - 7 바이트를 할당함 log2(4) = 2
B(2) - 120 바이트를 할당함 log2(120) = 6
C(2) - 1560 바이트를 할당함 log2(1560) = 10
A(3) - 22 바이트를 할당함 log2(22) = 4
B(3) - 115 바이트를 할당함 log2(115) = 6
C(3) - 1800 바이트를 할당함 log2(1800) = 10
이 동안에, 이하의 버킷화된 데이터가 테이블 1에서와 같이 수집된다. 명백함을 위해, 함수 A, B 및 C에 대한 할당의 카운트만이 표 1에 나타내어져 있다. 이들 함수에 대한 합산 및 제곱의 합산의 버킷화된 계산이 유사한 방식으로 계산될 수 있다.
<표 1> 할당된 바이트의 밑이 2인 로그
함수 버킷 1 버킷 2 버킷 3 버킷 4 버킷 5 버킷 6 버킷 7 버킷 8 버킷 9 버킷 10
A 100 100 0 100 0 0 0 0 0 0
B 0 0 0 0 300 0 0 0 0 0
C 0 0 0 0 0 0 0 0 100 200
표 1에서의 버킷들은 할당된 바이트의 밑이 2인 로그로 표현되어 있고 또한 A, B, C만이 각각 시나리오에 의해 호출되며, 따라서 타이밍 프로파일러를 사용하여 각각의 함수에 대해 한번씩 프로그램이 3번 실행될 수 있다. 첫번째 실행에서, 함수 A만이 실행된다. 주목할 점은 A에 대한 300번의 호출 동안에, 이를 실행하는 데 20 내지 40 클럭 사이클이 걸리는 것으로 관찰된다는 것이며, log 2를 구하고 매번마다 버킷을 증가시키면, 표 2에서 함수 A에 대해 다음과 같은 것이 얻어진다.
<표 2> CPU 사이클의 밑이 2인 로그
함수 버킷 1 버킷 2 버킷 3 버킷 4 버킷 5 버킷 6 버킷 7 버킷 8 버킷 9 버킷 10
A 0 0 0 191 109 0 0 0 0 0
표 2에서 버킷들은 CPU 사이클의 밑이 2인 로그로 표현되어 있다. 그 다음 2번의 실행에서, B 및 C는 배타적으로 실행된다. 이어서, 3번의 실행의 병합이 일어날 수 있다. 이 프로세스는 실험실 개발 환경 또는 런타임 사용자 환경에서 다수의 시나리오에 걸쳐 실행될 수 있고, 공통의 함수들에 대한 버킷 카운트를 단순히 가산함으로써 수집된 데이터 전부가 서로 병합될 수 있다. 이것은 실험실 개발 환경 또는 런타임 환경에서 실행되는 일정한 일련의 시나리오들로부터 API 프로파일을 작성하는 한 방식을 나타낸다. 도 1의 사용자 인터페이스(114)는 이어서 검사를 위해 버킷화된 데이터를 렌더링하는 데 사용될 수 있다.
버킷화된 데이터는 양호하게는 설계자들이 측정 및 기록된 API 데이터에 액세스할 수 있도록 공개된다. 예를 들어, 수집된 API 데이터가 원격 액세스되는 중앙 데이터베이스와 같은 중앙 장소에 수집될 수 있다. 다른 대안으로서, API 데이터는 컴퓨터 판독가능 매체 또는 종이 카탈로그 형태로 제작되어 사용자에게 배포될 수 있다. 흔히 알려져 있는 출판 및 보급 방식이 공개를 위해 사용될 수 있다.
본 발명의 다른 측면에서, 사용자 인터페이스에서 요약된 데이터를 시각화하는 것은 결과를 이해하기 쉽도록 수행된다. 예를 들어, 수집되어 집계된 API 측정 데이터의 결과는 각각의 버킷에서의 카운트를 요약하는 히스토그램으로 나타내어질 수 있다. 다른 대안으로서, 이 결과는 컬러 스펙트럼을 사용하여 나타내어질 수 있으며, 뜨거운 쪽의 컬러 세그먼트는 고비용의 버킷에 대응하고 차가운 컬러는 저비용 쪽에 대응한다. 컬러의 세기 또는 바의 두께가 그 버킷에 있는 샘플의 수에 대응한다.
API 데이터의 분산 수집
본 발명의 한 측면에서, API 데이터는 분산 방식으로 수집될 수 있다. 분산 API 데이터 수집에서의 한가지 목적은 개발자 및 사용자가 하나의 API를 사용하는 것의 비용을 평가하는 것을 돕기 위해 API 성능의 데이터베이스를 생성하는 것이다. 데이터베이스를 채우기 위해 "현장에서의" API 성능의 실제 측정들 중 통계적으로 흥미로운 샘플을 수집하는 것이 바람직하다. 이 채워진 데이터베이스는, 성능 파라미터가 대표적인 하드웨어 상에서의 실제의 통상적인 적용에서 관찰되는 대표적인 "성능 비용"을 반영하는 경우, 더 많은 가치를 갖는다. 따라서, 사용자 기계 상에서의 실제 사용 시의 API의 성능이 바람직하다. 이러한 데이터 수집 프로세스는 실행 시간, 메모리 할당, 및 디스크 I/O 등의 다양한 서로 다른 "리소스 비용"에 대한 성능 비용의 특성 분포를 생성하는 데 사용될 수 있다.
사용자 기계 상에서 API 성능을 측정하는 것과 연관된 성능 비용 또는 오버헤드를 최소화하기 위해, 임의의 주어진 실행에서 단지 적은 수의 API만이 측정되 고 이들 API가 실행마다 랜덤하게 선택되는 것이 바람직하다. 통상적으로, 한번에 하나의 API만이 측정되어도 된다. 일 실시예에서, 자발적인 사용자 선택 방식으로 다양한 시스템에 대해 API 데이터 수집이 행해질 수 있다. 이것은 시간에 따라 각종의 하드웨어에 대해 수집된 API의 랜덤 샘플을 생성한다. API 성능의 데이터베이스가 부가의 익명 데이터로 보강되는 중앙 서버에 대해 데이터가 주기적으로 갱신될 수 있다.
도 3은 사용자의 컴퓨팅 장비에서 실행되는 API로부터 분산 데이터를 수집하는 데 사용될 수 있는 방법(300)의 흐름도이다. 사용자가 데이터 수집에 참여하기 위해, 사용자는 먼저 API 데이터의 수집 및 전송을 용이하게 해주는 적당한 프로파일러 시스템 프로그램 또는 일련의 모듈을 설치해야만 한다. 사용자가 질문을 받고 수집 프로세스에 동의 또는 수집 프로세스를 선택하는 것으로 가정된다. 일 실시예에서, 많은 사용자가 수집 방식을 선택하고 제공되는 데이터가 다양한 일련의 사용자, 애플리케이션 및 기계로부터 오며, 그 결과 광범위한 API 데이터가 수집된다. 처음에, 사용자는 비간섭적 방식으로 API의 측정을 가능하게 해주기 위해 API 프로파일러 소프트웨어 모듈을 다운로드하거나 다른 방식으로 설치하고 구성한다(단계 302). 필요한 실행 파일이 인터넷으로부터 다운로드되어 로컬적으로 설치되거나, CD-ROM 또는 등등한 프로그램 데이터 저장 매체를 통해 획득되어도 된다. 그에 부가하여, API 프로파일러는 인터넷으로부터 배포되는 소프트웨어에 통상적인 바대로 서비스될지도 모른다. 단계(302)는 한번만 수행되면 되고, 모든 후속하는 데이터 수집 세션은 단계(304)에서 시작될 수 있다.
데이터를 실제로 수집하기 위해, 데이터 수집 시스템은 사용자가 실행가능 프로그램을 실행할 때마다 그 자신을 활성화시켜야만 한다. 이 때, API 프로파일러 데이터 수집 시스템은 모니터링할 API를 랜덤하게 선택하고 데이터를 수집한다(단계 304). 선택된 API에 대한 호출이 가로채기되고, 시간, 디스크 동작, 네트워크, 메모리, 기타 등등의 하나 이상의 차원에서 비용이 측정된다.
일 실시예에서, API의 랜덤 선택은 당업자라면 잘 알고 있는 기법들을 사용하여 행해질 수 있다. 사용되는 특정의 랜덤 선택 기법은 API 프로파일러 수집 소프트웨어가 구현되는 특정의 런타임 환경에 의존적일 수 있다. 예를 들어, .NET™ CLR™(Common Language Runtime)에서, 메서드가 JIT(Just-In-Time) 컴파일될 때마다 난수를 발생하기 위해 JIT 컴파일러에 대한 조정이 행해질 수 있다. 이 난수가 정해진 문턱값보다 작은 경우, JIT 컴파일러는 그 메서드에 대한 호출이 API 프로파일러에 의해 가로채기되어 측정되도록 그 메서드를 설치할 수 있다. 많은 이러한 랜덤화된 선택 기법이 주어진 상황에서의 API 선택을 위해 구현될 수 있다. 당업자라면 본 발명에서 대상으로 삼은 특정의 기술에 기초하여 적절한 랜덤 선택 방법을 선택할 수 있다.
선택된 API에 대한 함수 호출의 가로채기 기법들도 당업자들에게는 잘 알려져 있으며 아주 많다. 유사한 가로채기가 이미 공교롭게도, 새로운 운영 체제에서 "app compat shim"이라고도 하는, 애플리케이션 호환성에 대해 특별한 거동을 제공하고 있다. 이러한 동일 시스템이 측정 후크(measurement hook)를 삽입하는 데 사용될 수 있다. 다시 말하면, 기존의 프로파일링 시스템에 의해 이미 사용되는 공 지의 기법들을 사용하여 실제 측정이 행해진다.
유의할 점은 데이터 수집의 수행 비용이 양호하게는 최소화되고 그렇게 하는 데 이용되는 몇가지 기법들이 있다는 것이다. 한 예에서, 이 수집 시스템은 사용자 시스템에 대한 영향을 최소화하기 위해 시스템 부하 또는 기타 구성 파라미터에 기초하여 데이터 수집을 거부할지도 모른다. 한 예는 정해진 적은 수보다 많은 프로그램이 동시에 설치되지 못하게 하는 시스템이다. 예를 들어, 6개 이하의 바이너리의 데이터 수집이 한 설정일 수 있다. 이 수는 추가적인 다운로드에 의해 동적으로 조정될 수 있다.
선택된 API가 선택된 후에, 각각의 프로그램 실행의 끝에서, 수집되어 요약된 데이터가 나중의 전송을 위해 디스크에 기록될 수 있다. 수집된 데이터의 양이 결정되고 충분한 데이터가 선택되었는지를 판정하기 위해 테스트될 수 있다(단계 306). 충분한 데이터가 수집된 경우, 데이터가, 예를 들어, 네트워크를 통한 전송을 통해, 중앙 서비스로 보내질 수 있다(단계 308). 예를 들어, 기록된 데이터가 타당한 데이터 묶음이 적당한 업로드 시간으로 전달될 수 있기에 적당한 크기(~128k)에 도달할 때, 웹 서비스에 접촉할 수 있고 사용자의 요약된 API 성능 정보가 중앙 서비스로 업로드된다. 다른 대안으로서, 더 많은 API 수집 데이터가 로컬적으로 수집될 수 있는 경우, 이 프로세스는 다시 단계(304)로 이동하여, 그 다음 API가 랜덤하게 선택될 수 있다.
중앙 서비스는 주어진 사용자가 정보를 제공한 각각의 API에 각각의 카테고리에서의 새로운 카운트 및 비용을 추가함으로써 업로드 요청에 응답할 수 있다. 이것은 새로운 API 성능 데이터가 중앙 서비스 결과 데이터베이스에 추가되는 집계(단계 310)라고 한다. 이 결과 데이터베이스는 따라서 항상 새로운 정보로 갱신된다. 일 실시예에서, 일괄 처리를 피하기 위해 가법적 통계(additive statistics)의 사용이 이용된다. 일 실시예에서, "사용자에 의해 호출된 보통의 고유 API" 등의 정보를 추적하지 않는 것이 선호되는데, 그 이유는 이렇게 하려면 새로운 결과 묶음이 추가될 때마다 시간이 많이 걸리는 기존의 데이터의 재처리를 필요로 하기 때문이다.
본 발명의 한 측면에서, 중앙 데이터베이스는 다수의 수단을 통해 사용자들에게 공개될 수 있다(단계 312). 예를 들어, 이 데이터베이스는 인터넷 또는 기타 네트워크 접속을 통해 원격적으로 액세스될 수 있다. 사용자가 가장 최신의 성능 비용 정보를 가질 수 있도록 전체 데이터베이스의 주기적인 갱신이 바람직하다. 모든 사용자가 동시에 갱신될 필요가 있는 것은 아니며 결과 데이터베이스 전체가 전달될 필요가 있는 것은 아니다. 일 실시예에서, 사용자는 단지 매일같이 중앙 서비스의 결과 데이터베이스의 작은 부분만을 질의할 수 있으며, 데이터를 순회하면서 그의 내용을 증분적으로 갱신하게 된다. 선택적으로, 사용자가 원하는 경우, 결과 데이터베이스 전부가 다운로드될 수 있다. 데이터베이스를 이진 형식으로 직접 공개하는 것에 부가하여, 이하에 나타낸 바와 같이 직접적으로 또는 간접적으로 그 내용이 다양하게 사용될 수 있다.
본 발명의 한 측면에서, 사용자는 수집된 API 성능 데이터의 소비자이다(단계 314). 사용자는 많은 목적을 위해 또 다양한 방식으로 데이터에 액세스할 수 있다. API 프로파일러 시스템의 효용성을 보여주는 유용한 사용 방식의 예가 이하에 요약되어 있다.
1) 표준의 API 참조는 그래픽적으로 또한 상세를 숫자 형태로 보기 위해 이용가능한 "드릴-다운"을 사용하여 디스플레이하기 위한 API 프로파일러 결과 데이터베이스에 포함된 정보를 자동적으로 포함한다.
a. 문서 형식화 시스템이 각각의 API에 대한 문서를 생성한다.
b. 각각의 API에 대해, API 프로파일러 데이터가 생성될 때, API 성능 비용 요약을 획득하기 위해 이 데이터가 조회된다.
c. 이 성능 비용 요약이 수집된 API 성능 데이터의 웹 기반 공개에서 상세한 형태로 최신의 데이터까지의 "드릴-다운"을 가능하게 해주는 링크와 함께 그래픽 형태로 문서에 삽입된다.
2) Microsoft
Figure 112008085047455-PCT00008
Visual Studio™ 시스템의 Intelli sense™ 기능 등의 디자인시 코딩 보조 수단은 선택적인 드릴다운과 함께 그래픽 형태로 비용 요약을 포함시킬 수 있는데, 그 이유는 통상적인 비용이 즉각 보이도록 새로운 API 호출이 코딩되기 때문이다.
a. 이 시스템은 일련의 가능한 API 완료를 가져온다.
b. 각각의 완료에 대해, 이 시스템은 수집된 API 프로파일러 데이터를 조회한다.
c. 각각의 시스템 디스플레이는 API 프로파일러에 의해 수집된 정보로부터의 요약을 그래픽 형태로 제시한다.
3) 코드 프로파일링 시스템의 진단 부분은 임의의 주어진 사용자의 API 사용이 통상적인 사용 패턴과 비슷한 비용을 갖는지를 알아보기 위해 API 프로파일러에 의해 수집된 데이터를 조회한다. 비정상적인 비용은 사용자의 문제 해결 경험을 향상시키기에 의심스러운 것으로 사용자에게 보고될 수 있다.
a. 이 프로파일 내의 각각의 관찰된 API에 대해, 이 시스템은 API 프로파일러 결과를 조회한다.
b. 각각의 API에 대해, "순열 검정(permutation test)"과 같은 표준의 통계 방법을 사용하여 관찰된 비용 분포가 API 프로파일러 결과 분포와 비교된다.
c. 이 통계적 방법이 사용자 비용 분포가 API 프로파일러에 의해 수집된 데이터 분포보다 나쁘다는 통계적 증거가 있음을 암시하는 경우, 문제의 API는 잠재적인 개선점으로 플래깅되고 조사를 위해 사용자에게 제시된다.
i. 이 제시는 API가 호출 스택에 나타날 때 API를 하이라이트하는 것에 의하거나,
ii. 이러한 API의 목록을 생성하는 것에 의하거나,
iii. API가 최고의 관찰된 비용을 갖는 컨텍스트를 하이라이트하는 것에 의할 수 있다.
4) API 판매업자는 그의 고객들의 통상적인 사용 및 비용에 대한 내부 조사를 하고 그에 의해 API 개선을 목표로 하여 그의 성공을 추적하기 위해 이들 기법을 이용할 수 있다.
a. 비용의 분포가 원인이 되는 모듈, 네임스페이스에 따라, 또는 둘다 에 따라 분석되어 보고서 형태로 발생될 수 있다.
b. 이들 분석은 조직에서 계획을 위해 사용된다.
본 발명의 한 측면에서, 상기한 바와 같이, API 프로파일러는 측정되는 사용자 시스템에 낮은 성능 영향을 미치도록 동작되는 것이 바람직하다. 임의의 특정의 측정되는 API가 단 하나의 프로그램 실행 동안에 수백만번 호출될 수 있는 경우 또한 게다가 하드웨어 개선이 있을 수 있는 경우, API 비용이 추가적인 분석이 용이한 경제적인 형태로 유지되는 것이 중요하다. 주어진 세션에서 측정 중인 각각의 API에 대해 일정한 크기의 입력을 갖는 것이 바람직하다. 또한, 큰 변동을 갖는 비용 분포를 포착하는 것이 바람직하다. 이것을 달성하기 위해, 한가지 방법은 정확한 비용을 포착하지 않고 분류된 "버킷"에 있는 비용의 카운트를 추적하는 것이다.
상기한 바와 같이, 각각의 증가하는 2의 멱승의 성능 또는 리소스 비용에 대해 버킷이 생성된다. 즉, 1, 2, 4, 8, 기타 등등보다 크거나 같은 비용에 대해 하나의 버킷이 있다. 각각의 비용 버킷에서, 평균 및 분산을 증분적으로 계산하는 것을 용이하게 해주기 위해 보통의 통계 누적이 추적된다. 즉, 샘플의 카운트, 비용의 합산, 및 비용의 제곱의 합산이 계산된다. 이들 값이 다양한 정밀도로 유지될 수 있다. 예를 들어, 카운트에 대해 64 비트 정수가 사용되고, 나머지 2개의 통계치 각각에 대해 하나의 배정도 부동 소수점 수가 사용된다. 그에 부가하여, 전체 평균 및 분산이 제공되도록 모든 샘플에 대한 총 카운트, 총 합산, 및 제곱의 총 합산이 유지된다. 이 방법은 집계된 데이터의 비용을 제한하면서도 여전히 필 요한 분포 정보를 유지한다. 게다가, 이들 데이터 모두는 가법적이며, 따라서 이들 데이터는 단순한 가산에 의해 서로 다른 실행 또는 서로 다른 컴퓨터로부터의 샘플들과 용이하게 결합될 수 있다.
일 실시예에서, 측정된 시간이 양호하게는, 사이클 카운트에서와 같이, 이용가능한 고해상도 타이머의 표준 단위로 유지된다. 이것은 계산 시간을 절감하고, 그 결과 최고 품질의 시간이 디스크에 존속된다.
본 발명의 한 측면으로서, 자기 저장 장치, 광학 장치(CD 및 DVD 매체 등)(이에 제한되지 않음)와 같은 컴퓨터-판독가능 매체가 본 명세서에서 기술되거나 제안된 방법들을 구현할 수 있는 컴퓨터 프로그램 명령어를 저장하는 데 사용될 수 있다. 범용 컴퓨터가 본 발명의 측면들을 실시할 수 있게 해주기 위해 범용 컴퓨터에서 사용하기 위한 실행가능 명령어를 보유하기 위해 이러한 컴퓨터 매체가 생각된다.
발명 대상이 구조적 특징 및/또는 방법적 동작과 관련하여 기술되어 있지만, 첨부된 청구항에 정의된 발명 대상이 상기한 구체적인 특징 또는 동작으로 반드시 한정되는 것은 아님을 잘 알 것이다. 오히려, 상기한 구체적인 특징 및 동작은 청구항을 구현하는 예시적인 형태로서 기술되어 있다.
예시적인 컴퓨팅 장치
도 4 및 이하의 설명은 매체 저장 장치와 인터페이스하기에 적합한 호스트 컴퓨터에 대한 간략하고 일반적인 설명을 제공하기 위한 것이다. 이하에서 범용 컴퓨터에 대해 기술되어 있지만, 이것은 단지 하나의 프로세서 예에 불과하며, 다 수의 프로세서를 갖는 호스트 컴퓨터의 실시예들이 네트워크/버스 상호연동 및 상호작용을 갖는 클라이언트와 같은 다른 컴퓨팅 장치로 구현될 수 있다.
꼭 그럴 필요는 없지만, 본 발명의 실시예들은 또한, 장치 또는 객체에 대한 서비스의 개발자가 사용하기 위해, 운영 체제를 통해 구현될 수 있고 및/또는 애플리케이션 소프트웨어 내에 포함될 수 있다. 소프트웨어는 일반적으로 하나 이상의 컴퓨터(클라이언트 워크스테이션, 서버 또는 기타 장치 등)에 의해 실행되는 프로그램 모듈과 같은 컴퓨터 실행가능 명령어와 관련하여 기술될 수 있다. 일반적으로, 프로그램 모듈은 특정의 태스크를 수행하거나 특정의 추상 데이터 유형을 구현하는 루틴, 프로그램, 객체, 컴포넌트, 데이터 구조, 기타 등등을 포함한다. 통상적으로, 프로그램 모듈의 기능은 다양한 환경에서 원하는 바에 따라 결합 또는 분산될 수 있다. 게다가, 당업자라면 본 발명의 다양한 실시예가 다른 컴퓨터 구성으로 실시될 수 있다는 것을 잘 알 것이다. 사용하기에 적합할 수 있는 다른 공지의 컴퓨팅 시스템, 환경, 및/또는 구성으로는 퍼스널 컴퓨터(PC), 현금 자동 입출금기, 서버 컴퓨터, 핸드헬드 또는 랩톱 장치, 멀티프로세서 시스템, 마이크로프로세서-기반 시스템, 프로그램가능 가전 제품, 네트워크 PC, 가전 기기, 조명, 환경 제어 요소, 미니컴퓨터, 메인프레임 컴퓨터, 기타 등등이 있지만, 이에 한정되는 것은 아니다. 본 발명의 실시예들은 또한 통신 네트워크/버스 또는 기타 데이터 전송 매체를 통해 연결되어 있는 원격 처리 장치에 의해 작업들이 수행되는 분산 컴퓨팅 환경에서 실시될 수 있다. 분산 컴퓨팅 환경에서, 프로그램 모듈들은 메모리 저장 장치를 비롯한 로컬 및 원격 컴퓨터 저장 매체 둘다에 위치해 있을 수 있 으며, 클라이언트 노드가 다음에는 서버 노드로서 거동할 수도 있다.
도 4를 참조하면, 예시적인 호스트 컴퓨터를 구현하는 예시적인 시스템은 컴퓨터 시스템(410) 형태의 범용 컴퓨팅 장치를 포함한다. 컴퓨터 시스템(410)의 컴포넌트들은 처리 장치(420), 시스템 메모리(430), 및 시스템 메모리를 비롯한 각종 시스템 컴포넌트들을 처리 장치(420)에 연결시키는 시스템 버스(421)를 포함할 수 있지만 이에 제한되는 것은 아니다. 시스템 버스(421)는 메모리 버스 또는 메모리 컨트롤러, 주변 장치 버스 및 각종 버스 아키텍처 중 임의의 것을 이용하는 로컬 버스를 비롯한 몇몇 유형의 버스 구조 중 어느 것이라도 될 수 있다.
컴퓨터 시스템(410)는 통상적으로 각종 컴퓨터 판독가능 매체를 포함한다. 컴퓨터 시스템(410)에 의해 액세스 가능한 매체는 그 어떤 것이든지 컴퓨터 판독가능 매체가 될 수 있고, 이러한 컴퓨터 판독가능 매체는 휘발성 및 비휘발성 매체, 이동식 및 비이동식 매체 둘다를 포함한다. 예로서, 컴퓨터 판독가능 매체는 컴퓨터 저장 매체 및 통신 매체를 포함할 수 있지만 이에 제한되는 것은 아니다. 컴퓨터 저장 매체는 컴퓨터 판독가능 명령어, 데이터 구조, 프로그램 모듈 또는 기타 데이터와 같은 정보를 저장하는 임의의 방법 또는 기술로 구현되는 휘발성 및 비휘발성, 이동식 및 비이동식 매체를 포함한다. 컴퓨터 저장 매체는 RAM, ROM, EEPROM, 플래시 메모리 또는 기타 메모리 기술, CD-ROM, CDRW, DVD(digital versatile disk) 또는 기타 광 디스크 저장 장치, 자기 카세트, 자기 테이프, 자기 디스크 저장 장치 또는 기타 자기 저장 장치, 또는 컴퓨터 시스템(410)에 의해 액세스될 수 있고 원하는 정보를 저장하는 데 사용될 수 있는 임의의 기타 매체를 포 함하지만 이에 제한되는 것은 아니다.
시스템 메모리(430)는 판독 전용 메모리(ROM)(431) 및 랜덤 액세스 메모리(RAM)(432)와 같은 휘발성 및/또는 비휘발성 메모리 형태의 컴퓨터 저장 매체를 포함한다. 시동 중과 같은 때에, 컴퓨터 시스템(410) 내의 구성요소들 사이의 정보 전송을 돕는 기본 루틴을 포함하는 기본 입/출력 시스템(BIOS)(433)은 통상적으로 ROM(431)에 저장되어 있다. RAM(432)은 통상적으로 처리 장치(420)가 즉시 액세스 할 수 있고 및/또는 현재 처리하고 있는 데이터 및/또는 프로그램 모듈을 포함한다. 예로서, 도 4는 운영 체제(434), 애플리케이션 프로그램(435), 기타 프로그램 모듈(436) 및 프로그램 데이터(437)를 도시하고 있지만 이에 제한되는 것은 아니다.
컴퓨터 시스템(410)는 또한 기타 이동식/비이동식, 휘발성/비휘발성 컴퓨터 저장매체를 포함할 수 있다. 단지 예로서, 도 4는 비이동식·비휘발성 자기 매체에 기록을 하거나 그로부터 판독을 하는 하드 디스크 드라이브(441), 이동식·비휘발성 자기 디스크(452)에 기록을 하거나 그로부터 판독을 하는 자기 디스크 드라이브(451), 및 CD-ROM, CDRW, DVD 또는 기타 광 매체 등의 이동식·비휘발성 광 디스크(456)에 기록을 하거나 그로부터 판독을 하는 광 디스크 드라이브(455)를 도시하고 있다. 예시적인 운영 환경에서 사용될 수 있는 기타 이동식/비이동식, 휘발성/비휘발성 컴퓨터 저장 매체로는 자기 테이프 카세트, 플래시 메모리 카드, DVD, 디지털 비디오 테이프, 고상(solid state) RAM, 고상 ROM 등이 있지만 이에 제한되는 것은 아니다. 하드 디스크 드라이브(441)는 통상적으로 인터페이스(440)와 같은 비이동식 메모리 인터페이스를 통해 시스템 버스(421)에 접속되고, 자기 디스크 드라이브(451) 및 광 디스크 드라이브(455)는 통상적으로 인터페이스(450)와 같은 이동식 메모리 인터페이스에 의해 시스템 버스(421)에 접속된다.
위에서 설명되고 도 4에 도시된 드라이브들 및 이들과 관련된 컴퓨터 저장 매체는, 컴퓨터 시스템(410)에 대한 컴퓨터 판독가능 명령어, 데이터 구조, 프로그램 모듈 및 기타 데이터를 저장한다. 도 4에서, 예를 들어, 하드 디스크 드라이브(441)는 운영 체제(444), 애플리케이션 프로그램(445), 기타 프로그램 모듈(446), 및 프로그램 데이터(447)를 저장하는 것으로 도시되어 있다. 여기서 주의할 점은 이들 컴포넌트가 운영 체제(434), 애플리케이션 프로그램(435), 기타 프로그램 모듈(436), 및 프로그램 데이터(437)와 동일하거나 그와 다를 수 있다는 것이다. 이에 관해, 운영 체제(444), 애플리케이션 프로그램(445), 기타 프로그램 모듈(446) 및 프로그램 데이터(447)에 다른 번호가 부여되어 있다는 것은 적어도 이들이 다른 사본(copy)이라는 것을 나타내기 위한 것이다.
사용자는 키보드(462), 및 통상적으로 마우스, 트랙볼(trackball) 또는 터치 패드라고 하는 포인팅 장치(461) 등의 입력 장치를 통해 명령 및 정보를 컴퓨터 시스템(410)에 입력할 수 있다. 다른 입력 장치(도시 생략)로는 마이크, 조이스틱, 게임 패드, 위성 안테나, 스캐너 등이 있을 수 있다. 이들 및 기타 입력 장치는 종종 시스템 버스(421)에 결합된 사용자 입력 인터페이스(460)를 통해 처리 장치(420)에 접속되지만, 병렬 포트, 게임 포트 또는 USB(universal serial bus) 등의 다른 인터페이스 및 버스 구조에 의해 접속될 수도 있다. 모니터(491) 또는 다 른 유형의 디스플레이 장치도 비디오 인터페이스(490) 등의 인터페이스를 통해 시스템 버스(421)에 접속되고, 이 비디오 인터페이스(490)는 차례로 비디오 메모리(도시 생략)와 통신할 수 있다. 모니터(491) 외에, 컴퓨터 시스템은 스피커(497) 및 프린터(496) 등의 기타 주변 출력 장치를 포함할 수 있고, 이들은 출력 주변장치 인터페이스(495)를 통해 접속될 수 있다.
컴퓨터 시스템(410)은 원격 컴퓨터(480)와 같은 하나 이상의 원격 컴퓨터로의 논리적 접속을 사용하여 네트워크화된 또는 분산된 환경에서 동작할 수 있다. 원격 컴퓨터(480)는 퍼스널 컴퓨터, 서버, 라우터, 네트워크 PC, 피어 장치 또는 기타 통상의 네트워크 노드일 수 있고, 통상적으로 컴퓨터 시스템(410)과 관련하여 상술된 구성요소들의 대부분 또는 그 전부를 포함하지만, 도 4에는 메모리 저장 장치(481)만이 도시되어 있다. 도 4에 도시된 논리적 접속으로는 LAN(471) 및 WAN(473)이 있지만, 기타 네트워크/버스를 포함할 수도 있다. 이러한 네트워킹 환경은 가정, 사무실, 전사적 컴퓨터 네트워크(enterprise-wide computer network), 인트라넷, 및 인터넷에서 일반적인 것이다.
LAN 네트워킹 환경에서 사용될 때, 컴퓨터 시스템(410)는 네트워크 인터페이스 또는 어댑터(470)를 통해 LAN(471)에 접속된다. WAN 네트워킹 환경에서 사용될 때, 컴퓨터 시스템(410)은 통상적으로 인터넷과 같은 WAN(473)을 통해 통신을 설정하기 위한 모뎀(472) 또는 기타 수단을 포함한다. 내장형 또는 외장형일 수 있는 모뎀(472)은 사용자 입력 인터페이스(460) 또는 기타 적절한 메커니즘을 통해 시스템 버스(421)에 접속될 수 있다. 네트워크화된 환경에서, 컴퓨터 시스템(410) 또 는 그의 일부와 관련하여 기술된 프로그램 모듈은 원격 메모리 저장 장치에 저장될 수 있다. 예로서, 도 4는 원격 애플리케이션 프로그램(485)이 ㅔㅁ모리 장치(481)에 존재하는 것으로 도시하고 있지만 이에 제한되는 것은 아니다. 도시된 네트워크 접속은 예시적인 것이며 이 컴퓨터들 사이에 통신 링크를 설정하는 기타 수단이 사용될 수 있다는 것을 잘 알 것이다.
퍼스널 컴퓨팅 및 인터넷의 컨버전스를 고려하여 다양한 분산 컴퓨팅 프레임워크가 개발되었고 또 개발 중에 있다. 개인 및 기업 사용자 둘다는 애플리케이션 및 컴퓨팅 장치에 대한 매끄럽게 상호연동가능한 웹 지원 인터페이스를 제공받음으로써, 컴퓨팅 활동이 점점 더 웹 브라우저 또는 네트워크-지향적으로 된다.
예를 들어, 마이크로소프트사로부터 입수가능한 MICROSOFT
Figure 112008085047455-PCT00009
의 .NET™ 플랫폼은 서버, 웹 기반 데이터 저장과 같은 구성 블록 서비스(building-block service), 및 다운로드가능한 장치 소프트웨어를 포함한다. 본 명세서의 예시적인 실시예들이 컴퓨팅 장치 상에 존재하는 소프트웨어와 관련하여 기술되어 있지만, 본 발명의 실시예의 하나 이상의 부분들이 운영 체제, API, 또는 코프로세서, 디스플레이 장치 및 요청측 객체 중 임의의 것들 간의 "미들맨(middle man)" 객체를 통해서도 구현될 수 있으며, 따라서 동작이 모든 .NET™의 언어 및 서비스에 의해 또한 다른 분산 컴퓨팅 프레임워크에서도 수행되거나, 지원되거나, 또는 액세스될 수 있다.
상기한 바와 같이, 본 발명의 예시적인 실시예들이 다양한 컴퓨팅 장치 및 네트워크 아키텍처와 관련하여 기술되어 있지만, 기초적인 개념들이 API 성능 프로파일을 수집 및 보고하는 방법을 구현하는 것이 바람직한 어느 컴퓨팅 장치 또는 시스템에도 적용될 수 있다. 따라서, 본 발명의 실시예들과 관련하여 기술된 방법 및 시스템은 다양한 애플리케이션 및 장치에 적용될 수 있다. 예시적인 프로그래밍 언어, 이름 및 예가 본 명세서에서 다양한 선택들을 대표하는 것으로 선택되어 있지만, 이들 언어, 이름 및 예는 제한하기 위한 것이 아니다. 당업자라면 본 발명의 실시예들에 의해 달성되는 동일한, 유사한 또는 등가의 시스템 및 방법을 달성하는 객체 코드를 제공하는 많은 방식들이 있다는 것을 잘 알 것이다.
본 명세서에 기술된 다양한 기법들이 하드웨어 또는 소프트웨어와 관련하여, 또는 적절한 경우, 이 둘의 조합으로 구현될 수 있다. 따라서, 본 발명의 방법 및 장치 또는 그의 어떤 측면 또는 일부가 플로피 디스켓, CD-ROM, 하드 드라이브, 또는 임의의 다른 기계-판독가능 저장 매체와 같은 유형의 매체에 구현된 프로그램 코드(즉, 명령어)의 형태를 가질 수 있으며, 여기서 프로그램 코드가 컴퓨터 등의 기계에 로드되어 실행될 때, 이 기계는 본 발명을 실시하는 장치가 된다.
본 발명의 측면들이 다양한 도면의 양호한 실시예들과 관련하여 기술되어 있지만, 본 발명을 벗어나지 않고 본 발명의 동일한 기능을 수행하기 위해 다른 유사한 실시예들이 사용될 수 있거나 기술된 실시예에 여러 수정 및 추가가 행해질 수 있다는 것을 잘 알 것이다. 게다가, 특히 무선 네트워크 장치의 수가 계속 증가함에 따라, 핸드헬드 장치 운영 체제 및 기타 애플리케이션 관련 운영 체제를 비롯한 각종의 컴퓨터 플랫폼이 생각되고 있다는 것이 강조되어야 한다. 따라서, 청구된 발명은 임의의 단 하나의 실시예에 한정되지 않고 오히려 첨부된 청구항에 따라 폭 및 범위가 해석되어야만 한다.

Claims (19)

  1. API(Application Programming Interface)의 성능을 측정하는 방법으로서,
    (a) 측정할 API들의 목록을 생성하는 단계,
    (b) 상기 목록으로부터 단 하나의 타겟 API를 선택하는 단계,
    (c) 상기 타겟 API에 대한 호출들을 가로채어 타이밍 및 메모리 할당 데이터를 수집하는 단계,
    (d) 상기 타겟 API에 대한 타이밍 및 메모리 할당 데이터를 기록하는 단계 - 상기 기록된 데이터가 저장됨 -,
    (e) 측정된 결과들을 상기 수집된 타이밍 및 메모리 할당 데이터의 밑이 2인 로그(log base 2)를 나타내는 버킷화된 데이터를 갖는 결과 테이블로 병합하는 단계, 및
    (f) 상기 목록 상의 각각의 API에 대해 단계 (b) 내지 (e)를 반복하는 단계를 포함하는, API의 성능을 측정하는 방법.
  2. 제1항에 있어서, 결과들의 데이터베이스를 생성하여 이 데이터베이스를 API 성능 데이터의 사용자들이 이용할 수 있게 해주는 단계를 더 포함하는, API의 성능을 측정하는 방법.
  3. 제1항에 있어서, 각각의 함수에 대해 히스토그램을 사용하여 그래픽 사용자 인터페이스를 통해 상기 결과 테이블을 제시하는 단계를 더 포함하는, API의 성능을 측정하는 방법.
  4. 제1항에 있어서, 상기 타겟 API에 의해 호출된 함수들의 목록을 발생하는 단계 - 이 목록은 호출 스택에 동시에 나타나지 않는 함수들을 포함한 비간섭 함수들(non-interfering functions)을 포함함 -, 및
    복수의 비간섭 함수들에 대한 타이밍 및 메모리 할당을 동시에 측정하는 단계를 더 포함하는, API의 성능을 측정하는 방법.
  5. 제4항에 있어서, 상기 비간섭 함수들의 실행의 측정된 결과들을 상기 타이밍 및 메모리 할당 데이터의 밑이 2인 로그를 나타내는 버킷화된 데이터를 갖는 결과 테이블로 병합하는 단계를 더 포함하는, API의 성능을 측정하는 방법.
  6. 제5항에 있어서, 각각의 함수에 대해 히스토그램을 사용하여 그래픽 사용자 인터페이스를 통해 상기 결과 테이블을 제시하는 단계를 더 포함하는, API의 성능을 측정하는 방법.
  7. 제1항에 있어서, API의 성능을 측정하는 프로그램이 복수의 사용자 컴퓨터 상에 존재하며,
    상기 방법이,
    상기 저장되어 있는 기록된 데이터가 문턱값 양을 초과하는지를 알아보기 위한 테스트를 하는 단계,
    상기 문턱값 양이 초과되지 않은 경우 사용자 컴퓨터에서 메모리 할당 및 타이밍 데이터를 측정할 다른 API를 선택하고 상기 단계 (b) 내지 (e)를 반복하는 단계,
    상기 저장되어 있는 기록된 데이터가 상기 문턱값 양을 초과하는 경우, 상기 저장되어 있는 기록된 데이터를 중앙 서비스 장소로 전송하는 단계 - 상기 중앙 서비스 장소가 API 측정 데이터를 저장하고 있음 -,
    상기 전송된 데이터를 상기 중앙 서비스 장소에 저장되어 있는 상기 API 측정 데이터와 통합하는 단계, 및
    결과들의 데이터베이스를 발생하고 이 데이터베이스를 API 성능 데이터의 사용자들이 이용할 수 있게 해주는 단계를 더 포함하는 것인, API의 성능을 측정하는 방법.
  8. 제1항에 있어서, 메모리 할당 및 타이밍 데이터를 측정할 API를 선택하는 단계는,
    난수 발생기를 사용하여 타겟 API를 선택하는 단계를 포함하는 것인, API의 성능을 측정하는 방법.
  9. API(Application Programming Interface)에 대한 성능 데이터를 획득하는 컴 퓨터 시스템으로서,
    상기 시스템은 소프트웨어 명령어들을 실행하는 프로세스를 포함하고,
    상기 소프트웨어 명령어들은,
    함수가 타겟 API에 의해 호출되는 횟수를 측정 및 기록하여 상기 타겟 API의 메모리 할당 측정치를 생성하는 메모리 할당 프로파일러 모듈,
    상기 타겟 API에 관련된 타이밍 정보를 측정 및 기록하여 상기 타겟 API의 타이밍 측정치를 생성하는 타이밍 프로파일러 모듈,
    상기 타겟 API의 각각의 호출에 대해 한번씩 상기 메모리 할당 모듈 및 상기 타이밍 프로파일러 모듈을 실행하는 조정 모듈 - 이 조정 모듈은 동일한 호출 스택에 나타나는 임의의 2개의 API를 동시에 측정하는 것을 방지함 -,
    상기 타겟 API의 상기 메모리 할당 측정치 및 상기 타이밍 측정치를 결과 테이블로 결합하는 병합 도구 모듈, 및
    상기 메모리 할당 및 타이밍 측정치의 밑이 2인 로그 버킷화에 따른 형태로 상기 결과 테이블의 데이터를 디스플레이할 수 있는 사용자 인터페이스 모듈을 포함하는 것인, API에 대한 성능 데이터를 획득하는 컴퓨터 시스템.
  10. 제9항에 있어서, 상기 메모리 할당 프로파일러는 포함적 및 배타적 메모리 할당값을 개별적으로 측정 및 기록하는 것인, API에 대한 성능 데이터를 획득하는 컴퓨터 시스템.
  11. 제9항에 있어서, 상기 사용자 인터페이스 모듈은 상기 결과 테이블의 데이터를 측정된 각각의 함수 호출에 대해 히스토그램 형태로 렌더링하는 그래픽 사용자 인터페이스를 더 포함하는 것인, API에 대한 성능 데이터를 획득하는 컴퓨터 시스템.
  12. API(Application Programming Interface)에 대한 성능 데이터를 획득하는 방법을 수행하는 컴퓨터 실행가능 명령어들을 갖는 컴퓨터 판독가능 매체로서,
    상기 방법은,
    (a) 측정할 API들의 목록을 생성하는 단계,
    (b) 상기 목록으로부터 단 하나의 타겟 API를 선택하는 단계,
    (c) 상기 타겟 API에 대한 호출들을 가로채어 타이밍 및 메모리 할당 데이터를 수집하는 단계,
    (d) 상기 타겟 API에 대한 타이밍 및 메모리 할당 데이터를 기록하는 단계 - 상기 기록된 데이터가 저장됨 -,
    (e) 측정된 결과들을 상기 수집된 타이밍 및 메모리 할당 데이터의 밑이 2인 로그를 나타내는 버킷화된 데이터를 갖는 결과 테이블로 병합하는 단계, 및
    (f) 상기 목록 상의 각각의 API에 대해 단계 (b) 내지 (e)를 반복하는 단계를 포함하는 것인, API에 대한 성능 데이터를 획득하는 방법을 수행하는 컴퓨터 실행가능 명령어들을 갖는 컴퓨터 판독가능 매체.
  13. 제12항에 있어서, 상기 방법이 결과들의 데이터베이스를 생성하여 이 데이터베이스를 API 성능 데이터의 사용자들이 이용할 수 있게 해주는 단계를 더 포함하는 것인, API에 대한 성능 데이터를 획득하는 방법을 수행하는 컴퓨터 실행가능 명령어들을 갖는 컴퓨터 판독가능 매체.
  14. 제12항에 있어서, 상기 방법이 각각의 함수에 대해 히스토그램을 사용하여 그래픽 사용자 인터페이스를 통해 상기 결과 테이블을 제시하는 단계를 더 포함하는 것인, API에 대한 성능 데이터를 획득하는 방법을 수행하는 컴퓨터 실행가능 명령어들을 갖는 컴퓨터 판독가능 매체.
  15. 제12항에 있어서, 상기 방법이,
    상기 타겟 API에 의해 호출된 함수들의 목록을 발생하는 단계 - 이 목록은 호출 스택에 동시에 나타나지 않는 함수들을 포함한 비간섭 함수들(non-interfering functions)을 포함함 -, 및
    복수의 비간섭 함수들에 대한 타이밍 및 메모리 할당을 동시에 측정하는 단계를 더 포함하는 것인, API에 대한 성능 데이터를 획득하는 방법을 수행하는 컴퓨터 실행가능 명령어들을 갖는 컴퓨터 판독가능 매체.
  16. 제15항에 있어서, 상기 방법이 상기 비간섭 함수들의 실행의 측정된 결과들을 상기 타이밍 및 메모리 할당 데이터의 밑이 2인 로그를 나타내는 버킷화된 데이 터를 갖는 결과 테이블로 병합하는 단계를 더 포함하는 것인, API에 대한 성능 데이터를 획득하는 방법을 수행하는 컴퓨터 실행가능 명령어들을 갖는 컴퓨터 판독가능 매체.
  17. 제16항에 있어서, 상기 방법이 각각의 함수에 대해 히스토그램을 사용하여 그래픽 사용자 인터페이스를 통해 상기 결과 테이블을 제시하는 단계를 더 포함하는 것인, API에 대한 성능 데이터를 획득하는 방법을 수행하는 컴퓨터 실행가능 명령어들을 갖는 컴퓨터 판독가능 매체.
  18. 제12항에 있어서, 상기 방법이,
    상기 저장되어 있는 기록된 데이터가 문턱값 양을 초과하는지를 알아보기 위한 테스트를 하는 단계,
    상기 문턱값 양이 초과되지 않은 경우 메모리 할당 및 타이밍 데이터를 측정할 다른 API를 선택하고 상기 단계 (b) 내지 (e)를 반복하는 단계,
    상기 저장되어 있는 기록된 데이터가 상기 문턱값 양을 초과하는 경우, 상기 저장되어 있는 기록된 데이터를 중앙 서비스 장소로 전송하는 단계 - 상기 중앙 서비스 장소가 API 측정 데이터를 저장하고 있음 -,
    상기 전송된 데이터를 상기 중앙 서비스 장소에 저장되어 있는 상기 API 측정 데이터와 통합하는 단계, 및
    결과들의 데이터베이스를 발생하고 이 데이터베이스를 API 성능 데이터의 사 용자들이 이용할 수 있게 해주는 단계를 더 포함하는 것인, API에 대한 성능 데이터를 획득하는 방법을 수행하는 컴퓨터 실행가능 명령어들을 갖는 컴퓨터 판독가능 매체.
  19. 제12항에 있어서, 메모리 할당 및 타이밍 데이터를 측정할 API를 선택하는 단계는,
    난수 발생기를 사용하여 타겟 API를 선택하는 단계를 포함하는 것인, API에 대한 성능 데이터를 획득하는 방법을 수행하는 컴퓨터 실행가능 명령어들을 갖는 컴퓨터 판독가능 매체.
KR1020087030148A 2006-06-16 2007-05-08 Api의 성능을 측정하는 방법, 컴퓨터 시스템, 및 컴퓨터판독가능 매체 KR20090017586A (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US11/454,714 2006-06-16
US11/454,714 US7895579B2 (en) 2006-06-16 2006-06-16 Automated method and system for collecting and reporting API performance profiles

Publications (1)

Publication Number Publication Date
KR20090017586A true KR20090017586A (ko) 2009-02-18

Family

ID=38833905

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020087030148A KR20090017586A (ko) 2006-06-16 2007-05-08 Api의 성능을 측정하는 방법, 컴퓨터 시스템, 및 컴퓨터판독가능 매체

Country Status (6)

Country Link
US (2) US7895579B2 (ko)
EP (1) EP2035955B1 (ko)
JP (1) JP5249206B2 (ko)
KR (1) KR20090017586A (ko)
CN (1) CN101553802B (ko)
WO (1) WO2007149156A2 (ko)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8943503B2 (en) 2010-07-02 2015-01-27 Samsung Electronics Co., Ltd. Apparatus and method for thread progress tracking using deterministic progress index
KR20190059890A (ko) * 2017-10-26 2019-05-31 후아웨이 테크놀러지 컴퍼니 리미티드 정보를 수집하는 방법 및 장치, 그리고 메모리를 해제하는 방법 및 장치
KR20200108753A (ko) * 2019-03-11 2020-09-21 쿠팡 주식회사 애플리케이션 프로그래밍 인터페이스 정보를 관리하기 위한 시스템 및 방법
KR102617002B1 (ko) * 2022-11-28 2023-12-27 쿠팡 주식회사 애플리케이션의 성능을 측정하는 장치 및 방법

Families Citing this family (67)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7266726B1 (en) 2003-11-24 2007-09-04 Time Warner Cable Inc. Methods and apparatus for event logging in an information network
US8302111B2 (en) 2003-11-24 2012-10-30 Time Warner Cable Inc. Methods and apparatus for hardware registration in a network device
US9213538B1 (en) 2004-02-06 2015-12-15 Time Warner Cable Enterprises Llc Methods and apparatus for display element management in an information network
US8078669B2 (en) 2004-02-18 2011-12-13 Time Warner Cable Inc. Media extension apparatus and methods for use in an information network
US7895579B2 (en) * 2006-06-16 2011-02-22 Microsoft Corporation Automated method and system for collecting and reporting API performance profiles
US7913233B2 (en) * 2006-09-28 2011-03-22 Bank Of America Corporation Performance analyzer
US8370818B2 (en) * 2006-12-02 2013-02-05 Time Warner Cable Inc. Methods and apparatus for analyzing software interface usage
KR100921514B1 (ko) * 2006-12-05 2009-10-13 한국전자통신연구원 성능 예측 기능을 제공하는 소프트웨어 개발 장치 및 방법
US8713513B2 (en) * 2006-12-13 2014-04-29 Infosys Limited Evaluating programmer efficiency in maintaining software systems
US8117601B2 (en) * 2007-11-14 2012-02-14 Microsoft Corporation Internal test and manipulation of an application
US8549347B1 (en) 2010-12-20 2013-10-01 Amazon Technologies, Inc. Techniques for network replication
US8321843B2 (en) * 2009-02-09 2012-11-27 Tranxition Corporation Automatic analysis of an application's run-time settings
US8756564B2 (en) * 2009-05-29 2014-06-17 International Business Machines Corporation Techniques for providing environmental impact information associated with code
US8554811B2 (en) * 2009-11-10 2013-10-08 Microsoft Corporation Software routine fingerprints in performance data
CN102486731B (zh) * 2009-11-30 2015-12-09 国际商业机器公司 增强软件的软件调用栈的可视化的方法、设备和系统
US8645914B2 (en) 2010-01-22 2014-02-04 AgentSheets, Inc. Conversational programming
US8776036B2 (en) 2010-11-23 2014-07-08 Red Hat, Inc. Determining support criteria for shared libraries based on their priority levels
US8938706B2 (en) * 2010-11-23 2015-01-20 Red Hat, Inc. Providing customized visualization of application binary interface/application programming interface-related information
US8887122B2 (en) * 2010-11-23 2014-11-11 Red Hat, Inc. Find and track information of interface usage of software libraries by other software
US8863108B2 (en) * 2010-11-23 2014-10-14 Red Hat, Inc. Finding out if software will run on an operating system without installing that software
JP5644431B2 (ja) * 2010-12-01 2014-12-24 株式会社リコー 情報処理システム、情報処理装置、方法、プログラムおよび記録媒体
US8707276B2 (en) * 2011-01-07 2014-04-22 Mastercard International Incorporated Method and system for managing programmed applications in an open API environment
US9032204B2 (en) 2011-01-07 2015-05-12 Mastercard International Incorporated Methods and systems for providing a signed digital certificate in real time
US9083534B2 (en) 2011-01-07 2015-07-14 Mastercard International Incorporated Method and system for propagating a client identity
WO2012098554A1 (en) * 2011-01-17 2012-07-26 Infosys Technologies Limited Method and system for preemptive detection of occurrence of faulty conditions based on resource usage
WO2011137803A1 (zh) 2011-05-20 2011-11-10 华为技术有限公司 开放应用程序编程接口选择方法及设备
US8650550B2 (en) * 2011-06-07 2014-02-11 Blackberry Limited Methods and devices for controlling access to computing resources
US8924914B2 (en) * 2011-06-14 2014-12-30 Sap Se Application creation tool toolkit
US9785470B2 (en) 2011-06-20 2017-10-10 Microsoft Technology Licensing, Llc Memory management model and interface for unmodified applications
US8862950B1 (en) * 2011-09-22 2014-10-14 Amazon Technologies, Inc. Testing the operation of an application programming interface
US20130205019A1 (en) * 2012-02-07 2013-08-08 William Oellermann Systems and methods for managing api interactions
US9183108B2 (en) * 2012-03-27 2015-11-10 Microsoft Technology Licensing, Llc Logical grouping of profile data
US8909770B2 (en) * 2012-06-04 2014-12-09 Brocade Communications Systems, Inc. Performance estimator for network devices
US20140068569A1 (en) * 2012-08-31 2014-03-06 Microsoft Corporation User directed profiling
US9015685B2 (en) 2013-03-01 2015-04-21 International Business Machines Corporation Code analysis for simulation efficiency improvement
US10843084B2 (en) * 2013-10-30 2020-11-24 Nvidia Corporation Method and system for gathering time-varying metrics
US9934122B2 (en) 2014-07-09 2018-04-03 Microsoft Technology Licensing, Llc Extracting rich performance analysis from simple time measurements
US9128729B1 (en) 2014-09-08 2015-09-08 Quanta Computer Inc. System and method for automatically configuring bios performance profiles
US9646092B2 (en) * 2014-10-10 2017-05-09 Adp, Llc Centralized application programming interface monitoring tool
US20160225042A1 (en) * 2015-02-02 2016-08-04 Linkedln Corporation Determining a cost of an application programming interface
US9846607B2 (en) 2015-03-12 2017-12-19 Nvidia Corporation Method and system for associating crash reports with end user analytics
CN106843824A (zh) * 2015-12-03 2017-06-13 财团法人工业技术研究院 图形用户界面的执行方法、追踪方法与电子装置
US10884761B2 (en) 2016-03-22 2021-01-05 Lenovo Enterprise Solutions (Singapore) Pte. Ltd Best performance delivery in heterogeneous computing unit environment
US10860499B2 (en) * 2016-03-22 2020-12-08 Lenovo Enterprise Solutions (Singapore) Pte. Ltd Dynamic memory management in workload acceleration
CN106027325B (zh) * 2016-05-10 2018-11-06 华中科技大学 一种网盘应用程序编程接口的测量方法和系统
US9892253B1 (en) * 2016-06-20 2018-02-13 Amazon Technologies, Inc. Buffer overflow exploit detection
CN106201864A (zh) * 2016-06-27 2016-12-07 乐视控股(北京)有限公司 一种应用程序编程接口api测试方法、装置及移动设备
US9871905B1 (en) * 2016-08-09 2018-01-16 Sprint Communications Company L.P. Systems and methods for customized delivery of virtually installed applications
CN106294157A (zh) * 2016-08-11 2017-01-04 浪潮(北京)电子信息产业有限公司 一种操作系统测试方法及装置
US9753745B1 (en) * 2016-08-17 2017-09-05 TCL Research America Inc. System and method for system function-flow optimization utilizing application programming interface (API) profiling
US10445151B1 (en) * 2016-09-14 2019-10-15 Google Llc Distributed API accounting
US9990135B2 (en) 2016-09-23 2018-06-05 Apple Inc. Providing memory usage analysis by attributing memory allocations to development components
US20180232442A1 (en) * 2017-02-16 2018-08-16 International Business Machines Corporation Web api recommendations
WO2018200135A1 (en) * 2017-04-25 2018-11-01 Intento, Inc. Intent-based organisation of apis
US10776798B2 (en) * 2017-04-25 2020-09-15 Comscore, Inc. Device identification systems and methods
US11716558B2 (en) 2018-04-16 2023-08-01 Charter Communications Operating, Llc Apparatus and methods for integrated high-capacity data and wireless network services
US10785017B2 (en) * 2018-04-24 2020-09-22 Microsoft Technology Licensing, Llc Mitigating timing attacks via dynamically scaled time dilation
US10891017B1 (en) 2018-08-25 2021-01-12 Sprint Communications Company L.P. Rotating icon selection and interaction software development kit (SDK)
US11129213B2 (en) 2018-10-12 2021-09-21 Charter Communications Operating, Llc Apparatus and methods for cell identification in wireless networks
US11129171B2 (en) 2019-02-27 2021-09-21 Charter Communications Operating, Llc Methods and apparatus for wireless signal maximization and management in a quasi-licensed wireless system
CN109933508B (zh) * 2019-03-25 2023-02-24 北京百度网讯科技有限公司 用于发送信息的方法和装置
CN110457196B (zh) * 2019-08-16 2023-10-24 腾讯科技(深圳)有限公司 函数执行时间的获取方法及装置
US10936384B1 (en) * 2019-10-23 2021-03-02 Sap Se Performance testing of OData APIs
US11026205B2 (en) 2019-10-23 2021-06-01 Charter Communications Operating, Llc Methods and apparatus for device registration in a quasi-licensed wireless system
US10951738B1 (en) 2020-08-06 2021-03-16 Bank Of America Corporation Automatic API integration
US10956244B1 (en) * 2020-08-26 2021-03-23 Coupang Corp. Systems and methods for automated application programming interface evaluation and migration
CN112039913A (zh) * 2020-09-07 2020-12-04 上海浦东发展银行股份有限公司 一种服务端api调用方法、装置及存储介质

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5732273A (en) 1995-08-11 1998-03-24 Digital Equipment Corporation System for monitoring compute system performance
US5615323A (en) 1994-11-04 1997-03-25 Concord Communications, Inc. Displaying resource performance and utilization information
JP2798364B2 (ja) * 1995-05-10 1998-09-17 インターナショナル・ビジネス・マシーンズ・コーポレイション アプリケーションの評価方法及びシステム
US5748878A (en) 1995-09-11 1998-05-05 Applied Microsystems, Inc. Method and apparatus for analyzing software executed in embedded systems
US5920719A (en) 1995-11-06 1999-07-06 Apple Computer, Inc. Extensible performance statistics and tracing registration architecture
US6330008B1 (en) 1997-02-24 2001-12-11 Torrent Systems, Inc. Apparatuses and methods for monitoring performance of parallel computing
US6839725B2 (en) 2000-05-16 2005-01-04 Sun Microsystems, Inc. Dynamic adaptive tenuring of objects
US7216160B2 (en) 2001-10-31 2007-05-08 Sun Microsystems, Inc. Server-based application monitoring through collection of application component and environmental statistics
GB0126310D0 (en) 2001-11-02 2002-01-02 Britax Aircraft Interiors Uk L Passenger seat
US7266810B2 (en) 2002-04-09 2007-09-04 Hewlett-Packard Development Company, Lp. Runtime profiling of platform-independent software applications
US6965978B2 (en) 2003-05-15 2005-11-15 Microsoft Corporation Memory tracking tool
US20050071611A1 (en) * 2003-09-30 2005-03-31 International Business Machines Corporation Method and apparatus for counting data accesses and instruction executions that exceed a threshold
US7457872B2 (en) 2003-10-15 2008-11-25 Microsoft Corporation On-line service/application monitoring and reporting system
JP2005223847A (ja) * 2004-02-09 2005-08-18 Intelligent Cosmos Research Institute ネットワーク異常検出装置、ネットワーク異常検出方法およびネットワーク異常検出プログラム
US7895579B2 (en) * 2006-06-16 2011-02-22 Microsoft Corporation Automated method and system for collecting and reporting API performance profiles

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8943503B2 (en) 2010-07-02 2015-01-27 Samsung Electronics Co., Ltd. Apparatus and method for thread progress tracking using deterministic progress index
KR20190059890A (ko) * 2017-10-26 2019-05-31 후아웨이 테크놀러지 컴퍼니 리미티드 정보를 수집하는 방법 및 장치, 그리고 메모리를 해제하는 방법 및 장치
US11138034B2 (en) 2017-10-26 2021-10-05 Huawei Technologies Co., Ltd. Method and apparatus for collecting information, and method and apparatus for releasing memory
KR20200108753A (ko) * 2019-03-11 2020-09-21 쿠팡 주식회사 애플리케이션 프로그래밍 인터페이스 정보를 관리하기 위한 시스템 및 방법
KR102617002B1 (ko) * 2022-11-28 2023-12-27 쿠팡 주식회사 애플리케이션의 성능을 측정하는 장치 및 방법

Also Published As

Publication number Publication date
WO2007149156A2 (en) 2007-12-27
JP2009540463A (ja) 2009-11-19
EP2035955A2 (en) 2009-03-18
JP5249206B2 (ja) 2013-07-31
US20070294673A1 (en) 2007-12-20
WO2007149156A3 (en) 2008-02-14
CN101553802B (zh) 2013-02-13
EP2035955A4 (en) 2009-11-04
EP2035955B1 (en) 2017-04-26
US7895579B2 (en) 2011-02-22
CN101553802A (zh) 2009-10-07
US9027000B2 (en) 2015-05-05
US20110113405A1 (en) 2011-05-12

Similar Documents

Publication Publication Date Title
KR20090017586A (ko) Api의 성능을 측정하는 방법, 컴퓨터 시스템, 및 컴퓨터판독가능 매체
US9588820B2 (en) Cloud architecture recommender system using automated workload instrumentation
US8051332B2 (en) Exposing application performance counters for .NET applications through code instrumentation
US8938729B2 (en) Two pass automated application instrumentation
US8938719B2 (en) System and method for performance assurance of applications
Theisen et al. Approximating attack surfaces with stack traces
US7676695B2 (en) Resolution of computer operations problems using fault trend analysis
EP2572294B1 (en) System and method for sql performance assurance services
US20080127109A1 (en) Method and system for generating and displaying function call tracker charts
EP2192491B1 (en) System and method of implementing a concurrency profiler
Leon et al. Multivariate visualization in observation-based testing
US20090307347A1 (en) Using Transaction Latency Profiles For Characterizing Application Updates
Yao et al. Log4perf: Suggesting logging locations for web-based systems' performance monitoring
Srikanth et al. Regression testing in software as a service: An industrial case study
CN102014163A (zh) 一种基于事务驱动的云存储测试方法及系统
Arisholm Empirical assessment of the impact of structural properties on the changeability of object-oriented software
Juergens et al. Feature profiling for evolving systems
Diep et al. Probe distribution techniques to profile events in deployed software
Alcocer et al. Tracking performance failures with rizel
Hansen Towards comparative profiling of parallel applications with pperfdb
Pardal et al. Performance Assessment of Web Services in the STEP Framework
Brandl Cost Allocation based on Resource Profiles
Malony et al. Extreme Performance Scalable Operating Systems
Peng et al. Combining gprof and event-driven monitoring for analyzing distributed programs: a rough view of NCSA mosaic
Hasan et al. Stress Testing and Monitoring ASP. NET Applications

Legal Events

Date Code Title Description
A201 Request for examination
SUBM Surrender of laid-open application requested