KR20220078696A - 강화된 동시성 가비지 컬렉션 스택 스캐닝 - Google Patents
강화된 동시성 가비지 컬렉션 스택 스캐닝 Download PDFInfo
- Publication number
- KR20220078696A KR20220078696A KR1020227015915A KR20227015915A KR20220078696A KR 20220078696 A KR20220078696 A KR 20220078696A KR 1020227015915 A KR1020227015915 A KR 1020227015915A KR 20227015915 A KR20227015915 A KR 20227015915A KR 20220078696 A KR20220078696 A KR 20220078696A
- Authority
- KR
- South Korea
- Prior art keywords
- stack
- execution
- scan
- frame
- program
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0253—Garbage collection, i.e. reclamation of unreferenced memory
- G06F12/0269—Incremental or concurrent garbage collection, e.g. in real-time systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5022—Mechanisms to release resources
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0253—Garbage collection, i.e. reclamation of unreferenced memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4482—Procedural
- G06F9/4484—Executing subprograms
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1041—Resource optimization
- G06F2212/1044—Space efficiency improvement
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
- Memory System (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Financial Or Insurance-Related Operations Such As Payment And Settlement (AREA)
- Preparation Of Compounds By Using Micro-Organisms (AREA)
Abstract
컴퓨팅 시스템에서 메모리를 회수하기 위한 가비지 컬렉션(GC)은 실행 스택을 스캔하기 위해 애플리케이션, 웹 서비스 및 다른 뮤테이터 프로그램을 때때로 중단하고, 이는 그들의 응답성을 감소시킨다. 그러나 중단 시간은 GC 스택 스캐닝과 뮤테이터 실행의 동시성을 증가시키는 BDSSO 기능에 의해 감소된다. BDSSO는 실행 스택 프레임 발생 데이터를 얻고, 프레임 실행 가능성을 결정하고, 가능성에 기초하여 스택 스캔 깊이를 선택하고, 선택된 깊이에 스캔 리턴 배리어를 설치한다. 그런 다음 GC는 뮤테이터가 실행되는 동안 장벽 아래의 실행 스택을 스캔하여 동시성을 증가시키고 뮤테이터 응답성을 향상시킨다. 선택된 배리어 위치는 배리어 배치에 대한 융통성 없는 접근법을 사용하는 대신 최적화된 동시성을 제공하기 위해 실제 스택 활동에 따라 달라진다. 기존 프로파일러 샘플 또는 가상 머신 인터페이스는 BDSSO에 의해 재사용될 수 있다. 프로파일러 성능 데이터가 없는 스키니 샘플도 또한 사용될 수 있다.
Description
본 발명은 강화된 동시성 가비지(garbage) 컬렉션 스택 스캐닝에 관한 것이다.
컴퓨터 프로그램 실행에서 가비지 컬렉션 활동은 자동 메모리 관리를 제공하는 데 도움이 된다. 문제의 "가비지"는 사용을 위해 프로그램에 할당된 메모리 공간이고, 해당 프로그램에 의해 더 이상 필요하지 않지만 다른 프로그램들에 의해 아직 사용할 수 없다. 가비지 컬렉터는 이러한 메모리 영역을 식별하여 후속 재할당을 위해 회수(reclaim)될 수 있도록 설계된 소프트웨어이다.
가비지 컬렉션은 프로그래머가 더 이상 필요하지 않은 데이터 객체를 수동으로 해제(release)할 필요로부터 해방시켜 프로그래밍을 더 쉽게 만든다. 가비지 컬렉션은 또한 일부 런타임 오류를 방지하는데 도움이 되고 이에 의해 데이터의 무결성과 가용성을 향상시킴으로써 사이버 보안을 강화할 수 있다. 많은 프로그래밍 언어는 가비지 컬렉션이 필요하거나 또한 가비지 컬렉션을 옵션으로서 허용한다. 일부 소프트웨어 개발 환경에서는 주어진 프로그램을 실행하는 동안 자동 가비지 컬렉션과 수동 메모리 관리를 모두 허용한다.
가비지 컬렉터가 자주 실행되거나 예측할 수 없는 시간에 실행되거나 둘 다일 수 있고 가비지 컬렉션이 애플리케이션 프로그램 실행을 상당히 느리게 할 수 있기 때문에 가비지 컬렉션의 효율적인 구현은 높은 우선순위가 될 수 있다. 사실, 모든 가비지 컬렉터는 아니지만 대부분은 때때로 애플리케이션 프로그램이 가비지 컬렉터와 동시에 실행되는 것을 방지하는 올스탑(stop-the-world) 접근법을 사용한다. 프로그램이 이러한 방식으로 정지된 동안 프로그램은 입력에 응답하지 않으므로, 애플리케이션 프로그램의 측정된 효율성과 사용자가 인식하는 응답성은 가비지 컬렉션에 의해 감소될 수 있다. 그러나, 단순히 가비지 컬렉션에 소요되는 처리 시간양을 줄이는 것만으로도 회수되는 메모리의 양이 줄어들 수 있으며, 따라서 예를 들어 휘발성 메모리 디바이스와 비휘발성 메모리 디바이스 간에 데이터를 교환(swap)하는 데 소요되는 시간을 늘리는 등 다른 방식으로 애플리케이션 프로그램 성능을 저해할 수 있다.
이 문서에 설명된 일부 실시 예는 컴퓨팅 시스템에서 개선된 가비지 컬렉션(GC)을 제공한다. 특히, 일부 실시 예는 시스템 내에 BDSSO(behavior-driven stack scan optimization) 기능을 내장한다. BDSSO 기능은 가비지 컬렉터의 스택 스캐닝 활동과 애플리케이션 프로그램 실행의 동시성을 증가시킴으로써 올스탑(stop-the-world) 시간을 줄인다. 일부 GC 스택 스캔 중에 애플리케이션 프로그램이 여전히 중지될 수 있지만 BDSSO를 사용하면 (최소한 예상 스택 스캔 시간 동안) 애플리케이션의 실행 스택의 명백히 일정한 부분이 GC를 위해 스캔되는 동안 애플리케이션 프로그램을 안전하고 효율적으로 계속 실행할 수 있다.
여기에 설명된 일부 강화된 동시성 실시 예는 메모리 및 프로세서를 포함하거나 그와 작동 가능하게 통신한다. 메모리는 프로그램의 실행 스택에 의해 구성된다; 실행 스택은 관심 기간에 걸쳐 프로그램의 실행 프레임을 포함한다. 메모리는 또한 BDSSO 소프트웨어에 의해서도 구성된다. 프로세서는 메모리와 작동 가능하게 통신하며, (a) 실행 스택 프레임 발생 데이터를 획득하는 단계, (b) 복수의 실행 프레임 각각에 대해 실행 스택 프레임 발생 데이터로부터 각각의 프레임 실행 가능성을 결정하는 단계, (c) 프레임 실행 가능성에 적어도 부분적으로 기초하여 스택 스캔 깊이를 선택 - 상기 선택된 스택 스캔 깊이는 전체 실행 스택의 전체 깊이보다 작음 - 하는 단계, (d) 상기 선택된 스택 스캔 깊이에서 가비지 컬렉션 스캔 리턴 배리어를 설치하는 단계, 그 후 (e) 프로그램이 또한 실행되고 있는 동안 트레이싱 가비지 컬렉터가 상기 스캔 리턴 배리어 아래의 실행 스택을 스캔하도록 허용하는 단계를 포함하는 BDSSO 단계를 수행하기 위하여 BDSSO 소프트웨어를 실행하도록 구성된다.
이들 실시 예 중 일부에서, 스캔 리턴 배리어 배치는 가비지 컬렉터가 실행 스택을 스캔하는 동안 프로그램이 스캔 리턴 배리어에 부닥칠 위험을 줄이도록 선택된다. 따라서 프로그램이 스캔 리턴 배리어에 부닥치는 프레임 리턴 동작을 실행하지 않는 한, 가비지 컬렉터가 스캔 리턴 배리어 아래의 실행 스택을 스캔하는 동안 프로그램이 가비지 컬렉터와 동시에 실행되기 때문에 BDSSO 단계를 수행함으로써 동시성이 증가된다. 이 경우 가비지 컬렉터가 스캐닝 중에 일정하다고 가정된 실행 스택의 일부 내로의 프로그램의 이동에 응답하는 동안 프로그램 실행이 중단(suspend)된다.
본 명세서의 교시에 관련된 다른 기술적 활동 및 특성은 또한 당업자에게 명백할 것이다. 주어진 예는 단지 예시일 뿐이다. 이 요약은 특허청구된 주제(subject matter)의 주요 특징(feature) 또는 필수 특징을 식별하기 위한 것이 아니며 특허청구된 주제의 범위를 제한하는 데 사용되려는 의도가 아니다. 오히려, 이 요약은 아래의 상세한 설명에서 추가로 설명되는 몇 가지 기술 개념을 간략한 형식으로 소개하기 위해 제공된다. 혁신은 적절하게 이해된 청구범위로 정의되며, 이 요약이 청구범위와 충돌하는 경우에 청구범위가 우선해야 한다.
첨부된 도면을 참조하여 보다 구체적인 설명이 주어질 것이다. 이 도면은 선택된 양태만을 예시하기 때문에 적용 범위(coverage)나 범위(scope)를 완전히 결정하지는 않는다.
도 1은 일반적으로 컴퓨터 시스템을 예시하고 또한 구성된 저장 매체를 일반적으로 예시하는 블록도이다.
도 2는 하드웨어를 포함하고 또한 가비지 컬렉터 및 기타 소프트웨어를 포함하는 컴퓨팅 시스템을 예시하는 블록도이다.
도 3은 가비지 컬렉션을 위한 실행 스택 스캐닝의 일부 양태를 예시하는 블록도이다.
도 4는 동시성 강화 기능으로 구성된 시스템의 양태를 예시하는 블록도이다.
도 5는 일부 프레임 발생 데이터의 일부 양태를 예시하는 블록도이다.
도 6은 일부 실행 스택 스냅샷의 일부 양태를 예시하는 다이어그램이다.
도 7은 일부 동시성 강화 방법의 단계를 예시하는 흐름도이다.
도 8은 일부 동시성 강화 방법의 단계를 추가로 예시하는 흐름도이다.
도 1은 일반적으로 컴퓨터 시스템을 예시하고 또한 구성된 저장 매체를 일반적으로 예시하는 블록도이다.
도 2는 하드웨어를 포함하고 또한 가비지 컬렉터 및 기타 소프트웨어를 포함하는 컴퓨팅 시스템을 예시하는 블록도이다.
도 3은 가비지 컬렉션을 위한 실행 스택 스캐닝의 일부 양태를 예시하는 블록도이다.
도 4는 동시성 강화 기능으로 구성된 시스템의 양태를 예시하는 블록도이다.
도 5는 일부 프레임 발생 데이터의 일부 양태를 예시하는 블록도이다.
도 6은 일부 실행 스택 스냅샷의 일부 양태를 예시하는 다이어그램이다.
도 7은 일부 동시성 강화 방법의 단계를 예시하는 흐름도이다.
도 8은 일부 동시성 강화 방법의 단계를 추가로 예시하는 흐름도이다.
개요
혁신은 그 기원을 넘어 확장될 수 있지만 혁신의 기원을 이해하면 혁신을 더 완전히 인식하는 데 도움이 될 수 있다. 현재 사례에서 여기에 설명된 일부 교시는 마이크로소프트(Microsoft) 관리 런타임 오퍼링(offering)의 성능을 개선하기 위해 노력하고 있던 마이크로소프트 혁신가가 직면한 기술적 문제에 의해 동기가 부여되었다. 이러한 오퍼링은 예를 들어 Microsoft Windows®, 다양한 Linux® 및 기타 *nix, Apple macOS® 운영 체제 환경용 관리 소프트웨어 프레임워크, 일부 Java® 및 JavaScript® 가상 머신 환경 오퍼링, 그리고 또한 Azure® 및 기타 클라우드 환경에서의 많은 오퍼링을 포함한다(각각 마이크로소프트사(Microsoft Corporation), 리누스 토발즈(Linus Torvalds), 애플(Apple Inc.), 오라클(Oracle America, Inc.), 오라클 및 마이크로소프트사의 상표이다).
특히, 가비지 컬렉션 중에 중단되는 프로그램의 응답성을 개선하는 방법이 기술적 과제였다. 시급한 과제는 가비지 컬렉터로 관리되고 있는 메모리를 사용하는 애플리케이션 프로그램 또는 기타 소프트웨어의 실행과 가비지 컬렉션 스택 스캐닝의 동시성을 높이는 방법이었다. 이러한 프로그램은 시간이 지남에 따라 객체 그래프를 수정할 수 있으므로 가비지 컬렉션 용어로는 "뮤테이터(mutator)"라고 한다. 스택은 거의 모든 최신 프로그램의 기본 빌딩 블록인 함수의 사용을 추적하기 위해 컴퓨터 프로그램에 의해 사용되는 디지털 아티팩트이다. 프로그램은 하나 이상의 스택을 가질 수 있다; 예를 들어, 컴퓨팅 시스템의 각 프로세서 코어는 자체 각각의 쓰레드 스택을 갖는 별도의 쓰레드를 실행할 수 있다.
가비지 컬렉터는 회수될 수 있는 메모리 부분을 식별하기 위해 뮤테이터 프로그램 스택을 스캔하므로, 이러한 식별 활동 동안 스택에서 이루어진 변경은 데이터 손상, 프로그램 충돌 및 기타 바람직하지 않은 결과를 초래할 수 있다. 특히, 트레이싱 가비지 컬렉터는 스택을 루트 스캐닝의 일부로서 사용하여 활성 상태인 객체를 식별한 다음 나머지 객체를 회수 가능한 것으로 처리한다. 따라서, 가장 안전한 접근법은 스택이 스캔되고 있고 잠재적으로 회수 가능한 메모리가 식별되고 있는 동안(즉, 루트 스캔 중에 트레이싱 가비지 컬렉터가 스택을 사용하는 동안) 가비지 컬렉터를 제외한 모든 것의 실행을 중단(suspend)하는 것이다. 그러나 이 순진한 접근법은 일부 상황에서 필요한 것보다 더 오래 뮤테이터를 중단하므로 다른 접근법이 때때로 대신 사용된다. 특히, 일부 접근법은 뮤테이터가 중단되는 동안 스캔되는 스택의 양을 줄임으로써 뮤테이터에 부과되는 올스탑(stop-the-world) 시간을 줄이려고 한다.
예를 들어, 한 접근법은 뮤테이터 스택의 맨 위(top)(즉, 첫번째, 가장 최근의) 실행 프레임이 스캔되고 있는 동안에만 뮤테이터를 중단한다. 그러면 맨 위 프레임이 스캔된 후 뮤테이터가 가비지 컬렉션 스택 스캐너와 동시에 실행되도록 허용된다. 스캔 리턴 배리어는 맨 위 프레임 아래에 배치되어 뮤테이터가 맨 위 프레임 아래에서 변경을 시도하는 경우 가비지 컬렉터가 다시 독점적인 제어 권한을 얻는다. 뮤테이터 중지와 관련된 오버헤드 및 뮤테이터가 맨 위 프레임 아래의 프레임에 액세스하는 빈도와 같은 요인에 따라, 이러한 맨 위 프레임 전용 올스탑 접근법은 반드시 뮤테이터 성능을 개선시키는 것은 아니며 때때로 뮤테이터 성능을 저하시킬 수 있다.
여기에 설명된 일부 실시 예는 컴퓨팅 시스템의 스택 활동 데이터를 획득하고 그 데이터로부터 스택이 스캔되고 있는 동안 스택의 맨 위 근처의 특정 프레임이 변경될 가능성이 얼마나 되는지를 결정한다. 그에 따라 스캔 리턴 배리어가 스택에 배치된다. 뮤테이터는 가장 변경될 가능성이 있는 프레임이 스캔되는 동안 중단되고 그 후 뮤테이터가 스캔 리턴 배리어 아래의 스택에 액세스하려고 시도하지 않는 한 스택의 나머지가 스캔되는 동안 뮤테이터와 스택 스캐너가 동시에 실행된다. 이 경우 뮤테이터가 다시 중단되고 관련 프레임 또는 프레임들이 스캔된다. 스캔 배리어를 재배치하거나 동일한 위치에 재설치하거나 완전히 제거할 수 있다. 초기 스캔 배리어 배치가 스택 스캐닝 중에 어느 프레임이 변경되지 않은 상태로 유지될지에 대한 정확한 예측이 아니더라도, 항상 고정 위치에 스캔 배리어를 배치하는 대신 본 명세서에서 교시된 스택 활동을 기반으로 스캔 배리어를 배치하는 것은 시스템의 동시성을 증가시키는 경향이 있다.
여기에 설명된 일부 실시 예는 더 넓은 맥락에서 일부 사람들에 의해 보여질 수 있다. 예를 들어, 액세스, 동시성, 실행, 관리, 메모리, 회수 및 중단과 같은 개념은 특정 실시 예와 관련된 것으로 간주될 수 있다. 그러나 광범위한 맥락이 이용 가능하다고 해서 본 명세서에서 추상적인 아이디어에 대한 배타적 권리를 추구하고 있다는 것은 아니다; 그들은 그렇지 않다. 오히려, 본 개시는 컴퓨팅 시스템에서 뮤테이터 및 스택 스캐너의 동시 실행 기회를 증가시키는 방법과 같은 특정 기술적 문제를 완전히 또는 부분적으로 해결하는 기술적 효과를 갖는 적절하게 구체적인 실시 예를 제공하는 데 초점을 맞추고 있다. 액세스, 동시성, 실행, 관리, 메모리, 회수 또는 중단과 관련된 기타 구성된 저장 매체, 시스템 및 프로세스는 현재 범위를 벗어난다. 따라서, 본 개시의 적절한 이해 하에서 모호성, 단순한 추상성, 기술적 성격의 결여 및 수반되는 증명 문제도 또한 회피된다.
보다 일반적으로, 당업자는 본 개시의 모든 부분 또는 그 안의 특정 세부사항이 실시가능성(enablement), 서면 설명(written description) 또는 베스트 모드(best mode)와 같은 법적 기준을 충족하는 데 반드시 필요한 것은 아니라는 것을 인식할 것이다. 또한, 실시 예는 특정 동기 부여 예, 관리되는 메모리 환경, 운영 체제, 프로그래밍 언어, 소프트웨어 프로세스, 개발 툴, 식별자, 데이터 구조, 표기법, 제어 흐름, 의사 코드, 명명 규칙 또는 여기에 설명된 다른 구현 선택으로 제한되지 않는다. 심지어 본 혁신의 소유자로부터의 임의의 다른 특허 개시와 명백한 충돌이 있더라도 이 특허 개시에 제시된 청구범위를 해석하는 데 아무런 역할을 하지 않는다.
기술적 성격
본 명세서에 기술된 실시 예의 기술적 성격은 당업자에게 명백할 것이고, 또한 주의를 기울이는 광범위한 독자에게 여러 방식으로 명백할 것이다. 일부 실시 예는 컴퓨팅 기술에 깊이 뿌리를 둔 각각의 활동인, 프로그램의 실행 스택을 스캔하는 것, 소프트웨어 실행을 중단하는 것, 소프트웨어 함수 리턴 동작을 리디렉션하는 것, 실행 스택에 스캔 리턴 배리어를 설치하는 것과 같은 기술적 활동을 다룬다. 논의된 일부 기술 메커니즘은 예를 들어 스캔 리턴 배리어, 실행 스택, 가비지 컬렉션 안전점, 프로그램 프로파일링 샘플 및 동시성 강화를 포함한다. 논의된 기술적 효과 중 일부는 예를 들어 뮤테이터와 스택 스캐너가 서로 동시에 실행될 가능성 증가 및 메모리 관리 환경에서 실행되는 프로그램의 응답성 향상을 포함한다. 따라서 순수히 정신적인 프로세서는 분명히 배제된다. 교시의 기술적 특성에 기초한 다른 이점도 제공된 설명으로부터 당업자에게 또한 명백할 것이다.
두문자어, 약어, 이름 및 기호
일부 두문자어, 약어, 이름 및 기호가 아래에 정의되어 있다. 다른 것은 본 명세서의 다른 곳에서 정의되거나, 당업자가 이해하기 위해 본 명세서에서 정의를 필요로 하지 않는다.
ALU: arithmetic and logic unit(산술 및 논리 장치)
API: application program interface(애플리케이션 프로그램 인터페이스)
BIOS: basic input/output system(기본 입출력 시스템)
CD: compact disc(콤팩트 디스크)
CPU: central processing unit(중앙 처리 장치)
DVD: digital versatile disk 또는 digital video disc(디지털 다목적 디스크 또는 디지털 비디오 디스크)
FPGA: field-programmable gate array(필드 프로그래머블 게이트 어레이)
FPU: floating point processing unit(부동 소수점 처리 장치)
GPU: graphical processing unit(그래픽 처리 장치)
GUI: graphical user interface(그래픽 사용자 인터페이스)
IaaS 또는 IAAS: infrastructure-as-a-service(서비스형 인프라)
ID: identification or identity(식별 또는 신원)
IoT: internet of things(사물 인터넷)
LAN: local area network(근거리 통신망)
OS: operating system(운영 체제)
PaaS 또는 PAAS: platform-as-a-service(서비스형 플랫폼)
RAM: random access memory(랜덤 액세스 메모리)
ROM: read only memory(읽기 전용 메모리)
UEFI: Unified Extensible Firmware Interface(통합 확장 가능한 펌웨어 인터페이스)
VM: virtual machine(가상 머신)
WAN: wide area network(광역 네트워크)
일부 추가 용어
도면에 도시된 것과 같은 예시적인 실시 예에 대한 참조가 본 명세서에서 이루어지며, 동일한 것을 설명하기 위해 특정 언어가 본 명세서에서 사용된다. 그러나 여기에 예시된 특징의 변경 및 추가 수정, 그리고 관련 기술(들) 및 본 개시 내용을 소유한 숙련자에게 발생할 본 명세서의 특정 실시 예에 의해 예시된 추상적인 원리의 추가적인 기술적 적용은 청구범위의 범위 내에서 고려되어야 한다.
용어의 의미는 본 개시에서 명확하므로, 청구범위는 이러한 명확화에 주의하여 읽어야 한다. 특정 예가 제공되지만, 관련 기술 분야(들)의 숙련자는 다른 예가 또한 사용된 용어의 의미 및 하나 이상의 청구항의 범위 내에 포함될 수 있음을 이해할 것이다. 여기서 용어는 일반적인 사용에서(특히 비기술적 사용에서), 또는 특정 산업의 사용에서, 또는 특정 사전이나 사전 집합에서 가지는 것과 동일한 의미를 가질 필요는 없다. 참조 번호는 용어의 폭을 보여주는 데 도움이 되도록 다양한 표현과 함께 사용될 수 있다. 주어진 텍스트 부분에서 참조 번호를 생략한다고 해서 반드시 도면의 내용이 텍스트에서 논의되지 않는다는 의미는 아니다. 발명자는 특정한 그리고 선택된 사전학(lexicography)에 대한 권리를 주장하고 행사한다. 인용된 용어는 명시적으로 정의되고 있지만 용어는 인용 부호를 사용하지 않고 묵시적으로 정의될 수도 있다. 용어는 여기의 상세한 설명 및/또는 출원 파일의 다른 곳에서 명시적으로 또는 묵시적으로 정의될 수 있다.
본 명세서에 사용된 바와 같이, "컴퓨터 시스템(computer system)"(일명 "컴퓨팅 시스템(computing system)")은 예를 들어 하나 이상의 서버, 마더보드, 처리 노드, 랩톱, 태블릿, 개인용 컴퓨터(휴대용이든 아니든), 개인용 정보 단말기, 스마트폰, 스마트워치, 스마트밴드, 셀폰 또는 모바일폰, 적어도 프로세서와 메모리가 있는 기타 모바일 디바이스, 비디오 게임 시스템, 증강 현실 시스템, 홀로그램 프로젝션 시스템, 텔레비전, 웨어러블 컴퓨팅 시스템 및/또는 명령어들에 의해 적어도 부분적으로 제어되는 하나 이상의 프로세서를 제공하는 다른 디바이스(들)를 포함할 수 있다. 명령어들은 메모리 및/또는 특수 회로에 있는 펌웨어 또는 다른 소프트웨어의 형태일 수 있다.
"멀티쓰레디드(multithreaded)" 컴퓨터 시스템은 다중 실행 쓰레드를 지원하는 컴퓨터 시스템이다. "쓰레드(thread)"라는 용어는 스케줄링이 가능하거나 이를 거치는 코드 및 가능하면 동기화를 거치는 코드를 포함하는 것으로 이해되어야 한다. 쓰레드는 예를 들어 "태스크(task)", "프로세스(process)" 또는 "코루틴(coroutine)"과 같은 다른 이름으로 본 개시 외부에서 알려져 있을 수도 있다. 그러나 본 명세서에서는 쓰레드가 프로세스 내부의 실행 경로를 정의한다는 점에서 쓰레드와 프로세스를 구분한다. 또한, 프로세스의 쓰레드는 주어진 어드레스 공간을 공유하지만 상이한 프로세스는 각각 상이한 어드레스 공간을 갖는다. 프로세스의 쓰레드는 병렬로, 순차적으로, 또는 병렬 실행과 순차 실행의 조합(예를 들어, 시간 분할(time-sliced))으로 실행될 수 있다.
"프로세서(processor)"는 동시 멀티쓰레딩 구현에서 코어와 같은 쓰레드 처리 유닛이다. 프로세서에는 하드웨어가 포함된다. 주어진 칩에는 하나 이상의 프로세서가 포함될 수 있다. 프로세서는 범용이거나 벡터 처리, 그래픽 처리, 신호 처리, 부동 소수점 산술 처리, 암호화, I/O 처리, 머신 러닝 등과 같은 특정 용도에 맞게 조정될 수 있다.
"커널(kernel)"은 운영 체제, 하이퍼바이저, 가상 머신, BIOS 또는 UEFI 코드 및 유사한 하드웨어 인터페이스 소프트웨어를 포함한다.
"코드(code)"는 프로세서 명령어들, (상수, 변수 및 데이터 구조를 포함하는) 데이터, 또는 명령어들과 데이터 모두를 의미한다. "코드" 및 "소프트웨어"는 본 명세서에서 상호 교환 가능하게 사용된다. 실행 가능 코드, 해석된 코드 및 펌웨어는 코드의 몇 가지 예이다.
"프로그램(program)"은 애플리케이션, 커널, 드라이버, 인터럽트 핸들러, 펌웨어, 상태 머신, 라이브러리, 및 프로그래머(개발자라고도 함)에 의해 작성되고/되거나 자동으로 생성된 다른 코드를 포함하도록 본 명세서에서 광범위하게 사용된다.
"루틴(routine)"은 일반적으로 루틴이 호출된 프로그램 실행 지점 직후에 명령어에 제어를 리턴하는 호출 가능한 코드 부분이다. 사용된 용어에 따라 "함수(function)"와 "프로시저(procedure)"가 다른 곳에서 가끔 구별되기도 한다: 함수는 일반적으로 값을 리턴하지만 프로시저는 그렇지 않다. 본 명세서에서 사용된 "루틴"은 함수와 프러시저를 모두 포함한다. 루틴은 값을 리턴하는 코드(예를 들어, sin(x))를 가지거나 또한 값을 제공하지 않고 단순히 리턴할 수 있다(예를 들어, void 함수).
"서비스(service)"는 클라우드 컴퓨팅 환경 또는 기타 네트워크 또는 컴퓨팅 시스템 환경에서 리소스 또는 여러 프로그램에 대한 리소스 액세스를 제공하는 소모성(consumable) 프로그램 오퍼링을 의미한다.
"클라우드(cloud)"는 측정된 주문형 서비스에 탄력적으로 사용할 수 있는 컴퓨팅, 저장 및 네트워킹을 위한 풀링된(pooled) 리소스를 의미한다. 클라우드는 프라이빗, 퍼블릭, 커뮤니티 또는 하이브리드일 수 있으며 클라우드 서비스는 IaaS(Infrastructure as a Service), PaaS(Platform as a Service), SaaS(Software as a Service), 또는 다른 서비스의 형태로 제공될 수 있다. 달리 명시되지 않는 한, 파일 읽기 또는 파일 쓰기에 대한 논의는 로컬 파일 읽기/쓰기 또는 클라우드 네트워크 또는 다른 네트워크일 수 있는 네트워크를 통한 읽기/쓰기 또는 둘 다(로컬 및 네트워킹된 읽기/ 쓰기)를 포함한다.
"IoT" 또는 "사물 인터넷(Internet of Things)"은 어드레서블 임베디드 컴퓨팅 노드의 임의의 네트워킹된 모음을 의미한다. 이러한 노드는 여기에 정의된 컴퓨터 시스템의 예이지만 다음 특성 중 적어도 두 가지를 또한 가진다: (a) 사람이 읽을 수 있는 로컬 디스플레이가 없다; (b) 로컬 키보드가 없다; (c) 주요 입력 소스는 비언어적 데이터 소스를 추적하는 센서이다; (d) 로컬 회전 디스크 스토리지가 없다 - RAM 칩 또는 ROM 칩이 유일한 로컬 메모리를 제공한다; (e) CD 또는 DVD 드라이브가 없다; (f) 가전 제품 또는 가구 설비에 내장(embed)된다; (g) 이식 또는 착용 가능한 의료 기기에 내장된다; (h) 차량에 내장된다; (i) 프로세스 자동화 제어 시스템에 내장된다; 또는 (j) 환경 모니터링, 시민 기반 시설 모니터링, 산업 장비 모니터링, 에너지 사용 모니터링, 인간 또는 동물 건강 모니터링, 물리적 보안 또는 물리적 운송 시스템 모니터링 중 하나에 초점을 맞춘 설계이다. IoT 스토리지는 클라우드를 통해, 다른 네트워크를 통해 또는 직접 로컬 액세스 시도를 통해 무단(unauthorized) 액세스의 타겟이 될 수 있다.
계산 리소스에 대한 "액세스(access)"는 리소스를 읽고, 수정하고, 쓰고, 실행하거나, 아니면 활용하기 위한 허가 또는 기타 능력의 사용을 포함한다. 시도된 액세스는 실제 액세스과 명시적으로 구분될 수 있지만 "시도된(attempted)"이라는 수식어가 없는 "액세스"는 시도된 액세스 및 실제로 수행되거나 제공된 액세스를 모두 포함한다.
본 명세서에 사용된 바와 같이, "포함하다(include)"는 달리 언급되지 않는 한 추가 요소를 허용한다(즉, 포함하다(include)는 포함하다(comprise)를 의미한다).
"최적화(optimize)"는 개선을 의미하지만 반드시 완벽할 필요는 없다. 예를 들어, 최적화된 프로그램이나 알고리즘을 더 개선하는 것이 가능할 수 있다.
"프로세스(process)"는 때때로 본 명세서에서 컴퓨터 공학 기술의 용어로서 사용되며, 그 기술적 의미에서 예를 들어 코루틴, 쓰레드, 태스크, 인터럽트 핸들러, 애플리케이션 프로세스, 커널 프로세스, 프러시저, 또는 객체 메서드를 포함하거나 일컬어질 수도 있는 계산 리소스(computational resource) 사용자를 포함한다. 실제적으로 "프로세스"는 Windows® Task Manager, Linux® ps 또는 다른 운영 체제 환경에서의 유사한 유틸리티(각각 마이크로소프트사(Microsoft Corporation), 리누스 토발즈(Linus Torvalds)의 마크)와 같은 시스템 유틸리티에 의해 식별되는 계산 엔터티이다. "프로세스"는 또한 예를 들어 시스템 청구항 또는 제조물품(구성된 저장 매체) 청구항과 반대되는 프로세스 청구항을 설명할 때 특허법 분야 용어로서 여기에서 사용된다. 유사하게, "방법(method)"은 때때로 컴퓨터 공학 분야의 기술 용어(일종의 "루틴")로서 및 또한 특허법 분야 용어("프로세스")로서 여기에서 사용된다. 특허법의 의미에서 "프로세스"와 "방법"은 본 명세서에서 상호 교환적으로 사용된다. 당업자는 특정 사례에서 어느 의미가 의도되었는지 이해할 것이고, 또한 (특허법 의미에서) 주어진 특허청구된 프로세스 또는 방법이 때때로 (컴퓨터 공학 의미에서) 하나 이상의 프로세스 또는 방법을 사용하여 구현될 수 있음을 이해할 것이다.
"자동으로(automatically)"는 자동화가 없는 것과는 대조적으로 자동화(예를 들어, 본 명세서에서 논의된 특정 동작 및 기술적 효과를 위해 소프트웨어에 의해 구성된 범용 컴퓨팅 하드웨어)를 사용하는 것을 의미한다. 특히 "자동으로" 수행되는 단계는 사람이 시작하거나 사람이 대화식으로 안내할 수 있지만 종이에 손으로 또는 사람의 마음으로 수행되지는 않는다. 이와 같이 제공된 기술적 상호 작용 없이는 실현되지 않을 하나 이상의 기술적 효과를 얻기 위해 자동 단계가 머신으로 수행된다. 자동으로 수행되는 단계는 사전에 수행된 적어도 하나의 동작을 포함하는 것으로 간주된다.
당업자는 기술적 효과가 기술적 실시 예의 추정 목적임을 이해한다. 예를 들어, 계산이 실시 예에 포함되고 일부 계산이 기술적 컴포넌트 없이(예를 들어, 종이와 연필로, 또는 심지어 정신적 단계로) 수행될 수도 있다는 단순한 사실이 기술적 효과의 존재를 제거하거나 실시 예의 구체적이고 기술적인 특성을 변경하지 않는다. 스택 프레임 실행 가능성 결정, 스캔 리턴 배리어 설치 및 본 명세서에서 논의된 많은 다른 동작과 같은 동시성 강화 동작은 본질적으로 디지털로 이해된다. 인간의 마음은 본 명세서에서 교시된 동시성 강화 단계를 수행하기 위하여 필요한 데이터를 읽고 쓰기 위해 CPU 또는 다른 프로세서, RAM 또는 기타 디지털 스토리지와 직접 인터페이스할 수 없다. 이것은 모두 본 개시에 비추어 당업자에 의해 잘 이해될 것이지만, 다른 사람들은 때때로 이것을 통지받거나 상기될 필요가 있을 수 있다.
마찬가지로 "컴퓨터를 사용하여(computationally)"는 컴퓨팅 디바이스(적어도 프로세서와 메모리)가 사용되고 있음을 의미하며, 단순한 인간의 생각이나 단순한 인간의 동작만으로 결과를 얻는 것은 제외한다. 예를 들어, 종이와 연필로 산술을 하는 것은 본 명세서에서 이해하는 바와 같이 컴퓨터를 사용하여 산술을 하고 있는 것이 아니다. 컴퓨터를 사용한 결과는 더 빠르고, 더 광범위하고, 더 깊고, 더 정확하고, 더 일관되고, 더 포괄적이며/이거나, 그렇지 않으면 인간 수행(human performance)만의 범위를 넘어서는 기술적 효과를 제공한다. "컴퓨터를 사용하는 단계(computational step)"는 컴퓨터를 사용하여 수행되는 단계이다. "자동으로" 또는 "컴퓨터를 사용하여"는 반드시 "즉시(immediately)"를 의미하지는 않는다. "컴퓨터를 사용하여" 및 "자동으로"는 본 명세서에서 상호 교환적으로 사용된다.
"선제적으로(proactively)"는 사용자로부터의 직접적인 요청이 없는 것을 의미한다. 실제로, 사용자는 단계의 결과가 사용자에게 제시될 때까지 실시 예에 의한 선제적인 단계가 가능했다는 것을 심지어 깨닫지 못할 수도 있다. 달리 명시된 경우를 제외하고, 여기에 설명된 임의의 컴퓨터를 사용하는 및/또는 자동 단계는 선제적으로 행해질 수도 있다.
이 문서 전체에 걸쳐, 선택적인 복수형들의 사용은 표시된 특징 중 하나 이상이 존재함을 의미한다. 예를 들어, "프로세서(들)"는 "하나 이상의 프로세서" 또는 동등하게 "적어도 하나의 프로세서"를 의미한다.
미국 법률 및 관행의 목적을 위해 청구범위 또는 다른 곳에서 본 명세서에서 "단계"라는 단어를 사용하는 것은 기능식 청구항(means-plus-function, step-plus-function) 또는 35 U.S.C. §112 ¶6 / §112(f) 청구항 해석을 인보크(invoke)하려는 의도가 아니다. 그 효과에 대한 모든 추정은 이로써 명시적으로 반박된다.
미국 법률 및 관행의 목적을 위해, 청구범위는 "~을 위한 수단(means for)"이라는 문구를 사용하지 않는 한, 기능식 청구항(means-plus-function) 해석을 적용하려는 의도가 아니다. 기능식 청구항 언어로 해석되도록 의도된 청구항 언어가 있다면, 그것은 "~을 위한 수단"이라는 문구를 사용함으로써 해당 의도를 명시적으로 언급할 것이다. 기능식 청구항 해석이 적용될 때 "~을 위한 수단"의 사용 및/또는 법원의 청구항 언어의 법적 해석에 관계 없이 주어진 명사 또는 주어진 동사에 대하여 명세서에 기재된 수단은 청구항 언어와 연결(link)되고 도면의 블록도에서 동일한 블록 내의 모양, 동일하거나 유사한 이름으로 표기, 동일한 참조 번호로 표기, 임의의 도면에 묘사된 기능적 관계, 본 개시의 텍스트에 기재된 기능적 관계 중 임의의 것에 의해 본 명세서에서 함께 연결되는 것으로 이해되어야 한다. 예를 들어, 청구항 제한(claim limitation)이 "zac 위젯(zac widget)"을 기재했고 그 청구항 제한이 기능성 청구항 해석의 대상이 되었다면, 최소한 "zac 위젯"을 기재하거나 zac 위젯에 할당된 참조 번호로 함께 묶이거나 zac 위젯의 구조 또는 작동과 기능적 관계가 있는 것으로 개시된 임의의 도면 블록, 단락 또는 예에서 명세서 임의의 곳에서 식별된 모든 구조가 zac 위젯에 대한 출원에서 식별된 구조의 일부로 간주될 것이며 zac 위젯 구조에 대한 동등한 세트를 정의하는데 도움이 될 것이다.
당업자는 이 혁신 개시가 다양한 데이터 값 및 데이터 구조를 논의한다는 것을 인식하고 이러한 항목이 메모리(RAM, 디스크 등)에 상주함으로써 메모리를 구성한다는 것을 인식할 것이다. 당업자는 또한 이 혁신 개시가 주어진 구현에서 실행 가능 코드로 구현되어야 하는 다양한 알고리즘 단계에 대해 논의하고, 그러한 코드도 또한 메모리에 상주하며, 이를 실행하는 임의의 범용 프로세서를 효과적으로 구성함으로써 범용 프로세서로부터 기능적으로 특수 목적 하드웨어인 특수 목적 프로세서로 변환한다는 것을 인식할 것이다.
따라서, 당업자는 (a) 청구항에 기재된 메모리, 및 (b) 청구항에 기재된 데이터 구조 또는 데이터 값 또는 코드를 중첩되지 않는 항목으로서 취급하는 실수를 저지르지 않을 것이다. 데이터 구조 및 데이터 값 및 코드는 청구항이 언급된 임의의 모든 데이터 구조, 또는 데이터 값 또는 코드 부분에 대해 해당 상주(residency)를 명시적으로 기재하지 않는 경우에도 메모리에 상주하는 것으로 이해된다. 따라서 그러한 상주에 대한 명시적인 기재는 필요하지 않다. 그러나 그것은 또한 금지되지는 않으며, 다른 모든 데이터 값과 데이터 구조 및 코드를 상주로부터 제외하지 않고 강조를 위해 한두 번의 선택 기재가 있을 수 있다. 마찬가지로, 청구항에 기재된 코드 기능(code functionality)은 그 구성 품질이 청구항에 명시적으로 기재되어 있는지 여부에 관계없이 프로세서를 구성하는 것으로 이해된다.
이 문서 전체에 걸쳐, 달리 명시적으로 기재되지 않는 한, 프로세스의 단계에 대한 언급은 해당 단계가 이해 당사자에 의해 직접 수행될 수 있고/있거나 중재 메커니즘 및/또는 중재 엔티티를 통해 당사자에 의해 간접적으로 수행될 수 있다고 가정하며, 여전히 그 단계의 범위 내에 있다. 즉, 직접 수행이 명시적으로 언급된 요구 사항이 아닌 한, 이해 당사자에 의한 단계의 직접 수행이 요구되지 않는다. 예를 들어, 목적지 또는 다른 주제에 관한 분석, 비교, 계산, 생성(creating), 결정, 디스플레이, 강화, 실행(executing), 수집(gathering), 생성(generating), 표시, 설치, 위치 찾기, 유지, 완화, 수정, 획득, 작동, 수행, 예측, 제공, 읽기, 수신, 감소, 제거, 대체, 실행(running), 샘플링, 스캔, 선택, 저장, 기록(tally), 사용, 활용, 변동, 쓰기(및 분석함, 분석됨, 비교함, 비교됨 등)와 같은 이해 당사자에 의한 동작을 포함하는 단계는 이 문서에 기재된 임의의 행위를 포함하여 다른 당사자에 의한 앞서 말한 것 또는 포워딩, 복사, 업로드, 다운로드, 인코딩, 디코딩, 압축, 압축 해제, 암호화, 암호 해독, 인증, 호출 등과 같은 개입 행위를 포함할 수 있고, 여전히 이해 당사자에 의해 직접 수행되는 것으로 이해될 수 있다.
데이터 또는 명령어들을 언급할 때마다 이러한 항목들은 컴퓨터 판독 가능 메모리 및/또는 컴퓨터 판독 가능 저장 매체를 구성함으로써 예를 들어 단순히 종이 위나 사람의 마음 속에 존재하거나 와이어를 통해 전파되는 단순한 신호로서와 반대로 그것을 특정 물품으로 변환하는 것으로 이해된다. 미국에서 특허 보호를 위해 메모리 또는 기타 컴퓨터 판독 가능 저장 매체는 미국 특허상표청(USPTO)의 In re Nuijten 사건의 해석에 따라 특허 가능 대상(patentable subject matter)의 범위를 벗어나는 전파 신호 또는 반송파 또는 단순한 에너지가 아니다. 미국에서는 어떠한 청구항도 신호 그 자체 또는 단순한 에너지를 커버하지 않으며, 본 개시에 비추어 달리 주장하는 청구항 해석은 그 자체로 비합리적이다. 미국 이외의 지역에서 허여된 청구항에서 달리 명시적으로 언급되지 않는 한, 청구항은 신호 그 자체 또는 단순한 에너지를 커버하지 않는다.
더욱이, 본 명세서의 다른 곳에서 명백히 반대되는 어떤 것에도 불구하고, 한편으로는 (a) 컴퓨터 판독 가능 저장 매체와 컴퓨터 판독 가능 메모리, 및 다른 한편으로 (b) 신호 매체로 또한 지칭되는 전송 매체 사이의 명확한 구별이 이해되어야 한다. 전송 매체는 전파 신호 또는 반송파 컴퓨터 판독 가능 매체이다. 대조적으로, 컴퓨터 판독 가능 저장 매체 및 컴퓨터 판독 가능 메모리는 전파 신호 또는 반송파 컴퓨터 판독 가능 매체가 아니다. 청구항에서 달리 명시적으로 언급되지 않는 한, "컴퓨터 판독 가능 매체"는 전파 신호 그 자체가 아니고 단순한 에너지가 아닌, 컴퓨터 판독 가능 저장 매체를 의미한다.
본 명세서의 "실시 예(embodiment)"는 예이다. "실시 예"라는 용어는 "발명"과 호환되지 않는다. 실시 예는 양태(aspect)의 결과적인 조합이 여기에 그 자체로 명시적으로 설명되지 않더라도 (결과가 작동 가능하다면) 다른 실시 예를 생성하기 위해 양태를 자유롭게 공유하거나 빌릴 수 있다. 허용된 각각의 모든 조합이 명시적이고 개별적으로 설명되도록 요구하는 것은 해당 기술 분야의 숙련자에게 불필요하며, 해당 기술 분야의 숙련된 독자를 위해 특허 명세서가 작성되었음을 인식하는 정책에 위배될 것이다. 심지어 적은 수의 조합 가능한 특징으로부터 발생하는 가능한 조합의 수에 관한 공식적인 조합 계산 및 비공식적인 공통 직관은 또한 여기에 설명된 양태에 대해 다수의 양태 조합이 존재함을 나타낼 것이다. 따라서, 각각의 모든 조합에 대해 명시적으로 기재하도록 요구하는 것은 특허 명세서를 간결하게 하고 독자가 관련 기술 분야에 대해 잘 알고 있어야 한다는 정책에 위배될 것이다.
참조 번호 목록
다음 목록은 편의를 위해 그리고 도면의 그림을 지원하여 명세서 텍스트의 일부로서 제공되고, 명세서는 다수의 항목을 참조하여 혁신을 설명한다. 여기에 나열되지 않은 항목은 그럼에도 불구하고 주어진 실시 예의 일부일 수 있다. 텍스트의 더 나은 가독성을 위해, 주어진 참조 번호는 텍스트에서 참조된 항목의 전체가 아닌 일부의 기재 근처에서 기재된다. 동일한 참조 번호가 주어진 항목의 상이한 예 또는 상이한 인스턴스를 참조하여 사용될 수 있다. 참조 번호 목록은 다음과 같다:
100 컴퓨팅 환경이라고도 지칭되는 운영 환경
102 컴퓨터를 사용하는 시스템 또는 컴퓨팅 시스템이라고도 지칭되는 컴퓨터 시스템
104 사용자
106 주변기기
108 일반적으로 예를 들어, LAN, WAN, 소프트웨어 정의 네트워크, 클라우드 및 다른 유선 또는 무선 네트워크를 포함하는 네트워크
110 프로세서
112 컴퓨터 판독 가능 저장 매체, 예를 들어 RAM, 하드 디스크
114 이동식(removable) 구성된 컴퓨터 판독 가능 저장 매체
116 프로세서로 실행 가능한 명령어들; 이동식 저장 매체 또는 다른 메모리(휘발성 또는 비휘발성 또는 둘 다)에 있을 수 있다
118 데이터
120 커널(들), 예를 들어 운영 체제(들), BIOS, UEFI, 디바이스 드라이버
122 툴, 예를 들어 안티바이러스 소프트웨어, 방화벽, 패킷 스니퍼 소프트웨어, 침입 검출 시스템, 침입 방지 시스템, 디버거, 프로파일러, 컴파일러, 인터프리터, 디컴파일러, 어셈블러, 디스어셈블러, 소스 코드 편집기, 자동 완성 소프트웨어, 시뮬레이터, 퍼저(fuzzer), 저장소 액세스 툴, 버전 제어 툴, 옵티마이저, 협업(collaboration) 툴, (예를 들어, 통합 개발 환경을 포함하는) 소프트웨어 개발 툴 및 툴 모음, 하드웨어 개발 툴 및 툴 모음, 진단 등
124 애플리케이션, 예를 들어 워드 프로세서, 웹 브라우저, 스프레드시트, 게임, 이메일 툴, 커맨드
126 "디스플레이"라고도 지칭되는 디스플레이 스크린
128 참조 번호 106, 108, 110, 112, 114와 달리 연관되지 않은 컴퓨팅 하드웨어
202 일반적으로 참조 번호 106, 108, 110, 112, 114, 126, 128, 424 중 하나 이상과 연관된 하드웨어를 포함하는 컴퓨팅 하드웨어
204 실행 스택; 단순히 "스택"이라고도 지칭될 수 있다.
206 실행 스택 프레임; "스택 프레임" 또는 간단히 "프레임"이라고도 지칭될 수 있다
208 시스템 소프트웨어, 예를 들어 커널(120)
210 사용자 소프트웨어, 예를 들어 애플리케이션(124)
212 뮤테이터 소프트웨어, 즉 스택의 일부를 변화시킬(mutate) 수 있는 소프트웨어; 뮤테이터 소프트웨어는 시스템 소프트웨어 또는 사용자 소프트웨어일 수 있다
214 가비지 컬렉터 소프트웨어; "가비지 컬렉터" 또는 "GC"라고도 지칭될 수 있다
216 쓰레드, 즉, 컴퓨터 프로그램에서의 실행 쓰레드
300 가비지 컬렉션을 위한 실행 스택 스캐닝의 양태
302 가비지 컬렉션을 위한 실행 스택 스캐닝; "스택 스캐닝" 또는 단순히 "스캐닝"이라고도 지칭될 수 있다; 또한 스택 스캐닝을 수행하는 것을 지칭한다
304 프레임 발생 데이터, 즉 프레임의 발생을 나타내는 데이터
306 가비지 컬렉션 안전점(safepoint); 단순히 "안전점"이라고도 지칭될 수 있다
308 실제 스캔 깊이, 예를 들어 프레임의 올스탑 스캔이 실제로 추구되는 스택 아래의 깊이
310 일반적으로 프레임 깊이, 예를 들어 스택의 맨 위는 깊이 0에 있고, 스택의 맨 위의 하나 아래 프레임은 깊이 1에 있는 식이며, 이 예는 제로 인덱싱을 사용하지만 다른 예는 스택 프레임의 맨 위는 깊이 1에 있고 다음 아래 프레임은 깊이 2에 있는 식이 되도록 1-인덱싱을 사용할 수 있음을 이해한다
312 프레임 리턴 어드레스; "리턴 어드레스"라고도 지칭될 수 있다; 해당 리턴 어드레스를 포함하는 프레임에 대응하는 함수 또는 다른 루틴이 실행이 완료되고 시스템이 스택에서 해당 프레임을 팝(pop off)할 준비가 되어 있고 표시된 리턴 어드레스로 제어를 이전할 준비가 되었을 때, 처리 제어가 이전되는 어드레스를 나타낸다
314 프레임 실행 가능성, 즉 확률 또는 기타 값(예를 들어, 부울 isLikely 또는 isNotLikely) 뮤테이터의 스택이 GC 스캔되고 있는 동안 프레임이 뮤테이터에 의해 액세스될 계산된 가능성을 나타낸다; "실행 가능성"이라고도 지칭될 수 있다
316 스캔 리턴 배리어; 스캔 리턴 배리어는 예를 들어 프레임 리턴 어드레스를 하이재킹함으로써 구현될 수 있다, 즉, 실시 예는 리턴 어드레스를 저장하고, 프레임에서 이를 예를 들어 스택 스캐닝을 수행하는 GC 스캔 리턴 배리어 코드의 어드레스로 대체하고, 스캔 리턴 배리어 코드가 완료되면 프레임으로부터 자체 어드레스를 제거하고 복원된 리턴 어드레스에 따라 제어가 이전되게 한다; 로그(log)나 업데이트 또는 둘 다 스캔 리턴 배리어 코드에 의해 또한 행해질 수 있지만, 스캔 리턴 배리어 동작은 쓰기를 가로막기(intercept) 위해, 예를 들어 무엇이 쓰여지고 있고 어디에 쓰여지는지 로그하기 위해 주로 작동하는 쓰기 배리어와 대조되며, 또한 예를 들어 쓰레드가 변수 값을 읽기 전에 변수를 업데이트하기를 원할 때 읽기를 가로막기 위해 주로 작동하는 읽기 배리어와 대조된다
318 설치된 스캔 리턴 배리어의 스택 깊이; 달리 명시되지 않는 한, 본 명세서에서 "스캔 깊이"는 실제 스캔 깊이(308)와 반대로 이 예측된 스캔 깊이(318)를 지칭한다
320 관심 기간
322 다른 소프트웨어(특히 뮤테이터 소프트웨어)의 실행과 (특히 스택 스캐닝을 포함하는) GC 실행의 동시성
324 스택 전체(full) 깊이, 예를 들어 스캔 리턴 배리어 위의 프레임을 포함하고 스캔 리턴 배리어 아래의 프레임을 또한 포함하는 주어진 스택 내의 총 프레임 수
326 예를 들어 특정 시점에서의 스택에 관한 데이터를 포함하는 실행 샘플
328 스택 성장 방향; 편의상, 청구항을 포함하는 본 명세서에서의 논의는 스택의 맨 위 또는 그 부근에서 가장 최근 프레임과 스택 맨 아래 또는 그 부근에서 가장 오래된 프레임과 함께 메모리에서 위쪽으로 성장하는 스택에 대해 표현되지만, 숙련된 사람은 스택이 아래쪽으로 성장한다는 점에서 일부 스택 구현은 반대임을 인식할 것이다; 여기의 교시는 어떤 방향으로든(예를 들어, 위쪽, 아래쪽 또는 옆으로) 성장하는 스택에 적용된다
330 예를 들어 처리 제어를 리턴 어드레스에 위치된 명령어들로 이전하는 프레임 리턴 동작
400 동시성 강화 기능을 갖춘 시스템
402 BDSSO 소프트웨어, 예를 들어 방법(700) 또는 방법(800)을 수행하거나 그렇지 않으면 뮤테이터 스택 활동에 기초하여 변하는 스택 깊이에서 스캔 리턴 배리어를 사용하는 소프트웨어
404 프로파일러 툴; "성능 프로파일러" 또는 간단히 "프로파일러"라고도 지칭될 수 있다
406 관리 런타임, 즉 자동 가비지 컬렉션을 사용하여 메모리 관리를 제공하는 런타임
408 관리 런타임에 대한 인터페이스, 예를 들어 API
410 일반적으로 스택 데이터
412 루틴의 완전한 실행 또는 루틴 실행의 완료를 위한 추정 실행 시간
414 루틴을 실행하는 데 소요된 경과 시간
416 루틴, 예를 들어, 함수
418 프레임 실행 확률, 예를 들어 스택 스캐닝 동안 프레임이 실행될 계산된 확률을 나타내는 0에서 1 범위의 부동 소수점 숫자 값
420 프레임 실행 확률 임계값; 예를 들어, 관리자 또는 다른 사용자에 의해 설정되거나 머신 러닝 추론 또는 통계 모델링에 의해 선택될 수 있다
422 실행 스택 스캐너; 현재 목적을 위해 이 스캐너는 가비지 컬렉터(214)의 일부로 간주되지만 다른 상황에서는 GC 코드와 스택 스캐너 코드 사이에 구분될 수 있다
424 프로세서 코어
426 I/O를 허용하는 시스템(400)에 대한 인터페이스를 형성하는 소프트웨어 또는 하드웨어 또는 둘 다
500 프레임 발생 데이터의 양태 또는 특성
502 소프트웨어의 주어진 부분 또는 프로그램 실행의 주어진 부분에 대한 경과된 실행 시간
504 프로세서 또는 프로세서 코어 사이클 카운트
506 예를 들어 인접 프레임 쌍의 위치 간의 차이를 계산함으로써 메모리 소모량 또는 메모리 소모량을 계산할 수 있는 데이터
508 프로그램 실행의 특정 지점에서 프레임 발생 데이터를 포함하는 스냅샷
510 프로그램 실행의 특정 지점; 예를 들어, 가장 최근에 실행된 머신 명령어의 위치로서, 또는 사이클 카운트로서, 또는 프로그램 실행의 다른 측정에 의해 나타낼 수 있다
602 스택의 맨 위
604 스캔 리턴 배리어 위의 프레임
700 흐름도; 700은 또한 도 7의 흐름도에 의해 예시되거나 그와 일치하는 동시성 강화 방법을 지칭한다
702는 스택 프레임 발생 데이터를 획득한다
704는 GC 스택 스캔 동안 스택 프레임이 실행될 가능성을 결정한다
706은 스택 스캔 깊이를 선택한다, 즉, 스캔 리턴 배리어가 설치될 스택에서의 위치를 선택한다.
708은 예를 들어 프레임의 현재 리턴 어드레스를 저장하고 저장된 리턴 어드레스에서의 명령어로 제어를 이전하기 전에 뮤테이터를 중단하고 프레임(들)을 스캔하는 GC 소프트웨어의 어드레스로 이를 대체함으로써 스캔 리턴 배리어를 설치한다
710은 스택 스캔 수행이 뮤테이터 실행과 (적어도 부분적으로) 동시에 행해질 수 있게 한다
800 흐름도; 800은 또한 (도 7의 단계를 통합하는) 도 8의 흐름도에 의해 예시되거나 이와 일치하는 동시성 강화 방법을 지칭한다
802 스택 깊이를 선택하고 예측된 스택 활동에 기초하여 스캔 리턴 배리어를 설치함으로써 스택 스캐닝 동시성을 최적화한다
804 동시에 실행한다, 예를 들어, 뮤테이터 및 스택 스캐너를 동시에 실행한다
806 스택 데이터를 수집(gather)한다.
808은 예를 들어 관리 런타임 인터페이스(408)와의 상호 작용을 통해 관리 런타임을 활용한다
810 실행 샘플을 생성한다
812 실행 샘플을 컴퓨터를 사용하여 분석한다
814 2개 이상의 쓰레드에 대해 쓰레드별로 동시성 강화 단계를 수행한다
816 프로그램 간에 선택된 스캔 깊이(즉, 스캔 리턴 배리어 위치)를 변경하거나 이러한 변화를 초래하는 명령어들을 수행한다
818 주어진 프로그램의 실행 간에 선택된 스캔 깊이(즉, 스캔 리턴 배리어 위치)를 변경하거나 그러한 변경을 초래하는 명령어들을 수행한다; 프로그램 간의 스캔 깊이를 변경하거나(816) 주어진 프로그램의 실행 간에 스캔 깊이를 변경하는 것(818) 외에, 일부 실시 예에서 각 쓰레드에 대한 스캔 깊이가 결정되고 단일 프로그램의 단일 실행 과정에 걸쳐 조정된다
820 스캔 리턴 배리어 위치를 선택할 때(706) 프로파일링된 성능 데이터에 대한 의존을 피한다
822 스택의 스냅샷에서 프레임을 기록한다(tally)
824 루틴의 경과된 부분 실행 시간을 추정된 총 실행 시간과 비교하거나 루틴 완료까지의 추정 시간을 사용한다
826 규칙적인 간격으로 실행 스택을 샘플링한다; 이것은 예를 들어 Microsoft Windows® 환경에서 ETW(Event Tracing for Windows)을 사용하거나 Linux® 환경에서 perf를 사용하거나 런타임에 구애받지 않는 기타 툴을 사용하는 샘플링과 같이 운영 체제 수준 샘플링을 사용하여 행해지거나, 샘플링이 예를 들어 Java® 또는 기타 가상 머신을 통한 특정 런타임을 통해 이루어질 수 있다(각각 마이크로소프트사(Microsoft Corporation), 리누스 토발즈(Linus Torvalds), 오라클(Oracle America Inc.)의 상표임)
828 설치된 스캔 리턴 배리어를 예를 들어, 배리어가 교체한 리턴 어드레스로 교체함으로써 제거한다
830 프레임 실행 확률을 확률 임계값과 비교한다
832 소프트웨어를 실행한다; 여기에 제공된 소프트웨어 실행의 특정 예뿐만 아니라 일반적으로 실행을 지칭한다
834 예를 들어, 가비지 컬렉션의 올스탑 부분 동안 소프트웨어 실행을 중단한다
836 예를 들어 리턴 어드레스 이전에 남아 있는 명령어의 수 또는 루틴의 실행 시간(502) 측정 이력을 기반으로 루틴 실행을 완료하기 위한 추정 완료 시간을 얻는다
838 다른 참조 번호가 지정되지 않은 본 개시에서 논의된 임의의 단계
운영 환경
도 1을 참조하면, 실시 예에 대한 운영 환경(100)은 적어도 하나의 컴퓨터 시스템(102)을 포함한다. 컴퓨터 시스템(102)은 멀티프로세서 컴퓨터 시스템일 수도 있고 아닐 수도 있다. 운영 환경은 클라우드 내에서 클러스터링되거나, 클라이언트-서버 네트워킹되고/되거나 피어-투-피어 네트워킹될 수 있는, 주어진 컴퓨터 시스템 내의 하나 이상의 머신을 포함할 수 있다. 개별 머신은 컴퓨터 시스템이고, 협력하는 머신 그룹도 또한 컴퓨터 시스템이다. 주어진 컴퓨터 시스템(102)은 최종 사용자를 위해, 예를 들어 애플리케이션을 사용하여, 관리자를 위해, 서버로서, 분산 처리 노드로서, 및/또는 다른 방식으로 구성될 수 있다.
인간 사용자(104)는 타이핑된 텍스트, 터치, 음성, 움직임, 컴퓨터 비전, 제스처 및/또는 다른 형태의 I/O를 통해 디스플레이, 키보드 및 기타 주변기기(106)를 사용함으로써 컴퓨터 시스템(102)과 상호작용할 수 있다. 스크린(126)은 이동식 주변기기(106)일 수 있거나 시스템(102)의 통합 부분일 수 있다. 사용자 인터페이스는 실시 예와 하나 이상의 인간 사용자 간의 상호 작용을 지원할 수 있다. 사용자 인터페이스는 커맨드 라인 인터페이스, GUI(graphical user interface), NUI(natural user interface), 음성 커맨드 인터페이스 및/또는 다른 사용자 인터페이스(user interface, UI) 제공 방식을 포함할 수 있으며, 이는 별개의 옵션으로 제공되거나 통합될 수 있다.
시스템 관리자, 네트워크 관리자, 클라우드 관리자, 보안 분석가 및 기타 보안 담당자, 운영 담당자, 개발자, 테스터, 엔지니어, 감사자 및 최종 사용자는 각각 특정 타입의 사용자(104)이다. 한 명 이상의 사람을 대신하여 행동하는 자동화된 에이전트, 스크립트, 재생(playback) 소프트웨어, 디바이스 등은 예를 들어 시스템(102)의 테스트를 용이하게 하기 위해 사용자(104)가 될 수도 있다. 저장 디바이스 및/또는 네트워킹 디바이스는 프로세서(110)로부터의 분리 가능성에 따라 일부 실시 예에서 주변기기 장비 및 다른 실시 예에서 시스템(102)의 일부로 간주될 수 있다. 도 1에 도시되지 않은 다른 컴퓨터 시스템은 예를 들어 네트워크 인터페이스 장비를 통해 네트워크(108)로의 하나 이상의 연결을 사용하여 컴퓨터 시스템(102) 또는 다른 시스템 실시 예와 기술적 방식으로 상호 작용할 수 있다.
각각의 컴퓨터 시스템(102)은 적어도 하나의 프로세서(110)를 포함한다. 다른 적절한 시스템과 마찬가지로, 컴퓨터 시스템(102)은 또한 하나 이상의 컴퓨터 판독 가능 저장 매체(112)를 포함한다. 저장 매체(112)는 상이한 물리적 타입일 수 있다. 저장 매체(112)는 휘발성 메모리, 비휘발성 메모리, 고정 매체(fixed in place media), 이동식 매체, 자기 매체, 광학 매체, 솔리드-스테이트 매체, 및/또는 (단순히 전파 신호 또는 단순한 에너지와 반대되는) 다른 타입의 물리적 내구성 저장 매체일 수 있다. 특히, 휴대용(즉, 외부) 하드 드라이브, CD, DVD, 메모리 스틱 또는 기타 이동식 비휘발성 메모리 매체와 같은 구성된 저장 매체(114)는 삽입되거나 아니면 설치될 때 기능적으로 컴퓨터 시스템의 기술적 부분이 될 수 있고, 그 내용이 프로세서(110)와 상호 작용하거나 이에 의해 사용되도록 액세스 가능하게 할 수 있다. 이동식 구성된 저장 매체(114)는 컴퓨터 판독 가능 저장 매체(112)의 예이다. 컴퓨터 판독 가능 저장 매체(112)의 일부 다른 예는 내장 RAM, ROM, 하드 디스크 및 사용자(104)가 쉽게 제거할 수 없는 기타 메모리 저장 디바이스를 포함한다. 현재 미국 특허 요구 사항을 준수하기 위해 컴퓨터 판독 가능 매체, 컴퓨터 판독 가능 저장 매체 또는 컴퓨터 판독 가능 메모리 그 어느 것도 미국에서 계류 중이거나 허여된 청구항 하에서 신호 자체 또는 단순한 에너지가 아니다.
저장 매체(114)는 프로세서(110)에 의해 실행가능한 바이너리 명령어(116)로 구성되고; "실행 가능(executable)"은 예를 들어 머신 코드, 해석 가능한 코드, 바이트 코드, 및/또는 가상 머신에서 실행되는 코드를 포함하도록 본 명세서에서 넓은 의미로 사용된다. 저장 매체(114)는 또한 명령어(116)의 실행에 의해 생성, 수정, 참조 및/또는 아니면 기술적 효과를 위해 사용되는 데이터(118)로 구성된다. 명령어들(116) 및 데이터(118)는 이들이 상주한 메모리 또는 다른 저장 매체(114)를 구성한다; 그 메모리 또는 다른 컴퓨터 판독 가능 저장 매체가 주어진 컴퓨터 시스템의 기능적 부분일 때, 명령어들(116) 및 데이터(118)는 또한 그 컴퓨터 시스템을 구성한다. 일부 실시 예에서, 데이터(118)의 일부는 제품 특성, 재고, 물리적 측정, 설정, 이미지, 판독값, 목표, 부피 등과 같은 실세계의 항목을 나타낸다. 이러한 데이터는 또한 백업, 복원, 커밋(commit), 중단(abort), 재포맷 및/또는 기타 기술적 동작에 의해서도 변형된다.
실시 예가 컴퓨팅 디바이스(예를 들어, 범용 컴퓨터, 서버, 또는 클러스터)에서 하나 이상의 프로세서에 의해 실행되는 소프트웨어 명령어들로서 구현되는 것으로 설명될 수 있지만, 그러한 설명은 모든 가능한 실시 예를 철저히 다루는 것을 의미하지는 않는다. 당업자는 동일하거나 유사한 기술적 효과를 제공하기 위해 동일하거나 유사한 기능이 또한 종종 전체 또는 부분적으로 하드웨어 논리에서 직접 구현될 수 있음을 이해할 것이다. 대안적으로 또는 소프트웨어 구현에 추가하여, 여기에 설명된 기술적 기능은 하나 이상의 하드웨어 논리 컴포넌트에 의해 적어도 부분적으로 수행될 수 있다. 예를 들어, 다른 구현을 배제하지 않고, 실시 예는 FPGA(Field-Programmable Gate Array), ASIC(Application-Specific Integrated Circuit), ASSP(Application-Specific Standard Product), SOC(System-on-a-Chip component), CPLD(Complex Programmable Logic Device) 및 유사 컴포넌트와 같은 하드웨어 논리 컴포넌트(110, 128)를 포함할 수 있다. 실시 예의 컴포넌트는 예를 들어 그들의 입력, 출력 및/또는 그들의 기술적 효과에 기초하여 상호 작용하는 기능 모듈 내로 그룹화될 수 있다.
프로세서(110)(예를 들어, CPU, ALU, FPU, 및/또는 GPU), 메모리/저장 매체(112), 및 디스플레이(126)에 더하여, 운영 환경은 또한 예를 들어, 배터리, 버스, 전원, 유선 및 무선 네트워크 인터페이스 카드와 같은 다른 하드웨어(128)를 포함할 수 있다. 명사 "스크린" 및 "디스플레이"는 본 명세서에서 상호 교환적으로 사용된다. 디스플레이(126)는 하나 이상의 터치 스크린, 펜 또는 태블릿으로부터의 입력에 응답하는 스크린, 또는 출력만을 위해 작동하는 스크린을 포함할 수 있다. 일부 실시 예에서 인간 사용자 I/O 디바이스(스크린, 키보드, 마우스, 태블릿, 마이크, 스피커, 모션 센서 등)와 같은 주변기기(106)는 하나 이상의 프로세서(110) 및 메모리와 작동 가능한 통신을 하며 존재할 것이다.
일부 실시 예에서, 시스템은 유선 및/또는 무선 네트워크(108)에 의해 연결된 다수의 컴퓨터를 포함한다. 네트워킹 인터페이스 장비(128)는 패킷 교환 네트워크 인터페이스 카드, 무선 트랜시버, 또는 예를 들어, 주어진 컴퓨터 시스템에 존재할 수 있는 전화 네트워크 인터페이스와 같은 네트워크 컴포넌트를 사용하여 네트워크(108)에 대한 액세스를 제공할 수 있다. 네트워킹 인터페이스 장비 및 스위치, 라우터 또는 방화벽과 같은 기타 네트워크 컴포넌트의 가상화(virtualization)도 예를 들어 소프트웨어 정의 네트워크 또는 샌드박스(sandboxed) 또는 기타 보안 클라우드 컴퓨팅 환경에 존재할 수 있다. 주어진 실시 예는 또한 직접 메모리 액세스, 이동식 비휘발성 저장 매체, 또는 다른 정보 저장-검색 및/또는 전송 접근법을 통해 기술적 데이터 및/또는 기술적 명령어들을 전달할 수 있다.
당업자는 "운영 환경" 하에 본 명세서에 제시된 전술한 양태 및 다른 양태가 주어진 실시 예의 일부를 형성할 수 있음을 이해할 것이다. 이 문서의 제목은 특징을 실시 예 및 비-실시 예 특징 세트로 엄격하게 분류하기 위한 것이 아니다.
하나 이상의 항목이 도면에서 개요 형태로 도시되거나 괄호 안에 나열되어, 이들이 반드시 예시된 운영 환경 또는 모든 실시 예의 일부는 아니지만 운영 환경 또는 본 명세서에 논의된 바와 같은 일부 실시 예에서의 항목과 상호 운용될 수 있음을 강조한다. 윤곽선 또는 괄호 형태가 아닌 항목이 임의의 도면 또는 임의의 실시 예에서 반드시 필요한 것은 아니다. 특히, 도 1은 편의상 제공된다; 도 1에 항목이 포함되어 있다고 해서 항목 또는 항목의 설명된 사용이 현재 혁신 이전에 알려져 있었다는 의미는 아니다.
시스템에 관한 추가 정보
일부 실시 예는 예시적인 시스템(400) 또는 여기에 교시된 바와 같이 강화된 다른 시스템(102)과 같은 동시성 강화 시스템을 사용하거나 제공한다. 동시성 강화 시스템은 프로그램(212)의 실행 스택(204)을 포함한다. 실행 스택은 관심 기간(320)에 걸친 실행 프레임(206)을 포함한다. 동시성 강화 시스템의 메모리(112)는 실행 스택에 의해 구성되고, 메모리(112)는 또한 BDSSO 소프트웨어(402)에 의해 구성된다. 동시성 강화 시스템의 프로세서(110)는 메모리와 통신하여 동작 가능하다. 프로세서(110)는 BDSSO 소프트웨어(402)를 실행하여 (a) 실행 스택 프레임 발생 데이터(304)를 획득하는 단계, (b) 복수의 실행 프레임(206) 각각에 대해 실행 스택 프레임 발생 데이터로부터 각각의 프레임 실행 가능성(314)을 결정하는 단계, (c) 프레임 실행 가능성에 적어도 부분적으로 기초하여 스택 스캔 깊이(318)를 선택 - 선택된 스택 스캔 깊이는 전체 실행 스택의 전체 깊이(324)보다 작음 - 하는 단계, (d) 선택된 스택 스캔 깊이에서 가비지 콜렉션 스캔 리턴 배리어(316)를 설치하는 단계, 및 그 후 (e) 프로그램(212)이 실행되고 있는 동안 트레이싱 가비지 컬렉터(214)가 스캔 리턴 배리어 아래의 실행 스택을 스캔하도록 허용하는 단계를 포함하는 BDSSO 단계를 수행하도록 구성된다. 가비지 컬렉터가 스캔 리턴 배리어 아래의 실행 스택을 스캔하는 동안 프로그램(212)이 가비지 컬렉터(214)와 동시에 실행되기 때문에 프로그램이 스캔 리턴 배리어에 부닥치는 프레임 리턴 동작(330)을 실행하지 않는 한, BDSSO 단계를 수행함으로써 시스템 동시성이 증가된다.
예를 들어, 일부 실시 예에서 리턴 배리어(316) 위의 프레임(206)은 애플리케이션 쓰레드(216)가 중단되는 동안 스캔되지만 스택의 나머지 부분은 애플리케이션(124)이 실행되고 있는 동안 스캔될 수 있다. 멀티쓰레디드 애플리케이션은 뮤테이터 프로그램(212)의 예이다. 리턴 배리어는 실시 예가 스택 변경이 스캔 동안 검출되지 않을 위험을 초래하지 않고 배리어 아래의 스택 부분을 동시에 스캔할 수 있게 한다. 전체 스택은 BDSSO 소프트웨어를 사용하거나 사용하지 않고 스캔될 것이지만 BDSSO를 사용하면 쓰레드(216)가 중단되는 동안 더 적은 스캔이 수행된다.
스택 프레임 발생 데이터를 얻는 한 가지 방법은 기존 프로파일러 샘플을 사용하여 샘플이 이중 작업을 수행하도록 하는 것이다. 따라서, 일부 실시 예는 프로그램(212)의 실행 동안 성능 프로파일러 툴(404)에 의해 생성된 실행 샘플(326)을 포함한다. 프로파일러(404)는 성능 보고를 위한 샘플을 생성하도록 설계되지만, 일부 실시 예에서 BDSSO 소프트웨어(402)는 실행 샘플을 분석함으로써 적어도 부분적으로 실행 스택 프레임 발생 데이터를 획득한다. 특히, 샘플은 리턴 어드레스(312)가 있는 프레임(206)을 포함할 것이다. 그러나 프로파일러 샘플은 가비지 컬렉션 동시성 강화과 달리 프로그램 성능 프로파일링을 위해 설계되었기 때문에, 샘플(326)은 종종 가비지 컬렉션 동시성 강화에 사용되지 않는 성능 데이터, 예를 들어 프로세서 사이클 카운트(504) 또는 다른 실행 시간 측정(502), 및 메모리 소모 데이터(506) 또는 그 컴퓨터 사용 기반을 포함할 것이다.
스택 프레임 발생 데이터(304)를 획득하는 다른 방법은 관리 런타임(406)을 활용하는 것이다. 예를 들어, 일부 실시 예는 JVMTI(Java® Virtual Machine Tool Interface)(Oracle America, Inc.의 상표)를 통해 스택 프레임 데이터(410)를 획득한다. 설계상, 이 인터페이스(408)는 가비지 컬렉션 안전점(306)에서 얻은 프로파일링 샘플을 포함하는 스택 데이터를 얻는 데 사용될 수 있다. 안전점은 프로그램 실행 동안 일정한 간격으로 위치되지 않을 수 있기 때문에 또는 원하는 미세 단위(fine granularity)로 위치되지 않을 수 있기 때문에, 이것은 성능 프로파일링(샘플의 의도된 사용)에 다소 불리할 수 있다. 그러나 안전점에서의 샘플링은 가비지 컬렉션 안전점에서의 스택 동작이 가비지 컬렉터가 스택을 스캔하는 동안 스택의 어느 부분이 안정적으로 유지될 것인지 예측하는 것과 매우 관련이 있기 때문에 본 명세서에서 교시되는 것과 같이 동시성 강화에 실제로 도움이 된다.
따라서, 일부 강화된 동시성 시스템 실시 예는 관리 런타임(406)을 포함하고, BDSSO 소프트웨어(402)는 관리 런타임을 활용하는 가비지 컬렉션 안전점(306)에서 스택 데이터(410)를 수집(806)함으로써 적어도 부분적으로 실행 스택 프레임 발생 데이터(304)를 획득한다.
언급된 바와 같이, 하나의 친숙한 접근법은 적어도 스캔 리턴 배리어의 초기 위치 지정으로서 맨 위 프레임만을 스캐닝하는 동안 뮤테이터(212)를 중단(834)하는 것이었다. 본 명세서의 교시의 이점으로, 이 접근법은 어떤 프로그램(212)이 관련되어 있는지에 관계 없이, 그리고 프로그램의 한 실행으로부터 그 프로그램의 다른 실행까지 프로그램 동작의 임의의 변동에 관계 없이 항상 스택의 제1 프레임 아래에 스캔 리턴 배리어를 설정하는 것으로 볼 수 있다. 대조적으로, 여기에 교시된 일부 실시 예에서, 강화된 시스템은 다음 방식 중 적어도 하나로 고정 깊이 스택 스캐닝 시스템과 상이한 것을 특징으로 한다: 가비지 컬렉션 스캔 리턴 배리어(316)는 실행 스택의 적어도 2개의 프레임 아래에 설치된다; 시스템은 복수의 프로그램(212)을 가지고, 선택된 스택 스캔 깊이(318)는 프로그램 사이에서 변하거나 선택된 스택 스캔 깊이(318)는 주어진 프로그램(212)의 단일 실행 내에서도 주어진 프로그램(212)에 대한 상이한 관심 기간(320) 동안 변한다.
일부 실시 예에서, 강화된 시스템은 다수의 쓰레드를 포함하지 않는 뮤테이터와 GC 스택 스캐닝 사이의 동시성을 개선한다. 그러나, 다른 실시 예는 멀티쓰레디드 프로그램(212)에 본 명세서의 교시를 적용한다. 특히, 일부 실시 예에서, 프로그램(212)을 실행하는 프로세서는 N개의 코어(424)를 가지고, N은 적어도 2이고, 프로그램(212)은 M개의 쓰레드(216)를 가지고 2 <= M <= N이다. 각각의 쓰레드(216)는 각각의 실행 스택(204)을 가지고, BDSSO 소프트웨어(402)는 M개의 쓰레드 각각에 대해 쓰레드 기반(814)으로 BDSSO 단계를 수행한다. 즉, BDSSO 소프트웨어는 가비지 컬렉션된 쓰레드를 대신하여 가비지 컬렉션을 위해 쓰레드당 하나의 스캔 리턴 배리어를 배치하고, 상이한 가비지 컬렉션된 쓰레드는 상이한 각각의 스캔 리턴 배리어 깊이(318)를 가질 수 있다. 주어진 프로그램(212)의 일부 쓰레드는 가비지 컬렉션될 수 있는 반면, 해당 프로그램의 다른 쓰레드는 그렇지 않다.
언급한 바와 같이, 프로파일러 샘플이 선택적 및 적응적 스캔 리턴 배리어 배치에 의한 동시성 강화를 위해 프레임 발생 데이터(304)를 얻기 위해 사용(또는 재사용)될 수 있지만, 일부 실시 예는 또한 프로파일러가 의존하는 것보다 적은 샘플 데이터로도 잘 작동한다. 예를 들어, 일부 실시 예에서, 실행 스택 프레임 발생 데이터(304)는 리턴 어드레스(312)를 포함하고 실행 스택 프레임 발생 데이터(304)는 다음 각각, 즉 경과된 실행 시간을 나타내는 데이터(502), 프로세서 사이클 카운트를 나타내는 데이터(504), 및 메모리 소모량 또는 메모리 소모량의 기본 계산을 나타내는 데이터(506)이 없다. 일부에서, 데이터(502, 504, 506)는 BDSSO 소프트웨어(402)에 이용 가능하지만 프레임 실행 가능성(314)을 결정할 때 또는 스캔 리턴 배리어 위치(318)를 선택할 때 BDSSO 소프트웨어에 의해 의존되거나 BDSSO에 의해 계산되지 않는다. 일부에서, 스택 프레임 발생 데이터(304)는 데이터(502)가 없고 또한 데이터(504)가 없다.
컴퓨팅 하드웨어에 대한 여기서의 광범위한 논의에 의해 알려진 다른 시스템 실시 예도 여기에 직접적으로 또는 설명된 프로세스 또는 구성된 미디어의 시스템 버전으로서 파생 가능하게 설명될 수 있다.
특정 아키텍처 예가 도면에 도시되어 있지만, 실시 예는 이러한 예에서 벗어날 수 있다. 예를 들어, 상이한 도면에 도시된 항목은 실시 예에 함께 포함될 수 있고, 도면에 도시된 항목은 생략될 수 있으며, 상이한 항목에 표시된 기능은 더 적은 수의 항목 또는 단일 항목으로 결합될 수 있으며, 항목의 이름이 변경되거나 항목이 서로 상이하게 연결될 수 있다.
예는 기술의 양태를 설명하는 데 도움이 되도록 본 개시에서 제공되지만, 이 문서 내에 제공된 예는 가능한 모든 실시 예를 설명하지는 않는다. 실시 예는 여기에 제공된 컴포넌트 이름, 최적화, 알고리즘 선택, 샘플(326) 콘텐츠, 스택 구현, 접근법 또는 시나리오의 특정 예에 제한되지 않는다. 주어진 실시 예는 예를 들어 추가적이거나 상이한 기술적 특징, 메커니즘, 시퀀스, 데이터 구조 또는 기능을 포함할 수 있고, 아니면 여기에 제공된 예에서 벗어날 수 있다.
프로세스(일명, 방법)
도 7은 시스템(400) 또는 본 명세서에서 교시된 다른 동시성 강화 시스템과 같은 강화 시스템에 의해 수행되거나 보조될 수 있는 방법들의 예인 방법(700)을 예시한다. 도 8은 시스템(400) 또는 본 명세서에서 교시된 혁신적인 기능을 갖는 다른 시스템의 동작 동안 사용하기에 적합한 동시성 강화 방법(이는 또한 그 단어의 법적 의미에서 "프로세스"로 지칭될 수 있음)을 또한 예시한다. 도 8은 도 7에 도시된 단계에 대한 일부 개선, 보충 또는 상황적 동작을 포함한다. 도 8은 또한 도 7에 도시된 단계를 통합한다. 도면에 도시되거나 달리 개시된 기술적 프로세스는 달리 명시되지 않는 한 예를 들어 강화된 가비지 컬렉터(214)에 의해 자동으로 수행될 것이다. 프로세스는 또한 인간 관리자 또는 다른 인간에 의한 동작이 관련된 범위 내에서 부분적으로 자동으로 부분적으로 수동으로 수행될 수 있다, 예를 들어, 일부 실시 예에서 인간 관리자는 프레임 실행 확률 임계값(420)을 지정할 수 있다. 본 명세서에서 혁신적인 것으로 고려되는 어떤 프로세스도 완전히 수동이 아니다. 주어진 실시 예에서 프로세스의 0개 이상의 예시된 단계가 반복될 수 있으며, 아마도 작동할 상이한 파라미터 또는 데이터가 있을 수 있다. 실시 예의 단계들은 또한 도 7 및 8에 제시된 위에서 아래로의 순서와 상이한 순서로 수행될 수 있다. 단계들은 순차적으로, 부분적으로 겹치는 방식으로, 또는 완전히 병렬로 수행될 수 있다. 특히, 흐름도(700) 동작 항목 또는 흐름도(800) 동작 항목이 트래버스(traverse)되어 프로세스 동안 수행되는 단계를 표시하는 순서는 프로세스의 하나의 수행에서 프로세스의 다른 수행으로 달라질 수 있다. 흐름도 트래버스 순서는 또한 하나의 프로세스 실시 예에서 다른 프로세스 실시 예로 달라질 수 있다. 수행된 프로세스가 작동 가능하고 적어도 하나의 청구항에 일치한다면, 단계가 또한 생략되거나, 결합되거나, 이름이 바뀌거나, 재그룹화되거나, 하나 이상의 머신에서 수행되거나, 그렇지 않으면 예시된 흐름에서 벗어날 수 있다.
일부 실시 예는 다음 단계: 실행 스택에 대한 실행 스택 프레임 발생 데이터를 획득하는 단계(702); 실행 스택 프레임 발생 데이터로부터 복수의 실행 프레임 각각에 대해 각각의 프레임 실행 가능성을 자동으로 결정하는 단계(704); 프레임 실행 가능성에 적어도 부분적으로 기초하여 스택 스캔 깊이를 자동으로 선택 - 선택된 스택 스캔 깊이는 전체 실행 스택의 전체 깊이보다 작음 - 하는 단계(706); 선택된 스택 스캔 깊이에 가비지 컬렉션 스캔 리턴 배리어를 자동으로 설치하는 단계(708); 및 트레이싱 가비지 컬렉터가 선택된 스택 스캔 깊이로만 실행 스택을 스캔하도록(710) 허용하는 단계(302)를 포함하여 가비지 컬렉션을 위한 실행 스택 트레이싱을 최적화하기 위한 동시성 강화 방법을 사용하거나 제공한다. 방법을 수행하지 않고 가비지 컬렉션을 위해 실행 스택을 스캔하는 것과 비교하여 뮤테이터 소프트웨어의 실행(832)과 동시에(804) 발생하는 가비지 컬렉터 스택 스캐닝 소프트웨어의 실행(832) 덕분에 방법을 수행함으로써 동시성이 증가된다(802).
일부 실시 예는 스택 프레임 존재 스냅샷의 창을 사용하여 프레임 실행 가능성을 결정한다. 각각의 스냅샷(508)은 실행 프레임 세트를 포함한다. 스냅샷 분석(812)의 목표는 그 지점 아래의 모든 것이 샘플 세트 사이, 즉 스냅샷 사이에서 변경되지 않고(또는 주로 변경되지 않고) 유지되는 스택에서 위치(318)를 찾는 것이다. 일부 실시 예에서, 실행 스택 프레임 발생 데이터(304)는 프로그램(212)의 실행 동안 상이한 지점(510)에 대한 스택 프레임 스냅샷(508)을 포함하고, 프레임 실행 가능성(314)을 결정하는 단계(704)는 특정 세트의 실행 프레임이 스택 프레임 스냅샷 세트에서 발생하는 횟수를 기록(tally)하는 단계(822)를 포함한다. 예를 들어, 도 6에 도시된 예에서, 도시된 5개의 스냅샷(508)의 프레임(206) 중 일부는 스냅샷 간에 변경되었지만 다른 프레임은 변경되지 않았다. 시간은 도 6에서 왼쪽에서 오른쪽으로 진행된다. 이 예에서, 스캔 배리어 깊이(318)는 변화를 나타낸 모든 프레임(604) 아래, 불변의 프레임(206) 바로 위에 설정된다.
보다 일반적으로, 일부 실시 예에서 프레임 F가 마지막 N개의 샘플 모두에 나타나지 않으면, 실시 예는 뮤테이터 실행과 동시에 프레임 F를 스캔하려고 시도하지 않는다. 도 6의 예에서 맨 오른쪽(가장 최근) 스택의 맨 위 4개 프레임은 마지막 5개(N = 5) 샘플(스냅샷) 모두에는 나타나지 않으므로 이 4개 프레임은 동시 스캐닝 컷오프(318) 위에 있다. 컷오프 깊이(318) 아래의 프레임은 마지막 5개 스냅샷에 모두 나타나고 가비지 컬렉터는 그에 따라 5개의 샘플링된 스택(204)을 생성한 뮤테이터와 동시에 실행하면서 그들을 스캔하려고 시도할 것이다.
일부 실시 예에서, 프레임 실행 가능성을 결정하는(704) 다른 방법은 추정된 루틴 실행 길이 데이터를 사용한다. 일부에서, 프레임 실행 가능성을 결정(704)하는 것은 루틴(416)의 부분적 실행을 위한 경과된 실행 시간(414)을 루틴의 완전한 실행을 위한 추정 실행 시간과 비교하는 단계(824), 또는 루틴 실행을 완료하기 위한 추정 완료 시간(412)을 얻는 단계(836) 중 적어도 하나를 포함한다.
일부 실시 예에서, 스택 프레임 발생 데이터를 획득하는(702) 한 가지 방법은 프로그램 실행 동안 실행 스택을 주기적으로 샘플링(826)하는 것이다. 다른 실시 예는 의사랜덤 간격으로 샘플링 또는 다른 비주기적 샘플링을 수행할 수 있다.
여기에 교시된 동시성 강화의 이점은 프로그램(212)이 맨 위 몇 프레임에서 대부분의 활동을 갖는 딥 스택(204)을 가질 때 특히 클 수 있다. 예를 들어, 일부 실시 예에서, 실행 스택 프레임 발생 데이터(304)는 프로그램(212)의 실행 동안 상이한 지점에 대한 스택 프레임 스냅샷(508)을 포함하고, 스냅샷의 대부분은 각각이 적어도 100개의 프레임(206)의 스택 깊이(324)를 나타내지만, 선택된 스택 스캔 깊이(318)는 10보다 작고 1보다 크다.
일부 실시 예에서, 프레임 실행 가능성을 결정하고(704) 스택 스캔 깊이를 선택하는(706) 단계는 판독 없이, 그렇지 않으면 임의의 스택 프레임에 대한 경과된 실행 시간을 나타내는 데이터(502), 임의의 스택 프레임에 대한 프로세서 사이클 카운트를 나타내는 데이터(504), 또는 임의의 스택 프레임에 대한 메모리 소모량을 나타내는 데이터(506) 중 임의의 것에 의존 없이(820) 수행된다.
일부 실시 예에서, 실행 스택 프레임 발생 데이터를 획득하는 단계(702)는 프로파일러 툴에 의해 생성된 실행 샘플을 획득하는 단계를 포함한다. 일부에서, 실행 스택 프레임 발생 데이터를 획득하는 단계(702)는 가비지 컬렉션 안전점에서 프로파일링을 위해 관리 런타임을 활용하는 단계(808)를 포함한다.
일부 실시 예에서, 방법은 스택 샘플이 프레임의 순환(recurring) 세트를 갖는 적어도 하나의 쓰레드를 발견한다. 특히, 뮤테이터 소프트웨어는 애플리케이션 프로그램(124)을 포함하고, 방법은 애플리케이션 프로그램의 적어도 두 개의 쓰레드에 대해 쓰레드 단위로 각각의 쓰레드(216)의 복수의 실행 스택 각각으로 적어도 획득(702), 결정(704), 선택(706), 및 설치(708)를 수행하는 단계를 포함한다.
구성된 저장 매체
일부 실시 예는 구성된 컴퓨터 판독 가능 저장 매체(112)를 포함한다. 저장 매체(112)는 디스크(자기, 광학, 또는 기타), RAM, EEPROM 또는 기타 ROM, 및/또는 특히 컴퓨터 판독 가능 저장 매체(단순한 전파 신호가 아님)를 포함하는 기타 구성 가능한 메모리를 포함할 수 있다. 구성되는 저장 매체는 특히 CD, DVD 또는 플래시 메모리와 같은 이동식 저장 매체(114)일 수 있다. 이동식이거나 이동식이 아닐 수 있고, 휘발성이거나 휘발성이 아닐 수 있는 범용 메모리는 구성된 저장 매체를 형성하기 위하여 이동식 저장 매체(114) 및/또는 네트워크 연결과 같은 다른 소스로부터 판독된 데이터(118) 및 명령어들(116)의 형태로, 프레임 발생 데이터(304), 스캔 리턴 배리어 깊이(318), 실행 가능성(314) 및 BDSSO 소프트웨어(402)와 같은 항목을 사용하는 실시 예 내로 구성될 수 있다. 구성된 저장 매체(112)는 컴퓨터 시스템(102)이 본 명세서에 개시된 바와 같이 동시성 강화를 위한 기술적 프로세스 단계를 수행하게 할 수 있다. 따라서 도면은 구성된 저장 매체 실시 예 및 프로세스(일명 방법) 실시 예, 뿐만 아니라 시스템 및 프로세스 실시 예를 예시하는 데 도움이 된다. 특히, 도 7 또는 8에 예시된, 또는 달리 본 명세서에서 교시된 임의의 프로세스 단계는 저장 매체가 구성된 저장 매체 실시 예를 형성하도록 구성하는 것을 돕기 위해 사용될 수 있다.
일부 실시 예는 적어도 하나의 프로세서(110)에 의한 실행 시 컴퓨팅 시스템이 가비지 컬렉션을 위한 실행 스택 트레이싱을 최적화하는 동시성 강화 방법을 수행하게 하는, 데이터(118) 및 명령어들(116)로 구성된 컴퓨터 판독 가능 저장 매체(112, 114)를 사용하거나 제공한다. 이 방법은 프로그램의 실행 스택에 대한 실행 스택 프레임 발생 데이터를 획득하는 단계(702); 실행 스택 프레임 발생 데이터로부터 복수의 실행 프레임 각각에 대해 각각의 프레임 실행 가능성을 자동으로 결정하는 단계(704); 프레임 실행 가능성에 적어도 부분적으로 기초하여 스택 스캔 깊이를 자동으로 선택 - 선택된 스택 스캔 깊이는 전체 실행 스택의 전체 깊이보다 작음 - 하는 단계(706); 선택된 스택 스캔 깊이에 가비지 컬렉션 스캔 리턴 배리어를 자동으로 설치하는 단계(708); 및 트레이싱 가비지 컬렉터가 선택된 스택 스캔 깊이까지만 실행 스택을 스캔하도록 허용하는 단계(710)를 포함하고, 이에 의해 방법을 수행함으로써 프로그램 실행과 가비지 컬렉션 스택 스캐닝의 동시성이 증가된다(802).
일부 실시 예에서, 프로그램(212)은 실행(832) 동안 스캔 리턴 배리어에 부닥치고, 이 방법은 스캔 복귀 배리어를 제거하는 단계(828), 상이한 스택 스캔 깊이(예를 들어, 스택 아래로 하나 더)를 자동으로 선택하는 단계(706), 상이한 스택 스캔 깊이에 스캔 리턴 배리어를 자동으로 설치하는 단계(708)를 더 포함한다. 한 프레임 더 깊은 깊이를 선택하는 대신에, 일부 실시 예에서는 하나의 K 프레임 더 깊게 선택하고, K는 관리자에 의해 설정되거나 K는 예를 들어 제거된 깊이의 잘린 부분으로서 동적으로 결정될 수 있고, 예를 들어 제거된 깊이를 4로 나눈 값보다 크거나 같은 다음 정수로 K를 설정한다.
일부 실시 예에서, 실행 스택은 프로그램(212)의 쓰레드에 대응하고, 방법은 쓰레드의 실행 동안 상이한 시간에 상이한 스택 스캔 깊이(318)로 선택(706) 및 설치(708)를 반복하지만, 매번 가비지 컬렉션 스캔 리턴 배리어는 실행 스택의 최소 두 프레임 아래에 설치된다. 이들 실시 예 중 일부에서, 실행 스택 프레임 발생 데이터(304)는 프로그램의 실행 동안 상이한 지점에 대한 스택 프레임 스냅샷(508)을 포함하고, 스냅샷의 적어도 80%는 각각 적어도 80 프레임의 스택 깊이를 나타내고, 선택된 스택 스캔 깊이는 9보다 작다.
일부 실시 예에서, 프레임 실행 가능성을 결정하는 단계(704)는 프레임 실행 확률(418)을 프레임 실행 확률 임계값(420)과 비교하는 단계(830)를 포함한다. 예를 들어, 프레임 F가 가장 최근의 10개의 스택 스냅샷 중 4개에 나타나면 프레임의 확률(418)은 0.4로 계산되고, 프레임 아래에 스캔 리턴 배리어를 배치하기 위한 임계값(420)이 0.2로 설정되면 0.4와 0.2를 비교하면 프레임 F를 실행 스택의 동시 스캐닝 하부 부분에 포함시키기에 너무 높은 LikelyToChange의 가능성(314)을 초래한다.
추가 예 및 관찰
당업자는 본 개시의 모든 부분 또는 그 안의 특정 세부사항이 실시가능성, 서면 설명 또는 베스트 모드와 같은 법적 기준을 충족하는 데 반드시 필요한 것은 아니라는 것을 인식할 것이다. 또한, 실시 예는 특정 네트워크, 프로토콜, 툴, 식별자, 필드, 데이터 구조, 함수 또는 기타 구현 선택으로 제한되지 않는다. 본 혁신의 소유자라 할지라도 다른 특허 개시와 명백한 충돌은 이 특허 개시에 제시된 청구항을 해석하는 데 아무런 역할을 하지 않는다. 본 개시의 모든 부분에 속하는 이러한 이해와 함께, 일부 추가 예 및 관찰이 제공된다.
여기에 제공된 교시의 이점으로, 당업자는 가비지 컬렉션을 다양한 특성화에 따라 볼 수 있다. 예를 들어 스택 트레이싱, 더 짧은 STW 시간을 가진 낮은 레이턴시, 동시 스택 스캐닝 및 더 나은 뮤테이터 응답성을 위한 뮤테이터 실행, STW 동안 고정 카운트 프레임 스캐닝, 실제 스택 활동을 기반으로 하는 동적 카운트 프레임 스캐닝 및 기타 특성은 친숙한 가비지 컬렉터 또는 혁신적인 가비지 컬렉터 또는 경우에 따라 둘 다에서 식별될 수 있다. 특히, 당업자는 주어진 구현이 일부 양태에서 또는 일부 시간에 본 명세서의 새로운 교시에 따라 동작할 수 있고 또한 다른 양태에서 또는 다른 시간에 친숙한 방식으로 동작할 수 있음을 인식할 것이다.
일부 실시 예는 동시 가비지 컬렉션을 위한 지능형 부분 스택 스캐닝을 제공하거나 사용한다. 문맥상, 트레이싱 가비지 컬렉터(214)는 어떤 것이 도달할 수 있는지(따라서 어떤 것이 도달할 수 없고 가비지로 처리될 수 있는지)를 결정하기 위해 객체의 그래프를 워킹함으로써 작동한다. 트레이싱 컬렉터는 루트 세트로 그들의 마킹 프로세스를 시작한 다음, 그들의 참조(reference)의 전이 클로저(transitive closure)를 트래버스한다. 루트는 도달 가능한 것으로 간주되는 객체이다. 루트 ID는 실행 스택을 포함한 몇 가지 장소에서 가져온다. 실세계 프로그램의 스택은 트래버스할 활성화 프레임(206)이 많기 때문에 상당히 깊을 수 있기 때문에 루트에 대한 스택을 스캔하는 것은 비용이 많이 들 수 있다. 동시 가비지 컬렉터는 애플리케이션 쓰레드가 휴지(pause)되어야 하는 시간을 최소화하려고 하므로, 스택 스캐닝에 걸리는 시간양을 줄이는 것이 그들에게 중요하다.
동시 스택 스캐닝에 대한 일부 완화 접근법은 올스탑(STW) 휴지에서 실행 프레임(맨 위 프레임)만을 스캔한 다음, 앱(124)이 재개되도록 한다. 이러한 접근법은 앱이 이전 프레임으로 돌아가려고 하면 시스템이 STW에 다시 들어가도록 스택 배리어를 설정할 수 있다. 일부 완화 접근법은 실행 프레임만 스캔하지만, 뮤테이터 쓰레드가 스캔되지 않은 프레임으로 이동하려고 할 때 사용자 코드를 다시 실행하기 전에 해당 프레임에 대한 마킹 작업을 수행함으로써 그 뮤테이터 쓰레드가 GC를 돕도록 한다. 일부 완화 접근법은 스택을 고정 크기 섹션으로 나누고 한 번에 한 섹션을 스캔한다. 이러한 완화 접근법이 공유하는 한 가지는 최근 스택 활동이나 과거 스택 활동의 임의의 사용을 고려하지 않고 STW에서 모든, 하나 또는 일부 다른 소정의 수의 프레임을 스캔하여 뮤테이터가 스택 스캐닝 동안 들어가려고 시도할 프레임을 예측하려고 시도한다는 것이다.
대조적으로, 여기에 제시된 일부 실시 예는 스캔 리턴 배리어 깊이를 동적으로 선택하는 형태로 이러한 예측을 수행함으로써 동시 스택 스캐닝을 기반으로 한다. GC가 미리 STW에서 스캔할 스택의 양을 미리 결정하는 대신, 일부 실시 예는 추측(guess)(318)을 하는 데 소비된 리소스와 가능한 증가된 동시성의 균형을 맞추는 지능적 추측을 하기 위해 샘플링 정보를 사용함으로써 동적으로 조정할 것이다.
예를 들어, 실행 중인 프로세스에서 실행 스택을 주기적으로 샘플링함으로써 일부 실시 예는 이러한 추측(318)을 알리는 일부 패턴을 고를 수 있다(pick up). 예를 들어 샘플링이 쓰레드가 매우 깊은 스택(수백 프레임)을 가진 실행 패턴을 보여주지만, 맨 위 6개 프레임만 샘플 간에 변하고 있다고 가정한다. 이 패턴을 충분히 오랜 시간(예를 들어, 연속 4개의 스냅샷) 동안 본 후, 강화된 시스템은 다가오는 GC에서 7번째 프레임에서 리턴해야 할 확률이 낮기 때문에 해당 깊이를 리턴 배리어를 설정하고 해당 깊이 아래에서 동시 스캔을 수행하기에 좋은 장소로 만든다고 추론한다.
추측이 정확한 것으로 판명되면, 강화된 시스템은 뮤테이터 쓰레드가 스캐닝 관련 지연을 겪을 가능성을 감소시키면서 동시 스택 스캐닝의 이점을 얻을 것이다. 추측이 정확하지 않은 것으로 판명되고 스택 스캔 중에 함수가 정말 스택 배리어에 부닥치면, 강화된 시스템이 추측을 다시 시도하거나 스택 배리어과 함께 사용되는 기존 완화 접근법을 사용할 수 있다.
당업자는 여기에 설명된 실시 예가 다른 접근법에 비해 다양한 기술적 이점을 가질 수 있음을 이해할 것이다. 예를 들어, 부분 스택 스캐닝을 위한 일부 기존 솔루션은 애플리케이션 쓰레드가 중지된 동안 스캔할 스택의 양에 대한 사전 결정된 개념을 사용한다. 이 모든 것에 적용되는(one-size-fits-all) 접근법은 비효율성을 초래할 수 있다. 예를 들어 GC가 휴지 중에 쓰레드가 그 시간 동안 리턴한 것보다 더 많은 프레임을 스캔할 때 GC가 쓰레드의 휴지 시간을 불필요하게 연장할 것이다. GC 스캐너(422)가 휴지 동안 너무 적은 수의 프레임을 스캔하도록 선택했다면, 쓰레드는 휴지 후에 스택 배리어에 부딪힐 수 있고 GC와 더 많은 대기 및 더 많은 조정을 수행해야 할 수 있다. 여기에 제시된 일부 실시 예는 프로그램 동작에 기초하여 런타임에 비동시적으로 스캔된 프레임의 수를 결정함으로써 이러한 불리한 결과 모두를 방지한다.
일부 추가 조합 및 변형
코드, 데이터 구조, 논리, 컴포넌트, 통신 및/또는 이들의 기능적 등가물의 이러한 조합은 위에서 설명된 시스템 및 이들의 변형 중 임의의 것과도 조합될 수 있다. 프로세스는 작동 가능한 임의의 부분집합 또는 조합 또는 시퀀스로 여기에 설명된 임의의 단계를 포함할 수 있다. 각 변형은 단독으로 발생하거나 하나 이상의 다른 변형과 조합하여 발생할 수 있다. 각 변형은 프로세스 중 임의의 것에서 발생할 수 있으며 각 프로세스는 하나 이상의 다른 프로세스와 결합될 수 있다. 변형을 포함하는 각 프로세스 또는 프로세스의 조합은 위에 설명된 구성된 저장 매체 조합 및 변형 중 임의의 것과 결합될 수 있다.
결론
요컨대, 컴퓨팅 시스템(102)에서 메모리(112)를 회수하기 위한 가비지 컬렉션(GC)은 그들의 실행 스택(204)을 스캔(302)하기 위하여 때때로 애플리케이션(124), 웹 서비스 및 기타 뮤테이터 프로그램(212)을 중단하고, 이는 그들의 응답성을 감소시킨다. 그러나 중단 시간은 GC 스택 스캐닝과 함께 뮤테이터(212) 실행(832)의 동시성(322)을 증가시키는 BDSSO 소프트웨어(402)와 같은 BDSSO 기능에 의해 감소된다(802). BDSSO는 실행 스택 프레임 발생 데이터(304)를 획득하고(702), 프레임 실행 가능성(314)을 결정하고(704), 가능성에 기초하여 스택 스캔 깊이(318)를 선택하고(706), 선택된 깊이(318)에 스캔 리턴 배리어(316)를 설치한다(708). 그 후 뮤테이터(212)가 실행하는(832) 동안 배리어(316) 아래의 실행 스택(204)을 GC(214)가 스캔하고(302), 따라서 동시성(322)이 증가하고(802) 뮤테이터(212) 응답성이 개선된다(802). 고정 깊이 또는 균일하게 이격된 깊이의 고정 세트와 같은 배리어 배치에 대한 융통성 없는 접근법을 사용하는 대신 최적화된(802) 동시성을 제공하기 위하여, 선택된(706) 배리어 위치(318)는 실제 스택(204) 활동에 따라 변경(816, 818)된다. 기존 프로파일러(404) 샘플(326) 또는 가상 머신 인터페이스(408)는 BDSSO에 의해 재사용될 수 있다. 실행 시간(502), 사이클 카운트(504) 또는 사용된 메모리(506)와 같은 프로파일러 성능 데이터가 부족한 스키니 샘플(326)은 또한 BDSSO에 사용될 수 있으며, 이는 샘플(326)에 의해 소비되는 프로세서(110) 사용 및 메모리(112)의 면에서 샘플링이 비용이 덜 들게 한다. 여기에 제공된 교시는 클라우드, 서버, 워크스테이션 또는 다른 곳에서의 컴퓨팅 시스템(102)에 적용될 수 있으며, 이에 의해 애플리케이션 소프트웨어 응답성을 개선하고 자동 메모리 회수를 지원하는 분명한 동시성 강화를 제공할 수 있다.
실시 예는 그 자체가 또한 GDPR(General Data Protection Regulation)과 같은 테스트된 적절한 보안 제어 및 프라이버시 제어를 포함하거나 그로부터 이익을 얻는 것으로 이해된다. 예를 들어 가비지 컬렉션 소프트웨어로의 멀웨어의 주입 또는 활성화를 통하여 컴퓨팅 시스템의 오용을 방지하는데 도움이 되도록 적절한 조치가 취해져야 한다고 이해된다. 여기에 교시된 툴 및 기법의 사용은 이러한 제어의 사용과 호환된다.
비록 마이크로소프트 기술이 동기를 부여하는 일부 예에서 사용되지만, 여기의 교시는 마이크로소프트에 의해 제공되거나 관리되는 기술에서의 사용으로 제한되지 않는다. 예를 들어, 적절한 라이선스 하에 본 교시는 다른 클라우드 서비스 제공자가 제공하는 소프트웨어 또는 서비스로 구현될 수 있다.
특정 실시 예가 프로세스로서, 구성된 저장 매체로서, 또는 시스템으로서 본 명세서에서 명시적으로 예시되고 설명되지만, 한 타입의 실시 예에 대한 논의는 일반적으로 다른 실시 예 타입으로 확장된다는 것이 이해될 것이다. 예를 들어, 도 7 및 8과 관련된 프로세스의 설명은 구성된 저장 매체를 설명하는 데 또한 도움이 되며, 다른 도면과 관련하여 논의된 것과 같은 시스템 및 제품(manufactures)의 기술적 효과 및 작동을 설명하는 데 도움이 된다. 한 실시 예의 제한 사항이 반드시 다른 실시 예로 읽혀지는 것은 아니다. 특히, 프로세스는 구성된 메모리와 같은 시스템 또는 제품을 논의하지만, 제시된 데이터 구조 및 배열에 반드시 제한되지는 않는다.
당업자는 구현 세부 사항이 특정 임계값, 비교, 샘플 필드, 특정 종류의 런타임 또는 프로그래밍 언어 또는 아키텍처, 및 특정 컴퓨팅 환경과 같은 특정 코드와 관련될 수 있으므로 모든 실시 예에 나타날 필요는 없음을 이해할 것이다. 당업자는 또한 세부 사항을 논의하는 데 사용되는 프로그램 식별자 및 일부 다른 용어가 구현에 따라 다르므로 모든 실시 예에 관련될 필요가 없다는 것을 이해할 것이다. 그럼에도 불구하고, 그것들이 반드시 여기에 있을 필요는 없지만, 그러한 세부사항은 컨텍스트를 제공함으로써 일부 독자에게 도움이 될 수 있고/있거나 여기에 논의된 기술의 많은 가능한 구현 중 약간을 설명할 수 있다.
특허청구되거나 특허청구 가능한 모든 실시 예를 예시하지만 포괄적이지 않은 기술적 프로세스, 기술적 효과, 기술적 메커니즘 및 기술적 세부사항을 포함하여 여기에 제공된 항목에 상당한 주의를 기울이면, 당업자는 본 개시 및 여기에 설명된 실시 예가 기술 분야 밖의 주제(subject matter) 또는 주된 또는 원래의 원인이나 동기와 같은 그 자체에 대한 아이디어, 또는 단순한 결과 자체, 또는 정신적 과정이나 정신적 단계, 또는 비즈니스 방법이나 널리 퍼진 경제 관행, 또는 인간 활동을 조직하는 단순한 방법, 또는 자연 법칙 그 자체, 또는 자연적으로 발생하는 사물이나 과정, 또는 생물이나 생물의 일부, 또는 수학적 공식 자체, 또는 격리된 소프트웨어 자체, 또는 단순히 기존의 컴퓨터, 또는 완전히 지각할 수 없는 모든 것 또는 추상적인 아이디어 자체, 또는 중요하지 않은 사후 솔루션 활동, 또는 명시되지 않은 장치에서 완전히 구현된 임의의 방법, 또는 유용하고 구체적인 결과를 생성하지 못하는 임의의 방법, 또는 모든 사용 분야의 임의의 선점(preemption), 또는 특허 보호를 구하거나 실시권을 받거나 시행되고 있는 관할 구역의 법률에 따라 특허 보호에 부적합한 임의의 다른 대상에 관한 것이 아니라는 것을 이해할 것이다.
본 명세서에서 일부 특징 X를 갖는 실시 예에 대한 언급 및 일부 특징 Y를 갖는 실시 예에 대한 본 명세서의 다른 곳에서의 언급은 배제가 여기에 명시적으로 기재되지 않는 한, 특징 X 및 특징 Y 둘 다를 갖는 실시 예를 본 개시로부터 배제하지 않는다. 모든 가능한 부정적인 클레임 제한은 그 특정 배제가 여기의 임의의 예에서 제공되지 않더라도, 실시 예의 일부로 기재된 임의의 특징이 또한 다른 실시 예 내의 포함으로부터 명시적으로 제거될 수 있다는 점에서 본 개시의 범위 내에 있다. "실시 예(embodiment)"라는 용어는 단지 "프로세스, 시스템, 제조 물품, 구성된 컴퓨터 판독 가능 저장 매체, 및/또는 적용 가능한 법률과 일치하는 방식으로 적용되는 본 명세서의 교시의 다른 예"의 보다 편리한 형태로서 본 명세서에서 사용된다. 따라서, 주어진 "실시 예"는 실시 예가 적어도 하나의 청구항과 일치한다면, 여기에 개시된 특징들의 임의의 조합을 포함할 수 있다.
도면에 도시된 모든 항목이 모든 실시 예에 존재할 필요는 없다. 반대로, 실시 예는 도면에 명시적으로 도시되지 않은 항목(들)을 포함할 수 있다. 특정 예에 의해 텍스트 및 도면에 일부 가능성이 예시되어 있지만, 실시 예는 이러한 예에서 벗어날 수 있다. 예를 들어, 예의 특정 기술 효과 또는 기술적 특징은 생략되거나, 이름이 바뀌거나, 상이하게 그룹화되거나, 반복되거나, 하드웨어 및/또는 소프트웨어에서 상이하게 인스턴스화되거나, 둘 이상의 예에 나타나는 효과 또는 특징의 혼합일 수 있다. 한 위치에 도시된 기능은 일부 실시 예에서 상이한 위치에서도 또한 제공될 수 있다; 당업자는 기능 모듈이 전체적으로 볼 때 상호 작용하는 모듈의 컬렉션으로부터 원하는 기술적 효과를 반드시 생략하지 않고 주어진 구현에서 다양한 방식으로 정의될 수 있음을 인식한다. 공간 제한 때문에 또는 편의상 도면의 단일 상자에 별개의 단계들이 함께 표시될 수 있지만 그럼에도 불구하고 개별적으로 수행할 수 있다. 예를 들어 방법의 주어진 수행에서 하나는 다른 하나 없이 수행될 수 있다.
참조 번호에 의해 전체적으로 도면이 참조되었다. 도면 또는 텍스트에서 주어진 참조 번호와 관련된 표현의 명백한 불일치는 단순히 해당 번호에 의해 참조되는 범위를 확장하는 것으로 이해되어야 한다. 동일한 참조 번호가 사용되더라도 주어진 참조 번호의 상이한 예는 상이한 실시 예를 지칭할 수 있다. 유사하게, 주어진 참조 번호는 동사, 명사, 및/또는 각각의 대응하는 인스턴스를 지칭하기 위해 사용될 수 있으며, 예를 들어 프로세서(110)는 명령어를 실행함으로써 명령어를 처리(110)할 수 있다.
본 명세서에서 사용되는 바와 같이, 단수형 용어는 표시된 항목 또는 단계 중 하나 이상을 포함한다. 특히, 청구범위에서 항목(item)에 대한 언급은 일반적으로 적어도 하나의 그러한 항목이 존재함을 의미하고 단계(step)에 대한 언급은 단계의 적어도 하나의 인스턴스가 수행됨을 의미한다. 유사하게, 단수 동사 형태는 문법적 오류 또는 오해를 피하기 위해 문맥이 허용하는 경우 복수 형태의 가능성을 포함하는 것으로 이해되어야 한다.
제목은 편의만을 위한 것이다; 주어진 토픽에 대한 정보는 제목이 그 토픽을 나타내는 섹션 외부에서 찾을 수 있다.
제출된 모든 청구범위 및 요약(abstract)은 명세서의 일부이다.
본 명세서에서 사용된 용어가 산업 표준을 암시하거나 아니면 지칭하는 한, 그리고 적용 가능한 법률이 표준과 같은 특정 버전의 식별을 요구하는 한, 본 개시는 적용 가능한 특허법에 따라 본 개시의 가장 빠른 우선일을 기준으로 최소한 초안 형태(더 최신이라면 최종 형태가 우선함)으로 공개된 해당 표준의 가장 최근 버전을 참조하는 것으로 이해되어야 한다.
예시적인 실시 예가 도면에 도시되고 위에서 설명되었지만, 청구범위에 기재된 원리 및 개념에서 벗어남이 없이 수많은 수정이 이루어질 수 있고 그러한 수정이 전체 추상적 개념을 포함할 필요는 없다는 것이 당업자에게 명백할 것이다. 주제(subject matter)가 구조적 특징 및/또는 절차적 행위에 특유한 언어로 설명되어 있지만, 첨부된 청구범위에 정의된 주제가 반드시 청구범위 위에 설명된 특정 기술적 특징 또는 행위에 제한되지 않는다는 것을 이해해야 한다. 주어진 정의 또는 예에서 식별된 모든 수단 또는 측면 또는 기술적 효과가 모든 실시 예에서 존재하거나 활용될 필요는 없다. 오히려, 설명된 특정 특징 및 행위 및 효과는 청구범위를 구현할 때 고려하기 위한 예로서 개시된다.
전체 추상적인 아이디어를 포괄하지 못하지만 청구범위의 등가의 의미 및 범위(range) 내에 있는 모든 변경 사항은 법이 허용하는 전체 한도까지 해당 범위(scope) 내에 포함되어야 한다.
Claims (15)
- 동시성 강화 시스템에 있어서,
관심 기간(time period of interest)에 걸친 실행 프레임을 포함하는, 프로그램의 실행 스택;
상기 실행 스택에 의해 구성되고 BDSSO(behavior-driven stack scan optimization) 소프트웨어에 의해 또한 구성되는 메모리; 및
상기 메모리와 동작가능하게 통신하는 프로세서를 포함하고,
상기 프로세서는:
(a) 실행 스택 프레임 발생 데이터를 획득하는 단계,
(b) 복수의 실행 프레임 각각에 대해 실행 스택 프레임 발생 데이터로부터 각각의 프레임 실행 가능성을 결정하는 단계,
(c) 프레임 실행 가능성에 적어도 부분적으로 기초하여 스택 스캔 깊이를 선택- 상기 선택된 스택 스캔 깊이는 전체 실행 스택의 전체 깊이보다 작음 - 하는 단계,
(d) 상기 선택된 스택 스캔 깊이에서 가비지 컬렉션 스캔 리턴 배리어를 설치하는 단계, 및 그 후
(e) 상기 프로그램이 실행되고 있는 동안 트레이싱 가비지 컬렉터가 상기 스캔 리턴 배리어 아래의 실행 스택을 스캔하도록 허용하는 단계를 포함하는 BDSSO 단계를 수행하기 위하여 상기 BDSSO 소프트웨어를 실행하도록 구성되고,
이에 의해, 상기 프로그램이 상기 스캔 리턴 배리어에 부닥치는 프레임 리턴 동작을 실행하지 않는 한, 상기 가비지 컬렉터가 상기 스캔 리턴 배리어 아래의 실행 스택을 스캔하는 동안 상기 프로그램이 상기 가비지 컬렉터와 동시에 실행되기 때문에 상기 BDSSO 단계를 수행함으로써 시스템 동시성이 증가되는 것인 동시성 강화 시스템. - 제1항에 있어서, 상기 프로그램의 실행 동안 프로파일러 툴에 의해 생성된 실행 샘플을 더 포함하고, 상기 BDSSO 소프트웨어는 상기 실행 샘플을 분석함으로써 적어도 부분적으로 상기 실행 스택 프레임 발생 데이터를 획득하는 것인 동시성 강화 시스템.
- 제1항에 있어서, 관리 런타임(managed runtime)을 더 포함하고, 상기 BDSSO 소프트웨어는 상기 관리 런타임을 활용하는 가비지 컬렉션 안전점(safepoint)에서 스택 데이터를 수집함으로써 적어도 부분적으로 상기 실행 스택 프레임 발생 데이터를 획득하는 것인 동시성 강화 시스템.
- 제1항에 있어서, 상기 시스템은 방식들 중 적어도 하나의 방식으로 고정 깊이 스택 스캐닝 시스템과 상이한 것을 또한 특징으로 하고,
상기 방식들은:
상기 가비지 컬렉션 스캔 리턴 배리어는 상기 실행 스택의 적어도 2개의 프레임 아래에 설치되는 방식;
상기 시스템은 복수의 프로그램을 가지고 상기 선택된 스택 스캔 깊이가 프로그램마다 달라지는 방식; 또는
주어진 프로그램의 실행 동안 상기 주어진 프로그램에 대하여 상기 선택된 스택 스캔 깊이가 상이한 관심 기간 동안 달라지는 방식인 것인 동시성 강화 시스템. - 제1항에 있어서, 상기 프로세서는 N개의 코어를 포함하고(N은 적어도 2), 상기 프로그램은 M개의 쓰레드를 포함하고(2 <= M <= N), 각 쓰레드는 각각의 실행 스택을 가지고, 상기 BDSSO 소프트웨어는 상기 M개의 쓰레드 각각에 대하여 쓰레드별로 상기 BDSSO 단계를 수행하는 것인 동시성 강화 시스템.
- 제1항에 있어서, 상기 실행 스택 프레임 발생 데이터는 리턴 어드레스를 포함하고, 경과된 실행 시간을 나타내는 데이터 및 프로세서 사이클 카운트를 나타내는 데이터 각각이 없는 것인 동시성 강화 시스템.
- 가비지 컬렉션을 위한 실행 스택 트레이싱을 최적화하기 위한 동시성 강화 방법에 있어서,
실행 스택에 대한 실행 스택 프레임 발생 데이터를 획득하는 단계,
복수의 실행 프레임 각각에 대해 상기 실행 스택 프레임 발생 데이터로부터 각각의 프레임 실행 가능성을 자동으로 결정하는 단계;
상기 프레임 실행 가능성에 적어도 부분적으로 기초하여 스택 스캔 깊이를 자동으로 선택- 상기 선택된 스택 스캔 깊이는 전체 실행 스택의 전체 깊이보다 작음 - 하는 단계;
상기 선택된 스택 스캔 깊이에서 가비지 컬렉션 스캔 리턴 배리어를 자동으로 설치하는 단계; 및
상기 트레이싱 가비지 컬렉터가 상기 선택된 스택 스캔 깊이까지만 상기 실행 스택을 스캔하도록 허용하는 단계를 포함하고,
이에 의해, 상기 방법을 수행하지 않고 가비지 컬렉션을 위한 실행 스택을 스캐닝하는 것과 비교하여, 뮤테이터 소프트웨어의 실행과 동시에 가비지 컬렉터 스택 스캐닝 소프트웨어를 실행하는 것에 의해 상기 방법을 수행함으로써 동시성이 증가되는 것인 동시성 강화 방법. - 제7항에 있어서, 상기 실행 스택 프레임 발생 데이터는 프로그램의 실행 동안 상이한 지점에 대한 스택 프레임 스냅샷을 포함하고, 프레임 실행 가능성을 결정하는 단계는 특정 실행 프레임 세트가 스택 프레임 스냅샷 세트에 얼마나 많이 발생하는지 기록(tally)하는 단계를 포함하는 것인 동시성 강화 방법.
- 제7항에 있어서, 프레임 실행 가능성을 결정하는 단계는 루틴의 부분적 실행을 위한 경과된 실행 시간을 상기 루틴의 완전한 실행을 위한 추정 실행 시간과 비교하는 단계, 또는 상기 루틴의 실행을 완료하기 위한 추정 완료 시간을 결정하는 단계 중 적어도 하나를 포함하는 것인 동시성 강화 방법.
- 제7항에 있어서, 실행 스택 프레임 발생 데이터를 획득하는 단계는 프로그램의 실행 동안 상기 실행 스택을 주기적으로 샘플링하는 단계를 포함하는 것인 동시성 강화 방법.
- 제7항에 있어서, 상기 실행 스택 프레임 발생 데이터는 프로그램의 실행 동안 상이한 지점에 대한 스택 프레임 스냅샷을 포함하고, 대부분의 스냅샷은 각각 적어도 100개의 프레임의 스택 깊이를 보여주며, 상기 선택된 스택 스캔 깊이는 10보다 작고 1보다 큰 것인 동시성 강화 방법.
- 제7항에 있어서, 상기 프레임 실행 가능성을 결정하고 상기 스택 스캔 깊이를 선택하는 단계는 임의의 스택 프레임에 대한 경과된 실행 시간을 나타내는 데이터, 임의의 스택 프레임에 대한 프로세서 사이클 카운트를 나타내는 데이터, 또는 임의의 스택 프레임에 대한 메모리 소모량을 나타내는 데이터 중 어떤 것도 판독하지 않고 아니면 의존하지 않고 수행되는 것인 동시성 강화 방법.
- 제7항에 있어서, 실행 스택 프레임 발생 데이터를 획득하는 단계는:
프로파일러 툴에 의해 생성된 실행 샘플을 획득하는 단계; 또는
가비지 컬렉션 안전점에서 프로파일링을 위해 관리 런타임을 활용하는 단계 중 적어도 하나를 포함하는 것인 동시성 강화 방법. - 제7항에 있어서, 상기 뮤테이터 소프트웨어는 상기 스캔 리턴 배리어에 부닥치고, 상기 방법은 상기 스캔 리턴 배리어를 제거하는 단계, 상이한 스택 스캔 깊이를 자동으로 선택하는 단계, 상기 상이한 스택 스캔 깊이에서 상기 스캔 리턴 배리어를 자동으로 설치하는 단계를 더 포함하는 것인 동시성 강화 방법.
- 제7항에 있어서, 방식들 중 적어도 하나의 방식을 또한 특징으로 하고, 상기 방식들은:
상기 뮤테이터 소프트웨어는 애플리케이션 프로그램을 포함하고, 상기 방법이 상기 애플리케이션 프로그램의 적어도 2개의 쓰레드에 대하여 쓰레드별로 각각의 쓰레드의 복수의 실행 스택 각각으로 적어도 획득, 결정, 선택 및 설치를 수행하는 단계를 포함하는 방식;
상기 실행 스택은 상기 프로그램의 쓰레드에 대응하고, 상기 방법이 상기 쓰레드의 실행 동안 상이한 시간에 그리고 상기 가비지 컬렉션 스캔 리턴 배리어가 상기 실행 스택의 최소 두 프레임 아래에 설치될 때마다 상이한 스택 스캔 깊이로 선택 및 설치를 반복하는 방식; 또는
상기 실행 스택 프레임 발생 데이터는 상기 프로그램의 실행 동안 상이한 지점에 대한 스택 프레임 스냅샷을 포함하고, 상기 스냅샷의 적어도 80% 각각은 적어도 80개의 프레임의 스택 깊이를 보여주고, 상기 선택된 스택 스캔 깊이는 9보다 작은 방식인 것인 동시성 강화 방법.
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/656,522 US11068393B2 (en) | 2019-10-17 | 2019-10-17 | Enhanced concurrency garbage collection stack scanning |
US16/656,522 | 2019-10-17 | ||
PCT/US2020/054650 WO2021076378A1 (en) | 2019-10-17 | 2020-10-08 | Enhanced concurrency garbage collection stack scanning |
Publications (1)
Publication Number | Publication Date |
---|---|
KR20220078696A true KR20220078696A (ko) | 2022-06-10 |
Family
ID=73040247
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020227015915A KR20220078696A (ko) | 2019-10-17 | 2020-10-08 | 강화된 동시성 가비지 컬렉션 스택 스캐닝 |
Country Status (12)
Country | Link |
---|---|
US (1) | US11068393B2 (ko) |
EP (1) | EP4046025B1 (ko) |
JP (1) | JP2022552077A (ko) |
KR (1) | KR20220078696A (ko) |
CN (1) | CN114556300A (ko) |
AU (1) | AU2020368334A1 (ko) |
BR (1) | BR112022004274A2 (ko) |
CA (1) | CA3153637A1 (ko) |
IL (1) | IL292202A (ko) |
MX (1) | MX2022004519A (ko) |
WO (1) | WO2021076378A1 (ko) |
ZA (1) | ZA202203678B (ko) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2024005532A1 (ko) | 2022-06-28 | 2024-01-04 | 주식회사 엘지에너지솔루션 | 전극 조립체, 이차 전지, 배터리 팩 및 자동차 |
Families Citing this family (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
IL146417A0 (en) | 1999-05-13 | 2002-07-25 | Medical Res Council | Ox2 receptor homologs |
EP1950299A1 (en) | 1999-06-01 | 2008-07-30 | Schering Corporation | Mammalian receptor proteins; related reagents and methods |
US7422743B2 (en) | 2000-05-10 | 2008-09-09 | Schering Corporation | Mammalian receptor protein DCRS5;methods of treatment |
EP2298789B1 (en) | 2000-09-08 | 2012-03-14 | Schering Corporation | Mammalian genes; related reagents and methods |
US11521361B1 (en) | 2021-07-01 | 2022-12-06 | Meta Platforms Technologies, Llc | Environment model with surfaces and per-surface volumes |
US12056268B2 (en) | 2021-08-17 | 2024-08-06 | Meta Platforms Technologies, Llc | Platformization of mixed reality objects in virtual reality environments |
CN113805971B (zh) * | 2021-09-23 | 2023-10-13 | 武汉深之度科技有限公司 | 一种应用程序运行方法、计算设备及存储介质 |
US11748944B2 (en) | 2021-10-27 | 2023-09-05 | Meta Platforms Technologies, Llc | Virtual object structures and interrelationships |
US11822471B2 (en) | 2021-12-07 | 2023-11-21 | International Business Machines Corporation | Reducing write barriers in snapshot-based garbage collection |
US12093447B2 (en) * | 2022-01-13 | 2024-09-17 | Meta Platforms Technologies, Llc | Ephemeral artificial reality experiences |
US12026527B2 (en) | 2022-05-10 | 2024-07-02 | Meta Platforms Technologies, Llc | World-controlled and application-controlled augments in an artificial-reality environment |
Family Cites Families (34)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6865585B1 (en) | 2000-07-31 | 2005-03-08 | Microsoft Corporation | Method and system for multiprocessor garbage collection |
US6502111B1 (en) | 2000-07-31 | 2002-12-31 | Microsoft Corporation | Method and system for concurrent garbage collection |
US6598141B1 (en) | 2001-03-08 | 2003-07-22 | Microsoft Corporation | Manipulating interior pointers on a stack during garbage collection |
US6980997B1 (en) | 2001-06-28 | 2005-12-27 | Microsoft Corporation | System and method providing inlined stub |
US20040128329A1 (en) | 2002-12-31 | 2004-07-01 | International Business Machines Corporation | Parallel incremental compaction |
US6973554B2 (en) | 2003-04-23 | 2005-12-06 | Microsoft Corporation | Systems and methods for multiprocessor scalable write barrier |
US7529786B2 (en) | 2003-07-30 | 2009-05-05 | Bea Systems, Inc. | System and method for adaptive garbage collection in a virtual machine environment |
US8131955B2 (en) | 2004-04-15 | 2012-03-06 | Microsoft Corporation | Ephemeral garbage collection using a tracking mechanism on a card table to determine marked bundles |
US7822938B2 (en) | 2004-10-20 | 2010-10-26 | Microsoft Corporation | System and method for performing garbage collection based on unmanaged memory allocations |
US7610579B2 (en) | 2004-12-10 | 2009-10-27 | Microsoft Corporation | Critical finalizers |
US8713524B2 (en) | 2005-04-06 | 2014-04-29 | Microsoft Corporation | Memory management configuration |
GB0512809D0 (en) | 2005-06-23 | 2005-08-03 | Ibm | Arrangement and method for garbage collection in a computer system |
US7441094B2 (en) | 2005-07-05 | 2008-10-21 | Microsoft Corporation | Memory management configuration |
US8701095B2 (en) | 2005-07-25 | 2014-04-15 | Microsoft Corporation | Add/remove memory pressure per object |
US7926071B2 (en) | 2005-10-20 | 2011-04-12 | Microsoft Corporation | Load balancing interfaces |
US8234378B2 (en) | 2005-10-20 | 2012-07-31 | Microsoft Corporation | Load balancing in a managed execution environment |
US7774389B2 (en) | 2007-01-17 | 2010-08-10 | Microsoft Corporation | Optimized garbage collection techniques |
US7685182B2 (en) | 2007-05-08 | 2010-03-23 | Microsoft Corporation | Interleaved garbage collections |
US7801872B2 (en) | 2008-04-08 | 2010-09-21 | Microsoft Corporation | Providing a publishing mechanism for managed objects |
US7831640B2 (en) | 2008-04-15 | 2010-11-09 | Microsoft Corporation | Using an overflow list to process mark overflow |
US7987215B2 (en) | 2008-04-22 | 2011-07-26 | Microsoft Corporation | Efficiently marking objects with large reference sets |
US7860906B2 (en) | 2008-05-28 | 2010-12-28 | Microsoft Corporation | Overflow per segment |
US8825719B2 (en) | 2008-10-30 | 2014-09-02 | Microsoft Corporation | Incremental lock-free stack scanning for garbage collection |
US20100318584A1 (en) | 2009-06-13 | 2010-12-16 | Microsoft Corporation | Distributed Cache Availability During Garbage Collection |
US8601036B2 (en) | 2011-03-23 | 2013-12-03 | International Business Machines Corporation | Handling persistent/long-lived objects to reduce garbage collection pause times |
US10754770B2 (en) | 2011-10-10 | 2020-08-25 | Microsoft Technology Licensing, Llc | Work stealing of partially-marked objects |
US20150227414A1 (en) | 2012-08-31 | 2015-08-13 | Pradeep Varma | Systems And Methods Of Memory And Access Management |
JP5889270B2 (ja) * | 2013-12-13 | 2016-03-22 | インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation | スタック・スキャンのコストを削減するための方法、プログラム及びシステム |
US9804962B2 (en) | 2015-02-13 | 2017-10-31 | Microsoft Technology Licensing, Llc | Garbage collection control in managed code |
US10558566B2 (en) | 2015-04-16 | 2020-02-11 | Microsoft Technology Licensing, Llc | Garbage collection of non-pinned objects within heap |
US10534643B2 (en) | 2016-05-09 | 2020-01-14 | Oracle International Corporation | Correlation of thread intensity and heap usage to identify heap-hoarding stack traces |
US10120655B2 (en) | 2016-06-03 | 2018-11-06 | Microsoft Technology Licensing, Llc. | Seamless high performance interoperability between different type graphs that share a garbage collector |
US10572181B2 (en) | 2017-02-01 | 2020-02-25 | Microsoft Technology Licensing, Llc | Multiple stage garbage collector |
US10628306B2 (en) | 2017-02-01 | 2020-04-21 | Microsoft Technology Licensing, Llc | Garbage collector |
-
2019
- 2019-10-17 US US16/656,522 patent/US11068393B2/en active Active
-
2020
- 2020-10-08 MX MX2022004519A patent/MX2022004519A/es unknown
- 2020-10-08 CA CA3153637A patent/CA3153637A1/en active Pending
- 2020-10-08 WO PCT/US2020/054650 patent/WO2021076378A1/en unknown
- 2020-10-08 CN CN202080072503.3A patent/CN114556300A/zh active Pending
- 2020-10-08 JP JP2022514970A patent/JP2022552077A/ja active Pending
- 2020-10-08 BR BR112022004274A patent/BR112022004274A2/pt unknown
- 2020-10-08 AU AU2020368334A patent/AU2020368334A1/en not_active Abandoned
- 2020-10-08 KR KR1020227015915A patent/KR20220078696A/ko active Search and Examination
- 2020-10-08 EP EP20800392.1A patent/EP4046025B1/en active Active
-
2022
- 2022-03-30 ZA ZA2022/03678A patent/ZA202203678B/en unknown
- 2022-04-12 IL IL292202A patent/IL292202A/en unknown
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2024005532A1 (ko) | 2022-06-28 | 2024-01-04 | 주식회사 엘지에너지솔루션 | 전극 조립체, 이차 전지, 배터리 팩 및 자동차 |
Also Published As
Publication number | Publication date |
---|---|
CA3153637A1 (en) | 2021-04-22 |
MX2022004519A (es) | 2022-05-10 |
JP2022552077A (ja) | 2022-12-15 |
IL292202A (en) | 2022-06-01 |
US11068393B2 (en) | 2021-07-20 |
US20210117319A1 (en) | 2021-04-22 |
EP4046025B1 (en) | 2024-06-26 |
EP4046025A1 (en) | 2022-08-24 |
AU2020368334A1 (en) | 2022-04-07 |
CN114556300A (zh) | 2022-05-27 |
ZA202203678B (en) | 2023-11-29 |
WO2021076378A1 (en) | 2021-04-22 |
BR112022004274A2 (pt) | 2022-06-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR20220078696A (ko) | 강화된 동시성 가비지 컬렉션 스택 스캐닝 | |
US10664348B2 (en) | Fault recovery management in a cloud computing environment | |
US11704431B2 (en) | Data security classification sampling and labeling | |
US11880270B2 (en) | Pruning and prioritizing event data for analysis | |
EP3191964B1 (en) | Memory leak analysis by usage trends correlation | |
US11327877B2 (en) | Pipeline performance improvement using stochastic dags | |
Degott et al. | Learning user interface element interactions | |
US10146531B2 (en) | Method and apparatus for generating a refactored code | |
Yadwadkar et al. | Proactive straggler avoidance using machine learning | |
US11271865B1 (en) | Resource popularity assessment and utilization | |
US10606667B2 (en) | Precondition exclusivity mapping of tasks to computational locations | |
US11169980B1 (en) | Adaptive database compaction | |
Corpas et al. | Acceleration and energy consumption optimization in cascading classifiers for face detection on low‐cost ARM big. LITTLE asymmetric architectures | |
Khan et al. | Detecting wake lock leaks in android apps using machine learning | |
Marr et al. | Parallel gesture recognition with soft real-time guarantees | |
US11954023B2 (en) | Garbage collection prefetching state machine | |
US20240345952A1 (en) | Garbage collection in constrained local environments | |
Tripp et al. | Tightfit: Adaptive parallelization with foresight | |
US20240152798A1 (en) | Machine learning training duration control | |
WO2024220259A1 (en) | Garbage collection in constrained local environments | |
Bokhari | Genetic Improvement of Software for Energy E ciency in Noisy and Fragmented Eco-Systems | |
Jeon | Parallel speedup estimates for serial programs |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination |