KR20180088525A - 스위치들 내의 어드레스 캐싱 - Google Patents
스위치들 내의 어드레스 캐싱 Download PDFInfo
- Publication number
- KR20180088525A KR20180088525A KR1020187021861A KR20187021861A KR20180088525A KR 20180088525 A KR20180088525 A KR 20180088525A KR 1020187021861 A KR1020187021861 A KR 1020187021861A KR 20187021861 A KR20187021861 A KR 20187021861A KR 20180088525 A KR20180088525 A KR 20180088525A
- Authority
- KR
- South Korea
- Prior art keywords
- switch
- address
- memory
- physical address
- mapping
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/40—Bus structure
- G06F13/4004—Coupling between buses
- G06F13/4022—Coupling between buses using switching circuits, e.g. switching matrix, connection or expansion network
-
- 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/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
- G06F12/1027—Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB]
- G06F12/1045—Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB] associated with a data cache
-
- 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/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
- G06F12/1027—Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB]
-
- 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/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0877—Cache access modes
- G06F12/0882—Page mode
-
- 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/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
-
- 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/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
- G06F12/1027—Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB]
- G06F12/1036—Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB] for multiple virtual address spaces, e.g. segmentation
-
- 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/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
- G06F12/1081—Address translation for peripheral access to main memory, e.g. direct memory access [DMA]
-
- 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/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
- G06F12/109—Address translation for multiple virtual address spaces, e.g. segmentation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
- G06F3/0611—Improving I/O performance in relation to response time
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0656—Data buffering arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/067—Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]
-
- 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/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/0813—Multiuser, multiprocessor or multiprocessing cache systems with a network or matrix configuration
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/14—Protection against unauthorised use of memory or access to memory
- G06F12/1416—Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights
- G06F12/1425—Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights the protection being physical, e.g. cell, word, block
-
- 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/1016—Performance improvement
-
- 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/1016—Performance improvement
- G06F2212/1024—Latency reduction
-
- 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
-
- 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/1048—Scalability
-
- 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/15—Use in a specific computing environment
- G06F2212/152—Virtualized environment, e.g. logically partitioned system
-
- 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/15—Use in a specific computing environment
- G06F2212/154—Networked environment
-
- 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/26—Using a specific storage system architecture
- G06F2212/264—Remote server
-
- 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/60—Details of cache memory
- G06F2212/604—Details relating to cache allocation
-
- 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/60—Details of cache memory
- G06F2212/608—Details relating to cache mapping
-
- 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/65—Details of virtual memory and virtual address translation
-
- 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/65—Details of virtual memory and virtual address translation
- G06F2212/657—Virtual address space management
-
- 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/68—Details of translation look-aside buffer [TLB]
-
- 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/68—Details of translation look-aside buffer [TLB]
- G06F2212/682—Multiprocessor TLB consistency
-
- 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/68—Details of translation look-aside buffer [TLB]
- G06F2212/683—Invalidation
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)
- Mathematical Physics (AREA)
- Computer Hardware Design (AREA)
- Computer Security & Cryptography (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
컴퓨터 저장 매체들 상에서 인코딩되는 컴퓨터 프로그램들을 포함하여, 어드레스를 스위치의 메모리에 저장하기 위한 방법들, 시스템들 및 장치가 개시된다. 시스템들 중 하나는 버스에 연결된 디바이스들 각각과 스위치 간에 버스 상의 어떠한 컴포넌트들도 없이, 디바이스들로부터 패킷들을 수신하고, 패킷들을 디바이스들로 전달하는 스위치, 물리적 어드레스들로의 가상 어드레스들의 맵핑을 저장하기 위해 스위치에 통합된 메모리, 및 스위치에 통합되고, 스위치에 의해 실행 가능한 명령들을 저장하는 저장 매체를 포함하고, 명령들은 스위치로 하여금 동작들을 수행하게 하고, 동작들은, 버스에 의해 스위치에 연결된 디바이스에 대한 어드레스 변환 요청에 대한 응답을 수신하는 동작 ― 응답은 물리적 어드레스로의 가상 어드레스의 맵핑을 포함함 ― , 및 응답을 수신하는 동작에 대한 응답으로, 물리적 어드레스로의 가상 어드레스의 맵핑을 메모리에 저장하는 동작을 포함한다.
Description
[0001] 본 명세서는 스위치들, 예를 들면, 스위치 칩들에 관한 것이다.
[0002] IOMMU(input/output memory management unit)들은, 가상 머신들을 작동시키는 시스템들의 보호를 위해 그리고 변환 요청들에 대해, 디바이스 어드레스를 변환하기 위해 페이지 테이블들을 워킹(walk)한다. 일부 예들에서, IOMMU들은, 예를 들면, a) 제한된 메모리가 이용 가능할 때 공간을 보존하기 위해, b) IMOMMU가 매우 많은 수의 디바이스들에 대한 변환 요청들에 응답할 때, 또는 둘 모두의 경우에 부분적인 페이지 워크 캐싱(partial page walk caching)을 행할 수 있다.
[0003] PCIe(Peripheral Component Interconnect Express) ATS(address translation services)는 디바이스가 IOMMU로부터 어드레스 변환을 요청하고 디바이스 상에 로컬로, 예를 들면, TLB(translation lookaside buffer)에 변환을 캐싱하도록 허용한다. 일부 경우들에서, 디바이스의 TLB는 디바이스가 사용할 모든 가상 어드레스-물리적 어드레스 맵핑들을 저장하기에 충분히 크지 않을 수 있다.
[0004] 버스, 예를 들면, PCI 또는 PCIe(Peripheral Component Interconnect Express) 버스에 사용되는 스위치 칩은 변환된 어드레스들을 수신하고, 적어도 부분적으로 스위치 칩에 의해 관리되는 버스에 연결된 디바이스들로부터의 메모리 액세스 요청들이 유효하다는 것을 확인하기 위해 변환된 어드레스들을 사용한다. 예를 들면, 스위치 칩은 페이지 테이블을 캐시에 저장하거나 물리적 어드레스들로의 가상 어드레스들의 맵핑을 TLB(translation lookaside buffer)에 저장하고, 적어도 부분적으로, 스위치 칩에 의해 관리되는 버스에 연결된 디바이스들로부터의 변환 요청들에 응답하거나, 그러한 디바이스들로부터의 액세스 요청들을 유효화하거나 이들 둘을 위해 페이지 테이블 또는 TLB로부터의 어드레스들을 사용할 수 있다. 간략함으로 위해, 명세서는, 버스 또는 포인트-투-포인트 연결에 연결된 것을 의미하도록 이해되는, "스위치 칩에 연결된" 디바이스들에 관련될 수 있고, 버스 또는 포인트-투-포인트 연결에 대한 메모리 요청들 어드레스 변환 요청들은, 적어도 부분적으로, 스위치 칩에 의해 제어 또는 관리된다.
[0005] 스위치 칩은 각각의 디바이스에 대한 페이지 테이블, 또는 페이지 테이블의 부분을 저장하는 IOMMU(input/output memory management unit)를 포함할 수 있다. 스위치 칩이 디바이스로부터 변환 요청을 수신할 때, 스위치 칩은 변환 요청을 통합된 IOMMU에 제공하고, 이에 대한 응답으로 통합된 IOMMU로부터 물리적 어드레스를 수신하고, 물리적 어드레스를 디바이스에 제공할 수 있다.
[0006] 스위치 칩이 디바이스로부터 물리적 어드레스들을 포함하는 메모리 액세스 요청들을 수신할 때, 스위치 칩은, 페이지 테이블이 물리적 어드레스를 포함한다는 것을 확인하기 위해 통합된 IOMMU에 저장된, 디바이스에 대한 페이지 테이블을 사용하고, 그렇다면, 디바이스는 대응하는 메모리 위치를 액세스하도록 허용된다. 페이지 테이블이 물리적 어드레스를 포함하지 않는다면, 스위치 칩은 디바이스가 메모리 위치를 액세스하는 것을 방지한다.
[0007] 일부 예들에서, 스위치 칩은 TLB, 예를 들면, 캐시를 포함하고, 스위치 칩은 가상 어드레스들을 물리적 어드레스들로 맵핑하는, 예를 들면, 디바이스마다의 테이블을 캐시에 저장한다. 스위치 칩은, 디바이스가 스위치 칩과 통신하는 포트 넘버를 사용하여 특정 테이블과 디바이스를 연관시킬 수 있다.
[0008] 스위치 칩이 디바이스로부터 특정 가상 어드레스를 갖는 어드레스 변환 요청을 수신하면, 스위치 칩은 TLB가 특정 가상 어드레스에 대한 맵핑을 포함하는지를 결정하고, 그렇다면, 대응하는 물리적 어드레스를 디바이스에 제공한다. 그렇지 않다면, 스위치 칩은 어드레스 변환 요청을 다른 디바이스, 예를 들면, 루트 컴플렉스(root complex)로 포워딩하고, 다른 디바이스로부터 응답을 수신한다. 스위치 칩은 응답을 요청 디바이스로 포워딩하고, 응답을 TLB에 캐싱한다. 스위치 칩이 디바이스마다의 TLB들을 포함하면, 스위치는 맵핑에 대한 그 특정 디바이스의 TLB만을 살펴보고, 맵핑이 그 TLB에 저장되지 않았다면, 다른 디바이스로부터 수신된 맵핑을 그 디바이스에 대한 TLB에 저장할 수 있다.
[0009] 스위치 칩이 디바이스로부터 액세스 요청을 수신할 때, 스위치 칩은, 디바이스가 액세스 요청에 포함된 물리적 어드레스에 의해 식별된 메모리 위치에 대한 액세스를 갖는다는 것, 예를 들면, 물리적 어드레스가 디바이스의 TLB에 포함된다는 것을 디바이스가 확인하기 위해 TLB를 사용한다. 물리적 어드레스가 디바이스의 TLB 내에 있다면, 스위치 칩은 디바이스가 메모리 위치에 액세스하도록 허용한다. 물리적 어드레스가 디바이스의 TLB에 포함되지 않는다면, 스위치 칩은 디바이스가 메모리 위치를 액세스하는 것을 방지하고, 예를 들면, 요청을 다른 디바이스로 포워딩하지 않는다.
[0010] 일반적으로, 본 명세서에 설명된 요지의 하나의 혁신적인 양상은 시스템들로 구현될 수 있고, 시스템들은 버스에 연결된 하나 이상의 디바이스들 각각과 스위치 간에 버스 상의 어떠한 컴포넌트들도 없이, 디바이스들로부터 패킷들을 수신하고, 패킷들을 디바이스들로 전달하는 스위치, 물리적 어드레스들로(physical addresses)의 가상 어드레스들(virtual addresses)의 맵핑을 저장하기 위해 스위치에 통합된 메모리, 및 스위치에 통합되고, 스위치에 의해 실행 가능한 명령들을 저장하는 비일시적인 컴퓨터 판독 가능 저장 매체를 포함하고, 명령들은 그러한 실행 시에 스위치로 하여금 동작들을 수행하게 하고, 동작들은, 버스에 의해 스위치에 연결된 디바이스에 대한 어드레스 변환 요청(address translation request)에 대한 응답을 스위치에 의해 수신하는 동작 ― 응답은 물리적 어드레스로의 가상 어드레스의 맵핑을 포함함 ― , 및 디바이스에 대한 어드레스 변환 요청에 대한 응답을 수신하는 동작에 대한 응답으로, 물리적 어드레스로의 가상 어드레스의 맵핑을 메모리에 저장하는 동작을 포함한다. 이러한 양상의 다른 실시예들은 대응하는 컴퓨터 시스템들, 장치, 방법들 및 하나 이상의 컴퓨터 저장 디바이스들 상에 기록된 컴퓨터 프로그램들을 포함하고, 이들 각각은 동작들의 액션들을 수행하도록 구성된다. 하나 이상의 컴퓨터들의 시스템은, 동작 중에 시스템으로 하여금 액션들을 수행하게 하는 소프트웨어, 펌웨어, 하드웨어 또는 이들의 조합이, 시스템 상에 설치되게 하는 것에 의해 특정 동작들 또는 액션들을 수행하도록 구성될 수 있다. 하나 이상의 컴퓨터 프로그램들은, 데이터 프로세싱 장치에 의해 실행될 때, 장치로 하여금 액션들을 수행하게 하는 명령들을 포함함에 의해 특정 동작들 또는 액션들을 수행하도록 구성될 수 있다.
[0011] 일반적으로, 본 명세서에 설명된 요지의 하나의 혁신적인 양상은 시스템들로 구현될 수 있고, 시스템들은 버스를 통해 패킷들을 라우팅하는 스위치, 물리적 어드레스들로의 가상 어드레스들의 맵핑을 저장하기 위해 스위치에 통합된 메모리, 및 스위치에 통합되고, 스위치에 의해 실행 가능한 명령들을 저장하는 비일시적인 컴퓨터 판독 가능 저장 매체를 포함하고, 명령들은 그러한 실행 시에 스위치로 하여금 동작들을 수행하게 하고, 동작들은, 어드레스 변환 요청에 대한 응답을 스위치에 의해 수신하는 동작 ― 응답은 물리적 어드레스로의 가상 어드레스의 맵핑을 포함함 ― , 디바이스에 대한 어드레스 변환 요청에 대한 응답을 수신하는 동작에 대한 응답으로, 물리적 어드레스로의 가상 어드레스의 맵핑을 메모리에 저장하는 동작, 특정 물리적 어드레스를 포함하는 메모리 액세스 요청을 디바이스로부터 수신하는 동작, 특정 물리적 어드레스가 메모리에 저장된다고 결정하는 동작, 및 특정 물리적 어드레스가 메모리에 저장된다고 결정하는 동작에 대한 응답으로, 서비싱을 위해 메모리 액세스 요청을 다른 디바이스로 포워딩하는 동작을 포함한다. 이러한 양상의 다른 실시예들은 대응하는 컴퓨터 시스템들, 장치, 방법들 및 하나 이상의 컴퓨터 저장 디바이스들 상에 기록된 컴퓨터 프로그램들을 포함하고, 이들 각각은 동작들의 액션들을 수행하도록 구성된다. 하나 이상의 컴퓨터들의 시스템은, 동작 중에 시스템으로 하여금 액션들을 수행하게 하는 소프트웨어, 펌웨어, 하드웨어 또는 이들의 조합이, 시스템 상에 설치되게 하는 것에 의해 특정 동작들 또는 액션들을 수행하도록 구성될 수 있다. 하나 이상의 컴퓨터 프로그램들은, 데이터 프로세싱 장치에 의해 실행될 때, 장치로 하여금 액션들을 수행하게 하는 명령들을 포함함에 의해 특정 동작들 또는 액션들을 수행하도록 구성될 수 있다.
[0012] 일반적으로, 본 명세서에 설명된 요지의 하나의 혁신적인 양상은 시스템들로 구현될 수 있고, 시스템들은 버스를 통해 패킷들을 라우팅하는 스위치, 물리적 어드레스들로의 가상 어드레스들의 맵핑을 저장하기 위해 스위치에 통합된 메모리, 및 스위치에 통합되고, 스위치에 의해 실행 가능한 명령들을 저장하는 비일시적인 컴퓨터 판독 가능 저장 매체를 포함하고, 명령들은 그러한 실행 시에 스위치로 하여금 동작들을 수행하게 하고, 동작들은, 어드레스 변환 요청에 대한 응답을 스위치에 의해 수신하는 동작 ― 응답은 물리적 어드레스로의 가상 어드레스의 맵핑을 포함함 ― , 디바이스에 대한 어드레스 변환 요청에 대한 응답을 수신하는 동작에 대한 응답으로, 물리적 어드레스로의 가상 어드레스의 맵핑을 메모리에 저장하는 동작, 특정 물리적 어드레스를 포함하는 메모리 액세스 요청을 디바이스로부터 수신하는 동작, 특정 물리적 어드레스가 메모리에 저장되지 않는다고 결정하는 동작, 및 특정 물리적 어드레스가 메모리에 저장되지 않는다고 결정하는 동작에 대한 응답으로, 메모리 액세스 요청을 폐기하는 동작을 포함한다. 이러한 양상의 다른 실시예들은 대응하는 컴퓨터 시스템들, 장치, 방법들 및 하나 이상의 컴퓨터 저장 디바이스들 상에 기록된 컴퓨터 프로그램들을 포함하고, 이들 각각은 동작들의 액션들을 수행하도록 구성된다. 하나 이상의 컴퓨터들의 시스템은, 동작 중에 시스템으로 하여금 액션들을 수행하게 하는 소프트웨어, 펌웨어, 하드웨어 또는 이들의 조합이, 시스템 상에 설치되게 하는 것에 의해 특정 동작들 또는 액션들을 수행하도록 구성될 수 있다. 하나 이상의 컴퓨터 프로그램들은, 데이터 프로세싱 장치에 의해 실행될 때, 장치로 하여금 액션들을 수행하게 하는 명령들을 포함함에 의해 특정 동작들 또는 액션들을 수행하도록 구성될 수 있다.
[0013] 위의 그리고 다른 실시예들은 각각, 단독으로 또는 조합하여, 다음의 특징들 중 하나 이상의 특징을 선택적으로 포함할 수 있다. 시스템은 스위치에 통합된 IOMMU(input/output memory management unit)를 포함할 수 있고, IOMMU는 IOMMU 메모리를 포함한다. 메모리 IOMMU 메모리를 포함할 수 있다. 디바이스에 대한 어드레스 변환 요청에 대한 응답을 스위치에 의해 수신하는 동작은, 디바이스에 대한 페이지 테이블(page table)의 부분을 스위치에 의해 수신하는 동작을 포함할 수 있다. 물리적 어드레스로의 가상 어드레스의 맵핑을 메모리에 저장하는 동작은 페이지 테이블의 부분을 IOMMU에 저장하는 동작을 포함할 수 있다.
[0014] 일부 구현들에서, 메모리는 TLB(translation lookaside buffer)를 포함할 수 있다. 물리적 어드레스로의 가상 어드레스의 맵핑을 메모리에 저장하는 동작은, 물리적 어드레스로의 가상 어드레스의 맵핑을 TLB에 저장하는 동작을 포함할 수 있다. 시스템은 스위치에 대한 미리 결정된 수의 포트들을 포함할 수 있고, 포트들 각각은 특정 디바이스에 대응하고, 특정 디바이스에 대해 스위치는 단일 TLB를 포함한다. 동작들은, 디바이스에 대한 어드레스 변환 요청에 대한 응답을 수신하는 동작에 대한 응답으로, TLB가 빈(empty) 위치를 포함하지 않는다고 결정하는 동작, TLB 내의 위치로부터 엔트리를 제거하는 동작, 및 가상 어드레스를 물리적 어드레스로 맵핑하는 새로운 엔트리를 TLB 내의 위치에 저장하는 동작을 포함할 수 있다. 동작들은 디바이스가 TLB를 포함하고, 디바이스가 가상 어드레스-물리적 어드레스 맵핑들을 디바이스의 TLB에 현재 저장하고 있다는 것을 디바이스에 대한 설정이 표시한다고 결정하는 동작, 디바이스가 TLB를 포함하고, 디바이스가 가상 어드레스-물리적 어드레스 맵핑들을 디바이스의 TLB에 현재 저장하고 있다는 것을 디바이스에 대한 설정이 표시한다고 결정하는 동작에 대한 응답으로, 디바이스의 TLB로부터 엔트리를 제거하도록 디바이스에 지시하는 메시지를 디바이스로 전송하는 동작, 및 디바이스가 TLB를 포함하고, 디바이스가 가상 어드레스-물리적 어드레스 맵핑들을 디바이스의 TLB에 현재 저장하고 있다는 것을 디바이스에 대한 설정이 표시한다고 결정하는 동작에 대한 응답으로, 물리적 어드레스로의 가상 어드레스의 맵핑을 디바이스에 제공하는 동작을 포함할 수 있다. 동작들은 디바이스가 디바이스의 TLB로부터 엔트리를 제거하였다는 확인(confirmation)을 디바이스로부터 수신하는 동작을 포함할 수 있고, 물리적 어드레스로의 가상 어드레스의 맵핑을 디바이스에 제공하는 동작은, 디바이스가 디바이스의 TLB로부터 엔트리를 제거하였다는 확인을 수신하는 동작에 대한 응답으로, 물리적 어드레스로의 가상 어드레스의 맵핑을 디바이스에 제공하는 동작을 포함한다.
[0015] 일부 구현들에서, 동작들은 특정 물리적 어드레스를 포함하는 메모리 액세스 요청을 디바이스로부터 수신하는 동작, 특정 물리적 어드레스가 메모리에 저장된다고 결정하는 동작, 및 특정 물리적 어드레스가 메모리에 저장된다고 결정하는 동작에 대한 응답으로, 서비싱을 위해 메모리 액세스 요청을 다른 디바이스로 포워딩하는 동작을 포함할 수 있다. 메모리는 디바이스에 대해 특정할 수 있고, 버스에 의해 스위치에 연결된 다른 디바이스들에 대한 임의의 가상 어드레스-물리적 어드레스 맵핑들을 포함하지 않을 수 있다. 시스템은, 스위치에 통합된 하나 이상의 부가적인 메모리를 포함할 수 있고, 부가적인 메모리들 각각 및 메모리는 버스에 의해 스위치에 연결된 특정 디바이스에 대해 특정하다. 특정 물리적 어드레스가 메모리에 저장된다고 결정하는 동작은, 스위치 내의 특정 포트가 메모리 액세스 요청을 수신하였다고 결정하는 동작, 특정 포트를 사용하여 디바이스에 대한 메모리를 선택하는 동작, 및 특정 포트를 사용하여 디바이스에 대한 메모리를 선택하는 동작에 대한 응답으로, 특정 물리적 어드레스가 메모리에 저장된다고 결정하는 동작을 포함할 수 있다. 시스템은 중앙 프로세싱 유닛, 및 캐시를 포함할 수 있다. 디바이스에 대한 어드레스 변환 요청에 대한 응답을 수신하는 동작은 캐시로부터 물리적 어드레스로의 가상 어드레스의 맵핑을 수신하는 동작을 포함할 수 있다. 서비싱을 위해 메모리 액세스 요청을 다른 디바이스로 포워딩하는 동작은, 메모리 액세스 요청을 중앙 프로세싱 유닛으로 포워딩하는 동작을 포함할 수 있다. 시스템은, 스위치를 제 2 버스를 통해 중앙 프로세싱 유닛 및 캐시에 연결하고, 제 2 버스를 사용하여 스위치 및 중앙 프로세싱 유닛 및 캐시로 그리고 이들로부터 응답들 및 요청들을 라우팅하는 제 2 버스 상의 제어기를 포함할 수 있다. 제어기는 루트 컴플렉스(root complex)를 포함할 수 있다. 시스템은 스위치를 포함하는 복수의 스위치들, 및 복수의 스위치들 각각을 제 2 버스를 통해 중앙 프로세싱 유닛 및 캐시에 연결하고, 제 2 버스를 사용하여 복수의 스위치들 각각 및 중앙 프로세싱 유닛 및 캐시로 그리고 이들로부터 응답들 및 요청들을 라우팅하는 제 2 버스 상의 제어기를 포함할 수 있다.
[0016] 일부 구현들에서, 시스템은, 마더보드, 및 마더보드에 통합된 버스를 포함하고, 마더보드에 대한 스위치는 주변 디바이스들이 마더보드에 연결되도록 허용하기 위한 요청들을 소스 디바이스로부터 목적지 디바이스로 라우팅하도록 구성된다. 동작들은, 특정 물리적 어드레스를 포함하는 메모리 액세스 요청을 디바이스로부터 수신하는 동작, 디바이스가 특정 물리적 어드레스에 의해 식별된 메모리 위치를 액세스하도록 허용되지 않는다고 결정하는 동작, 및 디바이스가 특정 물리적 어드레스에 의해 식별된 메모리 위치를 액세스하도록 허용되지 않는다고 결정하는 동작에 대한 응답으로, 메모리 액세스 요청을 폐기하는 동작을 포함할 수 있다. 동작들은, 특정 물리적 어드레스가 메모리에 저장되지 않는다고 결정하는 동작에 대한 응답으로 디바이스를 재설정하는 동작을 포함할 수 있다.
[0017] 일부 구현들에서, 동작들은, 가상 어드레스를 포함하는 어드레스 변환 요청을 디바이스로부터 스위치에 의해 수신하는 동작, 가상 어드레스가 메모리에 저장되지 않는다고 결정하는 동작, 및 물리적 어드레스로의 가상 어드레스의 맵핑을 요청하는 동작을 포함하고, 디바이스에 대한 어드레스 변환 요청에 대한 응답을 스위치에 의해 수신하는 동작은, 물리적 어드레스로의 가상 어드레스의 맵핑을 요청하는 동작에 응답하여 응답을 수신하는 동작을 포함할 수 있다. 동작들은 물리적 어드레스로의 가상 어드레스의 맵핑을 사용하여 가상 어드레스에 대한 대응하는 물리적 어드레스를 결정하는 동작; 및 대응하는 물리적 어드레스를 포함하는 변환 요청에 대한 응답을 디바이스에 제공하는 동작을 포함할 수 있다. 동작들은 물리적 어드레스로의 가상 어드레스의 맵핑을 요청하는 동작과 동시에, 메모리가 물리적 어드레스로의 가상 어드레스의 맵핑을 포함하는지를 결정하는 동작을 포함할 수 있다. 물리적 어드레스로의 가상 어드레스의 맵핑을 요청하는 동작은, 물리적 어드레스로의 가상 어드레스의 맵핑을 중앙 프로세싱 유닛으로부터 요청하는 동작을 포함할 수 있다. 물리적 어드레스로의 가상 어드레스의 맵핑을 요청하는 동작은, 물리적 어드레스로의 가상 어드레스의 맵핑을 메모리로부터 요청하는 동작을 포함할 수 있다. 물리적 어드레스로의 가상 어드레스의 맵핑을 요청하는 동작은, 물리적 어드레스로의 가상 어드레스의 맵핑을 IOMMU(input/output memory management unit)로부터 요청하는 동작을 포함할 수 있다.
[0018] 일부 구현들에서, 시스템은, 스위치에 통합된 미리 결정된 수의 포트들을 포함할 수 있고, 포트들 각각은 특정 디바이스에 대응하고, 특정 디바이스에 대해 메모리는 물리적 어드레스로의 가상 어드레스의 맵핑을 저장하도록 구성되고, 메모리의 크기는 미리 결정된 수의 포트들에 대응한다. 스위치는 스위치 칩일 수 있다.
[0019] 본 명세서에서 설명되는 청구 대상은 특정 실시예들로 구현될 수 있으며, 다음의 이점들 중 하나 이상의 이점을 초래할 수 있다. 일부 구현들에서, 가상 어드레스-물리적 어드레스 맵핑들을 저장하는 메모리를 갖는 스위치 칩을 포함하는 시스템은, 부가적인 스위치 칩들이 부가될 때, 시스템이 스케일링 아웃(scale out)하도록 허용한다. 예를 들면, 스위치 칩은 시스템이 적어도 부분적으로 스위치 칩에 의해 관리되는 버스에 연결되는 더 많은 디바이스들, 적어도 부분적으로 다른 스위치 칩들에 의해 관리되는 다른 버스들에 연결되는 더 많은 디바이스들, 또는 둘 모두를 포함하도록 허용한다. 일부 구현들에서, 아래에 설명되는 시스템들 및 방법들은, 가상 어드레스-물리적 어드레스 맵핑들을 위한 메모리를 갖는 스위치 칩을 포함하지 않는 시스템보다 시스템이 어드레스 변환 요청들에 더 빠르게 응답하도록 허용한다. 일부 구현들에서, 아래에 설명되는 시스템들 및 방법들은, 디바이스가 디바이스로부터의 메모리 액세스 요청에 포함되는 특정 물리적 어드레스에 대한 액세스를 갖는다는 것을 시스템이 확인하도록 허용한다.
[0020] 본 명세서의 요지의 하나 이상의 실시예들의 상세들은 첨부된 도면들 및 아래의 설명에 제시된다. 요지의 다른 특징들, 양상들 및 이점들은 설명, 도면들 및 청구항들로부터 명백해질 것이다.
[0021] 도 1은 스위치 칩이 물리적 어드레스들로의 가상 어드레스들의 맵핑을 저장하는 환경의 예이다.
[0022] 도 2는 변환 요청에 응답하기 위한 프로세스의 흐름도이다.
[0023] 도 3은 물리적 어드레스가 메모리에 저장되는지를 결정하기 위한 프로세스의 흐름도이다.
[0024] 다양한 도면들에서의 동일한 참조 번호들 및 표기들은 동일한 엘리먼트들을 표시한다.
[0022] 도 2는 변환 요청에 응답하기 위한 프로세스의 흐름도이다.
[0023] 도 3은 물리적 어드레스가 메모리에 저장되는지를 결정하기 위한 프로세스의 흐름도이다.
[0024] 다양한 도면들에서의 동일한 참조 번호들 및 표기들은 동일한 엘리먼트들을 표시한다.
개관
[0025] 일부 구현들에서, 스위치 칩, 예를 들면, PCIe(Peripheral Component Interconnect Express) 스위치 칩은 스위치 칩에 의해 관리되는 버스에 연결된 디바이스들을 대신하여 ATS(address translation services) 변환을 캐싱한다. 예를 들면, 디바이스가 PCI(Peripheral Component Interconnect) 판독 또는 기록 요청을 버스 상으로 방출할 때, 스위치 칩은 요청에 포함된 가상 어드레스에 대해 스위치 칩에 포함된 TLB(translation lookaside buffer)를 체크하고, 적중 시에(on a hit), 물리적 어드레스를 결정하기 위해 가상 어드레스를 변환한다. 스위치 칩은 물리적 어드레스를 디바이스에 제공하거나, 물리적 어드레스를 요청에 포함하고, 예를 들면, 서비싱을 위해 요청을 다른 디바이스로 포워딩할 수 있다.
[0026] TLB 미스(miss) 시에, 스위치 칩은, 가상 어드레스의 변환을 위해, 다른 버스에 의해 스위치 칩에 연결된, 예를 들면, 루트 컴플렉스 내의 IOMMU(input/output memory management units)로 ATS 요청을 방출하고, 변환을 수신하고, 변환을 스위치 칩의 TLB에 캐싱한다. 일부 구현들에서, 병행성(parallelism)을 위해, 스위치 칩은, 가상 어드레스에 대해 TLB를 체크하면서 동시에, 변환되지 않은 오리지널 요청을 루트 컴플렉스로 전송할 수 있다.
[0027] 스위치 칩은, ATS 능력 비트(capability bit)를 1로 강제(force)하기 위해, 예를 들면, ATS 능력 비트를 인에이블하기 위해, 적어도 부분적으로, 스위치 칩에 의해 관리되는 버스에 연결된 디바이스들에 대한 PCIe 구성 공간 액세스들을 차단(intercept)할 수 있다. 이는, 스위치 칩 및 디바이스를 포함하는 하드웨어 상에서 실행되는 운영 시스템, 또는 운영 시스템 내의 디바이스 드라이버로 하여금 디바이스에 대한 ATS를 인에이블하게 할 수 있다. ATS가 디바이스에 대해 인에이블될 때, IOMMU는 어드레스 변환 요청들, 판독 또는 기록 액세스 요청들 또는 둘 모두에 대한 응답으로 가상 어드레스-물리적 어드레스 맵핑들을 스위치 칩에, 및 디바이스가 ATS를 지원하는 경우에 디바이스에 제공한다.
[0028] 일부 예들에서, 운영 시스템 내의 디바이스 드라이버가 디바이스에 대한 ATS를 인에이블할 때, 디바이스 드라이버는 운영 시스템이 알려진 신뢰되는 스위치 칩들을 화이트리스팅(whitelist)하도록 허용한다. 예를 들면, 디바이스 드라이버는, 메모리, 예를 들면, TLB를 포함하고, 가상 어드레스-물리적 어드레스 맵핑들을 저장하는 스위치 칩들, 및 가상 어드레스-물리적 어드레스 맵핑을 저장하기 위한 메모리를 포함하지 않는 스위치 칩들을 포함하는 하드웨어 상에서 운영 시스템이 실행되도록 허용할 수 있다. 디바이스 드라이버는, 스위치 칩들이 맵핑들을 수신할 수 있다는 것, 그러한 스위치 칩들로부터의 요청들이 유효화될 필요가 있다는 것, 또는 둘 모두를 표시하기 위한 메모리를 포함하는 그러한 스위치 칩들을 화이트리스팅할 것이다.
[0029] 예를 들면, 스위치 칩은, 적어도 부분적으로, 스위치 칩에 의해 관리되는 버스에 연결된 디바이스들로부터 수신되는 판독 요청들, 기록 요청들 또는 둘 모두를 유효화하기 위해 자신의 메모리에 저장된 맵핑들을 사용할 수 있다. 다른 하드웨어 디바이스, 예를 들면, IOMMU 또는 프로세서가 그 스위치 칩으로부터 요청을 수신할 때, 다른 하드웨어 디바이스는, 요청이 유효화되어야 하는지 여부 및 요청을 생성한 디바이스가 대응하는 메모리 위치에 대한 액세스가 허용되어야 하는지 여부를 결정하기 위해 화이트리스트를 사용할 수 있다. 다른 하드웨어 디바이스가 화이트리스팅 상에 없는 스위치 칩으로부터 요청을 수신할 때, 다른 하드웨어 디바이스는, 예를 들면, 요청을 생성한 디바이스가 악의적이거나, 잘못된 소프트웨어를 포함할 때 또는 양자의 경우에, 디바이스가 액세스를 갖지 않는 메모리 위치에 대한 액세스가 요청을 생성한 디바이스에 허용되지 않는다는 것을 보장하기 위해 요청을 유효화할 수 있다.
[0030] 일부 구현들에서, 스위치 칩, 예를 들면, PCIe 스위치 칩은 IOMMU 및 선택적으로 페이지 테이블 저장소를 포함한다. 예를 들면, 스위치 칩은 페이지 테이블들을 저장하기 위한 온보드 메모리 및 페이지 테이블 워커(walker)를 포함한다. 스위치 칩은, 적어도 부분적으로, 스위치 칩에 의해 관리되는 버스에 연결된 디바이스들로부터 어드레스 변환 요청들을 수신하고, 대응하는 물리적 어드레스가 페이지 테이블들에 저장되는지를 결정할 수 있다. 그렇다면, 스위치 칩은 요청 디바이스에 대응하는 물리적 어드레스를 제공한다. 그렇지 않다면, 스위치 칩은 요청을 다른 디바이스, 예를 들면, 캐시 또는 루트 컴플렉스 IOMMU로 포워딩하고, 다른 디바이스로부터 수신된 응답을 스위치 칩의 메모리, 예를 들면, 페이지 테이블 저장소에 저장한다. 이어서, 스위치 칩은 오리지널 요청에 응답한다.
예시적인 시스템
[0031] 도 1은 스위치 칩 A(102a)가 물리적 어드레스들로의 가상 어드레스들의 맵핑을 저장하는 환경(100)의 예이다. 일부 구현들에서, 스위치 칩 A(102a)는 스위치 칩 A(102a)가 맵핑을 저장하는 TLB(104)를 포함한다.
[0032] 예를 들면, 디바이스들 A-C(108a-c) 중 하나가 환경(100)에 부가되고, 버스(101)를 통해 스위치 칩 A(102a)에 연결될 때, 스위치 칩 A(102a)는 포트 어드레스를 디바이스, 예를 들면, 디바이스 A(108a)에 할당한다. 디바이스 A(108a)가 물리적 어드레스로의 가상 어드레스의 변환을 요청할 때, 스위치 칩 A(102a)는 TLB(104)가 요청된 가상 어드레스에 대한 변환을 포함하는지를 결정한다. 스위치 칩 A(102a)는, TLB(104)가 임의의 어드레스 변환들을 포함하지 않는다고 초기에 결정하고, 제어기(110), 예를 들면, 제어기(110)에 포함된 IOMMU(112), 또는 다른 디바이스, 이를테면, 프로세서(114) 또는 캐시(116)로부터 변환을 요청할 수 있다.
[0033] 일부 구현들에서, 환경(100)이 PCIe 버스를 포함하고, 예를 들면, 버스(101)가 PCIe 버스일 때, 제어기(110)는 루트 컴플렉스일 수 있다. 예를 들면, 루트 컴플렉스는 상이한 스위치 칩들 A-C(102a-c) 사이에서 데이터 및 상이한 스위치 칩들 A-C(102a-c)에 대한 관리되는 요청들을 라우팅하는 스위치일 수 있다.
[0034] 스위치 칩 A(102a)는 변환에 대한 요청에 대한 응답을 수신하고, 요청된 가상 어드레스에 대한 물리적 어드레스를 결정하고, 물리적 어드레스를 디바이스 A(108a)에 제공한다. 일부 예들에서, 응답은 단일 가상 어드레스-물리적 어드레스 맵핑을 포함할 수 있다. 일부 예들에서, 응답은 각각 대응하는 물리적 어드레스로의 다수의 상이한 가상 어드레스들에 대한 맵핑들을 포함할 수 있고, 디바이스 A(108a)는 디바이스 A(108a)에 할당되는 다수의 상이한 가상 어드레스들에 대한 액세스를 갖는다.
[0035] 스위치 칩 A(102a)는, 디바이스 A(108a)가 스위치 칩 A(102a)에 의해 관리되는 버스(101)에 연결될 때, 디바이스 A(108a)에 대한 맵핑들을 요청할 수 있다. 예를 들면, 스위치 칩 A(102a)는, 디바이스 A(108a)가 스위치 칩 A(102a)에 의해 관리되는 버스(101)에 연결될 때, 다른 디바이스, 예를 들면, 제어기(110)로부터 미리 결정된 수량의 어드레스 변환들을 요청할 수 있다. 어드레스 변환들은 낮은 수의 가상 어드레스들, 높은 수의 가상 어드레스들, 디바이스 A(108a)에 의해 액세스될 가능성이 가장 높은 가상 어드레스들, 또는 이들 중 2 개 이상의 조합에 대한 것일 수 있다.
[0036] 일단 스위치 칩 A(102a)가 TLB(104)에 저장된 가상 어드레스-물리적 어드레스 맵핑들을 갖는다면, 스위치 칩 A(102a)는, 다른 디바이스로부터 변환을 요청하지 않고서, 디바이스 A(108a)로부터 어드레스 변환 요청들에 응답할 수 있다. 예를 들면, 스위치 칩 A(102a)는, 특정 가상 어드레스에 대해, TLB(104)가 특정 물리적 어드레스로의 특정 가상 어드레스의 맵핑을 포함한다고 결정하고, 특정 물리적 어드레스를 디바이스 A(108a)에 제공한다.
[0037] 스위치 칩 A(102a)는, 디바이스 A(108a)에 대한 맵핑을 결정하기 위해 디바이스 A(108a)에 대한 포트 넘버, 버스-디바이스-기능 넘버, 또는 둘 모두를 사용할 수 있다. 예를 들면, TLB(104)는 디바이스 A(108a) 및 디바이스 B(108b) 둘 모두에 대한 맵핑들을 포함할 수 있고, 스위치 칩 A(102a)는 디바이스 B(108b)가 아니라 디바이스 A(108a)의 특정 기능에 대한 맵핑들만을 살펴보기 위해 디바이스 A(108a)에 대한 포트 넘버 및 버스-디바이스 기능 넘버를 사용할 수 있다.
[0038] 일부 예들에서, 스위치 칩 A(102a)가 디바이스 A(108a)로부터 어드레스 변환에 대한 요청을 수신할 때, 스위치 칩 A(102a)는 서비싱을 위해 요청을 다른 디바이스, 예를 들면, 제어기(110)로 포워딩하고, 동시에 TLB(104)가 요청에 대한 응답을 포함하는지를 결정할 수 있다. 여기서 스위치 칩 A(102a)는, 서비싱을 위해 요청을 다른 디바이스로 포워딩하기 전에, TLB(104)가 대응하는 물리적 어드레스를 포함하지 않는다고 결정하도록 대기하지 않는다.
[0039] 스위치 칩 A(102a)는, 예를 들면, 스위치 칩 A(102a)가 부가적인 맵핑을 TLB(104)에 저장할 수 없을 때, 임의의 적절한 축출(eviction) 정책을 사용하여 TLB(104)로부터 엔트리들을 축출할 수 있다. 예를 들면, 스위치 칩 A(102a)는 가장 적게 최근에 사용된 엔트리 또는 가장 많게 최근에 사용된 엔트리를 축출할 수 있다.
[0040] 디바이스가 맵핑들을 그 자신의 메모리에 저장하고 스위치 칩 A(102a)가 TLB(104)로부터 엔트리를 축출하는 구현들에서, 스위치 칩 A(102a)는, 디바이스의 메모리로부터 동일한 엔트리를 축출하도록 디바이스에 지시하는 메시지를 대응하는 디바이스, 예를 들면, 디바이스 A(108a)로 전송할 수 있다. 예를 들면, 스위치 칩 A(102a)가 TLB(104)가 맵핑을 포함하지 않는 디바이스 A(108a)로부터 어드레스 변환 요청을 수신할 때, 스위치 칩 A(102a)는 제어기(110)로부터 변환을 요청할 수 있다. 스위치 칩 A(102a)는, TLB(104)가 임의의 사용되지 않은 메모리 위치들을 포함하지 않고 가장 적게 최근에 사용된 엔트리가 TLB(104)로부터 축출되어야 한다고 결정한다. 스위치 칩 A(102a)는 제어기(110)로부터 수신된 변환을 새롭게 비워진 메모리 위치에 저장하고, 디바이스 A의 메모리로부터 동일한 가장 적게 최근에 사용된 엔트리를 축출하도록 디바이스 A(108a)에 지시하는 메시지를 디바이스 A(108a)로 전송한다. 스위치 칩 A(102a)는, 디바이스 A(108a)가 엔트리를 축출하였다는 확인을 수신할 수 있다. 스위치 칩 A(102a)는, 예를 들면, 디바이스 A(108a)가 가장 적게 최근에 사용된 엔트리를 축출하였다는 확인의 수신에 대한 응답으로, 제어기(110)로부터 수신된 변환을 디바이스 A(108a)로 전송한다.
[0041] 환경(100)은, 스위치 칩들 A-C(102a-c) 및 디바이스들 A-C(108a-c)이 어드레스 변환 맵핑들을 메모리 저장할 수 있는지를 표시하기 위해 ATS(address translation services)를 사용할 수 있다. 예를 들면, 환경(100)은, 디바이스 A(108a)가 ATS를 사용할 수 있고 ATS를 사용하도록 허용되는지를 표시하기 위해 ATS 비트를 사용할 수 있다. 디바이스 A(108a)가 스위치 칩 A(102a)에 의해 관리되는 버스(101)에 연결될 때, 스위치 칩 A(102a)는, 디바이스 A(108a)에 대한 ATS를 "인에이블"하기 위한, 예를 들면, 비트를 "1"의 값으로 설정하기 위한, 디바이스 A(108a)에 대한 구성 설정들, 예를 들면, PCIe 구성 공간 설정들을 차단할 수 있다.
[0042] 디바이스 A(108a)가 ATS를 지원하지 않는 예들에서, 스위치 칩 A(102a)는 디바이스 A(108a)로부터 액세스 요청들을 수신하고, 변환을 위해 요청들을 제어기(110)로 포워딩할 수 있거나, 액세스 요청 자체에서 가상 어드레스 또는 가상 어드레스들을 변환할 수 있다. 예를 들면, 스위치 칩 A(102a)는 디바이스 A(108a)에 대한 ATS를 인에이블하고, 디바이스 A(108a)로부터 액세스 요청을 수신하고, 요청에서 가상 어드레스들을 결정하고, 대응하는 물리적 어드레스들로의 요청 내의 가상 어드레스들의 맵핑에 대한 메시지를 제어기(110)로 전송하고, 맵핑을 수신하고, 디바이스 A(108a)로부터 수신된 가상 어드레스들을 대응하는 물리적 어드레스들로 변환하기 위해 수신된 맵핑을 사용할 수 있다.
[0043] 일부 구현들에서, 디바이스 A(108a)가 ATS를 지원하지 않을 때, 스위치 칩 A(102a)는, 디바이스 A(108a)가 ATS를 지원한다는 것을 표시하기 위한 ATS 비트를 인에이블하지 않는다. 예를 들면, 스위치 칩 A(102a)가 디바이스 A(108a)로부터 수신된 요청들 내의 임의의 가상 어드레스들을 대응하는 물리적 어드레스들로 변환하지 않을 때, 스위치 칩 A(102a)는 ATS 비트를 인에이블하지 않는다.
[0044] 디바이스 A(108a)가 ATS를 지원하는 예들에서, 환경(100)은 디바이스 A(108a)가 ATS 기능을 사용하도록 허용할 수 있거나 허용하지 않을 수 있다. 예를 들면, 환경(100)이 디바이스 A(108a)가 ATS 기능을 사용하도록 허용할 때, 스위치 칩 A(102a)는, ATS 비트가 인에이블된다는 것, 예를 들면, 1로 설정된다는 것을 보장하기 위해 디바이스 A(108a)에 대한 설정들을 체크하고, ATS 비트가 인에이블된다고 결정한 것에 대한 응답으로, ATS 비트를 수정하지 않을 수 있다. 스위치 칩 A(102a)는 디바이스 A(108a)로부터 어드레스 변환 요청들을 수신하고, 위에서 설명된 바와 같이 어드레스 변환 요청들에 응답할 수 있다.
[0045] 스위치 칩 A(102a)는, 물리적 어드레스들, 예를 들면, 변환된 어드레스들을 포함하는, 디바이스 A(108a)로부터의 요청들을 유효화할 수 있다. 예를 들면, 스위치 칩 A(102a)가 디바이스 A(108a)로부터 메모리 액세스 요청을 수신할 때, 스위치 칩 A(102a)는 그 요청이 변환 요청이 아니라, 예를 들면, 메모리 액세스 요청이라고 결정한다. 스위치 칩 A(102a)는, 요청에 포함된 물리적 어드레스 또는 어드레스들 및 그러한 어드레스들이 TLB(104)에 포함되는지를 결정한다. 그러한 어드레스들이 TLB(104)에 포함되면, 스위치 칩 A(102a)는 서비싱을 위해 요청을 다른 디바이스, 예를 들면, 프로세서(114), 캐시(116) 또는 랜덤 액세스 메모리(118)로 포워딩한다.
[0046] 디바이스 A(108a)로부터의 액세스 요청에 포함된 물리적 어드레스들 중 하나 이상이 TLB(104)에 포함되지 않는다고 스위치 칩 A(102a)가 결정하면, 스위치 칩 A(102a)는 액세스 요청을 다른 디바이스로 포워딩하지 않는다. 예를 들면, 스위치 칩 A(102a)는, 디바이스 A(108a)가 TLB(104)에 포함되지 않는 물리적 어드레스들에 대한 액세스를 갖지 않는다는 것 및 액세스 요청이 서비스되지 않아야 한다고 결정한다.
[0047] 메모리 액세스 요청이 서비스되지 않아야 한다고 스위치 칩 A(102a)가 결정할 때, 스위치 칩 A(102a)는 요청을 루트 컴플렉스를 통해 포워딩할 수 있다. 이러한 예들에서, 제어기(110)는, 예를 들면, 스위치 칩 A(102a)가 스위치 칩 A(102a)에 의해 수신된 모든 메모리 액세스 요청들을 유효화한다고 결정하기 위해 스위치 칩 A(102a)에 대한 식별자를 사용함으로써, 스위치 칩 A(102a)가 요청을 유효화하였다고 결정할 수 있다. 제어기(110)는 요청을 다른 디바이스로, 이를테면, 요청을 서비스할 것이고, 예를 들면, 요청 내의 물리적 어드레스에 의해 식별된 메모리 위치를 포함하는 목적지 디바이스로 포워딩할 수 있다.
[0048] 디바이스 A(108a)가 ATS를 지원하지만, 디바이스 A(108a)가 ATS 기능을 사용하도록 환경(100)이 허용하지 않는 예들에서, 스위치 칩 A(102a)는, 디바이스 A(108a)가 ATS 기능을 지원하지 않을 때와 유사한 방식으로, 디바이스 A(108a)로부터의 요청들을 프로세싱한다. 예를 들면, 스위치 칩 A(102a)는 디바이스 A(108a)로부터의 메모리 액세스 요청들에 포함된 가상 어드레스들을 변환할 수 있다. 일부 예들에서, 스위치 칩 A(102a)는, 예를 들면, 임의의 적절한 방법을 사용하여, 요청들이 물리적 어드레스를 포함하지 않는다고 결정하기 위해 디바이스 A(108a)로부터의 요청들을 체크할 수 있다.
[0049] 일부 구현들에서, 스위치 칩 A(102a)는, 스위치 칩 A(102a)가 메모리 어드레스들을 저장하는 IOMMU(106)를 포함한다. 예를 들면, 스위치 칩 A(102a)는 IOMMU(106)를 포함하고, TLB(104)를 포함하지 않는다. IOMMU(106)는, IOMMU가 페이지 테이블들을 저장할 수 있는 메모리, 예를 들면, 페이지 테이블 저장소를 포함한다.
[0050] 디바이스 B(108b)가 스위치 칩 A(102a)에 의해 관리되는 버스(101)에 연결될 때, 예를 들면, 디바이스 B(108b)가 디바이스 B(108b)와 프로세서(114) 간의 경로 상의 스위치 칩 A(102a) 및 버스(101)를 포함하는 물리적 연결을 사용하여 마더보드에 연결될 때, 스위치 칩 A(102a)는 디바이스 B(108b)에 대한 하나 이상의 페이지 테이블들을 요청할 수 있다. 일부 예들에서, 스위치 칩 A(102a)는, 디바이스 B(108b)로부터의 어드레스 변환 요청, 디바이스 B(108b)로부터의 메모리 액세스 요청, 또는 둘 모두를 수신한 것에 대한 응답으로, 디바이스 B(108b)에 대한 페이지 테이블들을 요청한다.
[0051] 스위치 칩 A(102a)는, 스위치 칩 A(102a)가 버스(101)를 통해 연결되는 다른 디바이스가 아니라, 예를 들면, 디바이스 B(108b)에 특정하고 IOMMU(106)에 저장된 페이지 테이블들을 사용하여 디바이스 B(108b)에 대한 어드레스 변환 요청들에 응답한다. 예를 들면, 스위치 칩 A(102a)는, 가상 어드레스를 포함하는 어드레스 변환 요청을 디바이스 B(108b)로부터 수신한다. 스위치 칩 A(102a)는, 예를 들면, IOMMU(106) 내의 페이지 테이블 저장소를 액세스하는 페이지 테이블 워커를 사용하여, IOMMU(106)가 대응하는 물리적 어드레스로의 가상 어드레스의 맵핑을 포함하는지를 결정한다. IOMMU(106)가 맵핑을 포함할 때, 스위치 칩 A(102a)는 대응하는 물리적 어드레스를 결정하고, 물리적 어드레스를 디바이스 B(108b)에 제공한다. IOMMU(106)가 맵핑을 포함하지 않을 때, 스위치 칩 A(102a)는 다른 디바이스, 예를 들면, 캐시(116), 랜덤 액세스 메모리(118) 또는 제어기(110) 내의 IOMMU(112)로부터 부가적인 페이지 테이블들을 요청한다.
[0052] IOMMU(106)는 IOMMU의 메모리에 저장된 페이지 테이블들에 대한 축출 정책을 사용할 수 있다. 예를 들면, IOMMU(106)가 다른 페이지 테이블에 대한 공간을 포함하지 않을 때, IOMMU(106)는, 예를 들면, 스위치 칩 A(102a)에 의해 관리되는 버스(101)에 연결된 임의의 디바이스에 대한, 또는 스위치 칩 A(102a)가 새로운 페이지 테이블을 IOMMU(106)에 저장할 특정 디바이스에 대한 가장 적게 최근에 사용된 또는 가장 많게 최근에 사용된 페이지 테이블을 축출할 수 있다.
[0053] 스위치 칩 A(102a)가 디바이스 B(108b)로부터 메모리 액세스 요청을 수신할 때, 스위치 칩 A(102a)는, 메모리 액세스 요청이 가상 어드레스를 포함하는지 또는 물리적 어드레스를 포함하는지를 결정할 수 있다. 메모리 액세스 요청이 가상 어드레스를 포함할 때, 스위치 칩 A(102a)는 IOMMU(106) 내의 페이지 테이블들을 사용하여 대응하는 물리적 어드레스를 결정하고, 메모리 액세스 요청 내의 가상 어드레스의 인스턴스들을 대응하는 물리적 어드레스로 대체한다. 이어서, 스위치 칩 A(102a)는 메모리 액세스 요청을 서비싱을 위해 다른 디바이스, 예를 들면, 프로세서(114), 캐시(116) 또는 랜덤 액세스 메모리(118)로 포워딩할 수 있다.
[0054] 스위치 칩 A(102a)가 디바이스 B(108b)로부터 물리적 어드레스를 포함하는 메모리 액세스 요청을 수신할 때, 스위치 칩 A(102a)는 물리적 어드레스를 유효화한다. 예를 들면, 스위치 칩 A(102a)는 디바이스 B(108b)에 대한 IOMMU(106) 내의 페이지 테이블들을 결정하고, 물리적 어드레스가 결정된 페이지 테이블들에 포함되는지를 결정한다. 스위치 칩 A(102a)는, 디바이스 B(108b)에 대한 IOMMU(106) 내의 페이지 테이블들을 결정하기 위해 디바이스 B(108b)에 대한 포트 넘버 또는 버스-디바이스 기능 넘버를 사용할 수 있다. 스위치 칩 A(102a)는, 디바이스 A(108a) 또는 다른 디바이스가 액세스를 갖지만 디바이스 B(108b)가 액세스를 갖지 않는 물리적 메모리 위치에 대한 액세스를 디바이스 B(108b)가 획득하지 않는다고 보장하기 위해 디바이스 B(108b)에 대한 페이지 테이블들을 사용한다.
[0055] 일부 구현들에서, 각각의 미리 결정된 페이지 범위, 예를 들면, 4K 페이지 범위에 대해, 환경(100), 예를 들면, 스위치 칩 A(102a)는, 페이지 범위가 디바이스로 맵핑되는지를 표시하는 비트, 예를 들면, "이것이 맵핑되는가" 비트, 또는 판독 및 기록 허가들을 표시하는 2 비트들을 갖는다. 환경(100)은 각각의 디바이스 버스-디바이스-기능 넘버에 대한, 예를 들면, 각각의 버스-디바이스-기능 조합에 대한 비트 식별자, 예를 들면, 단일 비트 또는 2 비트들을 포함할 수 있다.
[0056] 물리적 어드레스가 디바이스 B(108b)에 대한 페이지 테이블들에 포함될 때, 스위치 칩 A(102a)는 서비싱을 위해 메모리 액세스 요청을 다른 디바이스, 예를 들면, 프로세서(114), 캐시(116) 또는 랜덤 액세스 메모리(118)로 포워딩한다. 물리적 어드레스가 디바이스 B(108b)에 대한 페이지 테이블들에 포함되지 않을 때, 스위치 칩 A(102a)는 요청을 서비스하지 않는다. 일부 예들에서, 스위치 칩 A(102a)는, 물리적 어드레스가 디바이스 B(108b)에 대한 페이지 테이블들에 포함되지 않을 때, 디바이스 B(108b)를 재설정하거나, 디바이스 B(108b)를 중단시키거나 이 둘 모두를 행할 수 있다.
[0057] 일부 구현들에서, 환경(100)은, 예를 들면, a) 스위치 칩들 A-C(102a-c), b) 제어기(110), c) 프로세서(114), d) 캐시(116), 랜덤 액세스 메모리(118) E는 이들 중 2 개 이상 중 하나 이상을 포함하는 마더보드, 컴퓨터 또는 다수의 컴퓨터들을 포함할 수 있다. 환경(100)은 하드웨어 상에서 실행되는, 예를 들면, 마더보드, 컴퓨터 또는 둘 모두 상에서 실행되는 운영 시스템을 포함한다.
[0058] 디바이스 A(108a)에 대한 ATS 비트를 인에이블하는 것, 예를 들면, ATS 비트의 값을 1로 설정하는 것은, 디바이스 A(108a) 및 스위치 칩 A(102a)가 가상 어드레스-물리적 어드레스 맵핑들을, 예를 들면, TLB(104)에 캐싱하도록 허용하기 위해 디바이스 A(108a)에 대한 ATS를 인에이블하도록, 스위치 칩 A(102a)를 포함하는 하드웨어 상에서 실행되는 운영 시스템에 지시할 수 있다. 스위치 칩 A(102a)는, 디바이스 A(108a)가 스위치 칩 A(102a)에 의해 관리되는 버스(101)에 연결된 것에 대한 응답으로 디바이스 A(108a)에 대한 ATS 비트를 인에이블할 수 있다.
[0059] 일부 예들에서, 소프트웨어에 포함된 디바이스 드라이버는, 디바이스 A(108a)가 스위치 칩 A(102a)에 의해 관리되는 버스(101)에 연결될 때, 예를 들면, 스위치 칩 A(102a)로부터의 메시지에 대한 응답으로, ATS 비트를 인에이블할 수 있다. 이러한 예들에서, 디바이스 드라이버는, 운영 시스템이 어드레스 맵핑들을 캐싱할 수 있는 알려진 스위치 칩들을 화이트리스팅하도록 허용하여, 그러한 스위치 칩들이 어드레스 맵핑들을 스위치 칩의 메모리, 예를 들면, TLB(104)에 캐싱하도록 허용할 수 있다.
[0060] 환경(100) 또는 운영 시스템은, 대응하는 스위치 칩의 기능, 및 스위치 칩이 특정 동작들, 예를 들면, 통합된 메모리 내의 어드레스 맵핑들의 캐싱, 어드레스들의 유효화 또는 이 둘 모두를 수행하도록 허용되어야 하는지 여부를 결정하기 위해 화이트리스트를 사용할 수 있다. 예를 들면, 환경(100)은 상이한 타입들의 스위치 칩들을 포함할 수 있고, 화이트리스트를 사용하여 이러한 스위치 칩들 각각이 어떠한 동작들을 수행하도록 허용되는지를 결정할 수 있다.
[0061] 일부 예들에서, 스위치 칩 A(102a)는 TLB를 포함할 수 있고, 스위치 칩 B(102b)는 IOMMU를 포함할 수 있고, 스위치 칩 C(102c)는 TLB 또는 IOMMU 중 어느 하나를 포함하지 않을 수 있다. 환경(100)은, ATS를 사용하는 디바이스들을 스위치 칩 A(102a)에 의해 관리되는 버스(101)에 연결하고, 물리적 메모리 어드레스들을 디바이스 상에 로컬로 캐싱하기 위해 다른 방법을 사용하는 디바이스들을 스위치 칩 B(102b)에 의해 관리되는 제 2 버스에 연결하고, 물리적 메모리 어드레스들을 디바이스 상에 로컬로 캐싱하지 않는 디바이스들을 스위치 칩 C(102c)에 의해 관리되는 제 3 버스에 연결할 수 있다. 환경(100)은 임의의 적절한 타입의 디바이스가 대응하는 버스를 통해 임의의 적절한 타입의 스위치 칩에 연결되도록 허용할 수 있다.
예시적인 어드레스 변환 프로세스 흐름
[0062] 도 2는 변환 요청에 응답하기 위한 프로세스(200)의 흐름도이다. 예를 들면, 프로세스(200)는 환경(100)으로부터의 스위치 칩 A(102a)에 의해 사용될 수 있다.
[0063] 스위치는, 디바이스로부터, 가상 어드레스를 포함하는 어드레스 변환 요청을 수신한다(202). 예를 들면, 스위치는 ATS 인에이블 디바이스로부터 어드레스 변환 요청을 수신한다.
[0064] 스위치는, 가상 어드레스가 스위치의 메모리에 저장되지 않았다고 결정한다(204). 예를 들면, 스위치는, TLB 또는 IOMMU가 가상 어드레스, 및 대응하는 물리적 어드레스로의 가상 어드레스의 맵핑을 포함하는지를 결정하기 위해 스위치에 포함된 TLB 또는 IOMMU를 체크한다. 스위치는 TLB 또는 IOMMU가 가상 어드레스 및 대응하는 물리적 어드레스를 포함하지 않는다고 결정한다.
[0065] 스위치는, 물리적 어드레스로의 가상 어드레스의 맵핑을 요청하는 어드레스 변환 요청을 전송한다(206). 일부 예들에서, 가상 어드레스가 메모리에 저장되지 않았다고 결정한 것에 대한 응답으로, 스위치는 어드레스 변환 요청을 다른 디바이스로 전송한다. 예를 들면, 스위치는, 예를 들면, 메모리가 TLB 또는 캐시 또는 랜덤 액세스 메모리일 때, 예를 들면, 메모리가 IOMMU일 때, 어드레스 변환 요청을 루트 컴플렉스로 전송한다.
[0066] 스위치는 어드레스 변환 요청에 대한 응답을 수신하고, 응답은 물리적 어드레스로의 가상 어드레스의 맵핑을 포함한다(208). 스위치는 물리적 어드레스로의 가상 어드레스의 맵핑을 메모리에 저장한다(210). 예를 들면, 어드레스 변환 요청을 전송하는 것에 응답하여, 스위치는, 예를 들면, 루트 컴플렉스로부터 어드레스 변환 요청에 대한 응답을 수신하고, 응답 또는 응답으로부터의 데이터를 메모리에 저장한다. 스위치는 TLB에서 엔트리를 생성하기 위해 응답으로부터의 데이터를 사용할 수 있다. 일부 예들에서, 스위치는 페이지 테이블의 부분 또는 모두를 수신하고, 페이지 테이블의 부분을 IOMMU에 저장할 수 있다.
[0067] 스위치는 물리적 어드레스로의 가상 어드레스의 맵핑을 사용하여 가상 어드레스에 대한 물리적 어드레스를 결정한다(212). 예를 들면, 스위치는, 가상 어드레스가 맵핑되는 물리적 어드레스를 결정하기 위해 응답 또는 메모리에 저장된 데이터를 사용한다.
[0068] 스위치는 물리적 어드레스를 포함하는 변환 요청에 대한 응답을 디바이스에 제공한다(214). 예를 들면, 스위치는 루트 컴플렉스로부터 수신된 응답을 디바이스로 포워딩할 수 있다. 일부 예들에서, 스위치는 물리적 어드레스를 포함하는 새로운 응답을 생성하고, 새로운 응답을 디바이스에 제공한다.
[0069] 위에서 설명된 프로세스(200)의 단계들의 순서는 단지 예시적이고, 변환 요청에 대해 응답하는 것은 상이한 순서들로 수행될 수 있다. 예를 들면, 스위치는, 가상 어드레스가 메모리에 저장되지 않았다고 결정하는 것, 예를 들면, 단계(204)를 수행하기 전에 어드레스 변환 요청을 전송하는 것, 예를 들면, 단계(206)를 수행할 수 있다. 일부 예들에서, 스위치는 단계들(204 및 206)을 동시에 수행할 수 있다.
[0070] 일부 구현들에서, 프로세스(200)는 부가적인 단계들, 더 적은 단계들을 포함할 수 있거나, 그 단계들 중 일부는 다수의 단계들로 분리될 수 있다. 예를 들면, 스위치는 어드레스 변환 요청을 수신하고, 가상 어드레스가 메모리에 저장된다고 결정하고, 예를 들면, 단계들(204 내지 210)을 수행하지 않고서 물리적 어드레스로의 가상 어드레스의 맵핑을 사용하여 물리적 어드레스를 결정할 수 있다.
[0071] 일부 구현들에서, 스위치는 다수의 상이한 어드레스 변환 요청들에 대해 프로세스(200) 또는 프로세스(200)의 부분을 수행할 수 있다. 예를 들면, 스위치는 제 1 디바이스로부터 제 1 어드레스 변환 요청을 수신하고, 제 1 요청에 응답하는 제 1 물리적 어드레스가 메모리에 저장된다고 결정하고, 제 1 물리적 어드레스를 제 1 디바이스에 제공할 수 있다. 스위치는 제 1 디바이스 또는 제 2의 상이한 디바이스로부터 제 2 어드레스 변환 요청을 수신하고, 제 2 요청에 응답하는 제 2 물리적 어드레스가 메모리에 저장되지 않는다고, 예를 들면, 제 2 요청으로부터의 가상 어드레스가 메모리에 저장되지 않는다고 결정하고, 다른 디바이스, 예를 들면, 루트 컴플렉스 또는 캐시로부터 가상 어드레스에 대한 맵핑을 요청한다. 스위치는 맵핑을 포함하는 다른 디바이스로부터 요청에 대한 응답을 수신하고, 제 2 물리적 어드레스를 요청 디바이스에 제공한다.
[0072] 스위치는, 스위치가 가상 어드레스-물리적 어드레스 맵핑을 저장하는 디바이스들 각각에 대한 별개의 메모리를 포함할 수 있다. 일부 예들에서, 스위치는 TLB 및 IOMMU 둘 모두를 포함할 수 있다.
예시적인 유효화 프로세스 흐름
[0073] 도 3은, 물리적 어드레스가 메모리에 저장되는지를 결정하기 위한 프로세스(300)의 흐름도이다. 예를 들면, 프로세스(300)는 환경(100)으로부터의 스위치 칩 A(102a) 또는 제어기(110)에 의해 사용될 수 있다.
[0074] 스위치는 특정 물리적 어드레스를 포함하는 메모리 액세스 요청을 디바이스로부터 수신한다(302). 예를 들면, 스위치는 판독 또는 기록 요청을 수신한다.
[0075] 스위치는, 특정 물리적 어드레스가 스위치의 메모리에 저장되는지를 결정한다(304). 메모리는 TLB 또는 IOMMU일 수 있다. 스위치는, 특정 물리적 어드레스가 메모리에 저장되는지를 결정함으로써 요청을 유효화하고, 디바이스는 특정 물리적 어드레스에 액세스하도록 허용된다. 메모리는, 예를 들면, 스위치가 가상 어드레스-물리적 어드레스 맵핑들을 저장하는 각각의 디바이스에 대한 하나의 메모리를 스위치가 가질 때, 그 디바이스에 대해 특정할 수 있다. 메모리는, 스위치가 대응하는 버스를 통해 연결하는 모든 디바이스들에 대한 것일 수 있다.
[0076] 스위치는, 특정 물리적 어드레스가 메모리에 저장된다고 결정한다(306). 특정 물리적 어드레스가 디바이스에 대한 메모리에 저장된다고 스위치가 결정하면, 각각의 디바이스에 대해 단일 메모리가 존재할 때, 스위치는 요청을 유효화한다. 특정 물리적 어드레스가 모든 디바이스들에 대한 단일 메모리에 저장되고, 디바이스가 특정 물리적 어드레스에 액세스하도록 허용된다고 스위치가 결정하면, 스위치는 요청을 유효화한다.
[0077] 특정 물리적 어드레스가 스위치의 메모리에 저장된다고 결정한 것에 대한 응답으로, 스위치는 서비싱을 위해 메모리 액세스 요청을 다른 디바이스로 포워딩한다(308). 예를 들면, 스위치는, 요청에 응답하는 데이터를 갖는 목적지 디바이스로 요청을 포워딩한다. 요청의 포워딩은 하나 이상의 중간 디바이스들을 통해 요청을 라우팅할 수 있다. 일부 예들에서, 캐시가 요청에 응답하는 데이터를 포함할 때, 스위치는 요청을 루트 컴플렉스를 통해 캐시로 포워딩할 수 있다.
[0078] 스위치는, 특정 물리적 어드레스가 메모리에 저장되지 않는다고 결정한다(310). 예를 들면, 스위치는, 디바이스가 특정 물리적 어드레스에 의해 식별된 메모리 위치를 액세스하도록 허용되지 않는다고 결정한다. 각각의 디바이스가 그 자신의 메모리를 갖는 경우에, 특정 물리적 어드레스가 디바이스에 대한 것이 아닌 스위치의 다른 메모리에 저장되거나, 모든 디바이스들에 대한 단일 메모리에 저장되지만, 특정 물리적 어드레스가 디바이스와 연관되지 않고, 예를 들면, 디바이스가 특정 물리적 어드레스에 액세스하도록 허용되지 않아야 할 때, 스위치는 요청을 유효화하지 않는다.
[0079] 특정 물리적 어드레스가 스위치의 메모리에 저장되지 않는다고 결정한 것에 대한 응답으로, 스위치는 메모리 액세스 요청을 폐기한다(312). 예를 들면, 스위치는 서비싱을 위해 요청을 다른 디바이스로 포워딩하지 않거나 요청에 응답하지 않거나 또는 그 어느 것도 하지 않는다. 일부 예들에서, 스위치는 폐기된 메모리 액세스 요청의 에러 식별 세부사항들, 예를 들면, 스위치의 메모리에 저장되지 않은 특정 물리적 어드레스 및 요청을 스위치로 전송한 소스 디바이스에 대한 식별자를 로깅(log)할 수 있다.
[0080] 특정 물리적 어드레스가 스위치의 메모리에 저장되지 않는다고 결정한 것에 대한 응답으로, 스위치는 디바이스를 재설정한다(314). 예를 들면, 스위치는, 디바이스가 악의적이거나 소프트웨어 버그를 갖거나 둘 모두라고 결정하고, 예를 들면, 디바이스가 액세스를 갖지 않는 메모리 위치를 디바이스가 액세스하는 것을 방지하기 위해 디바이스를 재설정할 수 있다.
[0081] 위에서 설명된 프로세스(300)의 단계들의 순서는 단지 예시적이고, 물리적 어드레스가 메모리에 저장되는지를 결정하는 것은 상이한 순서들로 수행될 수 있다. 예를 들면, 스위치는 디바이스를 재설정하고, 이어서 메모리 액세스 요청을 폐기하고, 예를 들면, 단계(314) 그리고 이어서 단계(312)를 수행할 수 있다.
[0082] 일부 구현들에서, 프로세스(300)는 부가적인 단계들, 더 적은 단계들을 포함할 수 있거나, 그 단계들 중 일부는 다수의 단계들로 분리될 수 있다. 예를 들면, 스위치는 다수의 상이한 메모리 액세스 요청들, 다수의 상이한 타입들의 메모리 액세스 요청들, 예를 들면, 판독, 기록 또는 둘 모두, 스위치에 의해 관리되는 버스에 연결된 다수의 상이한 디바이스들, 또는 이들 중 2 개 이상의 조합에 대한 프로세스(300)의 부분 또는 모두를 수행할 수 있다. 스위치는 요청들 중 일부를 유효화하거나, 요청들 중 일부를 무효화하거나 일부 요청들을 유효화할 뿐만 아니라 일부 요청들을 무효화할 수 있다.
[0083] 일부 구현들에서, TLB 또는 IOMMU를 갖는 다른 디바이스는 요청들을 유효화한다. 예를 들면, 루트 컴플렉스는 요청을 유효화하기 위한 프로세스(300)를 수행할 수 있다.
선택적인 구현 세부사항들
[0084] 일부 구현들에서, 스위치 칩은, 스위치 칩이 어드레스 맵핑들을 저장하는 각각의 디바이스에 대한, 예를 들면, 디바이스가 스위치 칩에 의해 관리되는 버스에 연결하도록 허용하고 스위치 칩이 어드레스 맵핑들을 저장하는 각각의 포트에 대한 TLB를 포함할 수 있다. 스위치 칩은 어떠한 TLB가 액세스되어야 하는지를 결정하기 위해, 예를 들면, 특정 디바이스에 대한 어드레스 맵핑을 결정하거나 특정 디바이스에 대한 메모리 액세스 요청을 유효화하기 위해 포트 정보를 사용할 수 있다. 스위치 칩은, 특정 디바이스에 대해 어떠한 TLB를 액세스할지를 결정하기 위해 임의의 적절한 방법을 사용할 수 있다.
[0085] 일부 구현들에서, 스위치 칩은, 디바이스를 식별하고 디바이스가 어드레스 맵핑들을 디바이스 상에 로컬로 캐싱할 수 있는지 또는 없는지를 결정하기 위해, 식별자, 예를 들면, 포트 식별자를 사용할 수 있다. 예를 들면, 스위치 칩은, 버스를 통해 각각의 포트에 연결된 디바이스가 ATS를 지원하는지 및 스위치 칩이 그 디바이스로부터의 어드레스 변환 요청들에 응답해야 하는지를 표시하는, 그 포트에 대한 비트를 포함할 수 있다.
[0086] 스위치 칩 내의 메모리, 예를 들면, IOMMU의 크기는, 메모리가 어드레스 맵핑들을 저장하는 디바이스들의 수, 예를 들면, 각각의 포트가 스위치 칩에 의해 관리되는 버스에 연결될 수 있고 IOMMU가 페이지 테이블들을 저장하는 디바이스에 대응할 때 스위치 칩 내의 포트들의 수에 기초하여 선택될 수 있다. 예를 들면, 최대로(at most) 16 개의 디바이스들에 버스를 통해 연결하고 그 디바이스들에 대한 페이지 테이블들을 저장하기 위한 기능을 갖는 스위치 칩은 최대로 4 개의 디바이스들에 다른 버스를 통해 연결하고 그 디바이스들에 대한 페이지 테이블들을 저장하기 위한 기능을 갖는 다른 스위치보다 더 큰 IOMMU를 포함할 수 있다.
[0087] 일부 구현들에서, IOMMU는 하나 이상의 디바이스들에 대한 페이지 테이블들의 총수의 퍼센티지를 저장할 수 있다. 예를 들면, 특정 디바이스가 매우 많은 수의 메모리 위치들을 액세스할 수 있을 때, IOMMU는 특정 디바이스에 대한 전부는 아니지만 일부 페이지 테이블들을 저장할 수 있다.
[0088] 스위치 칩은 IOMMU가 페이지 테이블들을 저장하는 각각의 디바이스에 대한 페이지 테이블들의 저장소에 미리 결정된 퍼센티지의 IOMMU를 할당할 수 있다. 예를 들면, 스위치 칩이 버스를 통해 최대로 16 개의 디바이스들에 연결하고 그 디바이스들에 대한 페이지 테이블들을 저장할 수 있고, 하나의 디바이스가 스위치 칩에 의해 관리되는 버스에 연결될 때, 스위치 칩은 하나의 디바이스에 대한 페이지 테이블을 저장하기 위해 전체 IOMMU를 할당할 수 있다. 다른 디바이스가 스위치 칩에 의해 관리되는 버스에 연결될 때, 스위치 칩은 IOMMU 내의 메모리 중 절반을 디바이스들 각각에 할당하고, 부가적인 디바이스들에 대해 기타 등등일 수 있다. 일부 구현들에서, IOMMU는, 얼마나 많은 디바이스들이 스위치 칩에 의해 관리되는 버스에 실제로 연결되는지와 상관없이 메모리 중 1/16을 각각의 디바이스에 할당할 수 있다.
[0089] 일부 구현들에서, 스위치 칩은 IOMMU 대신에 MMU(memory management unit)를 포함할 수 있다. 예를 들면, 스위치 칩은 스위치 칩에 의해 관리되는 버스에 연결된 디바이스들에 대해 가상 어드레스들을 물리적 어드레스들로 변환하기 위해 MMU를 사용할 수 있다.
부가적인 구현 세부사항들
[0090] 본 명세서에서 설명한 기능적 동작들 및 요지의 실시예들은 디지털 전자 회로에서, 유형적으로 구현된 컴퓨터 소프트웨어 또는 펌웨어에서, 본 명세서에 개시된 구조들 및 이들의 구조적 등가물들을 포함하는 컴퓨터 하드웨어에서, 또는 이들 중 하나 이상의 것의 결합들에서 구현될 수 있다. 본 명세서에서 설명한 요지의 실시예들은 하나 이상의 컴퓨터 프로그램들, 즉 데이터 프로세싱 장치에 의한 실행을 위해 또는 데이터 프로세싱 장치의 동작을 제어하기 위해 유형의 비일시적 프로그램 캐리어 상에 인코딩되는 컴퓨터 프로그램 명령들의 하나 이상의 모듈들로서 구현될 수 있다. 컴퓨터 저장 매체는 기계 판독 가능 저장 디바이스, 기계 판독 가능 저장 기판, 랜덤 또는 직렬 액세스 메모리 디바이스, 또는 이들 중 하나 이상의 것의 결합일 수 있다.
[0091] "데이터 프로세싱 장치"라는 용어는 데이터 프로세싱 하드웨어를 지칭하고, 예로서 프로그래밍 가능 프로세서, 컴퓨터 또는 다수개의 프로세서들이나 컴퓨터들을 포함하여, 데이터를 프로세싱하기 위한 모든 종류들의 장치, 디바이스들 및 기계들을 포괄한다. 장치는 또한 특수 목적 로직 회로, 예를 들어, FPGA(field programmable gate array) 또는 ASIC(application specific integrated circuit)이거나 이들을 더 포함할 수 있다. 장치는 선택적으로 하드웨어뿐만 아니라, 컴퓨터 프로그램들에 대한 실행 환경을 생성하는 코드, 예를 들어 프로세서 펌웨어, 프로토콜 스택, 데이터베이스 관리 시스템, 운영 시스템, 또는 이들 중 하나 이상의 것에 대한 결합을 구성하는 코드를 포함할 수 있다.
[0092] 프로그램, 소프트웨어, 소프트웨어 애플리케이션, 모듈, 소프트웨어 모듈, 스크립트 또는 코드로 또한 지칭되거나 이로서 설명될 수 있는 컴퓨터 프로그램은 컴파일링된 또는 해석된 언어들, 또는 서술적 또는 절차적 언어들을 포함하는 임의의 형태의 프로그래밍 언어로 기록될 수 있고, 이는 독립형 프로그램으로서 또는 모듈, 컴포넌트, 서브루틴, 또는 컴퓨팅 환경에 사용하기에 적절한 다른 유닛으로서의 형태를 포함하는 임의의 형태로 전개될 수 있다. 컴퓨터 프로그램은 파일 시스템 내의 파일에 대응할 수도 있지만 반드시 그런 것은 아니다. 프로그램은 다른 프로그램들 또는 데이터, 예를 들어 마크업 언어 문서에 저장된 하나 이상의 스크립트들을 보유하는 파일의 일부에, 해당 프로그램에 전용된 단일 파일에, 또는 다수개의 조정된 파일들, 예를 들어 하나 이상의 모듈들, 하위 프로그램들, 또는 코드의 부분들을 저장하는 파일들에 저장될 수 있다. 컴퓨터 프로그램은 하나의 컴퓨터 상에서 또는 한 사이트에 로케이팅되거나 다수개의 사이트들에 걸쳐 분포되어 통신 네트워크에 의해 상호 접속되는 다수개의 컴퓨터들 상에서 실행되도록 전개될 수 있다.
[0093] 본 명세서에서 설명한 프로세스들 및 로직 흐름들은 입력 데이터에 대해 동작하여 출력을 발생시킴으로써 기능들을 수행하기 위해 하나 이상의 컴퓨터 프로그램들을 실행하는 하나 이상의 프로그래밍 가능 컴퓨터들에 의해 수행될 수 있다. 프로세스들 및 로직 흐름들은 또한 특수 목적 로직 회로, 예를 들어 FPGA(field programmable gate array) 또는 ASIC(application specific integrated circuit)에 의해 수행될 수 있으며, 장치가 또한 이로서 구현될 수 있다.
[0094] 컴퓨터 프로그램 명령들 및 데이터를 저장하기에 적합한 컴퓨터 판독 가능 매체들은, 예로서 반도체 메모리 디바이스들, 예를 들어 EPROM, EEPROM, 및 플래시 메모리 디바이스들; 자기 디스크들, 예를 들어 내부 하드 디스크들 또는 착탈식 디스크들; 마그네토 광 디스크들; 그리고 CD ROM 및 DVD-ROM 디스크들을 포함하는 모든 형태들의 비휘발성 메모리, 매체들 및 메모리 디바이스들을 포함한다. 프로세서 및 메모리는 특수 목적 로직 회로에 의해 보완되거나 특수 목적 로직 회로에 포함될 수 있다.
[0095] 본 명세서는 많은 특정 구현 세부사항들을 포함하지만, 이들은 청구될 수 있는 것의 범위에 대한 한정들로서가 아니라, 그보다는 특정 실시예들에 특정할 수 있는 특징들의 설명으로서 해석되어야 한다. 개별 실시예들과 관련하여 본 명세서에 설명되는 특정 특징들은 또한 단일 실시예로 결합하여 구현될 수 있다. 반대로, 단일 실시예와 관련하여 설명되는 다양한 특징들은 또한 다수개의 실시예들로 개별적으로 또는 임의의 적절한 하위 결합으로 구현될 수 있다. 더욱이, 특징들이 특정한 결합들로 작용하는 것으로 앞서 설명되고 심지어 초기에 이와 같이 청구될 수 있다 하더라도, 어떤 경우들에는 청구된 결합으로부터의 하나 이상의 특징들이 그 결합으로부터 삭제될 수 있고, 청구된 결합은 하위 결합 또는 하위 결합의 변형에 관련될 수 있다.
[0096] 유사하게, 동작들이 특정 순서로 도면들에 도시되지만, 이는 바람직한 결과들을 달성하기 위해 이러한 동작들이 도시된 특정 순서로 또는 순차적인 순서로 수행될 것을, 또는 예시된 모든 동작들이 수행될 것을 요구하는 것으로 이해되지 않아야 한다. 특정 상황들에서는, 다중 작업 및 병렬 프로세싱이 유리할 수도 있다. 더욱이, 앞서 설명한 실시예들에서 다양한 시스템 모듈들 및 컴포넌트들의 분리는 모든 실시예들에서 이러한 분리를 필요로 하는 것으로 이해되지 않아야 하며, 설명한 프로그램 컴포넌트들 및 시스템들은 일반적으로 단일 소프트웨어 제품으로 함께 통합되거나 다수개의 소프트웨어 제품들로 패키지화될 수 있다는 것이 이해되어야 한다.
[0097] 요지의 특정 실시예들이 설명되었다. 다른 실시예들이 다음의 청구항들의 범위 내에 있다. 예를 들어, 청구항들에서 언급되는 동작들은 다른 순서로 수행되며 여전히 바람직한 결과들을 달성할 수 있다. 일례로, 첨부 도면들에 도시된 프로세스들은 바람직한 결과들을 달성하기 위해 반드시 도시된 특정 순서 또는 순차적인 순서를 필요로 하는 것은 아니다. 일부 경우들에서, 다중 작업 및 병렬 프로세싱이 유리할 수 있다.
Claims (25)
- 시스템으로서,
하나 이상의 디바이스들의 각각과 스위치 사이의 버스에 어떠한 컴포넌트들이 없이 상기 버스에 연결된 상기 하나 이상의 디바이스들로부터 패킷들을 수신하고, 상기 하나 이상의 디바이스들로 패킷들을 전달하는 스위치;
물리적 어드레스들(physical addresses)로의 가상 어드레스들(virtual addresses)의 맵핑을 저장하기 위해 상기 스위치에 통합되는 메모리; 및
상기 스위치에 통합되고, 상기 스위치에 의해 실행 가능한 명령들을 저장하는 비일시적인 컴퓨터 판독 가능 저장 매체를 포함하고, 상기 명령들은 그러한 실행 시에 상기 스위치로 하여금 동작들을 수행하게 하고, 상기 동작들은,
상기 스위치에 의해, 상기 버스에 의해 상기 스위치에 연결된 디바이스로부터 특정 물리적 어드레스를 포함하는 메모리 액세스 요청을 수신하는 것;
상기 스위치에 의해, 상기 특정 물리적 어드레스를 포함하는 메모리 액세스 요청을 수신하는 것에 응답하여 물리적 어드레스들로의 가상 어드레스들의 맵핑을 상기 메모리로부터 리트리빙하는 것;
상기 물리적 어드레스들로의 가상 어드레스들의 맵핑을 이용하여 상기 특정 물리적 어드레스가 상기 메모리에 저장된다고 결정하는 것; 및
상기 특정 물리적 어드레스가 상기 메모리에 저장된다고 결정하는 것에 응답하여, 서비싱을 위해 상기 메모리 액세스 요청을 다른 디바이스에 포워딩하는 것
을 포함하는, 시스템. - 제 1 항에 있어서,
상기 물리적 어드레스들로의 가상 어드레스들의 맵핑을 상기 메모리로부터 리트리빙하는 것은 상기 디바이스에 대한 어드레스 변환 요청(address translation request)에 대한 요청에 응답하여 수신되는 상기 물리적 어드레스들로의 가상 어드레스들의 맵핑을 상기 메모리로부터 리트리빙하는 것을 포함하는, 시스템. - 제 1 항에 있어서,
상기 메모리는 TLB(translation lookaside buffer)를 포함하고; 그리고
상기 물리적 어드레스들로의 가상 어드레스들의 맵핑을 상기 메모리로부터 리트리빙하는 것은 상기 물리적 어드레스들로의 가상 어드레스들의 맵핑을 상기 TLB로부터 리트리빙하는 것을 포함하는, 시스템. - 제 3 항에 있어서,
상기 스위치에 대한 미리 결정된 수의 포트들을 포함하고,
상기 포트들의 각각은 특정 디바이스에 대응하고,
상기 메모리는 미리 결정된 수의 상기 TLB들을 포함하고,
상기 미리 결정된 수의 TLB들의 각각은 상기 특정 디바이스들 중 하나에 대응하는, 시스템. - 제 3 항에 있어서,
상기 동작들은:
상기 스위치에 의해 상기 디바이스에 대한 어드레스 변환 요청에 대한 응답을 수신하는 것 ― 상기 응답은 상기 물리적 어드레스로의 가상 어드레스의 맵핑을 포함함 ―;
상기 디바이스에 대한 어드레스 변환 요청에 대한 응답을 수신하는 것에 대한 응답으로, 상기 TLB가 빈(empty) 위치를 포함하는 않는다고 결정하는 것;
상기 TLB내의 위치로부터 엔트리를 제거하는 것; 및
상기 가상 어드레스를 상기 물리적 어드레스로 맵핑하는 새로운 엔트리를 상기 TLB 내의 위치에 저장하는 것
을 포함하는, 시스템. - 제 3 항에 있어서,
상기 동작들은:
상기 디바이스가 가상 어드레스-물리적 어드레스 맵핑들을 현재 상기 디바이스 상의 TLB에 저장하고 있다는 것을 상기 디바이스에 특정한 설정이 표시한다고 결정하는 것;
상기 디바이스가 가상 어드레스-물리적 어드레스 맵핑들을 현재 상기 디바이스 상의 TLB에 저장하고 있다는 것을 상기 디바이스에 특정한 설정이 표시한다고 결정하는 것에 대한 응답으로, 상기 디바이스의 TLB로부터 엔트리를 제거하도록 상기 디바이스에 지시하는 메시지를 상기 디바이스로 전송하는 것; 및
상기 디바이스가 가상 어드레스-물리적 어드레스 맵핑들을 현재 상기 디바이스 상의 TLB에 저장하고 있다는 것을 상기 디바이스에 특정한 설정이 표시한다고 결정하는 것에 대한 응답으로, 상기 물리적 어드레스로의 가상 어드레스의 맵핑을 상기 디바이스에 제공하는 것
을 포함하는, 시스템. - 제 6 항에 있어서,
상기 동작들은:
상기 디바이스가 상기 디바이스의 TLB로부터 엔트리를 제거하였다는 확인(confirmation)을 상기 디바이스로부터 수신하는 것을 포함하고,
상기 물리적 어드레스로의 가상 어드레스의 맵핑을 상기 디바이스에 제공하는 것은, 상기 디바이스가 상기 디바이스의 TLB로부터 엔트리를 제거하였다는 확인을 수신하는 것에 대한 응답으로, 상기 물리적 어드레스로의 가상 어드레스의 맵핑을 상기 디바이스에 제공하는 것을 포함하는, 시스템. - 제 1 항에 있어서,
상기 스위치는, 상기 스위치와 개개의 디바이스 사이의 버스에 각각 어떠한 컴포넌트들이 없이 상기 버스에 연결된 상기 디바이스를 포함하는 2 개 이상의 디바이스들로부터 패킷들을 수신하고 패킷들을 이들에 전달하고,
상기 메모리는 상기 디바이스에 특정하고, 상기 버스에 의해 상기 스위치에 연결되고 상기 2 개 이상의 디바이스들에 포함되는 다른 디바이스들에 대한 어떠한 가상 어드레스-물리적 어드레스 맵핑들도 포함하지 않고, 그리고
상기 시스템은 하나 이상의 부가적인 메모리들을 포함하고, 하나 이상의 부가적인 메모리들 각각은 a) 상기 디바이스 이외의 상기 2 개 이상의 디바이스들 내의 특정 디바이스에 특정하고, b) 버스에 의해 상기 스위치에 연결되고 상기 2 개 이상의 디바이스들에 포함되는 다른 디바이스들에 대한 어떠한 가상 어드레스-물리적 어드레스 맵핑들도 포함하지 않는, 시스템. - 제 1 항에 있어서,
상기 스위치에 통합되는 하나 이상의 부가적인 메모리들을 포함하고, 상기 부가적인 메모리들 각각 및 상기 메모리는 상기 버스에 의해 상기 스위치에 연결된 특정 디바이스에 특정하고,
상기 특정 물리적 어드레스가 상기 메모리에 저장된다고 결정하는 것은,
상기 스위치 내의 특정 포트가 상기 메모리 액세스 요청을 수신하였다고 결정하는 것;
상기 메모리 및 상기 부가적인 메모리들을 포함하는 그룹으로부터, 상기 특정 포트를 사용하는 디바이스에 대한 메모리를 선택하는 것; 및
상기 특정 포트를 사용하는 디바이스에 대한 메모리를 선택하는 것에 대한 응답으로, 상기 특정 물리적 어드레스가 상기 메모리에 저장된다고 결정하는 것을 포함하는, 시스템. - 제 1 항에 있어서,
중앙 프로세싱 유닛; 및
캐시를 포함하고,
상기 디바이스에 대한 어드레스 변환 요청에 대한 응답을 수신하는 것은, 상기 스위치에 의해 상기 캐시로부터 상기 물리적 어드레스로의 가상 어드레스의 맵핑을 포함하고, 그리고
서비싱을 위해 상기 메모리 액세스 요청을 다른 디바이스로 포워딩하는 것은, 상기 메모리 액세스 요청을 상기 중앙 프로세싱 유닛으로 포워딩하는 것을 포함하는, 시스템. - 제 10 항에 있어서,
상기 스위치를 제 2 버스를 통해 상기 중앙 프로세싱 유닛 및 상기 캐시에 연결하고, 상기 제 2 버스를 사용하여 상기 스위치 및 상기 중앙 프로세싱 유닛 및 상기 캐시로 그리고 이들로부터 응답들 및 요청들을 라우팅하는 상기 제 2 버스 상의 제어기를 포함하는, 시스템. - 제 11 항에 있어서,
상기 제어기는 루트 컴플렉스(root complex)를 포함하는, 시스템. - 제 10 항에 있어서,
상기 스위치를 포함하는 복수의 스위치들; 및
상기 복수의 스위치들의 각각을 제 2 버스를 통해 상기 중앙 프로세싱 유닛 및 상기 캐시에 연결하고, 상기 제 2 버스를 사용하여 상기 복수의 스위치들의 각각 및 상기 중앙 프로세싱 유닛 및 상기 캐시로의 그리고 이들로부터의 응답들 및 요청들을 라우팅하는 제 2 버스 상의 제어기
를 포함하는, 시스템. - 제 1 항에 있어서,
마더보드; 및
상기 마더보드에 통합된 버스를 포함하고,
상기 마더보드에 대해 상기 스위치는 주변 디바이스들이 상기 마더보드에 연결되도록 허용하기 위해 요청들을 소스 디바이스로부터 목적지 디바이스로 라우팅하도록 구성되는, 시스템. - 제 1 항에 있어서,
상기 동작들은:
상기 가상 어드레스를 포함하는 어드레스 변환 요청을 상기 디바이스로부터 상기 스위치에 의해 수신하는 것;
상기 가상 어드레스가 상기 메모리에 저장되지 않는다고 결정하는 것;
상기 물리적 어드레스로의 가상 어드레스의 맵핑에 대한 상기 어드레스 변환 요청을 전송하는 것;
상기 물리적 어드레스로의 가상 어드레스의 맵핑에 대한 상기 어드레스 변환 요청을 전송하는 것에 응답하여 상기 어드레스 변환 요청에 대한 응답을 수신하는 것; 및
상기 메모리에, 상기 디바이스에 대한 상기 어드레스 변환 요청에 대한 응답을 수신하는 것에 응답하여 상기 물리적 어드레스로의 가상 어드레스의 맵핑을 저장하는 것
을 포함하는, 시스템. - 제 15 항에 있어서,
상기 동작들은:
상기 물리적 어드레스로의 가상 어드레스의 맵핑을 사용하여 상기 가상 어드레스에 대한 대응하는 물리적 어드레스를 결정하는 것; 및
상기 대응하는 물리적 어드레스를 포함하는 상기 어드레스 변환 요청에 대한 응답을 상기 디바이스에 제공하는 것
을 포함하는, 시스템. - 제 15 항에 있어서,
상기 동작들은:
상기 물리적 어드레스로의 가상 어드레스의 맵핑에 대한 상기 어드레스 변환 요청의 전송과 동시에, 상기 메모리가 상기 물리적 어드레스로의 가상 어드레스의 맵핑을 포함하는지를 결정하는 것을 포함하는, 시스템. - 제 15 항에 있어서,
상기 물리적 어드레스로의 가상 어드레스의 맵핑에 대한 상기 어드레스 변환 요청을 전송하는 것은 상기 물리적 어드레스로의 가상 어드레스의 맵핑을 중앙 프로세싱 유닛으로부터 요청하는 것을 포함하는, 시스템. - 제 15 항에 있어서,
상기 물리적 어드레스로의 가상 어드레스의 맵핑에 대한 상기 어드레스 변환 요청을 전송하는 것은 상기 물리적 어드레스로의 가상 어드레스의 맵핑을 메모리로부터 요청하는 것을 포함하는, 시스템. - 제 15 항에 있어서,
상기 물리적 어드레스로의 가상 어드레스의 맵핑에 대한 상기 어드레스 변환 요청을 전송하는 것은 상기 물리적 어드레스로의 가상 어드레스의 맵핑을 IOMMU(input/output memory management unit)로부터 요청하는 것을 포함하는, 시스템. - 제 1 항에 있어서,
상기 스위치에 통합되는 미리 결정된 수의 포트들을 포함하고,
상기 포트들의 각각은 특정 디바이스에 대응하고, 상기 특정 디바이스에 대해 상기 메모리는 물리적 어드레스로의 가상 어드레스의 대응하는 맵핑을 저장하도록 구성되며, 상기 메모리의 크기는 상기 미리 결정된 수의 포트들에 대응하는, 시스템. - 시스템으로서,
하나 이상의 디바이스들의 각각과 스위치 사이의 버스 상에 어떠한 컴포넌트들이 없이 상기 버스에 연결된 상기 하나 이상의 디바이스들로부터 패킷들을 수신하고, 상기 하나 이상의 디바이스들로 패킷들을 전달하는 스위치;
물리적 어드레스들로의 가상 어드레스들의 맵핑을 저장하기 위해 상기 스위치에 통합되는 메모리; 및
상기 스위치에 통합되고, 상기 스위치에 의해 실행 가능한 명령들을 저장하는 비일시적인 컴퓨터 판독 가능 저장 매체를 포함하고, 상기 명령들은 그러한 실행 시에 상기 스위치로 하여금 동작들을 수행하게 하고, 상기 동작들은,
상기 스위치에 의해, 상기 버스에 의해 상기 스위치에 연결된 디바이스로부터 특정 물리적 어드레스를 포함하는 메모리 액세스 요청을 수신하는 것;
상기 스위치에 의해, 상기 특정 물리적 어드레스를 포함하는 메모리 액세스 요청을 수신하는 것에 응답하여 물리적 어드레스로의 가상 어드레스의 맵핑을 상기 메모리로부터 리트리빙하는 것;
상기 물리적 어드레스들의 가상 어드레스의 맵핑을 이용하여 상기 디바이스가 상기 특정 물리적 어드레스에 의해 식별되는 메모리 위치에 액세스하는 것이 허가되지 않는다고 결정하는 것; 및
상기 디바이스가 상기 특정 물리적 어드레스에 의해 식별되는 메모리 위치에 액세스하는 것이 허가되지 않는다고 결정하는 것에 대한 응답으로 :
상기 메모리 액세스 요청을 제거(discarding)하는 것; 및
상기 디바이스를 리셋(reset)하는 것
을 포함하는, 시스템. - 제 22 항에 있어서,
상기 디바이스가 상기 특정 물리적 어드레스에 의해 식별되는 메모리 위치에 액세스하는 것이 허가되지 않는다고 결정하는 것은 상기 특정 물리적 어드레스가 상기 메모리에 저장되지 않는다고 결정하는 것을 포함하는, 시스템. - 컴퓨터-구현 방법으로서,
하나 이상의 디바이스들의 각각과 스위치 사이의 버스 상에 어떠한 컴포넌트들이 없이 상기 버스에 연결된 상기 하나 이상의 디바이스들로부터 패킷들을 수신하고, 상기 하나 이상의 디바이스들로 패킷들을 전달하는 스위치에 의해 상기 버스에 의해 상기 스위치에 연결되는 디바이스로부터 특정 물리적 어드레스를 포함하는 메모리 액세스 요청을 수신하는 단계;
상기 스위치에 의해, 상기 특정 물리적 어드레스를 포함하는 상기 메모리 액세스 요청을 수신하는 단계에 응답하여, 물리적 어드레스로의 가상 어드레스의 맵핑을 저장하기 위해 상기 스위치에 통합된 메모리로부터 상기 물리적 어드레스로의 가상 어드레스의 맵핑을 리트리빙하는 단계;
상기 물리적 어드레스로의 가상 어드레스의 맵핑을 이용하여 상기 특정 물리적 어드레스가 상기 메모리에 저장되는 것을 결정하는 단계; 및
상기 특정 물리적 어드레스가 상기 메모리에 저장되는 것을 결정하는 단계에 응답하여, 서비싱을 위해 상기 메모리 액세스 요청을 다른 디바이스에 포워딩하는 단계
를 포함하는, 컴퓨터-구현 방법. - 제 22 항에 있어서,
상기 스위치에 의해, 상기 버스에 의해 상기 스위치에 연결된 디바이스로부터 특정 물리적 어드레스를 포함하는 메모리 액세스 요청을 수신하는 것은:
어드레스를 포함하는 상기 메모리 액세스 요청을 수신하는 것; 및
상기 메모리 액세스 요청에 포함되는 상기 어드레스가 물리적 어드레스임을 결정하는 것을 포함하고,
상기 스위치에 의해, 상기 물리적 어드레스로의 가상 어드레스의 맵핑을 상기 메모리로부터 리트리빙하는 것은 상기 메모리 액세스 요청에 포함되는 상기 어드래스가 물리적 어드레스임을 결정하는 것에 응답하는, 시스템.
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US14/810,062 US9626300B2 (en) | 2015-07-27 | 2015-07-27 | Address caching in switches |
US14/810,062 | 2015-07-27 | ||
PCT/US2016/039333 WO2017019216A1 (en) | 2015-07-27 | 2016-06-24 | Address caching in switches |
Related Parent Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020177031683A Division KR101885185B1 (ko) | 2015-07-27 | 2016-06-24 | 스위치들 내의 어드레스 캐싱 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20180088525A true KR20180088525A (ko) | 2018-08-03 |
KR102015077B1 KR102015077B1 (ko) | 2019-08-27 |
Family
ID=56373146
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020177031683A KR101885185B1 (ko) | 2015-07-27 | 2016-06-24 | 스위치들 내의 어드레스 캐싱 |
KR1020187021861A KR102015077B1 (ko) | 2015-07-27 | 2016-06-24 | 스위치들 내의 어드레스 캐싱 |
Family Applications Before (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020177031683A KR101885185B1 (ko) | 2015-07-27 | 2016-06-24 | 스위치들 내의 어드레스 캐싱 |
Country Status (10)
Country | Link |
---|---|
US (2) | US9626300B2 (ko) |
EP (3) | EP4131013A1 (ko) |
JP (2) | JP6434168B2 (ko) |
KR (2) | KR101885185B1 (ko) |
CN (2) | CN107949833B (ko) |
DE (2) | DE202016107024U1 (ko) |
DK (1) | DK3329378T3 (ko) |
GB (1) | GB2556458B (ko) |
HK (1) | HK1253044A1 (ko) |
WO (1) | WO2017019216A1 (ko) |
Families Citing this family (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10007435B2 (en) | 2015-05-21 | 2018-06-26 | Micron Technology, Inc. | Translation lookaside buffer in memory |
US9626300B2 (en) * | 2015-07-27 | 2017-04-18 | Google Inc. | Address caching in switches |
US10678702B2 (en) | 2016-05-27 | 2020-06-09 | Advanced Micro Devices, Inc. | Using multiple memory elements in an input-output memory management unit for performing virtual address to physical address translations |
US10853262B2 (en) | 2016-11-29 | 2020-12-01 | Arm Limited | Memory address translation using stored key entries |
US11082523B2 (en) * | 2017-02-09 | 2021-08-03 | International Business Machines Corporation | System, method and computer program product for a distributed virtual address space |
US20190044227A1 (en) * | 2017-08-01 | 2019-02-07 | Bby Solutions, Inc. | Active Antenna |
US10866904B2 (en) * | 2017-11-22 | 2020-12-15 | Arm Limited | Data storage for multiple data types |
US10929308B2 (en) | 2017-11-22 | 2021-02-23 | Arm Limited | Performing maintenance operations |
US10831673B2 (en) | 2017-11-22 | 2020-11-10 | Arm Limited | Memory address translation |
US10635609B2 (en) * | 2018-03-02 | 2020-04-28 | Samsung Electronics Co., Ltd. | Method for supporting erasure code data protection with embedded PCIE switch inside FPGA+SSD |
US20240095196A1 (en) * | 2018-03-02 | 2024-03-21 | Samsung Electronics Co., Ltd. | Method for supporting erasure code data protection with embedded pcie switch inside fpga+ssd |
US10990554B2 (en) | 2018-03-02 | 2021-04-27 | Samsung Electronics Co., Ltd. | Mechanism to identify FPGA and SSD pairing in a multi-device environment |
US10929310B2 (en) | 2019-03-01 | 2021-02-23 | Cisco Technology, Inc. | Adaptive address translation caches |
JP7080863B2 (ja) * | 2019-08-02 | 2022-06-06 | 株式会社日立製作所 | ストレージ装置 |
CN110716886B (zh) * | 2019-09-29 | 2022-12-13 | 惠州市仲恺Tcl智融科技小额贷款股份有限公司 | 数据处理的方法、装置、存储介质以及终端 |
CN111988394B (zh) * | 2020-08-18 | 2022-11-01 | 北京金山云网络技术有限公司 | 一种虚拟化环境中优化p2p数据传输的方法、装置及设备 |
CN115525596A (zh) * | 2021-06-25 | 2022-12-27 | 许继电气股份有限公司 | 多主交换式高速互联背板总线及其控制方法、处理系统 |
CN114553797B (zh) * | 2022-02-25 | 2023-05-09 | 星宸科技股份有限公司 | 具有命令转发机制的多芯片系统及地址产生方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090327645A1 (en) * | 2007-03-28 | 2009-12-31 | Fujitsu Limited | Switch, information processing apparatus, and address translation method |
US20130080726A1 (en) * | 2011-09-25 | 2013-03-28 | Andrew G. Kegel | Input/output memory management unit with protection mode for preventing memory access by i/o devices |
Family Cites Families (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH04308953A (ja) * | 1991-04-05 | 1992-10-30 | Kyocera Corp | 仮想アドレス計算機装置 |
JPH06187286A (ja) * | 1992-12-15 | 1994-07-08 | Hitachi Ltd | バス変換アダプタ |
JP3296240B2 (ja) * | 1997-03-28 | 2002-06-24 | 日本電気株式会社 | バス接続装置 |
US7457897B1 (en) | 2004-03-17 | 2008-11-25 | Suoer Talent Electronics, Inc. | PCI express-compatible controller and interface for flash memory |
US20010049732A1 (en) * | 2000-06-01 | 2001-12-06 | Raciborski Nathan F. | Content exchange apparatus |
US7487327B1 (en) | 2005-06-01 | 2009-02-03 | Sun Microsystems, Inc. | Processor and method for device-specific memory address translation |
US7917723B2 (en) | 2005-12-01 | 2011-03-29 | Microsoft Corporation | Address translation table synchronization |
US7779197B1 (en) | 2006-05-09 | 2010-08-17 | Integrated Device Technology, Inc. | Device and method for address matching with post matching limit check and nullification |
US7707383B2 (en) * | 2006-11-21 | 2010-04-27 | Intel Corporation | Address translation performance in virtualized environments |
JP5116497B2 (ja) * | 2008-01-31 | 2013-01-09 | 株式会社日立製作所 | 情報処理システム、i/oスイッチ及びi/oパスの交替処理方法 |
JP2009199420A (ja) * | 2008-02-22 | 2009-09-03 | Panasonic Corp | メモリ制御装置 |
CN102111459B (zh) | 2009-12-28 | 2013-11-06 | 中兴通讯股份有限公司 | Ip语音设备主备切换中的通话维护方法及装置 |
US8639976B2 (en) * | 2011-02-15 | 2014-01-28 | Coraid, Inc. | Power failure management in components of storage area network |
US8930715B2 (en) | 2011-05-26 | 2015-01-06 | International Business Machines Corporation | Address translation unit, device and method for remote direct memory access of a memory |
US9110830B2 (en) * | 2012-01-18 | 2015-08-18 | Qualcomm Incorporated | Determining cache hit/miss of aliased addresses in virtually-tagged cache(s), and related systems and methods |
US8837476B2 (en) * | 2012-09-07 | 2014-09-16 | International Business Machines Corporation | Overlay network capable of supporting storage area network (SAN) traffic |
WO2015003295A1 (zh) * | 2013-07-08 | 2015-01-15 | 华为技术有限公司 | 一种在虚拟域中通信的方法、设备和系统 |
US9626300B2 (en) * | 2015-07-27 | 2017-04-18 | Google Inc. | Address caching in switches |
-
2015
- 2015-07-27 US US14/810,062 patent/US9626300B2/en active Active
-
2016
- 2016-06-24 JP JP2017556872A patent/JP6434168B2/ja active Active
- 2016-06-24 KR KR1020177031683A patent/KR101885185B1/ko active IP Right Grant
- 2016-06-24 GB GB1717591.0A patent/GB2556458B/en active Active
- 2016-06-24 WO PCT/US2016/039333 patent/WO2017019216A1/en active Application Filing
- 2016-06-24 EP EP22190860.1A patent/EP4131013A1/en active Pending
- 2016-06-24 EP EP16736686.3A patent/EP3329378B1/en active Active
- 2016-06-24 KR KR1020187021861A patent/KR102015077B1/ko active IP Right Grant
- 2016-06-24 DE DE202016107024.4U patent/DE202016107024U1/de active Active
- 2016-06-24 CN CN201680028182.0A patent/CN107949833B/zh active Active
- 2016-06-24 DE DE112016002006.6T patent/DE112016002006B4/de active Active
- 2016-06-24 EP EP21188542.1A patent/EP3923145A1/en active Pending
- 2016-06-24 CN CN202010138874.9A patent/CN111522755B/zh active Active
- 2016-06-24 DK DK16736686.3T patent/DK3329378T3/da active
-
2017
- 2017-03-08 US US15/453,179 patent/US9747241B2/en active Active
-
2018
- 2018-09-27 HK HK18112424.1A patent/HK1253044A1/zh unknown
- 2018-11-07 JP JP2018209836A patent/JP6913663B2/ja active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090327645A1 (en) * | 2007-03-28 | 2009-12-31 | Fujitsu Limited | Switch, information processing apparatus, and address translation method |
US20130080726A1 (en) * | 2011-09-25 | 2013-03-28 | Andrew G. Kegel | Input/output memory management unit with protection mode for preventing memory access by i/o devices |
Also Published As
Publication number | Publication date |
---|---|
CN107949833A (zh) | 2018-04-20 |
DE112016002006T5 (de) | 2018-03-01 |
KR101885185B1 (ko) | 2018-08-03 |
GB201717591D0 (en) | 2017-12-13 |
EP4131013A1 (en) | 2023-02-08 |
EP3329378B1 (en) | 2021-09-08 |
JP6913663B2 (ja) | 2021-08-04 |
CN111522755A (zh) | 2020-08-11 |
KR102015077B1 (ko) | 2019-08-27 |
CN107949833B (zh) | 2020-03-24 |
HK1253044A1 (zh) | 2019-06-06 |
US20170177532A1 (en) | 2017-06-22 |
GB2556458B (en) | 2021-11-24 |
DE202016107024U1 (de) | 2017-01-30 |
DE112016002006B4 (de) | 2023-10-12 |
JP6434168B2 (ja) | 2018-12-05 |
KR20170130609A (ko) | 2017-11-28 |
EP3329378A1 (en) | 2018-06-06 |
GB2556458A (en) | 2018-05-30 |
WO2017019216A1 (en) | 2017-02-02 |
US9747241B2 (en) | 2017-08-29 |
US9626300B2 (en) | 2017-04-18 |
CN111522755B (zh) | 2022-05-13 |
JP2018526696A (ja) | 2018-09-13 |
US20170031835A1 (en) | 2017-02-02 |
DK3329378T3 (da) | 2021-12-06 |
EP3923145A1 (en) | 2021-12-15 |
JP2019071064A (ja) | 2019-05-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101885185B1 (ko) | 스위치들 내의 어드레스 캐싱 | |
US10853277B2 (en) | Systems and methods for isolating input/output computing resources | |
CN106201646B (zh) | 用于安全虚拟机间共享存储器通信的设备和方法 | |
KR101906525B1 (ko) | PCIe 패브릭 확장 방법 및 시스템 | |
US8250254B2 (en) | Offloading input/output (I/O) virtualization operations to a processor | |
JP5841255B2 (ja) | 仮想化入力/出力のためのプロセッサローカルコヒーレンシを有するコンピュータシステム | |
EP2472412B1 (en) | Explicitly regioned memory organization in a network element | |
US9336158B2 (en) | Method and system for simplified address translation support for static infiniband host channel adaptor structures | |
US10310759B2 (en) | Use efficiency of platform memory resources through firmware managed I/O translation table paging | |
US20130054896A1 (en) | System memory controller having a cache | |
US20150261681A1 (en) | Host bridge with cache hints | |
US9678887B2 (en) | Flexible I/O DMA address allocation in virtualized systems |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A107 | Divisional application of patent | ||
E902 | Notification of reason for refusal | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant |