KR20130055515A - 데이터 프로세싱 시스템의 메모리 사용을 추적하는 방법 - Google Patents

데이터 프로세싱 시스템의 메모리 사용을 추적하는 방법 Download PDF

Info

Publication number
KR20130055515A
KR20130055515A KR1020120108937A KR20120108937A KR20130055515A KR 20130055515 A KR20130055515 A KR 20130055515A KR 1020120108937 A KR1020120108937 A KR 1020120108937A KR 20120108937 A KR20120108937 A KR 20120108937A KR 20130055515 A KR20130055515 A KR 20130055515A
Authority
KR
South Korea
Prior art keywords
memory
entry
allocation
trace
client
Prior art date
Application number
KR1020120108937A
Other languages
English (en)
Other versions
KR101357397B1 (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 애플 인크.
Publication of KR20130055515A publication Critical patent/KR20130055515A/ko
Application granted granted Critical
Publication of KR101357397B1 publication Critical patent/KR101357397B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/0292User address space allocation, e.g. contiguous or non contiguous base addressing using tables or multilevel address translation means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0706Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment
    • G06F11/073Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment in a memory management context, e.g. virtual memory or cache management
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0751Error or fault detection not based on redundancy
    • G06F11/0754Error or fault detection not based on redundancy by exceeding limits
    • G06F11/076Error or fault detection not based on redundancy by exceeding limits by exceeding a count or rate limit, e.g. word- or bit count limit
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/079Root cause analysis, i.e. error or fault diagnosis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • 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
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0253Garbage collection, i.e. reclamation of unreferenced memory

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Health & Medical Sciences (AREA)
  • Biomedical Technology (AREA)
  • Software Systems (AREA)
  • Debugging And Monitoring (AREA)
  • Memory System (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

데이터 프로세싱 시스템의 메모리 사용을 추적하기 위한 기술이 본 명세서에 개시된다. 하나의 실시예에 따르면, 메모리 관리자는, 클라이언트에 할당된 메모리 블록의 메모리 어드레스를 나타내는 핸들에 기초하여 할당 엔트리를 식별하고 할당 엔트리로부터 트레이스 엔트리 포인터를 검색하기 위해서 메모리 할당 테이블에서 제1 룩업 동작을 수행한다. 그런 다음, 메모리 관리자는, 트레이스 엔트리 포인터에 기초하여 트레이스 엔트리를 식별하며 트레이스 엔트리의 메모리 할당 카운트를 증분하기 위해서 메모리 트레이스 테이블에서 제2 룩업 동작을 수행한다. 메모리 할당 카운트는, 클라이언트가 메모리 누수를 야기시킬 가능성을 나타내는데 이용된다.

Description

데이터 프로세싱 시스템의 메모리 사용을 추적하는 방법{METHOD FOR TRACKING MEMORY USAGES OF A DATA PROCESSING SYSTEM}
본 발명의 실시예들은 일반적으로 데이터 프로세스 시스템에 관한 것이다. 보다 구체적으로는, 본 발명의 실시예들은 데이터 프로세싱 시스템의 메모리 사용을 추적하는 메커니즘에 관한 것이다.
데이터 프로세싱 시스템은 컴퓨터의 하드웨어 및 소프트웨어 자원을 관리하기 위해서 오퍼레이팅 시스템(OS)을 이용한다. OS는, 메모리를 제어하고 할당하는 것, 명령어들의 프로세싱을 우선순위화하는 것, 입력 및 출력 장치를 제어하는 것, 네트워킹을 용이하게 하는 것 및 파일을 관리하는 것과 같은 기본 태스크들을 수행하는 소프트웨어 프로그램이다. 또한, OS는 애플리케이션 프로그램들이 하드웨어 및 소프트웨어 자원뿐만 아니라 다른 애플리케이션 프로그램과 상호작용하는 것을 가능하게 하는 API들(application program interfaces)을 제공한다.
보다 많은 서비스가 데이터 프로세싱 시스템에 이용가능해짐에 따라, 시스템에서 실행되는 프로그램의 수가 상당히 증가하였다. 이들 프로그램 각각은 통상 메모리와 같은 자원의 특정 양을 소모한다. 몇몇 프로그램은 메모리 누수(memory leaks)를 야기시킬 수 있다. 예를 들어, 프로그램은 메모리의 블록을 할당하며, 일단 이것이 이루어지면 적절하게 메모리 블록을 릴리즈하는 것을 실패할 수 있다. 시간이 지남에 따라, 다른 프로그램에 할당될 이용가능한 메모리가 점점 적어지게 된다. 메모리 장치의 밀도는 계속 증가하지만, 메모리 용량은 여전히 매우 제한적이다.
통상적으로, 시스템은 비어있는(free) 메모리의 필요한 용량의 이용가능성을 확보하기 위해서 다수의 실행 애플리케이션에 의한 메모리 사용을 모니터링한다. 몇몇 시스템에서, 메모리 사용이 임계 레벨에 도달할 때, 시스템은, 더 이상 실행되지 않는 애플리케이션으로부터 할당된 메모리를 획득하기 위하여 폐영역 회수(garbage collection) 프로시저를 활성화하는 것과 같이, 비어있는 메모리의 크기를 증가시키기 위하여 메모리 관리 동작을 취한다. 또한, 시스템은 예를 들어 단순히 선택된 애플리케이션을 킬링(killing)함으로써 그 애플리케이션을 타깃으로 할 수 있다. 몇몇 상황에서, 전체 시스템을 더욱 향상시키기 위하여 무엇이 메모리 누수를 야기시키는지를 식별하는 것이 유용하거나 중요하다. 통상적으로, 오퍼레이팅 시스템 커널과 같은 단일의 다목적 프로그램 내의 메모리 누수의 원인을 식별하는 것은 어렵다. 그러나, 메모리 누수를 야기시키는 범인을 추적하거나 정확히 지적하는 효율적인 메커니즘이 부족하였다.
본 발명의 실시예들은 첨부 도면들에서 제한이 아니라 예로서 예시되며, 이들 도면에서 유사한 참조번호는 유사한 구성요소를 나타낸다.
도 1은 본 발명의 하나의 실시예에 따른 메모리 사용을 추적하기 위한 시스템을 도시하는 블록도.
도 2는 본 발명의 하나의 실시예에 따른 할당 테이블 및 추적 테이블의 예를 도시하는 블록도.
도 3은 본 발명의 하나의 실시예에 따른 메모리 블록들을 할당하는 방법을 도시하는 흐름도.
도 4는 본 발명의 하나의 실시예에 따른 메모리 블록들을 할당해제하는 방법을 도시하는 흐름도.
도 5는 본 발명의 하나의 실시예에 따른 메모리 할당의 프로세스를 구현하는 프로그램을 나타내는 의사코드(pseudocode)를 도시한 도면.
도 6은 본 발명의 하나의 실시예에 따른 메모리 할당해제의 프로세스를 구현하는 프로그램을 나타내는 의사코드를 도시한 도면.
도 7은 본 발명의 다른 실시예에 따른 메모리 블록들을 할당하는 방법을 도시하는 흐름도.
도 8은 본 발명의 일 실시예와 함께 사용될 수 있는 그래픽 사용자 인터페이스를 도시하는 스크린샷.
도 9는 본 발명의 하나의 실시예와 함께 사용될 수 있는 데이터 프로세싱 시스템의 블록도.
본 발명의 다양한 실시예 및 양태는 이하에 논의되는 상세를 참조하여 설명될 것이고, 첨부 도면들은 다양한 실시예를 예시할 것이다. 다음의 설명 및 도면은 본 발명의 예시이며, 본 발명을 제한하는 것으로 해석되어서는 안 된다. 본 발명의 다양한 실시예의 철저한 이해를 제공하기 위하여 다수의 특정 상세가 설명된다. 그러나, 특정 경우에, 본 발명의 실시예의 간결한 논의를 제공하기 위하여 잘 알려지거나 종래의 상세는 설명하지 않는다.
본 명세서에서의 "하나의 실시예" 또는 "일 실시예"에 대한 언급은, 이 실시예와 관련하여 설명된 특정 특징, 구조 또는 특성이 본 발명의 적어도 하나의 실시예에 포함될 수 있다는 것을 의미한다. 본 명세서의 다양한 위치에서의 "하나의 실시예에서"라는 어구의 출현은 모두 동일한 실시예를 언급하지는 않는다.
몇몇 실시예에 따르면, 오퍼레이팅 시스템의 메모리 관리자는, 메모리 할당을 요청하는 클라이언트 또는 소유자의 메모리 할당 및 할당해제의 추적을 계속하기 위하여 메모리 할당 테이블(또한 간단히 할당 테이블로도 지칭됨) 및 메모리 트레이스 테이블(또한 간단히 트레이스 테이블로도 지칭됨)을 관리하도록 구성된다. 하나의 실시예에서, 할당 테이블은 다수의 엔트리를 포함하는데, 여기서 각각의 엔트리는 메모리의 할당 블록의 메모리 어드레스에 기초하여 인덱싱된다. 각각의 엔트리는 트레이스 테이블의 엔트리를 참조하는 포인터를 포함한다. 트레이스 테이블은 다수의 엔트리를 포함하는데, 여기서 각각의 엔트리는 메모리 할당을 요청한 클라이언트 또는 소유자의 식별자에 의해 인덱싱된다.
메모리 블록이 클라이언트에 할당되고 할당된 메모리 블록의 메모리 어드레스를 나타내는 핸들에 의해 참조될 때, 메모리 관리자는, 트레이스 테이블에 대한 포인터가 거기에 저장되어 있는지 여부를 판정하기 위하여 핸들에 기초하여 할당 테이블의 할당 엔트리를 룩업하도록 구성된다. 포인터가 존재하면, 트레이스 테이블의 트레이스 엔트리는 할당 테이블로부터 검색된 포인터에 기초하여 액세스되고 트레이스 엔트리의 메모리 할당 정보가 갱신된다. 하나의 실시예에서, 트레이스 엔트리의 메모리 할당 카운트는 메모리 할당 요청에 응답하여 증분될 수 있고, 메모리 할당 카운트는 메모리 할당해제 요청에 응답하여 감분될 수 있다. 메모리 할당 카운트는, 클라이언트가 메모리 블록의 할당을 요청할 수 있으며 이 메모리 블록을 적절히 할당해제하지 않을 가능성(예컨대, 메모리 누수)을 나타내는데 이용될 수 있다.
하나의 실시예에서, 할당된 메모리 블록의 클라이언트 또는 소유자는 메모리 할당 및/또는 할당해제를 요청한 프로그램의 스택 프레임 또는 실행가능한 코드의 시퀀스의 백트레이스에 의해 나타내어질 수 있다. 복잡한 다목적 프로그램에서, 프로그램의 액티비티의 특정 서브세트를 보다 정확하게 식별하기 위하여 백트레이스가 유용하다. 할당 테이블 내의 각각의 엔트리는 메모리 할당의 핸들의 해시 값에 기초하여 인덱싱된다. 트레이스 테이블 내의 각각의 엔트리는 메모리 할당 및/또는 메모리 할당해제를 요청한 프로그램의 백트레이스의 해시 값에 기초하여 인덱싱된다. 그 결과, 메모리 관리자는 실행가능한 코드 중 어떤 라인 또는 라인들이 메모리 누수를 효율적인 방식으로 야기시킬 가능성이 있는지를 백트레이스 및 그 메모리 할당 카운트에 기초하여 정확히 지적할 수 있다.
도 1은 본 발명의 하나의 실시예에 따른 메모리 사용을 추적하기 위한 시스템을 도시하는 블록도이다. 도 1에 도시된 바와 같은 시스템(100)은 다양한 데이터 프로세싱 시스템 또는 장치를 나타낼 수 있다. 예를 들어, 시스템(100)은 데스크탑, 랩탑, 태블릿, 이동 전화(예컨대, 스마트폰), 미디어 플레이어 또는 이들의 조합과 같은 클라이언트 머신을 나타낼 수 있다. 대안적으로, 시스템(100)은 웹 서버, 애플리케이션 서버 또는 백엔드 서버와 같은 서버를 나타낼 수 있다. 도 1을 참조하면, 시스템(100)은 API를 통해 메모리 관리자(103)에 통신가능하게 연결된 하나 이상의 프로그램(101-102)을 포함한다. 메모리 관리자(103)는 오퍼레이팅 시스템의 일부로서 구현될 수 있는데, 이 오퍼레이팅 시스템은 캘리포니아주 쿠퍼티노의 Apple® Inc.로부터 입수가능한 Mac OSTM 또는 iOSTM, 워싱턴주 레드몬드의 Microsoft® Corporation의 WindowsTM 오퍼레이팅 시스템, Unix® 또는 Linux® 오퍼레이팅 시스템과 같은 다양한 오퍼레이팅 시스템일 수 있다. 프로그램(101-102) 및/또는 메모리 관리자(103)는 오퍼레이팅 시스템의 사용자 레벨 및/또는 커널 레벨에서 실행될 수 있다. 예를 들어, 프로그램(101-102) 중 임의의 프로그램은 오퍼레이팅 시스템의 사용자 레벨(예컨대, 애플리케이션) 또는 커널 레벨(예컨대, 장치 드라이버)에서 실행될 수 있다.
하나의 실시예에서, 메모리 관리자(103)는 메모리 할당 테이블(105) 및 메모리 트레이스 테이블(106)을 갖는 메모리 사용 맵(104)을 관리하도록 구성된다. 메모리 사용 맵(104)은 프로그램(101-102)과 같이 시스템(100) 내에서 실행되는 프로그램에 의해 메모리 할당 및/또는 할당해제와 같은 메모리 사용을 기록하도록 구성된다. 메모리 사용 맵(104)은 시스템(100)의 RAM(random access memory)과 같은 시스템 메모리에서 오퍼레이팅 시스템에 의해 관리될 수 있다.
하나의 실시예에 따르면, 메모리 사용 맵(104)의 할당 테이블(105) 및 트레이스 테이블(106)을 이용하여 클라이언트 또는 소유자에 의한 메모리 할당 및 할당해제를 계속 추적한다. 할당 테이블(105) 및 트레이스 테이블(106)의 예는 예시의 목적으로 도 2에 도시된다. 하나의 실시예에서, 도 2를 참조하면, 할당 테이블(105)은 다수의 엔트리를 포함하는데, 여기서 각각의 엔트리는 메모리의 할당 블록의 메모리 어드레스(201)에 기초하여 인덱싱된다. 각각의 엔트리는 트레이스 테이블(106)의 엔트리를 참조하는 포인터(203)를 포함한다. 또한, 할당 테이블(105)의 각각의 엔트리는 실제 메모리 어드레스(202)와 같은 다른 선택 정보를 포함할 수 있다. 트레이스 테이블(106)은 다수의 엔트리를 포함하는데, 여기서 각각의 엔트리는 메모리 할당을 요청한 클라이언트 또는 소유자(204)의 식별자에 의해 인덱싱된다. 트레이스 테이블(106)의 각각의 트레이스 엔트리는 메모리 할당 카운트와 같은 메모리 할당 정보(205) 및 선택적으로 실제 백트레이스(206)와 같은 다른 정보를 더 포함한다. 도 2에 도시된 할당 테이블(105) 및 트레이스 테이블(106)은 예시의 목적으로만 설명하였고, 또한 다른 포맷이 이용될 수 있으며, 보다 많거나 적은 정보가 거기에 포함될 수 있다.
도 1 및 도 2를 다시 참조하면, 메모리 블록이 클라이언트에 할당되고, 할당된 메모리 블록의 메모리 어드레스를 나타내는 핸들에 의해 참조될 때, 메모리 할당기(107)는, 트레이스 테이블(106)에 대한 링크 또는 포인터가 거기에(예컨대, 할당 엔트리(207)의 필드(203)에) 저장되어 있는지 여부를 판정하기 위하여 핸들(예컨대, 할당 엔트리(207)의 필드(201))에 기초하여 할당 테이블(105)의 할당 엔트리(예컨대, 할당 엔트리(207))를 룩업하도록 구성된다. 포인터가 존재하면, 트레이스 테이블(106)의 트레이스 엔트리(예컨대, 트레이스 엔트리(209))가 할당 테이블(105)(예컨대, 트레이스 엔트리(209)의 필드(204))로부터 검색되는 포인터에 기초하여 액세스되고, 트레이스 엔트리(예컨대, 트레이스 엔트리(209)의 필드(205))의 메모리 할당 정보가 갱신된다. 하나의 실시예에서, 메모리 할당 정보는 트레이스 엔트리의 메모리 할당 카운트를 포함하는데, 이는 메모리 할당 요청에 응답하여 증분될 수 있다.
하나의 실시예에 따르면, 핸들에 의해 참조되는 메모리 블록을 할당해제하라는 요청이 수신되면, 메모리 할당해제기(108)는 핸들(예컨대, 할당 엔트리(208)의 필드(201))에 기초하여 할당 테이블(105)의 할당 엔트리(예컨대, 할당 엔트리(208))를 룩업하고 트레이스 테이블(106)의 트레이스 엔트리(예컨대, 트레이스 엔트리(209))를 참조하는 포인터(예컨대, 할당 엔트리(208)의 필드(203))를 검색하도록 구성된다. 그런 다음, 메모리 할당해제기(108)는 메모리 할당해제 정보(예컨대, 트레이스 엔트리(209)의 필드(205))를 갱신하여, 예를 들어 트레이스 엔트리의 메모리 할당 카운트를 감분한다. 메모리 할당 카운트는, 클라이언트가 메모리 블록의 할당을 요청할 수 있으며 이것이 이루어지면 적절하게 메모리 블록을 할당해제하지 않을 가능성(예컨대, 메모리 누수)을 나타내는데 이용될 수 있다. 본 실시예에서, 포지티브 메모리 할당 카운트는 특정 기간에 걸쳐 할당해제되는 메모리 블록보다 더 많은 메모리 블록을 프로그램이 할당할 수 있는 것을 나타낼 수 있다. 더 높은 메모리 할당 카운트를 갖는 프로그램은 최고 또는 유력 메모리 누수 용의자로서 고려될 수 있다. 하나의 실시예에서, 메모리 관리자(103)는 분석 및/또는 보고 목적으로 예를 들어 각각의 메모리 할당 카운트에 기초하여 하나 이상의 최고 메모리 누수 용의자의 리스트에 관한 정보를 관리할 수 있다. 예를 들어, 도 8에 도시된 바와 같이, 사용자는 할당 테이블(105) 및 트레이스 테이블(106)로부터의 정보에 기초하여 하나 이상의 최고 메모리 누수 용의자의 백트레이스 정보를 획득하며, 이 정보를 분석 목적을 위해 다른 설비로 송신할 수 있다.
도 3은 본 발명의 하나의 실시예에 따른 메모리 블록을 할당하는 방법을 도시하는 흐름도이다. 예를 들어, 방법(300)은 도 1의 메모리 관리자(103)에 의해 수행될 수 있다. 도 3을 참조하면, 블록(301)에서, 메모리 관리자는 메모리의 블록을 할당하기 위한 요청을 클라이언트로부터 수신한다. 이 요청에 응답하여, 블록(302)에서, 메모리 관리자는 요청된 메모리 블록을 할당하고, 할당된 메모리 블록에 대한 핸들(예컨대, 시작 메모리 어드레스)을 획득한다. 블록(303)에서, 메모리 관리자는 트레이스 테이블에서 클라이언트와 연관된 엔트리에 메모리 할당 정보를 채운다. 하나의 실시예에서, 트레이스 엔트리의 메모리 할당 카운트가 증분된다. 클라이언트는, 메모리 할당을 요청한 스택 프레임 또는 실행가능한 코드의 시퀀스의 백트레이스에 의해 표현될 수 있다. 블록(304)에서, 트레이스 엔트리의 어드레스는 할당 테이블에서의 메모리 할당의 핸들에 대응하는 할당 엔트리에 저장된다. 그 후에, 블록(305)에서, 메모리 할당의 핸들은 메모리 요청 프로세스를 완료하기 위하여 클라이언트로 리턴된다. 도 5는 도 3의 방법(300)을 구현하는 프로그램을 나타내는 의사코드이다.
도 4는 본 발명의 하나의 실시예에 따른 메모리 블록을 할당해제하는 방법을 도시하는 흐름도이다. 예를 들어, 방법(400)은 도 1의 메모리 관리자(103)에 의해 수행될 수 있다. 도 4를 참조하면, 블록(401)에서, 메모리 관리자는 핸들에 의해 참조되는 메모리의 블록을 할당해제하기 위한 요청을 클라이언트로부터 수신한다. 이 요청에 응답하여, 블록(402)에서, 메모리 관리자는 메모리의 블록을 메모리 풀로 다시 릴리즈하도록 구성된다. 블록(403)에서, 메모리 관리자는 메모리 할당 테이블을 룩업하여, 핸들에 기초하여 할당 엔트리의 위치를 찾고(locate) 핸들에 대응하는 트레이스 테이블의 트레이스 엔트리 포인터를 식별한다. 트레이스 엔트리 포인터에 기초하여, 블록(404)에서, 메모리 관리자는 예를 들어 트레이스 엔트리의 메모리 할당 카운트를 감분하는 것을 비롯하여 트레이스 엔트리 포인터에 의해 링크된 트레이스 엔트리에 저장되는 메모리 할당/할당해제 정보를 갱신한다. 도 6은 도 4의 방법(400)을 구현하는 프로그램을 나타내는 의사코드이다.
상술한 메모리 누수 검출 메커니즘은 오퍼레이팅 시스템의 부분 또는 오퍼레이팅 시스템의 커널의 플러그인 또는 확장으로서 구현될 수 있다. 하나의 실시예에 따르면, 메모리 누수 검출 메커니즘은 무엇인가가 메모리 누수를 야기시킬 가능성이 있을 때에만 활성화될 수 있다. 초기에, 하나의 실시예에 따르면, 메모리 누수 검출 메커니즘은, 할당에 이용가능한 나머지 메모리가 사전 결정된 임계값 아래로 강하될 때까지 비활성이다. 통상적으로, 데이터 프로세싱 시스템이 부트업될 때, 프로그램에 할당되는데 이용가능한 많은 자원 또는 메모리가 있다. 이러한 상황 하에서, 메모리 누수를 추적할 필요는 없다. 하나의 실시예에 따르면, 할당을 위해 비어있는 이용가능한 메모리가 사전 결정된 임계값 아래로 강하될 때, 메모리 누수 검출 메커니즘이 활성화된다. 종종, 데이터 처리 시스템은 더 적은 메모리 누수를 가질 수 있는데, 여기서 이용가능한 자원은 시스템의 성능에 실질적으로 영향을 미치지 않고 메모리 누수를 보상하기에 충분하다. 그 결과, 메모리 누수를 검출할 필요가 없을 수 있다. 따라서, 메모리 누수 검출 메커니즘은 이들과 연관된 자원 소모를 최소화하는 것이 필요할 때에만 활성화된다.
상술한 바와 같이, 메모리를 할당하라는 요청이 수신될 때, 이러한 메모리의 할당은 상술된 할당 테이블 및 트레이스 테이블에 기록된다. 하나의 실시예에서, 메모리 할당 요청에 응답하여, 할당된 메모리의 핸들과 연관된 엔트리가 할당 테이블에서 검사되고, 할당된 메모리의 소유자와 연관된 엔트리가 트레이스 테이블에서 검사된다. 트레이스 엔트리의 메모리 할당 카운트와 같은 메모리 할당 정보가 따라서 갱신된다. 할당된 메모리 블록의 특정 핸들에 대하여, 할당 테이블 또는 트레이스 테이블에 대응하는 엔트리 또는 엔트리들이 없으면, 예를 들어 할당 테이블의 엔트리에 트레이스 엔트리 포인터를 저장하며 트레이스 테이블에 연관된 트레이스 엔트리에서 메모리 할당 카운트를 증분함으로써 할당 테이블 또는 트레이스 테이블에서 신(new) 엔트리가 할당되거나 생성된다.
유사하게, 메모리 블록을 할당해제하라는 요청이 수신되면, 연관된 메모리 할당 카운트는 감분되고, 할당 테이블의 연관된 할당 엔트리에서의 대응하는 트레이스 엔트리 포인터는 NULL 또는 제로와 같은 사전 결정된 값으로 리셋될 수 있다. 특정 트레이스 엔트리의 메모리 할당 카운트가 제로에 도달하면, 이는 특정 트레이스 엔트리가 무엇인가로 할당되도록 비어있는 것을 의미한다. 유사하게, 할당 테이블의 특정 할당 엔트리의 트레이스 엔트리 포인터가 유효 트레이스 엔트리 포인터를 포함하지 않을 때(예컨대, NULL 또는 제로), 특정 할당 엔트리는 할당을 위해 비어있다. 하나의 실시예에 따르면, 할당 테이블 및/또는 트레이스 테이블의 비교적 작은 크기를 유지하며, 또한 북키핑과 연관된 CPU 오버헤드를 줄이기 위하여, 메모리 할당 요청의 샘플만이 기록된다. 예를 들어, N 메모리 할당 중에서 하나가 기록될 수 있는데, 이는 정책에 기초하여 구성가능할 수 있다. 이러한 방식으로, 특정한 메모리 누수 범인이 발견되지 않을 수 있지만, 그러나 빈번한 메모리 누수 범인은 결국 잡힐 것이다. 이 구성은 메모리 누수 검출을 위한 시스템 자원 또는 프로세싱 전력을 덜 소모하면서 주요 메모리 누수 범인을 트랩할 수 있다.
하나의 실시예에서, 할당된 메모리 블록의 소유자 또는 클라이언트는 메모리 할당 및/또는 할당해제를 요청한 실행가능한 코드의 시퀀스의 백트레이스(예컨대, 스택 프레임의 백트레이스)에 의해 나타내어질 수 있다. 할당 테이블 내의 각각의 엔트리는 메모리 할당의 핸들의 해시 값에 기초하여 인덱싱된다. 트레이스 테이블 내의 각각의 엔트리는 메모리 할당 및/또는 메모리 할당해제를 요청한 프로그램의 백트레이스의 해시 값에 기초하여 인덱싱된다. 그 결과, 메모리 관리자는 백트레이스 및 그 메모리 할당 카운트에 기초하여 실행가능한 코드 중 어떤 라인이 메모리 누수를 야기시킬 가능성이 있는지를 정확히 지적할 수 있다.
도 1 및 도 2를 다시 참조하면, 프로그램(101-102) 중 임의의 프로그램의 백트레이스가 백트레이스 모듈(109)에 의해 획득되어, 메모리 관리자(103)에 제공될 수 있다. 백트레이스 모듈(109)은, API를 통해 메모리 관리자가 메모리 할당 또는 할당해제를 요청한 현재의 스레드의 스택 프레임의 백트레이스를 획득하도록 하는 오퍼레이팅 시스템의 커널의 확장으로서 구현될 수 있다. 백트레이스의 예는 도 8에 도시되고, 이는 메모리 사용 보고(111)(예컨대, 메모리 누수 보고)의 부분으로서 분석 모듈(110)에 의해 보고될 수 있다. 메모리 사용 보고(111)는 또한 시스템(100)에 현재 설치된 프로그램 중 어떤 프로그램이 가장 메모리 누수를 야기시키는지를 식별하기 위하여 동적으로 또는 오프라인으로 분석될 수 있다.
이하 도 2를 참조하면, 할당 테이블(105) 및 트레이스 테이블(106)은 어레이, 데이터 구조, 데이터 오브젝트 또는 이들의 조합(예컨대, 데이터 구조의 링크된 리스트)과 같은 다양한 형태로 구현될 수 있다. 하나의 실시예에서, 할당 테이블(105)은 할당된 메모리 블록과 연관된 메모리 어드레스의 해시 값에 기초하여 인덱싱되는 다수의 엔트리를 포함한다. 예를 들어, 메모리 블록이 할당될 때, 메모리 블록의 핸들이 획득된다. 할당 테이블(105)의 엔트리는 핸들의 해시에 기초하여 식별되는데, 여기서 해시는 Jenkins, FNV, SHA-1 또는 MD5 해시 알고리즘과 같은 다양한 해시 기능 또는 알고리즘을 이용하여 생성될 수 있다. 즉, 일단 핸들의 해시 값이 획득되면, 할당 테이블(105)에서 엔트리의 위치를 찾기 위하여 필드(201)에서 인덱스로서 해시 값이 이용된다. 하나의 실시예에서, 할당 테이블(105)의 각각의 엔트리는 메모리 할당의 메모리 어드레스 또는 실제 핸들을 저장하기 위한 필드(202) 및 트레이스 테이블(106)의 트레이스 엔트리를 참조하는 포인터를 저장하기 위한 필드(203)를 더 포함한다. 다른 정보도 또한 할당 테이블(105)에 저장될 수 있다.
유사하게, 하나의 실시예에 따르면, 트레이스 테이블(106)은 메모리 할당 또는 할당해제를 요청하는 클라이언트 또는 소유자를 나타내는 백트레이스의 해시 값에 기초하여 인덱싱되는 다수의 엔트리를 포함한다. 예를 들어, 메모리 블록이 클라이언트에 대하여 할당될 때, 클라이언트의 백트레이스는 오퍼레이팅 시스템으로부터 (예컨대, 백트레이스 모듈(109)을 통해) 획득된다. 트레이스 테이블(106)의 엔트리는 백트레이스의 해시에 기초하여 식별되는데, 여기서 해시는 Jenkins, FNV, SHA-1 또는 MD5 해시 알고리즘과 같은 다양한 해시 기능 또는 알고리즘을 이용하여 생성될 수 있다. 즉, 일단 백트레이스의 해시 값이 획득되면, 트레이스 테이블(106)에서 엔트리의 위치를 찾기 위하여 필드(204)에 대한 인덱스로서 해시 값이 이용된다. 하나의 실시예에서, 트레이스 테이블(106)의 각각의 엔트리는, 예를 들어 메모리 할당 카운트와 같이 엔트리와 연관된 메모리 할당 정보를 저장하기 위한 필드(205)를 더 포함한다. 트레이스 테이블(106)의 각각의 엔트리는 엔트리와 연관된 실제 백트레이스와 같은 다른 정보를 저장하기 위한 필드(206)를 더 포함한다. 다른 정보도 또한 트레이스 테이블(106)에 저장될 수 있다.
도 2에 도시된 바와 같이, 할당 테이블(105)에 대한 인덱스로서 핸들의 해시를 이용하며 트레이스 테이블(106)에 대한 인덱스로서 백트레이스의 해시를 이용함으로써, 하나의 실시예에 따르면, 할당 테이블(105) 및 트레이스 테이블(106)의 크기는 적당한 크기로 관리될 수 있다. 즉, 할당 테이블(105) 및 트레이스 테이블(106) 각각은 핸들 및 백트레이스 각각의 해시에 기초하여 식별되거나 위치찾기되는 고정된 수의 엔트리 또는 슬롯을 포함한다. 그러나, 상이한 값의 해시(예컨대, 핸들 또는 백트레이스)는 동일한 해시 값(예를 들어, 해시 충돌)을 산출할 수 있다. 그 결과, 때때로 엔트리(207-208)와 같은 할당 테이블(105)의 다수의 엔트리가 트레이스 테이블(106)의 동일한 트레이스 엔트리(209)를 참조할 수 있다. 몇몇 실시예에 따르면, 특정 상황 하에서, 할당 테이블(105) 및 트레이스 테이블(106)에 의해 소모되는 자원을 제한하기 위하여, 특정 메모리 할당은 할당 테이블(105) 및 트레이스 테이블(106)에 기록되지 않을 수 있다. 시스템은 할당 테이블(105) 및 트레이스 테이블(106)에서의 엔트리의 총 수까지만 메모리 할당을 기록할 수 있다. 몇몇 상황에서, 신 메모리 할당이 기록될 때, 동일한 슬롯을 점유하는 조기에 기록된 메모리 할당은 상황에 따라 테이블에서 축출되거나 오버라이드될 수 있다. 상술된 바와 같이, 몇몇 메모리 누수 범인이 특정 시점에 발견되지 않을 수 있지만, 그러나 빈번한 메모리 누수 범인은 결국 발견될 것이다.
도 7은 본 발명의 다른 실시예에 따른 메모리를 할당하는 방법을 도시하는 흐름도이다. 방법(700)은 도 1의 메모리 관리자(103)에 의해 수행될 수 있는데, 이는 소프트웨어, 하드웨어 또는 이들의 조합으로 프로세싱 로직으로서 구현될 수 있다. 도 2 및 도 7을 참조하면, 핸들에 의해 참조되는 메모리 할당에 응답하여, 블록(701)에서, 프로세싱 로직은 메모리 할당을 요청한 프로그램의 백트레이스의 해시 및 핸들의 해시를 획득하고, 할당 테이블(105) 및 트레이스 테이블(106)을 룩업한다. 블록(702)에서, 프로세싱 로직은, 할당 테이블(105)의 할당 엔트리가 백트레이스에 의해 나타내어지는 클라이언트에 할당되도록 비어있는지 여부를 판정한다. 하나의 실시예에서, 프로세싱 로직은 할당 엔트리의 위치를 찾기 위하여 인덱스로서 핸들의 해시를 이용하여 할당 테이블(105)의 필드(201)에서 룩업한다. 그런 다음, 프로세싱 로직은 할당 엔트리의 필드(203)를 검사하여, 거기에 저장된 트레이스 엔트리 포인터가 있는지 여부를 판정한다. 거기에 저장된 트레이스 엔트리 포인터가 없으면, 할당 엔트리는 사용하도록 비어있는 것으로 고려된다.
할당 엔트리가 비어있는 것으로 판정되면, 블록(703)에서, 프로세싱 로직은 트레이스 엔트리의 위치를 찾기 위하여 필드(204)에서 인덱스로서 백트레이스의 해시를 이용하여 트레이스 테이블(106)을 룩업한다. 그런 다음, 프로세싱 로직은 트레이스 엔트리의 필드(205)를 검사하여, 트레이스 엔트리가 비어있는지 여부를 판정한다. 하나의 실시예에서, 필드(205)가 특정 메모리 할당 정보(이 예에서, 논-제로 메모리 할당 카운트)를 포함하면, 트레이스 엔트리가 점유되고; 그렇지 않으면, 트레이스는 비어있다. 트레이스 엔트리가 비어있는 것으로 판정되면(예컨대, 현재의 메모리 할당이 신 메모리 할당이며 처음 기록되면), 블록(704)에서, 프로세싱 로직은 할당 테이블(105) 및 트레이스 테이블(106) 둘 다에 필요한 정보를 채운다. 하나의 실시예에서, 프로세싱 로직은 할당 엔트리의 필드(202)에 실제 메모리 핸들을 저장하고, 할당 테이블(105) 내의 할당 엔트리의 필드(203)에 연관된 트레이스 엔트리의 메모리 어드레스를 저장한다. 또한, 프로세싱 로직은 트레이스 엔트리의 필드(206)에 실제 백트레이스의 적어도 일부를 또한 저장하고, 트레이스 테이블(106) 내의 트레이스 엔트리의 필드(205)에서 메모리 할당 카운트를 증분한다. 하나의 실시예에서, 트레이스 테이블(106)의 크기를 제한하기 위하여, 백트레이스의 제한된 양의 정보(예컨대, 코드 또는 스택 프레임의 15 라인과 같은 사전 결정된 수)만이 트레이스 엔트리의 필드(206)에 저장된다. 할당 엔트리의 필드(203)에 트레이스 엔트리의 메모리 어드레스를 저장함으로써, 할당 엔트리는 점유되는 것으로 고려된다. 유사하게, 트레이스 엔트리의 필드(205)에 논-제로 메모리 할당 카운트를 저장함으로써, 트레이스 엔트리가 점유되게 된다.
하나의 실시예에 따르면, 블록(703)에서, 트레이스 엔트리가 점유되는 것으로 판정되면(예컨대, 논-제로 메모리 할당 카운트), 블록(705)에서, 프로세싱 로직은 트레이스 엔트리가 동일한 소유자 또는 클라이언트와 연관되는지 여부를 판정한다. 하나의 실시예에서, 프로세싱 로직은 메모리 할당을 요청하는 현재의 스레드의 실제 백트레이스와 트레이스 엔트리의 필드(206)에 현재 저장되는 백트레이스를 비교한다. 이들 백트레이스가 매칭되면, 트레이스 엔트리는 동일한 소유자에 의해 소유된다. 트레이스 엔트리가 동일한 소유자에 의해 소유되면, 블록(706)에서, 트레이스 엔트리의 필드(205)에 저장된 메모리 할당 카운트가 증분된다. 블록(707)에서, 트레이스 엔트리의 메모리 어드레스는 할당 엔트리의 필드(203)에 저장되며, 이는 할당 엔트리가 지금 점유된다는 것을 나타낸다.
이 때, 동일한 트레이스 엔트리를 참조하는 다수의 할당 엔트리가 있을 수 있다는 점에 유의한다. 예를 들어, 트레이스 엔트리의 메모리 할당 카운트가 2이면, 트레이스 테이블(106)의 대응하는 트레이스 엔트리와 연관되는 할당 테이블(105)에 적어도 2개의 할당 엔트리가 있을 수 있다. 즉, 소유자는 다수의 메모리 블록 중 일부를 릴리즈하지 않고 이들을 할당하였을 수 있다. 예를 들어, 도 2를 참조하면, 백트레이스에 의해 나타내어지는 소유자가 제1 메모리 블록을 할당한 것으로 가정되는데, 이는 (제1 핸들에 기초한) 할당 엔트리(207)가 트레이스 엔트리(209)를 참조하게 한다. 후속하여, 동일한 소유자(예컨대, 동일한 백트레이스)는 제2 메모리 블록을 할당하는데, 이는 (제2 핸들에 기초하는) 할당 엔트리(208)가 (동일한 백트레이스 때문에) 동일한 트레이스 엔트리(209)를 참조하게 한다. 그 결과, 할당 엔트리(207-208) 둘 다는 메모리 할당 카운트 2를 갖는 동일한 트레이스 엔트리(209)를 참조한다.
하나의 실시예에 따르면, 블록(702)에서, 할당 엔트리가 점유된 것으로 판정되면, 블록(708)에서, 프로세싱 로직은 할당 엔트리에 의해 참조되는 트레이스 엔트리를 검사하여, (상술한 바와 같이 백트레이스를 비교함으로써) 트레이스 엔트리가 동일한 소유자에 의해 소유되는지 여부를 판정한다. 또한, 프로세싱 로직은, 메모리 할당이 이미 기록된 것과 동일한지 여부를 판정하기 위하여 할당 엔트리의 필드(202)에 저장된 것과 실제 핸들을 비교한다. 동일한 소유자 또는 동일한 핸들이면, 프로세싱 로직은 현재의 메모리 할당을 처리하는 것을 스킵할 수 있는데, 그 이유는 그것이 이미 처리되었기 때문이다. 동일한 소유자가 아니라면, 블록(709)에서, 신 트레이스 엔트리가 트레이스 테이블(106)로부터 신 소유자에 할당된다. 또한, 필드(203)에서의 트레이스 엔트리 포인터는 신 트레이스 엔트리의 어드레스로 대체되고, 신 트레이스 엔트리의 메모리 할당 카운트가 증분된다. 할당 엔트리는 지금 구(old) 트레이스 엔트리 대신에 신 트레이스 엔트리에 링크된다는 것에 유의한다. 블록(710)에서, 트레이스 테이블(106)에서의 구 트레이스 엔트리의 메모리 할당 카운트가 감분된다.
도 9는 본 발명의 하나의 실시예와 함께 이용될 수 있는 데이터 프로세싱 시스템의 블록도이다. 예를 들어, 시스템(900)은 도 1에 도시된 바와 같은 시스템(100)의 부분으로서 이용될 수 있다. 도 9는 컴퓨터 시스템의 다양한 컴포넌트를 도시하지만, 이러한 상세가 본 발명과 밀접한 관련이 없으므로, 컴포넌트와 상호접속하는 임의의 특정한 아키텍처 또는 방식을 나타내도록 의도하지는 않는다는 점에 유의한다. 또한, 더 적은 컴포넌트 또는 아마도 더 많은 컴포넌트를 갖는 네트워크 컴퓨터, 핸드헬드 컴퓨터, 셀 폰 및 다른 데이터 프로세싱 시스템도 본 발명과 함께 이용될 수 있다는 것이 인식될 것이다. 도 9의 컴퓨터 시스템은 예를 들어 Apple Macintosh 컴퓨터 또는 MacBook, IBM 호환 PC 또는 컴퓨터 서버일 수 있다.
도 9에 도시된 바와 같이, 데이터 프로세싱 시스템의 형태인 컴퓨터 시스템(900)은 하나 이상의 마이크로프로세서(903)와 ROM(907), 휘발성 RAM(905) 및 비휘발성 메모리(906)에 연결되는 버스 또는 상호접속부(902)를 포함한다. 마이크로 프로세서(903)는 캐시 메모리(904)에 연결된다. 버스(902)는 이들 다양한 컴포넌트를 함께 상호접속하고, 또한 이들 컴포넌트(903, 907, 905 및 906)를 디스플레이 제어기 및 디스플레이 장치(908)뿐만 아니라 입/출력(I/O) 장치(910)에 상호접속하는데, 여기서 입/출력 장치는 마우스, 키보드, 모뎀, 네트워크 인터페이스, 프린터 및 본 기술분야에서 잘 알려진 다른 장치일 수 있다.
통상적으로, 입/출력 장치(910)는 입/출력 제어기(909)를 통하여 시스템에 연결된다. 통상적으로, 휘발성 RAM(905)은 메모리에 데이터를 유지하거나 리프레시하기 위하여 계속해서 전력을 요구하는 동적 RAM(DRAM)으로서 구현된다. 비휘발성 메모리(906)는 통상 자기 하드 드라이브, 자기 광학 드라이브, 광학 드라이브, 또는 DVD RAM 또는 전력이 시스템으로부터 제거된 후에도 데이터를 유지하는 다른 타입의 메모리 시스템이다. 통상 비휘발성 메모리는 또한 랜덤 액세스 메모리일 것이지만, 이것이 요구되지는 않는다.
도 9는 비휘발성 메모리가 데이터 프로세싱 시스템 내의 나머지 컴포넌트에 직접 연결되는 로컬 장치인 것을 도시하지만, 본 발명은 모뎀 또는 이더넷 인터페이스와 같은 네트워크 인터페이스를 통하여 데이터 프로세싱 시스템에 연결되는 네트워크 저장 장치와 같이 시스템으로부터 원격인 비휘발성 메모리를 이용할 수 있다. 버스(902)는 본 기술분야에서 잘 알려진 바와 같이 다양한 브리지, 제어기 및/또는 어댑터를 통하여 서로 접속된 하나 이상의 버스를 포함할 수 있다. 하나의 실시예에서, I/O 제어기(909)는 USB(Universal Serial Bus) 주변 장치를 제어하기 위한 USB 어댑터를 포함한다. 대안적으로, I/O 제어기(909)는 FireWire 장치를 제어하기 위한 IEEE-1394 어댑터(FireWire 어댑터로도 알려짐)를 포함할 수 있다.
선행하는 상세한 설명의 일부는 컴퓨터 메모리 내의 데이터 비트에 대한 연산의 심볼 표현 및 알고리즘에 관하여 제시되었다. 이들 알고리즘 기술 및 표현은 데이터 프로세싱 기술분야에서 당업자에 의해 이들 작업의 요지를 가장 효과적으로 전달하는데 이용되는 방식이다. 알고리즘은 여기서 그리고 일반적으로 원하는 결과를 초래하는 동작의 일관성있는 시퀀스로 고려된다. 동작은 물리량의 물리 조작을 요구하는 동작이다.
그러나, 모든 이들 및 유사한 용어가 적절한 물리량과 관련되고 단순히 이들 물리량에 적용되는 용이한 라벨이라는 것을 명심해야 한다. 전술한 설명으로부터 자명한 바와 같이 특별히 달리 기술되지 않으면, 상세한 설명을 통하여 이하의 특허청구범위에서 설명되는 정의를 이용하는 논의는, 컴퓨터 시스템의 레지스터 및 메모리내의 물리적(전자적) 양으로 나타내지는 데이터를 컴퓨터 시스템 메모리 또는 레지스터 또는 다른 이러한 정보 저장, 전송 또는 디스플레이 장치 내에 물리량으로 유사하게 표현되는 다른 데이터로 처리하고 전송하는, 컴퓨터 시스템, 또는 유사한 전자적 컴퓨팅 장치의 동작 및 프로세스를 일컫는 것이 이해될 것이다.
도면에 나타낸 기술은 하나 이상의 전자 장치 상에 저장되고 실행되는 코드 및 데이터를 이용하여 구현될 수 있다. 비일시적 컴퓨터 판독가능 저장 매체(예컨대, 자기 디스크, 광학 디스크, RAM(random access memory), ROM(read only memory), 플래시 메모리 장치, 상변화 메모리) 및 일시적 컴퓨터 판독가능 전송 매체(예컨대, 전기, 광학, 음향 또는 다른 형태의 전파 신호 - 반송파, 적외선 신호, 디지털 신호 등)와 같은 컴퓨터 판독가능 매체를 이용하여 코드 및 데이터를 (네트워크를 통해 내부적으로 그리고/또는 다른 전자 장치와) 통신 및 저장한다.
선행의 도면에서 개시된 프로세스 또는 방법은 하드웨어(예컨대, 회로, 전용 로직 등), 펌웨어, 소프트웨어(예컨대, 비일시적 컴퓨터 판독가능 매체 상에 구현되는) 또는 둘의 조합을 포함하는 프로세싱 로직에 의해 수행될 수 있다. 몇몇 일련의 동작의 관점에서 프로세서 또는 방법이 상술되었지만, 개시된 일부 동작은 상이한 순서로 수행될 수 있다는 것이 이해될 것이다. 더욱이, 몇몇 동작은 순차적이기보다는 병렬적으로 수행될 수 있다.
선행의 상세한 설명에서 발명의 실시예는 그 구체적인 예시의 실시예를 참조하여 개시되었다. 이하의 특허청구범위에서 개시하는 본 발명의 넓은 사상 및 범위로부터 벗어나지 않고 다양한 수정이 이루어질 수 있다는 것이 분명할 것이다. 상세한 설명 및 도면은 따라서 제한적인 의미라기 보다는 설명적인 의미로 간주된다.

Claims (20)

  1. 메모리를 관리하기 위한 컴퓨터 구현 방법으로서,
    클라이언트에 할당된 메모리 블록의 메모리 어드레스를 나타내는 핸들(handle)에 기초하여 할당 엔트리를 식별하며 상기 할당 엔트리로부터 트레이스 엔트리 포인터를 검색하기 위해서 메모리 할당 테이블에서 제1 룩업 동작을 수행하는 단계; 및
    상기 트레이스 엔트리 포인터에 기초하여 트레이스 엔트리를 식별하며 상기 트레이스 엔트리의 메모리 할당 카운트를 증분하기 위해서 메모리 트레이스 테이블에서 제2 룩업 동작을 수행하는 단계
    를 포함하며,
    상기 메모리 할당 카운트는, 상기 클라이언트가 메모리 누수(memory leak)를 야기시킬 가능성을 나타내는데 이용되는 컴퓨터 구현 방법.
  2. 제1항에 있어서,
    상기 클라이언트는 프로그램의 실행가능한 코드의 시퀀스의 백트레이스를 통해 식별되며, 상기 트레이스 엔트리는 상기 백트레이스의 해시 값에 기초하여 상기 메모리 트레이스 테이블에서 인덱싱되는 컴퓨터 구현 방법.
  3. 제1항에 있어서,
    상기 메모리 할당 테이블의 할당 엔트리는 상기 핸들의 해시 값에 기초하여 인덱싱되는 컴퓨터 구현 방법.
  4. 제1항에 있어서,
    상기 할당 엔트리가 트레이스 엔트리 포인터를 포함하는지 여부를 판정함으로써 상기 할당 엔트리가 사용하도록 비어있는지(free) 여부를 판정하기 위해서, 상기 할당 엔트리를 검사하는 단계; 및
    상기 할당 엔트리가 비어있는 경우, 상기 메모리 트레이스 테이블의 트레이스 엔트리의 어드레스로 상기 할당 엔트리를 갱신하는 단계
    를 더 포함하는 컴퓨터 구현 방법.
  5. 제4항에 있어서,
    상기 할당 엔트리가 비어있는 경우, 상기 메모리 할당 카운트가 사전 결정된 값보다 더 큰지 여부를 판정하기 위해서, 상기 메모리 트레이스 테이블의 트레이스 엔트리를 검사하는 단계; 및
    상기 메모리 할당 카운트가 상기 사전 결정된 값보다 더 큰 경우, 상기 클라이언트가 상기 메모리 트레이스 테이블의 트레이스 엔트리의 동일한 소유자인지 여부를 판정하는 단계
    를 더 포함하며,
    상기 트레이스 엔트리의 메모리 할당 카운트는, 상기 클라이언트가 상기 트레이스 엔트리의 동일한 소유자인 경우에 증분되는 컴퓨터 구현 방법.
  6. 제4항에 있어서,
    기존의 트레이스 엔트리를 참조하는 상기 할당 엔트리가 비어있지 않은 경우, 상기 클라이언트가 상기 메모리 트레이스 테이블의 트레이스 엔트리의 동일한 소유자인지 여부를 판정하는 단계;
    상기 클라이언트가 동일한 소유자가 아닌 경우,
    상기 기존의 트레이스 엔트리의 메모리 할당 카운트를 감분하는 단계; 및
    상기 트레이스 엔트리의 어드레스로 상기 메모리 할당 테이블의 할당 엔트리를 갱신하는 단계
    를 더 포함하는 컴퓨터 구현 방법.
  7. 제1항에 있어서,
    제2 핸들에 의해 식별되는 제2 메모리 블록을 할당해제하기 위한 요청에 응답하여, 상기 제2 핸들에 기초하여 상기 메모리 할당 테이블에서의 제2 할당 엔트리로부터 제2 트레이스 엔트리 포인터를 검색하는 단계; 및
    상기 제2 트레이스 엔트리 포인터에 기초하여 상기 메모리 트레이스 테이블의 제2 트레이스 엔트리의 메모리 할당 카운트를 감분하는 단계
    를 더 포함하는 컴퓨터 구현 방법.
  8. 제1항에 있어서,
    상기 제1 룩업 동작 및 상기 제2 룩업 동작은 메모리 할당 요청들의 샘플들에 대해서만 수행되는 컴퓨터 구현 방법.
  9. 머신에 의해 실행되는 경우에 상기 머신으로 하여금 메모리를 관리하는 방법을 수행하도록 하는 명령어들이 저장된 머신 판독가능 저장 매체로서,
    상기 방법은,
    클라이언트에 할당된 메모리 블록의 메모리 어드레스를 나타내는 핸들에 기초하여 할당 엔트리를 식별하며 상기 할당 엔트리로부터 트레이스 엔트리 포인터를 검색하기 위해서 메모리 할당 테이블에서 제1 룩업 동작을 수행하는 단계; 및
    상기 트레이스 엔트리 포인터에 기초하여 트레이스 엔트리를 식별하며 상기 트레이스 엔트리의 메모리 할당 카운트를 증분하기 위해서 메모리 트레이스 테이블에서 제2 룩업 동작을 수행하는 단계
    를 포함하며,
    상기 메모리 할당 카운트는, 상기 클라이언트가 메모리 누수를 야기시킬 가능성을 나타내는데 이용되는 머신 판독가능 저장 매체.
  10. 제9항에 있어서,
    상기 클라이언트는 프로그램의 실행가능한 코드의 시퀀스의 백트레이스를 통해 식별되며, 상기 트레이스 엔트리는 상기 백트레이스의 해시 값에 기초하여 상기 메모리 트레이스 테이블에서 인덱싱되는 머신 판독가능 저장 매체.
  11. 제9항에 있어서,
    상기 메모리 할당 테이블의 할당 엔트리는 상기 핸들의 해시 값에 기초하여 인덱싱되는 머신 판독가능 저장 매체.
  12. 제9항에 있어서,
    상기 방법은,
    상기 할당 엔트리가 트레이스 엔트리 포인터를 포함하는지 여부를 판정함으로써 상기 할당 엔트리가 사용하도록 비어있는지 여부를 판정하기 위해서, 상기 할당 엔트리를 검사하는 단계; 및
    상기 할당 엔트리가 비어있는 경우, 상기 메모리 트레이스 테이블의 트레이스 엔트리의 어드레스로 상기 할당 엔트리를 갱신하는 단계
    를 더 포함하는 머신 판독가능 저장 매체.
  13. 제12항에 있어서,
    상기 방법은,
    상기 할당 엔트리가 비어있는 경우, 상기 메모리 할당 카운트가 사전 결정된 값보다 더 큰지 여부를 판정하기 위해서, 상기 메모리 트레이스 테이블의 트레이스 엔트리를 검사하는 단계; 및
    상기 메모리 할당 카운트가 상기 사전 결정된 값보다 더 큰 경우, 상기 클라이언트가 상기 메모리 트레이스 테이블의 트레이스 엔트리의 동일한 소유자인지 여부를 판정하는 단계
    를 더 포함하며,
    상기 트레이스 엔트리의 메모리 할당 카운트는, 상기 클라이언트가 상기 트레이스 엔트리의 동일한 소유자인 경우에 증분되는 머신 판독가능 저장 매체.
  14. 제12항에 있어서,
    상기 방법은,
    기존의 트레이스 엔트리를 참조하는 상기 할당 엔트리가 비어있지 않은 경우, 상기 클라이언트가 상기 메모리 트레이스 테이블의 트레이스 엔트리의 동일한 소유자인지 여부를 판정하는 단계;
    상기 클라이언트가 동일한 소유자가 아닌 경우,
    상기 기존의 트레이스 엔트리의 메모리 할당 카운트를 감분하는 단계; 및
    상기 트레이스 엔트리의 어드레스로 상기 메모리 할당 테이블의 할당 엔트리를 갱신하는 단계
    를 더 포함하는 머신 판독가능 저장 매체.
  15. 데이터 프로세싱 시스템으로서,
    메모리 할당 테이블 및 메모리 트레이스 테이블을 저장하는 메모리; 및
    클라이언트에 할당된 메모리 블록의 메모리 어드레스를 나타내는 핸들에 기초하여 할당 엔트리를 식별하며 상기 할당 엔트리로부터 트레이스 엔트리 포인터를 검색하기 위해서 상기 메모리 할당 테이블에서 제1 룩업 동작을 수행하는 메모리 할당 모듈
    을 포함하고,
    상기 메모리 할당 모듈은, 상기 트레이스 엔트리 포인터에 기초하여 트레이스 엔트리를 식별하며 상기 트레이스 엔트리의 메모리 할당 카운트를 증분하기 위해서 상기 메모리 트레이스 테이블에서 제2 룩업 동작을 수행하도록 구성되며, 상기 메모리 할당 카운트는, 상기 클라이언트가 메모리 누수를 야기시킬 가능성을 나타내는데 이용되는 데이터 프로세싱 시스템.
  16. 제15항에 있어서,
    상기 클라이언트는 프로그램의 실행가능한 코드의 시퀀스의 백트레이스를 통해 식별되며, 상기 트레이스 엔트리는 상기 백트레이스의 해시 값에 기초하여 상기 메모리 트레이스 테이블에서 인덱싱되는 데이터 프로세싱 시스템.
  17. 제15항에 있어서,
    상기 메모리 할당 테이블의 할당 엔트리는 상기 핸들의 해시 값에 기초하여 인덱싱되는 데이터 프로세싱 시스템.
  18. 제15항에 있어서,
    상기 메모리 할당 모듈은,
    상기 할당 엔트리가 트레이스 엔트리 포인터를 포함하는지 여부를 판정함으로써 상기 할당 엔트리가 사용하도록 비어있는지 여부를 판정하기 위해서, 상기 할당 엔트리를 검사하며,
    상기 할당 엔트리가 비어있는 경우, 상기 메모리 트레이스 테이블의 트레이스 엔트리의 어드레스로 상기 할당 엔트리를 갱신하도록
    구성되는 데이터 프로세싱 시스템.
  19. 제18항에 있어서,
    상기 메모리 할당 모듈은,
    상기 할당 엔트리가 비어있는 경우, 상기 메모리 할당 카운트가 사전 결정된 값보다 더 큰지 여부를 판정하기 위해서, 상기 메모리 트레이스 테이블의 트레이스 엔트리를 검사하며,
    상기 메모리 할당 카운트가 상기 사전 결정된 값보다 더 큰 경우, 상기 클라이언트가 상기 메모리 트레이스 테이블의 트레이스 엔트리의 동일한 소유자인지 여부를 판정하도록
    구성되고,
    상기 트레이스 엔트리의 메모리 할당 카운트는, 상기 클라이언트가 상기 트레이스 엔트리의 동일한 소유자인 경우에 증분되는 데이터 프로세싱 시스템.
  20. 제19항에 있어서,
    상기 메모리 할당 모듈은,
    기존의 트레이스 엔트리를 참조하는 상기 할당 엔트리가 비어있지 않은 경우, 상기 클라이언트가 상기 메모리 트레이스 테이블의 트레이스 엔트리의 동일한 소유자인지 여부를 판정하고,
    상기 클라이언트가 동일한 소유자가 아닌 경우,
    상기 기존의 트레이스 엔트리의 메모리 할당 카운트를 감분하며,
    상기 트레이스 엔트리의 어드레스로 상기 메모리 할당 테이블의 할당 엔트리를 갱신하도록
    구성되는 데이터 프로세싱 시스템.
KR1020120108937A 2011-11-18 2012-09-28 데이터 프로세싱 시스템의 메모리 사용을 추적하는 방법 KR101357397B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US13/300,144 US8626993B2 (en) 2011-11-18 2011-11-18 Method for tracking memory usages of a data processing system
US13/300,144 2011-11-18

Publications (2)

Publication Number Publication Date
KR20130055515A true KR20130055515A (ko) 2013-05-28
KR101357397B1 KR101357397B1 (ko) 2014-02-03

Family

ID=47044823

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020120108937A KR101357397B1 (ko) 2011-11-18 2012-09-28 데이터 프로세싱 시스템의 메모리 사용을 추적하는 방법

Country Status (7)

Country Link
US (2) US8626993B2 (ko)
EP (1) EP2657844B1 (ko)
JP (1) JP5425286B2 (ko)
KR (1) KR101357397B1 (ko)
CN (1) CN103123604B (ko)
TW (1) TWI456395B (ko)
WO (1) WO2013074201A1 (ko)

Families Citing this family (36)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8959442B2 (en) * 2010-06-11 2015-02-17 Microsoft Corporation Memory allocation visualization for unmanaged languages
US10417121B1 (en) * 2011-12-19 2019-09-17 Juniper Networks, Inc. Monitoring memory usage in computing devices
US8707108B1 (en) * 2012-01-20 2014-04-22 Amazon Technologies, Inc. Detecting memory failures in computing systems
US9275229B2 (en) * 2012-03-15 2016-03-01 Mandiant, Llc System to bypass a compromised mass storage device driver stack and method thereof
GB2506614A (en) * 2012-10-03 2014-04-09 Ibm Extracting core data for a summary dump file based upon most recent trace data entries
US9298521B1 (en) * 2013-04-29 2016-03-29 Seagate Technology Llc Command sets and functions
US9164872B2 (en) * 2013-05-22 2015-10-20 Sap Se Tracking of program objects during request processing
US9424027B2 (en) 2013-07-29 2016-08-23 Ralph Moore Message management system for information transfer within a multitasking system
US9690687B2 (en) * 2013-12-17 2017-06-27 International Business Machines Corporation Dynamic allocation of trace array timestamp data
CN104750605B (zh) * 2013-12-30 2018-08-14 伊姆西公司 将内核对象信息包括在用户转储中
CN106537345B (zh) 2014-06-13 2020-10-13 皮沃塔尔软件公司 在多进程计算环境中精确跟踪内存使用
JP6428005B2 (ja) * 2014-07-10 2018-11-28 富士通株式会社 情報処理装置,情報処理方法及び情報処理プログラム
CN105302734B (zh) * 2014-07-22 2018-04-06 北京畅游天下网络技术有限公司 内存管理系统和方法
CN105446871B (zh) * 2014-08-26 2018-08-17 华为技术有限公司 一种资源泄漏检测方法、装置及系统
US9471237B1 (en) 2015-02-04 2016-10-18 Amazon Technologies, Inc. Memory consumption tracking
US10757175B2 (en) * 2015-02-10 2020-08-25 Vmware, Inc. Synchronization optimization based upon allocation data
CN106294189B (zh) * 2015-05-25 2020-09-25 中兴通讯股份有限公司 内存碎片整理方法及装置
US10942683B2 (en) * 2015-10-28 2021-03-09 International Business Machines Corporation Reducing page invalidation broadcasts
CN105260314B (zh) * 2015-11-03 2018-06-29 上海斐讯数据通信技术有限公司 内存泄漏的监测方法
EP3200080B1 (en) * 2015-12-16 2021-12-22 Tata Consultancy Services Limited Methods and systems for memory suspect detection
WO2017131780A1 (en) * 2016-01-29 2017-08-03 Hewlett Packard Enterprise Development Lp Identifying object modifications
US20170249176A1 (en) * 2016-02-26 2017-08-31 Red Hat, Inc. Systems and methods for configuration knowledge search
US10223295B2 (en) * 2016-03-10 2019-03-05 Microsoft Technology Licensing, Llc Protected pointers
US11061572B2 (en) 2016-04-22 2021-07-13 Advanced Micro Devices, Inc. Memory object tagged memory monitoring method and system
US10037166B2 (en) * 2016-08-03 2018-07-31 Ge Aviation Systems Llc Tracking memory allocation
US10180799B2 (en) * 2017-02-02 2019-01-15 Microsoft Technology Licensing, Llc Efficient retrieval of memory values during trace replay
US10331446B2 (en) 2017-05-23 2019-06-25 International Business Machines Corporation Generating and verifying hardware instruction traces including memory data contents
US11074200B2 (en) * 2017-12-15 2021-07-27 Intel Corporation Use-after-free exploit prevention architecture
KR102536266B1 (ko) * 2018-08-02 2023-05-25 삼성전자주식회사 메모리 누수 검출 방법 및 그 전자 장치
US11720993B2 (en) * 2018-09-21 2023-08-08 Advanced Micro Devices, Inc. Dynamic kernel memory space allocation
US10817413B2 (en) 2018-12-11 2020-10-27 Nxp Usa, Inc. Hardware-based memory management for system-on-chip (SoC) integrated circuits that identify blocks of continuous available tokens needed to store data
CN110162449A (zh) * 2019-03-26 2019-08-23 北京海益同展信息科技有限公司 互联网数据中心巡检过程中数据存储方法和装置
US11307923B2 (en) * 2019-07-23 2022-04-19 Vmware, Inc. Memory leak detection
CN111258847B (zh) * 2020-01-13 2023-08-22 北京字节跳动网络技术有限公司 一种文件句柄监控及分析方法、装置、介质和设备
US11507559B2 (en) * 2020-05-25 2022-11-22 Hewlett Packard Enterprise Development Lp Object sharing by entities using a data structure
US11442832B2 (en) 2020-11-24 2022-09-13 Hewlett Packard Enterprise Development Lp Managing synchronized reboot of a system

Family Cites Families (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0962565A (ja) * 1995-08-30 1997-03-07 Matsushita Graphic Commun Syst Inc メモリ管理方法およびメモリ管理装置
US5689707A (en) * 1995-12-04 1997-11-18 Ncr Corporation Method and apparatus for detecting memory leaks using expiration events and dependent pointers to indicate when a memory allocation should be de-allocated
JP3735484B2 (ja) * 1999-04-08 2006-01-18 日本電気株式会社 メモリリーク検出システム、メモリリーク検出方法及び記録媒体
US6658652B1 (en) 2000-06-08 2003-12-02 International Business Machines Corporation Method and system for shadow heap memory leak detection and other heap analysis in an object-oriented environment during real-time trace processing
US20020163913A1 (en) 2001-05-07 2002-11-07 Jintae Oh Pointer management and content matching packet classification
JP2002343064A (ja) 2001-05-17 2002-11-29 Fujitsu Ltd 記録再生装置及び方法
JP4157294B2 (ja) 2001-11-08 2008-10-01 富士通株式会社 欠陥ファイルの修復を可能とするファイルシステム
CN1248114C (zh) * 2002-06-20 2006-03-29 华为技术有限公司 一种软件内存泄露的检查方法
US6883082B2 (en) 2002-12-19 2005-04-19 Lsi Logic Corporation Central dynamic memory manager
CN100530110C (zh) * 2005-12-08 2009-08-19 中兴通讯股份有限公司 嵌入式系统中自动监测内存泄漏与内存越界的系统
US20070226445A1 (en) 2006-03-22 2007-09-27 Tony Nichols Method and system for rapid data-fragmentation analysis of a file-allocation-table (FAT) file system
CN100504807C (zh) * 2006-10-13 2009-06-24 中兴通讯股份有限公司 一种通信设备系统中内存泄漏的检测方法
TW200828014A (en) 2006-12-28 2008-07-01 Genesys Logic Inc Flash memory management method with low RAM utilization
CN101539870A (zh) * 2008-03-21 2009-09-23 中兴通讯股份有限公司 内存泄漏检测装置及方法
CN101615143B (zh) * 2008-06-27 2013-04-17 国际商业机器公司 用于内存泄漏诊断的方法和装置
US8375192B2 (en) 2008-12-16 2013-02-12 Sandisk Il Ltd. Discardable files
CN101763305B (zh) * 2009-12-29 2011-12-14 青岛海信宽带多媒体技术有限公司 一种嵌入式系统内存泄露的检测方法
US8233390B2 (en) 2010-02-22 2012-07-31 Telefonaktiebolaget L M Ericsson (Publ) Priority and source aware packet memory reservation and flow control in forwarding planes
CN102073591A (zh) * 2011-01-14 2011-05-25 福建星网视易信息系统有限公司 嵌入式系统内存占用状况检测方法及系统

Also Published As

Publication number Publication date
EP2657844A2 (en) 2013-10-30
JP5425286B2 (ja) 2014-02-26
CN103123604B (zh) 2015-09-09
TWI456395B (zh) 2014-10-11
KR101357397B1 (ko) 2014-02-03
JP2013109756A (ja) 2013-06-06
EP2657844A3 (en) 2016-05-25
CN103123604A (zh) 2013-05-29
US8626993B2 (en) 2014-01-07
US20140089627A1 (en) 2014-03-27
TW201321980A (zh) 2013-06-01
US8949518B2 (en) 2015-02-03
US20130132699A1 (en) 2013-05-23
WO2013074201A1 (en) 2013-05-23
EP2657844B1 (en) 2020-09-09

Similar Documents

Publication Publication Date Title
KR101357397B1 (ko) 데이터 프로세싱 시스템의 메모리 사용을 추적하는 방법
US9058212B2 (en) Combining memory pages having identical content
US10496548B2 (en) Method and system for user-space storage I/O stack with user-space flash translation layer
US8521986B2 (en) Allocating storage memory based on future file size or use estimates
US7653799B2 (en) Method and apparatus for managing memory for dynamic promotion of virtual memory page sizes
WO2017107414A1 (zh) 文件操作方法和装置
US20130263116A1 (en) Automatic management of heterogeneous memory resources
US9286199B2 (en) Modifying memory space allocation for inactive tasks
US11994988B2 (en) Multi-ring shared, traversable, and dynamic advanced database
EP2998862A1 (en) Method, device, and system for memory management
US20140325177A1 (en) Heap management using dynamic memory allocation
CN105677481A (zh) 一种数据处理方法、系统及电子设备
US20140082305A1 (en) Providing usage statistics for virtual storage
US20140156908A1 (en) Stale pointer detection with overlapping versioned memory
US8918617B2 (en) Defragmentation of storage class memory managed in extents
CN113312522B (zh) 内核对象的管理方法、装置、存储介质及电子设备
CN107145300B (zh) 数据共享管理方法及装置
JP2014157476A (ja) 計測装置及び計測方法
KR20190143521A (ko) 스토리지 관리 장치 및 방법

Legal Events

Date Code Title Description
A201 Request for examination
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20161220

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20171219

Year of fee payment: 5

LAPS Lapse due to unpaid annual fee