KR20230133126A - 사용자 가상 주소를 이용한 메모리 액세스 방법 및 이를 이용한 디바이스 - Google Patents

사용자 가상 주소를 이용한 메모리 액세스 방법 및 이를 이용한 디바이스 Download PDF

Info

Publication number
KR20230133126A
KR20230133126A KR1020220030255A KR20220030255A KR20230133126A KR 20230133126 A KR20230133126 A KR 20230133126A KR 1020220030255 A KR1020220030255 A KR 1020220030255A KR 20220030255 A KR20220030255 A KR 20220030255A KR 20230133126 A KR20230133126 A KR 20230133126A
Authority
KR
South Korea
Prior art keywords
address
memory
offset
virtual address
page
Prior art date
Application number
KR1020220030255A
Other languages
English (en)
Inventor
김찬
Original Assignee
한국전자통신연구원
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 한국전자통신연구원 filed Critical 한국전자통신연구원
Priority to KR1020220030255A priority Critical patent/KR20230133126A/ko
Publication of KR20230133126A publication Critical patent/KR20230133126A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0626Reducing size or complexity of storage systems
    • 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/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/12Replacement control
    • G06F12/121Replacement control using replacement algorithms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • G06F3/0611Improving I/O performance in relation to response time
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0662Virtualisation aspects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3877Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Software Systems (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

사용자 가상 주소를 이용한 메모리 액세스 방법 및 이를 이용한 디바이스가 제공된다. 호스트 프로세서와 메모리를 공유하는 디바이스가 메모리 액세스시, 메모리에 저장된 데이터를 위한 사용자 가상 주소를 획득하면, 사용자 가상 주소에 오프셋을 추가하여 메모리를 액세스하기 위한 주소로서 출력한다. 여기서, 오프셋은 메모리에 상기 디바이스에 대해 할당된 거대 페이지의 물리 주소의 시작 번지와 상기 거대 페이지의 사용자 가상 주소의 차이값이다.

Description

사용자 가상 주소를 이용한 메모리 액세스 방법 및 이를 이용한 디바이스{Memory access method using user virtual address and device using the same}
본 개시는 메모리 액세스 방법에 관한 것으로, 더욱 상세하게 말하자면, 사용자 가상 주소를 이용한 메모리 액세스 방법 및 이를 이용한 디바이스에 관한 것이다.
가속기와 같은 디바이스는 DMA(Direct Memory Access) 엔진을 통해 메모리를 액세스하거나, 또는 자체 프로세서를 이용하여 메모리를 액세스한다. 호스트 CPU(central processing unit)가 계산에 필요한 데이터를 메모리에 설정하고 디바이스에게 이 데이터를 처리하도록 요구하는 경우에, 계산에 필요한 많은 데이터들이 포인터(pointer)를 통해 연결된 형태를 취하게 되며, 이 포인터들은 OS(operating system) 위에서 만들어진 주소이기 때문에 가상 주소가 된다. 따라서 디바이스가 이 포인터를 포함하는 데이터를 사용하여 계산을 하기 위해서는, 가상 주소를 물리 주소로 변환해 주기 위한 IOMMU(Input/Output Memory Management Unit)가 필요하다.
본 개시가 해결하고자 하는 과제는 IOMMU 장치를 별도로 가지고 있지 않은 디바이스에서도, 사용자의 가상 주소를 그대로 사용하여 메모리를 액세스할 수 있는 방법 및 장치를 제공하는 것이다.
일 실시 예에 따르면, 호스트 프로세서와 메모리를 공유하는 디바이스가 메모리를 액세스하는 방법이 제공된다. 상기 방법은, 상기 디바이스가, 상기 메모리에 저장된 데이터를 위한 사용자 가상 주소를 획득하는 단계; 및 상기 디바이스가, 상기 사용자 가상 주소에 오프셋을 추가하여 상기 메모리를 액세스하기 위한 주소로서 출력하는 단계를 포함하며, 상기 오프셋은 상기 메모리에 상기 디바이스에 대해 할당된 거대 페이지(huge page)의 물리 주소의 시작 번지와 상기 거대 페이지의 사용자 가상 주소의 차이값이다.
일 구현 예에서, 상기 사용자 가상 주소는 상기 거대 페이지에 데이터들이 포함되면서 데이터를 연결하는 포인터가 상기 거대 페이지 내부의 번지를 가리키는 구조를 가지는 데이터에 대한 것일 수 있다.
일 구현 예에서, 상기 메모리에 상기 디바이스에 대해 복수의 거대 페이지가 할당되어 있으며, 거대 페이지별로 오프셋이 매핑될 수 있다. 이 경우, 상기 출력하는 단계는, 상기 사용자 가상 주소에 복수의 거대 페이지 중 대응하는 거대 페이지의 오프셋을 추가하여 상기 메모리를 액세스하기 위한 주소로서 출력할 수 있다.
일 구현 예에서, 상기 방법은, 상기 디바이스가, 상기 사용자 가상 주소에 대해, 설정 함수를 사용하여 해당 거대 페이지의 물리 주소의 시작 번지를 획득하는 단계; 및 상기 디바이스가, 상기 시작 번지와 상기 거대 페이지의 사용자 가상 주소의 차이값인 오프셋을 획득하는 단계를 더 포함할 수 있다.
일 구현 예에서, 상기 설정 함수는 gate_user_pages 및 kmap, page_to_phys 중 하나를 포함할 수 있다.
일 구현 예에서, 상기 디바이스는 IOMMU(Input/Output Memory Management Unit) 없이 동작하여 상기 메모리를 액세스할 수 있다.
다른 실시 예에 따르면, 호스트 프로세서와 메모리를 포함하는 시스템에서 상기 메모리를 액세스하는 디바이스가 제공된다. 상기 디바이스는, 상기 메모리에 상기 디바이스에 대해 할당된 거대 페이지에 대응하여 오프셋이 매핑된 오프셋 테이블을 포함하는 오프셋 추가부; 및 상기 메모리에 저장된 데이터를 위한 사용자 가상 주소를 획득하고, 상기 사용자 가상 주소를 상기 오프셋 추가부에 제공하도록 구성된 데이터 계산부를 포함하고, 상기 오프셋 추가부는 상기 사용자 가상 주소에 오프셋을 추가하여 상기 메모리를 액세스하기 위한 주소로서 출력하도록 구성되며, 상기 오프셋은 상기 메모리에 상기 디바이스에 대해 할당된 거대 페이지의 물리 주소의 시작 번지와 상기 거대 페이지의 사용자 가상 주소의 차이값이다.
일 구현 예에서, 상기 사용자 가상 주소는 상기 거대 페이지에 데이터들이 포함되면서 데이터를 연결하는 포인터가 상기 거대 페이지의 번지를 가리키는 구조를 가지는 데이터에 대한 것일 수 있다.
일 구현 예에서, 상기 메모리에 상기 디바이스에 대해 복수의 거대 페이지가 할당되어 있으며, 상기 오프셋 테이블은 거대 페이지별로 콘텍스트 ID와 대응하는 오프셋이 매핑되어 있을 수 있다. 이 경우, 상기 데이터 계산부는 거대 페이지에 대응하는 콘텍스트 ID가 기록된 레지스터를 더 포함할 수 있다.
일 구현 예에서, 상기 데이터 계산부는 추가로, 상기 레지스터로부터 상기 사용자 가상 주소에 대응하는 거대 페이지의 콘텍스트 ID를 획득하도록 구성될 수 있으며, 상기 오프셋 추가부는 상기 콘텍스트 ID를 기반으로 상기 오프셋 테이블로부터 대응하는 오프셋을 획득하여 상기 사용자 가상 주소에 추가하도록 구성될 수 있다.
일 구현 예에서, 상기 디바이스는 IOMMU(Input/Output Memory Management Unit) 없이 동작하여 상기 메모리를 액세스할 수 있다.
일 구현 예에서, 상기 디바이스는 가속기일 수 있다.
일 구현 예에서, 상기 디바이스는 상기 사용자 가상 주소에 대해, 설정 함수를 사용하여 해당 거대 페이지의 물리 주소의 시작 번지를 획득하도록 구성될 수 있으며, 상기 설정 함수는 gate_user_pages 및 kmap, page_to_phys 중 하나를 포함할 수 있다.
실시 예들에 따르면, IOMMU 장치를 가지지 않는 디바이스에서도, 사용자 가상 주소를 이용하여 메모리 액세스를 할 수 있다. 동작 중에 "사용자 가상 주소" 로부터 "디바이스 가상 주소"로의 변환을 생략할 수 있으므로, 디바이스 드라이버를 훨씬 간단하게 만들 수 있다.
또한, 비싼 IOMMU 같은 장치 IP(intellectual property)를 구입하거나 새로 설계(여기서는 보통 RTL(register-transfer level) 설계)할 필요가 없으므로, 비용이 감소된다.
또한, 동작 중, IO(Input/Output) 페이지 폴트(page fault)에 따라 페이지 테이블을 검색하는 페이지 작업(page walk)같은 처리 시간이 들지 않으므로, 메모리 액세스 시간을 감소시킬 수 있으며, 이에 따라 가속기와 같은 디바이스의 처리 성능을 훨씬 높일 수 있다.
도 1은 주소 변환 방식을 나타낸 도이다.
도 2는 본 개시의 실시 예에 따른 디바이스를 포함하는 시스템의 구조를 나타낸 도이다.
도 3은 본 개시의 실시 예에 따른 디바이스의 구조를 나타낸 도이다.
도 4는 본 개시의 실시 예에 따른 오프셋 추가 처리를 나타낸 예시도이다.
도 5는 본 개시의 실시 예에 따른 사용자 가상 주소를 이용한 메모리 액세스 방법의 흐름도이다.
아래에서는 첨부한 도면을 참고로 하여 본 개시의 실시 예에 대하여 본 개시가 속하는 기술 분야에서 통상의 지식을 가진 자가 용이하게 실시할 수 있도록 상세히 설명한다. 그러나 본 개시는 여러 가지 상이한 형태로 구현될 수 있으며 여기에서 설명하는 실시 예에 한정되지 않는다. 그리고 도면에서 본 개시를 명확하게 설명하기 위해서 설명과 관계없는 부분은 생략하였으며, 명세서 전체를 통하여 유사한 부분에 대해서는 유사한 도면 부호를 붙였다.
명세서 전체에서, 어떤 부분이 어떤 구성요소를 "포함"한다고 할 때, 이는 특별히 반대되는 기재가 없는 한 다른 구성 요소를 제외하는 것이 아니라 다른 구성요소를 더 포함할 수 있는 것을 의미한다.
본 명세서에서 단수로 기재된 표현은 "하나" 또는 "단일" 등의 명시적인 표현을 사용하지 않은 이상, 단수 또는 복수로 해석될 수 있다.
또한, 본 개시의 실시 예에서 사용되는 제1, 제2 등과 같이 서수를 포함하는 용어는 구성 요소들을 설명하는데 사용될 수 있지만, 구성 요소들은 용어들에 의해 한정되어서는 안 된다. 용어들은 하나의 구성 요소를 다른 구성 요소로부터 구별하는 목적으로만 사용된다. 예를 들어, 본 개시의 권리 범위를 벗어나지 않으면서 제1 구성 요소는 제2 구성 요소로 명명될 수 있고, 유사하게 제2 구성 요소도 제1 구성 요소로 명명될 수 있다.
이하, 도면을 참조하여 본 개시의 실시 예에 따른 사용자 가상 주소를 이용한 메모리 액세스 방법 및 이를 이용한 디바이스에 대하여 설명한다.
디바이스 가상화 기술은, CPU(central processing unit) 가상 번지를 물리 번지로 변환하는 MMU(Memory Management Unit)를 통한 'CPU 가상화' 기술과 함께 가상화의 주요 기술로 사용되고 있다. 디바이스 가상화 기술을 사용하여 하나의 물리적 컴퓨터 위에서 여러 개의 가상 컴퓨터가 다양한 IO((Input/Output) 장치를 사용하여 독립적으로 동작하는 것이 가능하다.
도 1은 주소 변환 방식을 나타낸 도이다.
구체적으로, 도 1은 리눅스(Linux)에서의 주소 변환 방식을 도시한다. IOMMU(Input/Output Memory Management Unit)는 디바이스의 가상 주소를 버스 주소로 변환하는 하드웨어 기능을 담당한다. 버스 주소는 디바이스가 위치한 버스에서의 번지이고, 이 값은 CPU 물리 주소와 같을 수도 있으나 디바이스에서는 버스 주소가 의미가 있다. 본 명세서에서 앞으로 디바이스에 대해'물리 주소'라고 했을 때 이는 버스 주소를 의미한다. IOMMU는 마치 CPU에 있는 MMU가 하는 것과 같이, 디바이스가 메모리를 액세스할 때, IO 페이지 테이블(page table)을 탐색하여 디바이스 가상 주소의 페이지에 대응하는 버스 번지 페이지를 찾아서 내부의 TLB(table look-aside buffer)에 저장한 다음, 이 저장된 TLB를 이용하여 디바이스의 가상 번지를 버스 번지로 변환한다. IOMMU 내부의 TLB에는 이렇게 찾은 많은 테이블 엔트리(table entry)들이 기록된다.
디바이스 드라이버의 경우, 리눅스 코어(core)의 MM(Memory Management) 서브시스템을 통해 dma_alloc_coherent 함수를 사용하여, 코히런시(coherency)가 보장되어야 할, CPU와 디바이스가 동시에 액세스할 수 있는 메모리를 할당 받는다. 그리고 해당 메모리 영역에 대한 커널(kernel) 주소와 DMA 주소(또는 버스 주소)를 전달받아, 드라이버 내부에서 커널 주소를 사용하고, 디바이스에는 DMA 주소(= 버스 주소)를 설정한다. OS의 MM은 이와 같이 DMA용 버퍼를 할당할 때, 해당 DMA 주소가 버스 주소로 변환되도록, 디바이스에 연결된 IOMMU가 사용할 페이지 테이블을 설정하게 되어 있다. 또는, 코히런트 메모리가 필요하지 않고 데이터가 한쪽 방향으로 전달되어야 하는 경우에, 드라이버는 kmalloc 함수를 통해 메모리를 할당 받은 후 반환된 커널 주소를 사용하고, dma_map_xxx (xxx는 single 또는 page 또는 sg) 함수를 통해 커널 주소에 대한 DMA 주소를 받아서 이를 디바이스에 설정하여 사용한다. 또한, OS 위에서 동작하는 사용자 프로그램은 자신의 가상 주소를 가지고 동작하며, 포인터(pointer)로 연결된 어떤 입출력 데이터를 포함하는 데이터 구조를 만든다고 하였을 때, 여기에 나타나는 모든 주소(포인터)는 사용자 가상 주소(user space virtual address)가 된다.
일반적으로 디바이스 드라이버가 사용자 프로그램에서 데이터를 받을 때는, copy_from_user 함수를 통해 데이터를 커널 영역의 버퍼로 복사해 와야 하고, 드라이버의 커널 영역의 버퍼에 있는 데이터를 사용자에게 넘길 때는 copy_to_user 함수를 사용한다. 포인터를 통해 연결된 커다란 데이터 구조를 받을 때, 각 포인터에 대응하는 메모리에 대해 위와 같은 복사가 별도로 수행되어 커널 주소를 사용하여 데이터를 연결되도록 해 주어야, 커널 공간(space)에서 동일한 데이터 구조가 된다. 이러한 포인터로 연결된 데이터 구조를 디바이스에 넘겨줄 때(포인터를 통해)는, 커널 주소를 DMA 주소로 바꾸어서 넘겨주며, 디바이스가 연결된 IOMMU에서 그 DMA 주소를 물리 주소로 바꾸도록 해 주어야 한다. 이러한 동작은 앞에서 설명한 dma_alloc_xxx이나 dma_map_xxx 함수 등을 통해 OS가 자동으로 페이지 테이블을 설정하고, IO 페이지 폴트(fault) 처리를 통해 자동으로 이루어지도록 되어 있다.
그러나 이러한 IOMMU는 새로운 하드웨어와 그에 대한 소프트웨어를 설계하는 비용이 높고, 디바이스가 동작 중에도 IOMMU를 통해 메모리를 액세스해야 하므로, 액세스 시간이 많이 소요된다.
본 개시의 실시 예에서는 가속기와 같은 디바이스가 IOMMU를 별도로 가지고 있지 않아도, 사용자 가상 주소(커널 가상 주소가 아닌 user space virtual address)를 사용하여 메모리 액세스를 할 수 있도록 한다.
도 2는 본 개시의 실시 예에 따른 디바이스를 포함하는 시스템의 구조를 나타낸 도이다.
첨부한 도 2에서와 같이, 본 개시의 실시 예의 시스템에서, 디바이스(1)가 IOMMU 없이, 시스템 버스와 같은 시스템 인터커넥트(system interconnect)(2)에 연결된 메모리 컨트롤러(3)를 통해 메모리(4)에 액세스하도록 구성된다. CPU(5)와 다른 디바이스(6)가 시스템 인터커넥트(2)에 연결되어 있으며, 메모리(4)는 페이지 테이블(T)을 포함한다. 여기서, 디바이스(1)는 계산 가속기와 같은 디바이스일 수 있다.
이러한 시스템은 컴퓨팅 장치일 수 있으며, 각각의 구성 요소들은 버스인 시스템 인터컨넥트(2)에 의해 연결되어 서로 통신을 수행할 수 있다. 또한, 각각의 구성 요소들은 공통 버스가 아니라, 프로세서인 CPU(5)를 중심으로 개별 인터페이스 또는 개별 버스를 통하여 연결될 수도 있다. 여기서, CPU(5) 대신에 AP(Application Processor), GPU(Graphic Processing Unit) 등과 같은 다양한 유형의 프로세서가 사용될 수 있으며, CPU(5)를 호스트 프로세서라고 명명할 수 있다.
메모리(4)는 다양한 형태의 휘발성 또는 비 휘발성 저장 매체를 포함할 수 있다. 예를 들어, 메모리(4)는 ROM(read-only memory) 및 RAM(random access memory) 등을 포함할 수 있다. 디바이스(1)는 CPU(5)와 메모리(4)의 저장 공간을 공유한다.
본 개시의 실시 예에서는 IOMMU가 없이도, 디바이스(1)가 사용자의 가상 주소를 그대로 사용할 수 있도록 한다.
사용자 프로그램은 보통의 OS 위에서 프로그램을 만드는 방식이며, huge_tlb를 사용하여 디바이스에서 사용할 충분히 큰 버퍼를 만들어 둔다. 이것은 mmap 함수를 통해 이루어진다. mmap 함수는 원래 파일을 메모리에 매핑하기 위한 것이지만, 파일과 관련없이 메모리에 큰 영역을 잡을 수 있도록 해 주며, OS에서 이러한 용도로 거대 페이지(huge page)를 미리 할당할 수 있다. 주요 CPU 아키텍쳐가 이를 지원하고 있으며 데비안(Debian)의 경우, 2MB 또는 1GB 크기의 거대 페이지를 할당할 수 있고, 이러한 거대 페이지는 원하는 개수만큼 할당할 수 있다. 예를 들어, /etc/sysctl.conf에 vm.nr_hugepages = 16과 같이 하거나, 또는 boot command에 hugepages=16, hugepagesz=1G와 같이 추가하는 것에 의해, 거대 페이지를 할당할 수 있다.
이렇게 데이터 구조를 만들고, 포인터로 연결된 데이터를 데이터 구조에 채워서 디바이스의 드라이버에 내려 보내면, 드라이버는 여기에 포함된 포인터들에 대해 별도로 주소 변환 및 복사(copy)를 하지 않고 그대로 디바이스에 내려 보내게 된다. 디바이스는 드라이버에서 보내 준 주소 정보를 사용하여 그대로 메모리를 액세스하게 되며, 이때, 상기 주소 정보는 사용자 가상 주소이므로 에러가 발생한다.
본 개시의 실시 예에서는 디바이스가, 사용자 가상 주소와 물리 주소와의 오프셋(offset)를 보유하며, 발생되는 주소 정보에 오프셋을 추가해서 메모리를 액세스한다. 이를 위해, 데이터 구조 내부의 데이터는 하나의 거대 페이지 안에 포함되어야 하며, 데이터 구조 내부에 있는 포인터도 동일한 거대 페이지 내부의 번지를 가리킨다. 이에 따라, 모든 주소들은 하나의 물리적으로 연속된 메모리 공간에 위치하므로, 하나의 오프셋 값을 적용하여 메모리를 액세스 하는 것이 가능하게 된다. 드라이버에서 dma용으로 kmalloc이나 dmal_alloc_xxx로 버퍼를 잡는 경우, 크기의 제한이 있어 가속기와 같은 대용량 데이터 처리에는 보통 쓸 수가 없다.
드라이버는 애플리케이션으로부터 전달받은 주소 정보 즉, 사용자 가상 주소에 대해, 설정 함수(예를 들어, gate_user_pages, kmap, page_to_phys 등)를 사용하여 해당 거대 페이지의 버스 주소의 시작 번지를 획득한다. 물리 주소와 버스 주소에 차이가 있는 경우는, 해당 버스 드라이버에서 그 차이를 기반으로 버스 주소를 획득할 수 있다. 그리고 사용자 가상 주소와 획득된 물리 주소의 시작 번지의 차이를 획득하고, 획득된 차이값을 오프셋 레지스터에 기록한다. 디바이스는 데이터 구조에 있는 사용자 가상 주소를 그대로 사용하여 동작하게 되며, 시스템 버스로 메모리 액세스를 위한 주소가 나가기 전에, 사용자 가상 주소에 앞에서 설정한 오프셋 값(오프셋 레지스터에 기록된 값)을 더한다. 이에 따라 사용자 가상 주소가 아닌 해당 거대 페이지의 물리 주소의 번지가 시스템 버스로 출력된다.
만약 애플리케이션에서 별도의 거대 페이지를 사용하는 경우, 별도의 거대 페이지를 나타내는 값도 드라이버에 전달하여, 해당 거대 페이지에 대응하는 다른 오프셋 값이 사용되도록 한다. 이를 위해, 어떤 거대 페이지에 대응하는 데이터를 처리 중인지를 구분하기 위한 페이지 식별 정보(huge page ID)가 사용되며, 이러한 정보는 별도의 레지스터에 의해 기록 및 사용될 수 있다.
본 개시의 실시 예에서는 거대 페이지를 사용함으로써, 메모리 액세스와 페이지 폴트 처리를 거치는 복잡한 주소 변환을 하지 않게 된다. 이에 따라 메모리 액세스 시간을 줄이는 것이 가능하며, 그 결과 가속기와 같은 디바이스의 성능을 보다 향상시킬 수 있다.
이를 위해, 본 개시의 실시 예에서는 도 3과 같은 디바이스를 제공한다.
도 3은 본 개시의 실시 예에 따른 디바이스의 구조를 나타낸 도이다.
본 개시의 실시 예에 따른 디바이스(1)는 첨부한 도 3에서와 같이, 디바이스 계산부(10) 및 오프셋 추가부(20)를 포함한다. 이외에도 디바이스(1)는 다른 구성 요소를 더 포함하는 형태로 이루어질 수 있다.
메모리에 디바이스(1)에 대해 적어도 하나의 거대 페이지(huge page)가 할당되어 있고, 디바이스에 설정되는 데이터는 제1 구조 즉, 하나의 거대 페이지에 데이터들이 포함되면서 데이터를 연결하는 포인터는 해당 거대 페이지의 번지를 가리키는 구조를 가진다.
포인터는 가상 번지이며, 이러한 가상 번지인 사용자 가상 주소를 사용하여 메모리를 액세스하기 위해, 본 개시의 실시 예서, 오프셋 추가부(20)는 디바이스에 할당된 거대 페이지에 대한 오프셋을 저장하는 오프셋 테이블(21)을 포함한다. 오프셋 테이블(21)은 디바이스에 할당된 거대 페이지별로 오프셋이 매핑되어 있다. 디바이스에 할당된 거대 페이지를 구별하는 ID 즉 콘텍스트 ID(Context ID)별로 오프셋이 매핑되어 관리된다. Context ID는 huge page ID에 대응한다. 여기서, 오프셋은 해당 거대 페이지의 물리 주소의 시작 번지와 거대 페이지의 사용자 가상 주소의 차이값이다. 시작 번지는 알려진 함수(gate_user_pages, kmap, page_to_phys 등)를 사용하여 획득될 수 있다.
디바이스 계산부(10)는 설정된 데이터에 대응하는 거대 페이지의 값별로 Context ID(=huge page ID)를 기록하는 레지스터(11)를 포함한다. 이러한 레지스터(11)는 Context ID 레지스터라고도 명명된다. 디바이스 계산부(10)는 드라이버로부터 제1 구조를 가지는 데이터에 대한 포인터들(사용자 가상 주소)을 포함하는 주소 정보와 설정된 데이터에 대응하는 거대 페이지의 값이 입력되면, 레지스터(11)로부터 거대 페이지의 값에 대응하는 Context ID를 획득한다. 그리고 획득된 Context ID와 주소 정보 즉, 사용자 가상 주소를 오프셋 추가부(20)로 전달한다.
오프셋 추가부(20)는 전달받은 Context ID를 기반으로 오프셋 테이블(21)로부터 해당하는 오프셋을 획득하고, 전달받은 사용자 가상 주소에 획득된 오프셋을 추가한다. 이와 같이 거대 페이지의 물리 주소의 시작 번지와 거대 페이지의 사용자 가상 주소의 차이값인 오프셋이 사용자 가상 주소에 추가됨으로써, 이는 실질적인 메모리 액세스를 위한 해당 거대 페이지의 물리 주소의 번지가 된다. 따라서, 오프셋 추가부(20)로부터 출력되는 물리 주소가 시스템 버스를 통해 메모리 컨트롤러로 전달됨으로써, 해당 물리 주소에 대응하는 데이터가 시스템 버스를 통해 디바이스(1)의 디바이스 계산부(10)로 제공된다. 이후, 디바이스 계산부(10)는 전달받은 데이터를 기반으로 가속 계산 등을 수행한다.
도 4는 본 개시의 실시 예에 따른 오프셋 추가 처리를 나타낸 예시도이다.
계산을 위한 제어 구조체(예: CPU)에서 입력 버퍼의 주소와 출력 버퍼의 주소, 그리고 가속기에서 실행할 프로그램을 내려 보내면서 이러한 정보를 포함하는 구조체의 주소를 내려 보낸다고 했을 때, CPU에서 내려 보낸 입력 버퍼의 주소는 가상 주소 0x220000에 있고 출력 버퍼의 주소는 가상 주소 0x240000이라고 하자. 그리고 이들 버퍼는 모두 가상 주소 0x200000에서부터 0x400000까지 (2MB) 가지는 거대 페이지에 있고, 물리 주소는 0x80000000이라고 하자. 가속기의 프로그램에서는 입력에서 시작되는 값 0x1000개를 읽어 제곱을 한 후에 출력 버퍼에 차례로 기록한다고 하자.
이 경우, 첨부한 도 4에 예시되어 있듯이, 가속기는 프로그램을 실행하면서 계속 0x200000에서 시작하는 번지를 발생하며, 거대 페이지의 물리 주소의 시작 번지인 0x80000000와 가상 주소 0x200000의 차이값인 오프셋(0x7FE00000)을 가상 주소에 추가함으로써, 실제로 버스에 주소가 나갈 때는 0x80000000에서 시작하는 번지가 발생되어 원래의 응용 프로그램이 원하는 데이터를 액세스하게 된다.
도 5는 본 개시의 실시 예에 따른 사용자 가상 주소를 이용한 메모리 액세스 방법의 흐름도이다.
여기서는 설명의 편의를 위해, 디바이스 드라이버에서의 초기화 및 종료 부분을 제외하고, 본 개시의 방법과 관련된 부분에 따른 단계만을 도시한다.
첨부한 도 5에 도시된 바와 같이, 메모리에 디바이스에 대응하는 거대 페이지가 할당된 상태에서, 디바이스에 대해 드라이버에 의해 제1 구조의 데이터가 설정된다(S100). 응용 프로그램에서 설정한 데이터 구조가 그대로 설정되는 것이다. 한편, 거대 페이지를 사용하지 않는 경우, 드라이버에서 직접 커널 버퍼에 복사하여 연결하거나 사용자 버퍼를 고정한(page-pin) 상태에서 물리 주소를 얻어 연결하는 기존의 방법을 추가로 사용할 수도 있다.
이러한 데이터 설정에 따라 전달되는 거대 페이지의 값(= 거대 페이지의 사용자 가상 주소)을 획득하며(S110), 거대 페이지의 값을 기반으로 레지스터(11)로부터 대응하는 콘텍스트 ID(Context ID)를 획득한다(S120). 거대 페이지의 시작 주소와 콘텍스트 ID 사이에 소정의 매핑을 사용할 수도 있고, 거대 페이지의 시작 주소를 콘텍스트 ID로 그대로 사용할 수도 있다. 매핑을 사용하는 경우, 해쉬 테이블을 사용하거나 시퀀셜 서치(sequential serach) 등을 사용할 수도 있다. 그리고, 콘텍스트 ID를 기반으로 오프셋 테이블(21)로부터 대응하는 거대 페이지의 오프셋을 획득한다(S130). 이 오프셋은 사용자의 가상 주소와 물리 주소와의 차이를 의미한다.
그리고, 오프셋 즉, 거대 페이지의 물리 주소의 시작 번지와 거대 페이지의 사용자 가상 주소의 차이값인 오프셋을 사용자 주소 정보에 추가하여 출력한다(S140).
이러한 오프셋이 추가된 사용자 가상 주소는 실질적인 메모리 액세스를 위한 해당 거대 페이지의 물리 주소의 번지가 된다. 따라서, 디바이스(1)로부터 출력되는 물리 주소가 시스템 버스를 통해 메모리 컨트롤러로 전달된다. 이에 따라 메모리의 물리 번지에 대응하는 데이터가 시스템 버스를 통해 디바이스(1)로 제공된다. 따라서, 디바이스(1)는 오프셋이 추가된 사용자 가상 주소를 이용하여 메모리의 대응하는 거대 페이지의 물리 번지에 따른 데이터를 획득하게 된다(S150). 이후, 데이터를 이용한 계산 등이 수행된다.
이러한 방법에서, 사용자 가상 주소에 대해, 설정 함수를 사용하여 해당 거대 페이지의 물리 주소의 시작 번지를 획득하고, 시작 번지와 상기 거대 페이지의 사용자 가상 주소의 차이값인 오프셋을 획득하는 단계가, 추가적으로 수행될 수 있다. 예를 들어, 단계(S140) 이전에 수행될 수 있다.
이러한 실시 예에서, "사용자 가상 주소" 로부터의 "커널 가상 주소 및 디바이스 가상 주소" 변환을 생략할 수 있으며, IOMMU 회로 없이도 디바이스가 메모리를 액세스 할 수 있다.
또한, 이러한 실시 예에서 상기 방법이 수행되는 순서는 위에 기술된 순서에 한정되는 것은 아니다.
본 개시의 일 실시 예에 따른 방법 중 적어도 일부는 컴퓨팅 장치인 시스템에서 실행되는 프로그램 또는 소프트웨어로 구현될 수 있고, 프로그램 또는 소프트웨어는 컴퓨터로 판독 가능한 매체에 저장될 수 있다. 또한, 본 개시의 일 실시 예에 따른 방법 중 적어도 일부는 컴퓨팅 장치인 시스템과 전기적으로 접속될 수 있는 하드웨어로 구현될 수도 있다.
본 개시의 실시 예는 이상에서 설명한 장치 및/또는 방법을 통해서만 구현이 되는 것은 아니며, 본 개시의 실시예의 구성에 대응하는 기능을 실현하기 위한 프로그램, 그 프로그램이 기록된 기록 매체 등을 통해 구현될 수도 있으며, 이러한 구현은 앞서 설명한 실시예의 기재로부터 본 개시가 속하는 기술분야의 전문가라면 쉽게 구현할 수 있는 것이다.
이상에서 본 개시의 실시 예에 대하여 상세하게 설명하였지만 본 개시의 권리범위는 이에 한정되는 것은 아니고 다음의 청구범위에서 정의하고 있는 본 개시의 기본 개념을 이용한 당업자의 여러 변형 및 개량 형태 또한 본 개시의 권리범위에 속하는 것이다.

Claims (13)

  1. 호스트 프로세서와 메모리를 공유하는 디바이스가 메모리를 액세스하는 방법으로서,
    상기 디바이스가, 상기 메모리에 저장된 데이터를 위한 사용자 가상 주소를 획득하는 단계; 및
    상기 디바이스가, 상기 사용자 가상 주소에 오프셋을 추가하여 상기 메모리를 액세스하기 위한 주소로서 출력하는 단계
    를 포함하며,
    상기 오프셋은 상기 메모리에 상기 디바이스에 대해 할당된 거대 페이지(huge page)의 물리 주소의 시작 번지와 상기 거대 페이지의 사용자 가상 주소의 차이값인, 방법.
  2. 제1항에 있어서,
    상기 사용자 가상 주소는 상기 거대 페이지에 데이터들이 포함되면서 데이터를 연결하는 포인터가 상기 거대 페이지 내부의 번지를 가리키는 구조를 가지는 데이터에 대한 것인, 방법.
  3. 제1항에 있어서,
    상기 메모리에 상기 디바이스에 대해 복수의 거대 페이지가 할당되어 있으며, 거대 페이지별로 오프셋이 매핑되며,
    상기 출력하는 단계는
    상기 사용자 가상 주소에 복수의 거대 페이지 중 대응하는 거대 페이지의 오프셋을 추가하여 상기 메모리를 액세스하기 위한 주소로서 출력하는, 방법.
  4. 제1항에 있어서,
    상기 디바이스가, 상기 사용자 가상 주소에 대해, 설정 함수를 사용하여 해당 거대 페이지의 물리 주소의 시작 번지를 획득하는 단계; 및
    상기 디바이스가, 상기 시작 번지와 상기 거대 페이지의 사용자 가상 주소의 차이값인 오프셋을 획득하는 단계
    를 더 포함하는, 방법.
  5. 제4항에 있어서,
    상기 설정 함수는 gate_user_pages, kmap 및 page_to_phys 중 하나를 포함하는, 방법.
  6. 제1항에 있어서,
    상기 디바이스는 IOMMU(Input/Output Memory Management Unit) 없이 동작하여 상기 메모리를 액세스하는, 방법.
  7. 호스트 프로세서와 메모리를 포함하는 시스템에서 상기 메모리를 액세스하는 디바이스로서,
    상기 메모리에 상기 디바이스에 대해 할당된 거대 페이지에 대응하여 오프셋이 매핑된 오프셋 테이블을 포함하는 오프셋 추가부; 및
    상기 메모리에 저장된 데이터를 위한 사용자 가상 주소를 획득하고, 상기 사용자 가상 주소를 상기 오프셋 추가부에 제공하도록 구성된 데이터 계산부
    를 포함하고,
    상기 오프셋 추가부는 상기 사용자 가상 주소에 오프셋을 추가하여 상기 메모리를 액세스하기 위한 주소로서 출력하도록 구성되며,
    상기 오프셋은 상기 메모리에 상기 디바이스에 대해 할당된 거대 페이지의 물리 주소의 시작 번지와 상기 거대 페이지의 사용자 가상 주소의 차이값인, 디바이스.
  8. 제7항에 있어서,
    상기 사용자 가상 주소는 상기 거대 페이지에 데이터들이 포함되면서 데이터를 연결하는 포인터가 상기 거대 페이지의 번지를 가리키는 구조를 가지는 데이터에 대한 것인, 디바이스.
  9. 제7항에 있어서,
    상기 메모리에 상기 디바이스에 대해 복수의 거대 페이지가 할당되어 있으며,
    상기 오프셋 테이블은 거대 페이지별로 콘텍스트 ID와 대응하는 오프셋이 매핑되어 있고,
    상기 데이터 계산부는 거대 페이지에 대응하는 콘텍스트 ID가 기록된 레지스터를 더 포함하는, 디바이스.
  10. 제9항에 있어서,
    상기 데이터 계산부는 추가로, 상기 레지스터로부터 상기 사용자 가상 주소에 대응하는 거대 페이지의 콘텍스트 ID를 획득하도록 구성되며,
    상기 오프셋 추가부는 상기 콘텍스트 ID를 기반으로 상기 오프셋 테이블로부터 대응하는 오프셋을 획득하여 상기 사용자 가상 주소에 추가하도록 구성되는, 디바이스.
  11. 제7항에 있어서,
    상기 디바이스는 IOMMU(Input/Output Memory Management Unit) 없이 동작하여 상기 메모리를 액세스하는, 디바이스.
  12. 제7항에 있어서,
    상기 디바이스는 가속기인, 디바이스.
  13. 제7항에 있어서,
    상기 디바이스는 상기 사용자 가상 주소에 대해, 설정 함수를 사용하여 해당 거대 페이지의 물리 주소의 시작 번지를 획득하도록 구성되며, 상기 설정 함수는 gate_user_pages, kmap 및 page_to_phys 중 하나를 포함하는, 디바이스.















KR1020220030255A 2022-03-10 2022-03-10 사용자 가상 주소를 이용한 메모리 액세스 방법 및 이를 이용한 디바이스 KR20230133126A (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020220030255A KR20230133126A (ko) 2022-03-10 2022-03-10 사용자 가상 주소를 이용한 메모리 액세스 방법 및 이를 이용한 디바이스

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020220030255A KR20230133126A (ko) 2022-03-10 2022-03-10 사용자 가상 주소를 이용한 메모리 액세스 방법 및 이를 이용한 디바이스

Publications (1)

Publication Number Publication Date
KR20230133126A true KR20230133126A (ko) 2023-09-19

Family

ID=88196788

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020220030255A KR20230133126A (ko) 2022-03-10 2022-03-10 사용자 가상 주소를 이용한 메모리 액세스 방법 및 이를 이용한 디바이스

Country Status (1)

Country Link
KR (1) KR20230133126A (ko)

Similar Documents

Publication Publication Date Title
US11775325B2 (en) Dynamic I/O virtualization system having guest memory management for mapping virtual addresses using virtualization application programming interface (API) in guest kernal
CN109564522B (zh) 控制对计算装置的存储器中的页的访问
KR101944876B1 (ko) 파일 액세스 방법 및 장치 및 스토리지 디바이스
US7383374B2 (en) Method and apparatus for managing virtual addresses
US11256445B2 (en) Virtual disk file format conversion method and apparatus
JP2022509906A (ja) ホストコンピューティングデバイスの仮想メモリによって支援された仮想マシンメモリへのより高速なアクセス
CN107818054B (zh) 分配连续物理内存空间到设备的方法及系统
JP2006252554A (ja) 仮想マシン環境内でのゲスト物理アドレスの仮想化の方法およびシステム
CN112241310B (zh) 页表管理、信息获取方法、处理器、芯片、设备及介质
US10331591B2 (en) Logical-to-physical block mapping inside the disk controller: accessing data objects without operating system intervention
JP7387873B2 (ja) ネットワーク化された入出力メモリ管理ユニット
US8892810B2 (en) Semiconductor device and memory protection method
US20220308756A1 (en) Performing Memory Accesses for Input-Output Devices using Encryption Keys Associated with Owners of Pages of Memory
US7249241B1 (en) Method and apparatus for direct virtual memory address caching
JP2024513734A (ja) 入出力デバイスによってアクセス可能なメモリのページの移行
US20170277632A1 (en) Virtual computer system control method and virtual computer system
JP2024503259A (ja) 入出力デバイスによってアクセス可能なメモリのページの移行
KR20180041037A (ko) 멀티 코어 솔리드 스테이트 드라이브의 공유 분산 메모리 관리 방법
US20220269621A1 (en) Providing Copies of Input-Output Memory Management Unit Registers to Guest Operating Systems
JP2022529759A (ja) 入出力メモリ管理ユニットによるドメイン識別子及びデバイス識別子の変換
WO2020251790A1 (en) Guest operating system buffer and log access by an input-output memory management unit
KR20230133126A (ko) 사용자 가상 주소를 이용한 메모리 액세스 방법 및 이를 이용한 디바이스
CN117120991A (zh) 用于提供页面迁移的系统和方法
KR20220036972A (ko) 이종 컴퓨팅을 위한 통합 커널 가상 어드레스 공간
JP2024512087A (ja) 階層型メモリ管理をオフロードするための方法及び装置