KR101950759B1 - 저장 장치의 메모리 컨트롤러가 수행하는 가비지 컬렉션 방법 및 메모리 컨트롤러 - Google Patents
저장 장치의 메모리 컨트롤러가 수행하는 가비지 컬렉션 방법 및 메모리 컨트롤러 Download PDFInfo
- Publication number
- KR101950759B1 KR101950759B1 KR1020160156714A KR20160156714A KR101950759B1 KR 101950759 B1 KR101950759 B1 KR 101950759B1 KR 1020160156714 A KR1020160156714 A KR 1020160156714A KR 20160156714 A KR20160156714 A KR 20160156714A KR 101950759 B1 KR101950759 B1 KR 101950759B1
- Authority
- KR
- South Korea
- Prior art keywords
- garbage collection
- memory
- segment
- memory controller
- object stores
- 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
- 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/0238—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric 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/72—Details relating to flash memory management
- G06F2212/7205—Cleaning, compaction, garbage collection, erase control
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
본 발명은 저장 장치의 메모리 컨트롤러가 수행하는 가비지 컬렉션 방법 및 메모리 컨트롤러에 관한 것 입니다.
메모리 컨트롤러는 호스트 장치로부터 힙 영역의 객체 저장소를 메모리의 세그먼트에 할당하기 위한 요청을 수신하면, 상기 요청에 따른 힙 영역에 분할된 객체 저장소들의 최저 사용 빈도를 고려하여 객체 저장소에 대한 접근 순서 리스트를 생성하고, 생성된 접근 순서 리스트를 기반으로 가비지 컬렉션을 수행할 N개의 객체 저장소에 대응하는 N개의 메모리의 세그먼트를 검출한 후, 수신한 N개의 메모리의 세그먼트를 대상으로 가비지 컬렉션을 수행한다.
메모리 컨트롤러는 호스트 장치로부터 힙 영역의 객체 저장소를 메모리의 세그먼트에 할당하기 위한 요청을 수신하면, 상기 요청에 따른 힙 영역에 분할된 객체 저장소들의 최저 사용 빈도를 고려하여 객체 저장소에 대한 접근 순서 리스트를 생성하고, 생성된 접근 순서 리스트를 기반으로 가비지 컬렉션을 수행할 N개의 객체 저장소에 대응하는 N개의 메모리의 세그먼트를 검출한 후, 수신한 N개의 메모리의 세그먼트를 대상으로 가비지 컬렉션을 수행한다.
Description
아래의 설명은 저장 장치의 메모리 컨트롤러가 수행하는 가비지 컬렉션 방법 및 메모리 컨트롤러에 관한 것으로, 호스트 장치로부터 힙 영역의 객체 저장소를 할당하기 위한 요청을 수신하면, 가비지 컬렉션을 통해 메모리의 세그먼트에 객체 저장소를 할당하는 가비지 컬렉션 방법에 관한 것입니다.
G1 GC(Garbage-First Garbage Collector)는 가비지 컬렉션을 수행함에 있어, 기존에 사용되던 Young 영역과 OLD 영역을 이용하는 것이 아닌, 연속적인 메모리 공간을 갖는 힙 영역을 고정된 크기의 region 영역으로 분할할 수 있다. 그리고, G1 GC는 힙 영역에 분할된 Region별 live object 정도를 이용하여 가비지 컬렉션을 수행하였다. 여기서, region 영역의 크기는 기본 1MB부터 최대 32MB까지 지정할 수 있으며, G1 GC는 지정된 region 영역의 크기로 힙 영역을 분할시킬 수 있다. 그리고, G1 GC는 힙 영역에 분할된 region 영역을 활용하여 객체를 처리할 수 있다.
이 때, G1 GC는 멀티 프로세서 머신에서 동작하는 다중 쓰레드를 사용할 수 있으며, Time based 동작으로 적시에 가비지 컬렉션을 수행할 수 있다. 보다 구체적으로, G1 GC는 기존의 Young 영역에 대하여, 사용자가 지정한 Pause time에 의해 휴리스틱(heuristics)하게 가비지 컬렉션의 수행을 결정한다. 반면, G1 GC는 기존의 Old 영역에 대하여, i) Mixed GC 최소 수행 작업 횟수 및 ii) Mixed GC 수행시 선택할 최대 OLD region 개수, 자바 Heap의 Percentage로 값에 대한 옵션을 두고, 옵션의 조건을 만족하는 경우에 가비지 컬렉션의 수행을 결정한다.
다시 말해, G1 GC에 따르면, Young 영역에 할당된 객체는 빠르게 가비지 컬렉션을 수행하는 것에 비해, Old 영역에 할당된 객체는 Young 영역에 할당된 객체에 우선 순위에서 밀려서 가비지 컬렉션의 실행이 원활하게 되지 않는다. 또한, 이러한 경우, Old 영역에 할당된 객체가 메모리에 지속적으로 적재됨에 따라 Full GC를 피하기가 힘들뿐더러, 이때 Stop-the-world라 불리우는 모든 프로세스 중지 현상이 발생하는 문제가 있다.
따라서, 힙 영역에 대응하는 메모리에 저장된 객체에 있어, 객체의 사용 빈도를 고려하여 가비지 컬렉션을 수행할 수 있는 방법이 필요하다.
본 발명은 사용자가 더 이상 접근하지 못하는 메모리 영역의 추적 및 해제에 소요되는 시간을 줄이기 위한 가비지 컬렉션 방법을 제공할 수 있다.
일실시예에 따른 저장 장치의 메모리 컨트롤러가 수행하는 가비지 컬렉션 방법은 호스트 장치로부터 힙 영역의 객체 저장소를 메모리의 세그먼트에 할당하기 위한 요청을 수신하는 단계; 상기 요청에 따른 힙 영역에 분할된 객체 저장소들의 최저 사용 빈도(LRU: Least Recently Used)를 고려하여 객체 저장소에 대한 접근 순서 리스트를 생성하는 단계; 상기 생성된 접근 순서 리스트를 기반으로 가비지 컬렉션을 수행할 N개의 객체 저장소에 대응하는 N개의 메모리의 세그먼트를 검출하는 단계; 및 상기 수신한 N개의 메모리의 세그먼트를 대상으로 가비지 컬렉션을 수행하는 단계를 포함할 수 있다.
일실시예에 따른 생성하는 단계는 상기 객체 저장소들 각각에 대응하는 메모리의 세그먼트의 사용 빈도에 따른 객체 저장소들이 사용되지 않은 시간을 기준으로 접근 순서 리스트를 생성할 수 있다.
일실시예에 따른 검출하는 단계는 상기 객체 저장소에 대한 사용 빈도가 낮은 순서대로 N개의 객체 저장소를 선택하는 단계; 및 상기 선택된 N개의 객체 저장소에 대응하는 N개의 메모리의 세그먼트의 주소값을 검출하는 단계를 포함할 수 있다.
일실시예에 따른 가비지 컬렉션을 수행하는 단계는 상기 호스트 장치로부터 요청된 객체 저장소의 개수보다 동일하거나 또는 더 많은 객체 저장소에 대응하는 메모리의 세그먼트에 대한 가비지 컬렉션을 수행할 수 있다.
일실시예에 따른 가비지 컬렉션 방법을 수행하는 저장 장치의 메모리 컨트롤러는 호스트 장치로부터 힙 영역의 객체 저장소를 메모리의 세그먼트에 할당하기 위한 요청을 수신하면, 상기 요청에 따른 힙 영역에 분할된 객체 저장소들의 최저 사용 빈도(LRU: Least Recently Used)를 고려하여 객체 저장소에 대한 접근 순서 리스트를 생성하고, 상기 생성된 접근 순서 리스트를 기반으로 가비지 컬렉션을 수행할 N개의 객체 저장소에 대응하는 N개의 메모리의 세그먼트를 검출하여, 상기 수신한 N개의 메모리의 세그먼트를 대상으로 가비지 컬렉션을 수행할 수 있다.
일실시예에 따른 메모리 컨트롤러는 상기 객체 저장소들 각각에 대응하는 메모리의 세그먼트의 사용 빈도에 따른 객체 저장소들이 사용되지 않은 시간을 기준으로 접근 순서 리스트를 생성할 수 있다.
일실시예에 따른 메모리 컨트롤러는 상기 객체 저장소에 대한 사용 빈도가 낮은 순서대로 N개의 객체 저장소를 선택한 후, 상기 선택된 N개의 객체 저장소에 대응하는 N개의 메모리의 세그먼트의 주소값을 검출할 수 있다.
일실시예에 따른 메모리 컨트롤러는 상기 호스트 장치로부터 요청된 객체 저장소의 개수보다 동일하거나 또는 더 많은 객체 저장소에 대응하는 메모리의 세그먼트에 대한 가비지 컬렉션을 수행할 수 있다.
본 발명의 일실시예에 따른 가비지 컬렉션 방법은 객체 저장소들의 최저 사용 빈도에 따라 생성된 접근 순서 리스트를 기반으로 사용 빈도가 낮은 N개의 객체 저장소에 대응하는 메모리의 세그먼트에 대한 가비지 컬렉션을 수행함으로써, 현재 사용되지 않는 객체 저장소에 대응하는 메모리의 세그먼트를 해제시킬 수 있다.
도 1은 일실시예에 따른 호스트 장치와 저장 장치에 대한 전체 구성도이다.
도 2는 일실시예에 따른 호스트 장치의 힙 영역의 객체 저장소에 대응하는 메모리의 세그먼트를 설명하기 위한 도면이다.
도 3은 일실시예에 따른 힙 영역에 분할된 객체 저장소들의 최저 사용 빈도를 고려하여 객체 저장소에 대한 접근 순서 리스트를 생성하는 동작을 설명하기 위한 도면이다.
도 4는 일실시예에 따른 호스트 장치의 요청에 따라 가비지 컬렉션을 수행할 N개의 객체 저장소를 선택하는 동작을 설명하기 위한 도면이다.
도 5는 일실시예에 따른 가비지 컬렉션을 수행할 N개의 객체 저장소에 대응하는 N개의 메모리의 세그먼트에 대한 가비지 컬렉션을 수행하는 동작을 설명하기 위한 도면이다.
도 6은 일실시예에 따른 호스트 장치와 저장 장치 간의 동작을 설명하기 위한 흐름도이다.
도 2는 일실시예에 따른 호스트 장치의 힙 영역의 객체 저장소에 대응하는 메모리의 세그먼트를 설명하기 위한 도면이다.
도 3은 일실시예에 따른 힙 영역에 분할된 객체 저장소들의 최저 사용 빈도를 고려하여 객체 저장소에 대한 접근 순서 리스트를 생성하는 동작을 설명하기 위한 도면이다.
도 4는 일실시예에 따른 호스트 장치의 요청에 따라 가비지 컬렉션을 수행할 N개의 객체 저장소를 선택하는 동작을 설명하기 위한 도면이다.
도 5는 일실시예에 따른 가비지 컬렉션을 수행할 N개의 객체 저장소에 대응하는 N개의 메모리의 세그먼트에 대한 가비지 컬렉션을 수행하는 동작을 설명하기 위한 도면이다.
도 6은 일실시예에 따른 호스트 장치와 저장 장치 간의 동작을 설명하기 위한 흐름도이다.
이하, 본 발명의 실시예를 첨부된 도면을 참조하여 상세하게 설명한다.
도 1은 일실시예에 따른 호스트 장치와 저장 장치에 대한 전체 구성도이다.
도 1을 참고하면, 저장 장치(101)는 호스트 장치(104)로부터 수신한 요청에 대응하여 메모리(103)를 관리할 수 있는 메모리 컨트롤로(102)를 이용할 수 있다. 메모리 컨트롤로(102)는 호스트 장치(104)로부터 힙 영역의 객체 저장소(106)를 메모리(103)의 세그먼트에 할당하기 위한 요청을 수신할 수 있다.
여기서, 호스트 장치(104)는 프로그램을 실행하는 프로세서이며, 다중 프로세서가 실행될 수 있는 장치이며, 다중 프로세서에 의한 멀티 쓰레드를 사용할 수 있다.
저장 장치(101)는 메모리(103) 기반의 저장 매체로써, 호스트 장치(104)의 요청에 따라 객체 저장소(106)를 메모리(103)의 세그먼트에 1:1 매핑하거나 또는 적어도 하나 이상의 객체 저장소에 대응하는 메모리의 세그먼트에 대한 가비지 컬렉션(GC: Garbage Collection)을 수행하는 장치일 수 있다. 일례로, 저장 장치(101)는 전원이 공급되지 않아도 저장된 데이터가 지워지지 않는 비휘발성 메모리(NVM: Non-Volatile Memory)를 포함하는 솔리드 스테이트 드라이브(SSD: SOLID STATE DRIVE)일 수 있다.
호스트 장치(104)의 힙 영역(105)은 프로세서에서 사용되는 가상 메모리 영역으로 프로그램 실행(런타임) 이후, 사용자의 필요에 의해 동적으로 메모리를 할당하기 위한 임시 기억 공간일 수 있다. 그리고, 힙 영역(105)은 실제적으로 데이터가 저장되는 메모리의 세그먼트에 대해 가비지 컬렉션을 수행하기 위한 단위인 '객체 저장소' 단위로 분할될 수 있다.
객체 저장소(106)는 하나의 객체가 저장되는 영역으로, 하나의 객체는 데이터들 간에 존재하는 관계를 고려하여 처리 또는 관리하기 위한 자료 구조(data structure)를 의미할 수 있다. 즉, 객체 저장소는 하나의 자료 구조를 나타낼 수 있다. 그리고, 객체 저장소(106)는 메타 데이터 영역과 사용자 데이터 영역으로 구분될 수 있다. 그리고, 메타 데이터 영역은 객체 저장소의 객체가 갖는 자료 구조가 어떤 형태로 구현되었는지를 나타내는 영역일 수 있으며, 사용자 데이터 영역은 객체 저장소(203)의 자료 구조에 따라 사용자에 의해 청크가 저장되고, 삭제되는 등의 처리가 이루어지는 영역일 수 있다.
메모리 컨트롤러(102)는 요청에 따른 힙 영역에 분할된 객체 저장소들의 최저 사용 빈도(LRU: Least Recently Used)를 고려하여 객체 저장소에 대한 접근 순서 리스트를 생성할 수 있다. 여기서, 메모리 컨트롤러(102)는 i) 호스트 장치(104)로부터 객체 저장소를 메모리의 세그먼트로 할당하기 위한 요청을 수신한 이후, 접근 순서 리스트를 생성하거나 또는 일정한 주기를 갖고, 힙 영역에 분할된 객체 저장소들에 대한 접근 순서 리스트를 미리 생성할 수 있다.
메모리 컨트롤러(102)는 생성된 접근 순서 리스트를 기반으로 가비지 컬렉션을 수행할 N개의 객체 저장소에 대응하는 N개의 메모리의 세그먼트를 검출할 수 있다. 그리고, 메모리 컨트롤러(102)는 수신한 N개의 메모리의 세그먼트를 대상으로 가비지 컬렉션을 수행할 수 있다.
이 후, 메모리 컨트롤러(102)는 가비지 컬렉션을 수행한 결과에 따라 비워진 메모리의 세그먼트 또는 가비지 컬렉션을 수행하기 이전에 비워져 있던 메모리의 세그먼트로 객체 저장소를 할당할 수 있다.
본 발명은 힙 영역에 대응하는 메모리의 전체 영역을 대상으로 가비지 컬렉션을 수행할 수 있다. 이 때, 본 발명은 힙 영역에 대응하는 메모리의 전체 영역을 대상으로 가비지 컬렉션을 수행하되, 실제적으로 가비지 컬렉션을 수행하는 영역은 선택함으로써, FULL GC로 인해 발생하는 오버헤드를 방지할 수 있다. 다시 말해, 본 발명은 가비지 컬렉션을 수행할 때, 힙 영역에 분할된 객체 저장소 단위로 점증적인 가비지 컬렉션을 수행함으로써, 오버헤드를 완화할 수 있다.
또한, 힙 영역의 객체저장소가 여러 개의 프로세스와 동시에 매핑되서 동작하는 경우, 프로세스 간에 락을 획득하기 위한 경쟁이 발생하게 되는데, 이를 해결하기 위하여, 본 발명은 메모리 컨트롤러(102)에서 수행하는 가비지 컬렉션을 프로세서의 백그라운드로 수행할 수 있도록 설계하였다. 다시 말해, 본 발명은 메모리의 전체 영역을 대상으로 FULL GC를 수행하되, 실제 GC의 적용 대상을 객체저장소 전체가 아닌 일부 객체저장소로 분할한 후, GC를 수행하는 것으로써, 5초 주기의 백드라운드로 동작하는 유저 레벨의 데몬으로 동작 가능할 수 있다.
도 2는 일실시예에 따른 호스트 장치의 힙 영역의 객체 저장소에 대응하는 메모리의 세그먼트를 설명하기 위한 도면이다.
도 2를 참고하면, 호스트 장치(203)의 힙 영역(204)는 가비지 컬렉션을 수행하기 위한 단위인 객체 저장소 단위로 분할될 수 있다. 그리고, 힙 영역에 분할된 객체 저장소 각각은 메모리의 세그먼트에 1:1로 매핑될 수 있다.
일례로, 호스트 장치(203)의 힙 영역(204)에 분할된 객체저장소1(205)는 실제적으로 데이터가 저장되는 저장 장치의 메모리(202)의 세그먼트(202)로 주소 사상된 상태일 수 있다.
여기서, 객체 저장소1(205)은 복수 개의 프로세서에 의해 사용 가능한 영역임에 따라 프로세서에 대한 주소 사상은 이뤄지지 않은 상태일 수 있다. 보다 구체적으로, 본 발명은 하나의 프로세서에 의해 힙 영역이 사용되는 것이 아니라, 복수의 프로세서에 의해 힙 영역이 공동으로 사용 가능할 수 있다.
이에 따라, 본 발명에서 가비지 컬렉션의 수행 대상이 되는 객체 저장소는 특정 프로세스에 사상되어 있지 않은 상태의 객체 저장소를 사용할 수 있다. 왜냐하면, 본 발명은 위에서도 언급한 바와 같이 하나의 객체저장소가 여러 프로세스에 사상되어 사용될 수 있는 환경이기 때문에 SFGC 데몬(SFGC: Separated Full GC)이 다른 프로세스에 사상되어 있는 객체저장소에 대해 가비지 수집을 시도할 경우 락 오버헤드가 생기게 되고, 다른 프로세스에 사상되어 있는 객체 저장소는 LGC(Local Garbage Collector)에 의해 가비지 수집이 될 확률이 높기 때문이다.
LGC(Local Garbage Collector)는 힙 영역의 저장 객체 저장소에 대응하는 메모리의 세그먼트의 각 페이지에 대한 프로세서의 참조 여부를 고려하여 가비지 컬렉션을 수행하는 방법일 수 있다.
따라서, 본 발명의 객체 저장소는 메모리의 세그먼트와 주소 사상이 이루어지며, 특정 프로세서와는 주소 사상이 이루어지지 않은 상태에서 사용될 수 있다.
도 3은 일실시예에 따른 힙 영역에 분할된 객체 저장소들의 최저 사용 빈도를 고려하여 객체 저장소에 대한 접근 순서 리스트를 생성하는 동작을 설명하기 위한 도면이다.
객체 저장소는 메인 메모리 내부에 생성되는 공간이다. 이 때, 특정 프로세스가 객체 저장소를 사용하기 위해서는 해당 공간을 자신의 주소 공간으로 사상(mapping)하여야 한다. 여기서, 객체 저장소는 보안을 위하여 커널 레벨(시스템 레벨)에서 관리되고, 해당 객체저장소의 상태를 기록하는 메타데이터(디스크립터)의 위치 또한 커널 내부에 존재하게 된다.
객체 저장소는 사상이 해제 될 때 커널이 관리하는 리스트(gc_list)의 꼬리(tail)에 삽입되고, 사상될 때 리스트에서 삭제된다. 따라서, 모든 객체 저장소를 리스트에 포함시키는 것이 아닌, 사상되지 않은 객체 저장소들만 리스트를 통해 관리한다. 이때 사상 된지 오래된 객체저장소 일수록 head에 가깝기 때문에 LRU 순서로 정렬되지만 LRU 알고리즘에 의해 리스트에서 제거되지는 않는다.
이러한 설명을 기반으로 도 3을 참고하면, 호스트 장치(301)의 힙 영역(302)는 가비지 컬렉션을 수행하기 위한 단위인 객체 저장소 단위로 분할될 수 있다. 그리고, 각각의 객체 저장소는 프로세서의 시스템 콜에 따른 서로 다른 사용 빈도의 값을 갖는 레지스터를 포함할 수 있다. 다시 말해, 힙 영역(302)에 분할된 각각의 객체 저장소는 복수의 프로세서에 의해 공동으로 사용 가능하며, 프로세서의 동작에 따라 서로 다른 사용 빈도를 나타낼 수 있다.
일례로, 객체 저장소 1은 사용자로부터 실시간으로 입력받는 정보를 저장하기 위해 사용되고, 객체 저장소 2는 사용자로부터 입력된 정보를 일괄적으로 처리한 정보를 저장하기 위해 사용된다는 가정할 때, 객체 저장소 2보다는 객체 저장소1에 대한 사용 빈도가 높을 수 있다. 또한, 객체 저장소에 대응하는 메모리의 세그먼트에 대한 프로세서의 참조 상태가 해제된 경우, 해당 객체 저장소에 대한 사용 빈도가 낮을 수 있다.
결국, 객체 저장소들은 프로세서의 호출에 따른 계속 사용되고 있는 객체 저장소와 예전에 사용되었으나, 현재는 사용되고 있는 않은 객체 저장소를 포함할 수 있으며, 이는 각각의 객체 저장소의 레지스터 값으로 표현될 수 있다. 이는 최저 사용 빈도(LRU: Least Recently Used)일 수 있다. 따라서, 본 발명은 이러한 객체 저장소의 최저 사용 빈도를 고려하여 객체 저장소에 대한 접근 순서 리스트(303)를 생성할 수 있다.
여기서, 접근 순서 리스트(303)를 생성하는 이유는 종래의 힙 영역에 대한 가비지 컬렉션을 수행함에 있어, OLD 영역에 대한 가비지 컬렉션의 수행 점유율과 YOUNG 영역에 대한 가비지 컬렉션의 수행 점유율을 비교하였을 때, OLD 영역에 대한 가비지 컬렉션의 수행 점유율이 낮음에 따라 해당 청크가 메모리에 지속적으로 적재됨으로써, 인로 인한 FULL GC 시, 오버헤드가 발생할 수 있다. 따라서, 본 발명은 메모리에 지속적으로 적재되는 OLD 영역의 청크에 대한 GC를 수행하기 위하여 최저 사용 빈도에 따른 객체 저장소에 대한 접근 순서 리스트(303)를 생성할 수 있다.
그리고, 메모리 컨트롤러는 생성한 접근 순서 리스트(303)를 이용하여 객체 저장소에 대한 사용 빈도가 낮은 객체 저장소에 대한 가비지 컬렉션을 수행할 수 있다. 자세한 동작의 설명은 도 4 및 도 5를 통해 설명하도록 한다.
도 4는 일실시예에 따른 호스트 장치의 요청에 따라 가비지 컬렉션을 수행할 N개의 객체 저장소를 선택하는 동작을 설명하기 위한 도면이다.
도 4를 참고하면, 호스트 장치(403)는 힙 영역(404)에 추가하고자 하는 객체 저장소(405)를 저장 장치의 메모리의 세그먼트에 할당시키기 위한 요청을 메모리 컨트롤러(401)에 전달할 수 있다.
메모리 컨트롤러(401)는 호스트 장치(403)로부터 수신한 요청에 따라 접근 순서 리스트(402)를 기반으로 가비지 컬렉션을 수행할 N개의 객체 저장소에 대응하는 N개의 메모리의 세그먼트를 검출할 수 있다. 여기서, 메모리 컨트롤러(401)는 객체 저장소에 대한 사용 빈도가 낮은 순서대로 N개의 객체 저장소를 선택할 수 있다. 그리고, 메모리 컨트롤러(401)는 선택된 N개의 객체 저장소에 대응하는 N개의 메모리의 세그먼트의 주소값을 검출할 수 있다.
여기서, N개는 호스트 장치로부터 요청된 객체 저장소의 개수보다 동일하거나 또는 더 많은 값을 나타낼 수 있다. 일례로, 호스트 장치로부터 요청된 객체 저장소가 1개라며, 가비지 컬렉션을 수행하기 위한 객체 저장소는 최대 10개 일 수 있다.
도 5는 일실시예에 따른 가비지 컬렉션을 수행할 N개의 객체 저장소에 대응하는 N개의 메모리의 세그먼트에 대한 가비지 컬렉션을 수행하는 동작을 설명하기 위한 도면이다.
도 5를 참고하면, 메모리 컨트롤러는 호스트 장치로부터 힙 영역의 객체 저장소를 메모리의 세그먼트에 할당하기 위한 요청을 수신할 수 있다. 그리고, 메모리 컨트롤러는 요청에 따른 힙 영역에 분할된 객체 저장소들의 최저 사용 빈도를 고려하여 객체 저장소에 대한 접근 순서 리스트를 생성할 수 있다. 다시 말해, 메모리 컨트롤러는 현재 사용되고 있지 않은 객체저장소들을 사용되지 않은 시간을 기준으로 사용된 시간이 짧을수록 접근 순서 리스트의 헤드에 가깝도록 리스트를 구성할 수 있다. 즉, 메모리 컨트롤러는 객체 저장소들 각각에 대응하는 메모리의 세그먼트의 사용 빈도에 따른 사용 빈도가 높은 순으로 접근 순서 리스트를 생성할 수 있다.
이후, 메모리 컨트롤러는 접근 순서 리스트를 기반으로 가비지 컬렉션을 수행할 N개의 객체 저장소에 대응하는 N개의 메모리의 세그먼트를 검출할 수 있다. 구체적으로, 메모리 컨트롤러는 객체 저장소에 대한 사용 빈도가 낮은 순서대로 N개의 객체 저장소를 선택할 수 있다. 즉, 메모리 컨트롤러는 접근 순서 리스트를 기반으로 예전에 사용되었지만 현재는 사용되지 않는 N개의 객체 저장소를 선택할 수 있다. 일례로, 메모리 컨트롤러는 데몬에 의해 5초마다 가장 오래동안 사용되지 않은 접근 순서 리스트에서 헤드의 반대 끝에 있는 10개의 객체저장소를 최대 10개까지 선택할 수 있다. 즉, 본 발명에 의해서 오랫동안 접근이 안된 객체저장소는 현재 사용중인 프로세스에 의해 다시 사용될 확률이 낮으므로, 리스트의 끝부분에 위치한 객체저장소들 위주로 GC가 수행될 수 있다.
그리고, 메모리 컨트롤러는 선택된 N개의 객체 저장소에 대응하는 N개의 메모리의 세그먼트의 주소값을 검출할 수 있다. 이는 객체 저장소에 대응하여 실제적인 데이터가 저장되는 메모리의 세그먼트에 대한 가비지 컬렉션을 수행하기 위해 메모리의 세그먼트에 접근 가능한 주소값을 검출할 수 있다.
메모리 컨트롤러는 N개의 메모리의 세그먼트의 주소값을 이용하여 가장 오래동안 사용되지 않은 객체 저장소에 대응하는 메모리의 세그먼트에 대한 가비지 컬렉션을 수행할 수 있다. 이후, 메모리 컨트롤러는 호스트 장치로부터 요청된 객체 저장소를 비워진 메모리의 세그먼트에 할당할 수 있다.
이후, 할당 리스트는 헤드와 인접하여 가장 최근에 사용된 즉, 가장 최근에 메모리의 세그먼트에 할당된 객체 저장소K가 삽입될 수 있으며, 기존에 할당 리스트에 삽입되었던 객체 저장소들은 가장 오랫동안 사용되지 않은 위치로 이동되어 삽입될 수 있다. 여기서, 할당 리스트는 링크드 리스트의 자료 구조를 기반으로 형성될 수 있다.
도 6은 일실시예에 따른 호스트 장치와 저장 장치 간의 동작을 설명하기 위한 흐름도이다.
단계(601)에서 호스트 장치(104)는 힙 영역에 추가하고자 하는 객체 저장소를 실제 데이터가 저장되는 메모리의 세그먼트에 할당시키기 위한 요청을 메모리 컨트롤러(102)에 전달할 수 있다.
단계(602)에서 메모리 컨트롤러(102)는 호스트 장치(104)로부터 힙 영역의 객체 저장소를 메모리의 세그먼트에 할당하기 위한 요청을 수신할 수 있다. 그리고, 메모리 컨트롤러(102)는 요청에 따른 힙 영역에 분할된 객체 저장소들의 최저 사용 빈도를 고려하여 객체 저장소에 대한 접근 순서 리스트를 생성할 수 있다. 이후, 메모리 컨트롤러(102)는 접근 순서 리스트를 기반으로 가비지 컬렉션을 수행할 N개의 객체 저장소에 대응하는 N개의 메모리의 세그먼트를 검출할 수 있다.
단계(603)에서 메모리 컨트롤러(102)는 수신한 N개의 메모리의 세그먼트를 대상으로 가비지 컬렉션을 수행할 수 있다.
단계(604)에서 메모리 컨트롤러(102)는 가비지 컬렉션을 수행한 결과에 따라 비워진 메모리의 세그먼트 또는 가비지 컬렉션을 수행하기 이전에 비워져 있던 메모리의 세그먼트로 객체 저장소를 할당할 수 있다.
단계(605)에서 메모리 컨트롤러(102)는 객체 저장소가 할당된 메모리의 세그먼트에 대한 주소값을 리턴할 수 있다.
본 발명의 실시 예에 따른 방법들은 다양한 컴퓨터 수단을 통하여 수행될 수 있는 프로그램 명령 형태로 구현되어 컴퓨터 판독 가능 매체에 기록될 수 있다. 상기 컴퓨터 판독 가능 매체는 프로그램 명령, 데이터 파일, 데이터 구조 등을 단독으로 또는 조합하여 포함할 수 있다. 상기 매체에 기록되는 프로그램 명령은 본 발명을 위하여 특별히 설계되고 구성된 것들이거나 컴퓨터 소프트웨어 당업자에게 공지되어 사용 가능한 것일 수도 있다.
이상과 같이 본 발명은 비록 한정된 실시예와 도면에 의해 설명되었으나, 본 발명은 상기의 실시예에 한정되는 것은 아니며, 본 발명이 속하는 분야에서 통상의 지식을 가진 자라면 이러한 기재로부터 다양한 수정 및 변형이 가능하다.
그러므로, 본 발명의 범위는 설명된 실시예에 국한되어 정해져서는 아니 되며, 후술하는 특허청구범위뿐 아니라 이 특허청구범위와 균등한 것들에 의해 정해져야 한다.
101: 저장 장치
102: 메모리 컨트롤러
103: 메모리
104: 호스트 장치
105: 힙 영역
106: 객체 저장소 K
102: 메모리 컨트롤러
103: 메모리
104: 호스트 장치
105: 힙 영역
106: 객체 저장소 K
Claims (8)
- 저장 장치의 메모리 컨트롤러가 수행하는 가비지 컬렉션 방법에 있어서,
호스트 장치로부터 객체 저장소를 메모리의 세그먼트에 할당하기 위한 요청을 수신하는 단계; 및
상기 요청을 전송한 프로세스에 사상된 복수의 제1 객체 저장소에 대응되는 메모리의 세그먼트에 대한 로컬 가비지 컬렉션(LGC:Local Garbage Collection)을 수행하는 단계
를 포함하고,
어떤 프로세스에도 사상되지 않은 복수의 제2 객체 저장소에 대응되는 메모리의 세그먼트에 대한 분리된 풀 가비지 컬렉션(SFGC:Separated Full Garbage Collection)을 소정의 주기에 따라 수행하고,
상기 분리된 풀 가비지 컬렉션은
상기 복수의 제2 객체 저장소의 최저 사용 빈도(LRU:Least Recently Used)를 고려하여 객체 저장소에 대한 접근 순서 리스트를 생성하는 단계;
상기 생성된 접근 순서 리스트를 기반으로 가비지 컬렉션을 수행할 N개의 제2 객체 저장소에 대응하는 N개의 메모리의 세그먼트를 검출하는 단계; 및
상기 수신한 N개의 메모리의 세그먼트를 대상으로 가비지 컬렉션을 수행하는 단계
를 거쳐 수행되는 가비지 컬렉션 방법. - 삭제
- 제1항에 있어서,
상기 접근 순서 리스트를 생성하는 단계는
상기 복수의 제2 객체 저장소들 각각에 대응하는 메모리의 세그먼트의 사용 빈도에 따른 객체 저장소들이 사용되지 않은 시간을 기준으로 접근 순서 리스트를 생성하는 가비지 컬렉션 방법. - 제1항에 있어서,
상기 N개의 메모리의 세그먼트를 검출하는 단계는,
상기 객체 저장소에 대한 사용 빈도가 낮은 순서대로 N개의 객체 저장소를 선택하는 단계; 및
상기 선택된 N개의 객체 저장소에 대응하는 N개의 메모리의 세그먼트의 주소값을 검출하는 단계
를 포함하는 가비지 컬렉션 방법. - 가비지 컬렉션 방법을 수행하는 저장 장치의 메모리 컨트롤러에 있어서,
상기 메모리 컨트롤러는,
호스트 장치로부터 힙 영역의 객체 저장소를 메모리의 세그먼트에 할당하기 위한 요청을 수신하면, 상기 요청을 전송한 프로세스에 사상된 복수의 제1 객체 저장소에 대응되는 메모리의 세그먼트에 대한 로컬 가비지 컬렉션(LGC:local garbage collection)을 수행하고,
어떤 프로세스에도 사상되지 않은 복수의 제2 객체 저장소에 대응되는 메모리의 세그먼트에 대한 분리된 풀 가비지 컬렉션(SFGC:separated full garbage collection)을 소정의 주기에 따라 수행하고,
상기 분리된 풀 가비지 컬렉션은
상기 메모리 컨트롤러가 상기 복수의 제2 객체 저장소의 최저 사용 빈도(LRU:Least Recently Used)를 고려하여 객체 저장소에 대한 접근 순서 리스트를 생성하고, 상기 생성된 접근 순서 리스트를 기반으로 가비지 컬렉션을 수행할 N개의 제2 객체 저장소에 대응하는 N개의 메모리의 세그먼트를 검출하고, 상기 수신한 N개의 메모리의 세그먼트를 대상으로 가비지 컬렉션을 수행하는 과정을 거쳐 수행되는 저장 장치의 메모리 컨트롤러. - 삭제
- 제5항에 있어서,
상기 메모리 컨트롤러는
상기 복수의 제2 객체 저장소들 각각에 대응하는 메모리의 세그먼트의 사용 빈도에 따른 객체 저장소들이 사용되지 않은 시간을 기준으로 접근 순서 리스트를 생성하는 저장 장치의 메모리 컨트롤러. - 제5항에 있어서,
상기 메모리 컨트롤러는,
상기 객체 저장소에 대한 사용 빈도가 낮은 순서대로 N개의 객체 저장소를 선택한 후, 상기 선택된 N개의 객체 저장소에 대응하는 N개의 메모리의 세그먼트의 주소값을 검출하는 저장 장치의 메모리 컨트롤러.
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020160051078 | 2016-04-26 | ||
KR20160051078 | 2016-04-26 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20170122090A KR20170122090A (ko) | 2017-11-03 |
KR101950759B1 true KR101950759B1 (ko) | 2019-02-21 |
Family
ID=60383788
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020160156714A KR101950759B1 (ko) | 2016-04-26 | 2016-11-23 | 저장 장치의 메모리 컨트롤러가 수행하는 가비지 컬렉션 방법 및 메모리 컨트롤러 |
Country Status (1)
Country | Link |
---|---|
KR (1) | KR101950759B1 (ko) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR102076248B1 (ko) * | 2018-08-08 | 2020-02-11 | 아주대학교산학협력단 | 선택 지연 가비지 컬렉션 방법 및 이를 이용한 메모리 시스템 |
KR20200106739A (ko) | 2019-03-05 | 2020-09-15 | 에스케이하이닉스 주식회사 | 컨트롤러, 이를 포함하는 메모리 시스템 및 이의 동작 방법 |
CN111831467A (zh) * | 2020-07-21 | 2020-10-27 | 北京思特奇信息技术股份有限公司 | java进程内存溢出自熔断的方法、***和电子设备 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2001331367A (ja) * | 2000-03-17 | 2001-11-30 | Fujitsu Ltd | メモリ管理装置、メモリ管理方法、メモリ管理プログラム、及び記憶媒体 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9430376B2 (en) * | 2012-12-26 | 2016-08-30 | Western Digital Technologies, Inc. | Priority-based garbage collection for data storage systems |
-
2016
- 2016-11-23 KR KR1020160156714A patent/KR101950759B1/ko active IP Right Grant
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2001331367A (ja) * | 2000-03-17 | 2001-11-30 | Fujitsu Ltd | メモリ管理装置、メモリ管理方法、メモリ管理プログラム、及び記憶媒体 |
Also Published As
Publication number | Publication date |
---|---|
KR20170122090A (ko) | 2017-11-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP7091203B2 (ja) | メモリシステムおよび制御方法 | |
US10761731B2 (en) | Array controller, solid state disk, and method for controlling solid state disk to write data | |
CN106874217B (zh) | 存储器***及控制方法 | |
US7010555B2 (en) | System and method for compacting a computer system heap | |
KR102427120B1 (ko) | 저장 장치용 자동 i/o 스트림 선택 | |
KR102094236B1 (ko) | 스토리지 디바이스 및 컴퓨터 시스템 | |
US9218277B2 (en) | Wear leveling | |
US20110246742A1 (en) | Memory pooling in segmented memory architecture | |
KR20140102679A (ko) | 순차적인 순서의 스왑 파일을 이용한 작업 세트 스와핑 기법 | |
KR20120030137A (ko) | 영구 가비지 컬렉션을 갖는 메모리 시스템 | |
CN108475230B (zh) | 一种存储***和***垃圾回收方法 | |
CN113377695B (zh) | 读写分离的固态存储设备的数据分布方法 | |
US10817186B2 (en) | Memory system | |
JP2014206884A (ja) | 情報処理装置、情報処理方法、およびプログラム | |
KR101950759B1 (ko) | 저장 장치의 메모리 컨트롤러가 수행하는 가비지 컬렉션 방법 및 메모리 컨트롤러 | |
CN110389712B (zh) | 数据写入方法及其装置、固态硬盘和计算机可读存储介质 | |
US8274521B2 (en) | System available cache color map | |
US10891073B2 (en) | Storage apparatuses for virtualized system and methods for operating the same | |
US10628301B1 (en) | System and method for optimizing write amplification of non-volatile memory storage media | |
US10621096B2 (en) | Read ahead management in a multi-stream workload | |
US20100299672A1 (en) | Memory management device, computer system, and memory management method | |
EP3293625B1 (en) | Method and device for accessing file, and storage system | |
KR101549569B1 (ko) | 가비지 컬렉션 수행 방법 및 그 방법을 이용한 플래시 메모리 장치 | |
US10210097B2 (en) | Memory system and method for operating the same | |
US20190339898A1 (en) | Method, system and computer program product for managing data storage in data storage systems |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E902 | Notification of reason for refusal | ||
E90F | Notification of reason for final refusal | ||
E701 | Decision to grant or registration of patent right |