KR101539878B1 - 컴퓨터 시스템, pci 익스프레스 엔드포인트 디바이스에 액세스하는 방법 및 장치 - Google Patents

컴퓨터 시스템, pci 익스프레스 엔드포인트 디바이스에 액세스하는 방법 및 장치 Download PDF

Info

Publication number
KR101539878B1
KR101539878B1 KR1020137032327A KR20137032327A KR101539878B1 KR 101539878 B1 KR101539878 B1 KR 101539878B1 KR 1020137032327 A KR1020137032327 A KR 1020137032327A KR 20137032327 A KR20137032327 A KR 20137032327A KR 101539878 B1 KR101539878 B1 KR 101539878B1
Authority
KR
South Korea
Prior art keywords
access
endpoint device
pcie endpoint
processor
pcie
Prior art date
Application number
KR1020137032327A
Other languages
English (en)
Other versions
KR20150005854A (ko
Inventor
게 두
Original Assignee
후아웨이 테크놀러지 컴퍼니 리미티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 후아웨이 테크놀러지 컴퍼니 리미티드 filed Critical 후아웨이 테크놀러지 컴퍼니 리미티드
Publication of KR20150005854A publication Critical patent/KR20150005854A/ko
Application granted granted Critical
Publication of KR101539878B1 publication Critical patent/KR101539878B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/382Information transfer, e.g. on bus using universal interface adapter
    • G06F13/385Information transfer, e.g. on bus using universal interface adapter for adaptation of a particular data processing system to different peripheral devices
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/42Bus transfer protocol, e.g. handshake; Synchronisation
    • G06F13/4204Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus
    • G06F13/4221Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus being an input/output bus, e.g. ISA bus, EISA bus, PCI bus, SCSI bus
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/40Bus structure
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/20Handling requests for interconnection or transfer for access to input/output bus
    • G06F13/28Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/40Bus structure
    • G06F13/4004Coupling between buses
    • G06F13/4027Coupling between buses using bus bridges
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/40Bus structure
    • G06F13/4063Device-to-bus coupling
    • G06F13/4068Electrical coupling
    • G06F13/4081Live connection to bus, e.g. hot-plugging
    • 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/44Arrangements for executing specific programs
    • 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/44Arrangements for executing specific programs
    • G06F9/4401Bootstrapping
    • G06F9/4411Configuring for operating with peripheral devices; Loading of device drivers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2213/00Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F2213/0026PCI express
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2213/00Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F2213/28DMA
    • G06F2213/2802DMA using DMA transfer descriptors

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • Computer Security & Cryptography (AREA)
  • Bus Control (AREA)
  • Debugging And Monitoring (AREA)
  • Information Transfer Systems (AREA)
  • Hardware Redundancy (AREA)
  • Multi Processors (AREA)
  • Power Sources (AREA)

Abstract

본 발명의 실시예들은 PCI 익스프레스(PCIe) 엔드포인트 디바이스에 액세스하기 위한 컴퓨터 시스템 및 방법을 제공한다. 컴퓨터 시스템은 프로세서, PCIe 버스 및 액세스 프록시를 포함한다. 액세스 프록시는 프로세서와 PCIe 엔드포인트 디바이스에 접속되고; 프로세서는 연산 명령어를 취득하고 - 연산 명령어는 액세스 프록시를 통해 PCIe 엔드포인트 디바이스에 액세스하라고 프로세서에게 명령함 -, 연산 명령어에 따라 액세스 프록시에 액세스 요청을 송신하고; 액세스 프록시는 프로세서에 의해 송신된 액세스 요청을 수신한 후, 액세스 요청의 응답 메시지를 프로세서에 송신한다. 프로세서가 액세스될 PCIe 엔드포인트 디바이스에 직접 액세스하는 것이 아니라, 액세스 프록시를 통해 액세스를 완료하기 때문에, 그에 의해 프로세서에 대한 MCE 리셋을 방지한다.

Description

컴퓨터 시스템, PCI 익스프레스 엔드포인트 디바이스에 액세스하는 방법 및 장치{COMPUTER SYSTEM, METHOD FOR ACCESSING PERIPHERAL COMPONENT INTERCONNECT EXPRESS ENDPOINT DEVICE, AND APPARATUS}
관련 출원에 대한 상호 참조
본 출원은 2013년 5월 2일자로 출원된 국제 출원 PCT/CN2013/075088호의 계속 출원이며, 이는 참고로 완전히 본 명세서에 병합되어 있다.
기술 분야
본 발명의 실시예들은 컴퓨터 기술 분야에 관한 것이고, 구체적으로는 PCI 익스프레스 엔드포인트 디바이스(peripheral component interconnect express endpoint)에 액세스하기 위한 방법, 컴퓨터 시스템 및 장치에 관한 것이다.
PCI 익스프레스(PCIe: Peripheral Component Interconnect Express)는 계산 및 통신 플랫폼에서 이용되는 고성능 시스템 버스이다. PCIe 버스는 중앙 처리 유닛(CPU: central processing unit)과 주변 디바이스의 상호접속 시스템에서 널리 이용되며, 계산 및 저장 디바이스 내의 코어 서비스 채널로서 기능한다. 네트워크 인터페이스 카드 디바이스 또는 고체 상태 디스크(SSD: Solid State Disk)와 같이, PCIe 버스를 통해 CPU와 상호접속하는 다양한 유형의 주변 디바이스가 존재할 수 있다. 본 명세서에서, 그러한 디바이스들은 PCIe 엔드포인트 디바이스라고 지칭된다.
PCIe 버스는 서버 또는 저장 시스템의 버스 인터페이스로서 널리 이용된다. 시스템의 정상 운영 동안, PCIe 엔드포인트 디바이스는 온라인 용량 확장 및 유지보수 요구, 즉 핫 스왑 요구(hot swap demand)로 인해, 전원이 꺼지지 않은 상태(non-power-off condition)에서 추가 또는 제거될 필요가 있다. 현재의 PCIe 핫 스왑은 이하의 동작 프로세스(operation process)를 따른다: 운영자가 버튼을 누르는 것에 의해 핫 스왑 요청을 개시하고; 핫 스왑 이벤트를 알게 된 후에, 핫 스왑 제어기는 PCIe 엔드포인트 디바이스에 액세스할 수 있는 모든 드라이브에게 PCIe 엔드포인트 디바이스에의 액세스를 중단할 것을 통보하고, 핫 스왑이 수행될 필요가 있는 PCIe 엔드포인트 디바이스의 자원들을 설치제거하고; 다음으로 PCIe 엔드포인트 디바이스의 전원이 꺼지며, 운영자는 PCIe 엔드포인트 디바이스를 제거한다.
시스템의 정상 운영을 보장하기 위해, PCIe 엔드포인트 디바이스의 현재의 핫 스왑에 대한 사전 통보(advance notification)가 요구된다. 그러나, 최근, PCIe 버스는 시스템-내 상호접속으로부터 시스템-간 상호접속으로 점진적으로 발전하고 있으며, 외부 케이블과 같은 응용들이 증가하고 있다. 케이블은 비정상적으로 분리되기가 쉽기 때문에, PCIe 엔드포인트 디바이스가 사전 통보 없이 비정상적으로 오프라인으로 되는 상황이 발생한다. 추가로, 사용자가 고체 상태 디스크(SSD)를 이용하여 시스템에 직접 접속하는 시나리오가 점점 더 널리 발생하고 있다. 사용자는 사용자 습관 요인으로 인해 사전 통보 없이 SSD 디스크를 직접 삽입하거나 제거할 수 있다. PCIe 엔드포인트 디바이스가 비정상적으로 갑자기 오프라인으로 되는 언급된 상황에 있어서, CPU가 PCIe 엔드포인트 디바이스에의 판독 및 기입 명령어들을 개시한 경우, 관련 명령어들은 대기가 행해져야 하는 상태로 머물 것이고; PCIe 엔드포인트 디바이스에 액세스하라는 CPU로부터의 명령어들이 어느 정도까지 계속하여 누적될 때, CPU는 전체 시스템을 비정상으로 간주하고, 머신 체크 예외(MCE: Machine check exception) 에러를 보고한다. 그 결과, 전체 시스템의 리셋이 야기된다.
본 발명의 실시예들은 PCI 익스프레스 엔드포인트 디바이스가 비정상적으로 오프라인으로 된 후에 프로세서에 의해 발생되는 리셋을 방지하기 위해, PCIe 엔드포인트 디바이스에 액세스하기 위한 방법, 컴퓨터 시스템 및 장치를 제안한다.
제1 양태에서, 본 발명의 실시예는 컴퓨터 시스템을 제공하는데, 이 컴퓨터 시스템은,
프로세서; 및
PCI 익스프레스(PCIe: peripheral component interconnect express) 엔드포인트 디바이스를 접속하도록 구성된 PCIe 버스
를 포함하고,
컴퓨터 시스템은 액세스 프록시(access proxy)를 더 포함하며, 액세스 프록시는 프로세서와 PCIe 엔드포인트 디바이스에 접속되고,
프로세서는 연산 명령어를 취득하도록 구성되고, 그 연산 명령어는 프로세서에게, 액세스 프록시를 이용하여 PCIe 엔드포인트 디바이스에 액세스하고; 연산 명령어에 따라 액세스 프록시에 액세스 요청을 송신할 것을 명령하며, 액세스 요청은 액세스 프록시에게 PCIe 엔드포인트 디바이스에 액세스할 것을 명령하고,
액세스 프록시는 프로세서에 의해 송신된 액세스 요청을 수신한 후, 액세스 요청의 응답 메시지를 프로세서에 송신하도록 구성된다.
제1 양태를 참조하여, 가능한 제1 구현 방식에서, 컴퓨터 시스템은 PCIe 엔드포인트 디바이스에 액세스하기 위한 미리 설정된 인터페이스(preset interface)에 따라 연산 명령어를 생성하도록 구성된, PCIe 엔드포인트 디바이스의 드라이브 모듈을 더 포함하고, PCIe 엔드포인트 디바이스에 액세스하기 위한 미리 설정된 인터페이스는 액세스 프록시를 가리키며;
프로세서는 특히, PCIe 엔드포인트 디바이스의 드라이브 모듈에 의해 생성되는 연산 명령어를 취득하도록 구성된다.
제1 양태를 참조하여, 가능한 제2 구현 방식에서, 컴퓨터 시스템은 PCIe 엔드포인트 디바이스의 드라이브 모듈 및 호스트 운영 체제를 더 포함하고,
PCIe 엔드포인트 디바이스의 드라이브 모듈은 PCIe 엔드포인트 디바이스에 액세스하기 위해 호스트 운영 체제를 호출(invoke)하도록 구성되고;
호스트 운영 체제는 PCIe 엔드포인트 디바이스의 드라이브 모듈에 의한 호출에 응답하여 수신하고, PCIe 엔드포인트 디바이스에 액세스하기 위한 미리 설정된 인터페이스에 따라 연산 명령어를 생성하며, PCIe 엔드포인트 디바이스에 액세스하기 위한 미리 설정된 인터페이스는 액세스 프록시를 가리키며;
프로세서는 특히, 호스트 운영 체제에 의해 생성되는 연산 명령어를 취득하도록 구성된다.
제1 양태, 제1 양태의 가능한 제1 구현 방식 또는 제1 양태의 가능한 제2 구현 방법을 참조하여, 가능한 제3 구현 방법에서는, 액세스 프록시가 액세스 요청에 따라 PCIe 엔드포인트 디바이스에의 액세스를 수행하도록 더 구성된다.
제2 양태에서, PCI 익스프레스(PCIe) 엔드포인트 디바이스에 액세스하기 위한 방법이 제공되는데, PCIe 엔드포인트 디바이스는 PCIe 버스를 통해 컴퓨터 시스템의 프로세서에 접속되고, 이 방법은,
프로세서에 의해 연산 명령어를 취득하는 단계 - 연산 명령어는 프로세서에게, 액세스 프록시를 이용하여 PCIe 엔드포인트 디바이스에 액세스할 것을 명령함 - ;
프로세서에 의해 연산 명령어에 따라 액세스 프록시에 액세스 요청을 송신하는 단계 - 액세스 요청은 액세스 프록시에게 PCIe 엔드포인트 디바이스에 액세스할 것을 명령함 - ; 및
프로세서에 의해, 액세스 프록시에 의해 송신된 액세스 요청의 응답 메시지를 수신하는 단계
를 포함한다.
제2 양태를 참조하여, 가능한 제1 구현 방식에서, 프로세서는 PCIe 엔드포인트 디바이스에 액세스하기 위한 미리 설정된 인터페이스에 따라 PCIe 엔드포인트 디바이스의 드라이브 모듈에 의해 생성된 연산 명령어를 취득하고, PCIe 엔드포인트 디바이스에 액세스하기 위한 미리 설정된 인터페이스는 액세스 프록시를 가리키며; 대안적으로는, 프로세서는 PCIe 엔드포인트 디바이스에 액세스하기 위한 미리 설정된 인터페이스에 따라 호스트 운영 체제에 의해 생성되는 연산 명령어를 취득하고, PCIe 엔드포인트 디바이스에 액세스하기 위한 미리 설정된 인터페이스는 액세스 프록시를 가리킨다. 제2 양태, 또는 제2 양태의 가능한 제1 구현 방식을 참조하여, 가능한 제2 구현 방식에서, 연산 명령어는 특히 프로세서에게 직접 메모리 액세스(DMA: direct memory access) 엔진을 이용하여 PCIe 엔드포인트 디바이스에 액세스할 것을 명령하고;
프로세서는 연산 명령어에 따라 DMA 엔진에 데이터 이동 요청(data migration request)을 송신하고, 데이터 이동 요청은, DMA 엔진에게 PCIe 엔드포인트 디바이스의 메모리 내의 특정 데이터를 컴퓨터 시스템의 메모리로 이동시키거나, 컴퓨터 시스템의 메모리 내의 특정 데이터를 PCIe 엔드포인트 디바이스의 메모리로 이동시킬 것을 명령한다.
제2 양태, 제2 양태의 가능한 제1 구현 방식 또는 제2 양태의 가능한 제2 구현 방법을 참조하여, 가능한 제3 구현 방식에서는, 방법은,
프로세서에 의해, 액세스 프록시에 의해 송신된 제1 통보 메시지를 수신하는 단계 - 제1 통보 메시지는 액세스 프록시가 PCIe 엔드포인트 디바이스에 성공적으로 액세스하였음을 나타냄 - ; 및
프로세서에 의해, 제1 통보 메시지에 따른 액세스 결과를 취득하는 단계
를 더 포함한다.
제2 양태, 제2 양태의 가능한 제1 구현 방식 또는 제2 양태의 가능한 제2 구현 방법을 참조하여, 가능한 제4 구현 방식에서는, 방법은,
프로세서에 의해, 액세스 프록시에 의해 송신된 제2 통보 메시지를 수신하는 단계 - 제2 통보 메시지는 액세스 프록시가 PCIe 엔드포인트 디바이스에 액세스하는 데에 실패하였음을 나타냄 - ; 및
프로세서에 의해, 제2 통보 메시지에 따라 액세스 실패에 대한 후속 처리를 실행하는 단계
를 더 포함한다.
제2 양태의 가능한 제4 구현 방식을 참조하여, 가능한 제5 구현 방법에서, 액세스 실패의 후속 처리는,
프로세서에 의해, 액세스 프록시가 PCIe 엔드포인트 디바이스에 액세스하는 데에 실패한 이유를 결정하고, 액세스 실패의 이유가 액세스될 PCIe 엔드포인트 디바이스가 비정상적으로 오프라인으로 된 것인 경우, 프로세서에 의해, PCIe 엔드포인트 디바이스에의 액세스를 중단하는 단계를 포함한다.
제3 양태에서, 컴퓨터가 제공되는데, 이 컴퓨터는,
프로세서; 및
컴퓨터 실행 명령어를 저장하도록 구성된 메모리
를 포함하고, 컴퓨터가 실행 중일 때, 프로세서는 메모리 내에 저장된 컴퓨터 실행 명령어를 실행하고, 통신 인터페이스를 통해 컴퓨터의 외부 디바이스와 통신하여, 컴퓨터가 제2 양태에 따라 PCI 익스프레스(PCIe) 엔드포인트 디바이스에 액세스하기 위한 방법을 실행하게 한다.
제4 양태에서, 컴퓨터 판독가능한 매체가 제공되는데, 이 컴퓨터 판독가능한 매체는 컴퓨터 실행 명령어를 포함하고, 컴퓨터는, 컴퓨터의 프로세서가 컴퓨터 실행 명령어를 실행할 때, 제2 양태에 따라 PCI 익스프레스(PCIe) 엔드포인트 디바이스에 액세스하기 위한 방법을 실행한다.
제5 양태에서, PCI 익스프레스(PCIe) 엔드포인트 디바이스에 액세스하기 위한 방법이 제공되는데, PCIe 엔드포인트 디바이스는 PCIe 버스를 통해 컴퓨터 시스템의 프로세서에 접속되고, 방법은,
PCIe 엔드포인트 디바이스가 액세스될 필요가 있음을 나타내는 호출 명령어를 수신하는 단계; 및
PCIe 엔드포인트 디바이스에 액세스하기 위한 미리 설정된 인터페이스에 따라 연산 명령어를 생성하는 단계 - PCIe 엔드포인트 디바이스에 액세스하기 위한 미리 설정된 인터페이스는 액세스 프록시를 가리키며, 연산 명령어는 프로세서에게 액세스 프록시를 이용하여 PCIe 엔드포인트 디바이스에 액세스할 것을 명령하기 위해 이용됨 -
를 포함한다.
제6 양태에서, PCI 익스프레스(PCIe) 엔드포인트 디바이스에 액세스하기 위한 장치가 제공되는데, 이 장치는,
PCIe 엔드포인트 디바이스가 액세스될 필요가 있음을 나타내는 호출 명령어를 수신하도록 구성된 수신 모듈; 및
PCIe 엔드포인트 디바이스에 액세스하기 위한 미리 설정된 인터페이스에 따라 PCIe 엔드포인트 디바이스에 액세스하기 위한 연산 명령어를 생성하도록 구성된 생성 모듈 - PCIe 엔드포인트 디바이스에 액세스하기 위한 미리 설정된 인터페이스는 액세스 프록시를 가리키며, 연산 명령어는 프로세서에게 액세스 프록시를 이용하여 PCIe 엔드포인트 디바이스에 액세스할 것을 명령하기 위해 이용됨 -
을 포함한다.
제7 양태에서, 컴퓨터가 제공되는데, 이 컴퓨터는,
프로세서; 및
컴퓨터 실행 명령어를 저장하도록 구성된 메모리
를 포함하고, 컴퓨터가 실행 중일 때, 프로세서는 메모리 내에 저장된 컴퓨터 실행 명령어를 실행하여, 컴퓨터가,
PCIe 엔드포인트 디바이스가 액세스될 필요가 있음을 나타내는 호출 명령어를 수신하는 단계; 및
PCIe 엔드포인트 디바이스에 액세스하기 위한 미리 설정된 인터페이스에 따라 PCIe 엔드포인트 디바이스에 액세스하기 위한 연산 명령어를 생성하는 단계 - PCIe 엔드포인트 디바이스에 액세스하기 위한 미리 설정된 인터페이스는 액세스 프록시를 가리키며, 연산 명령어는 프로세서에게 액세스 프록시를 이용하여 PCIe 엔드포인트 디바이스에 액세스할 것을 명령하기 위해 이용됨 -
를 포함하는 방법을 실행하게 한다.
제8 양태에서, 컴퓨터 실행 명령어를 포함하는 컴퓨터 판독가능한 매체가 제공되는데, 컴퓨터는 컴퓨터의 프로세서가 컴퓨터 실행 명령어를 수행할 때,
PCIe 엔드포인트 디바이스가 액세스될 필요가 있음을 나타내는 호출 명령어를 수신하는 단계; 및
PCIe 엔드포인트 디바이스에 액세스하기 위한 미리 설정된 인터페이스에 따라 PCIe 엔드포인트 디바이스에 액세스하기 위한 연산 명령어를 생성하는 단계 - PCIe 엔드포인트 디바이스에 액세스하기 위한 미리 설정된 인터페이스는 액세스 프록시를 가리키며, 연산 명령어는 프로세서에게 액세스 프록시를 이용하여 PCIe 엔드포인트 디바이스에 액세스할 것을 명령하기 위해 이용됨 -
를 포함하는 방법을 실행한다.
제9 양태에서, 액세스 프록시가 제공되는데, 이 액세스 프록시는 컴퓨터 시스템에 적용되고, 컴퓨터 시스템은 프로세서 및 PCI 익스프레스(PCIe) 버스를 포함하며, PCIe 버스는 적어도 하나의 PCIe 엔드포인트 디바이스에 접속되고;
액세스 프록시는 프로세서와 PCIe 엔드포인트 디바이스에 접속되고;
액세스 프록시는 프로세서와 PCIe 엔드포인트 디바이스 사이의 직접 액세스를 고립시키고, 프로세서로부터 PCIe 엔드포인트 디바이스에 액세스하기 위한 요청을 수신하고, 액세스 요청의 응답 메시지를 프로세서에 리턴하도록 구성된다.
제10 양태에서, PCIe 익스체인저가 제공되는데, 이 PCIe 익스체인저는 컴퓨터 시스템에 적용되고, 컴퓨터 시스템은 프로세서 및 PCI 익스프레스(PCIe) 버스를 포함하며, PCIe 버스는 적어도 하나의 PCIe 엔드포인트 디바이스에 접속되고;
PCIe 익스체인저의 업스트림 포트는 PCIe 버스를 통해 프로세서에 접속되고, PCIe 익스체인저의 다운스트림 포트는 PCIe 버스를 통해 PCIe 엔드포인트 디바이스에 접속되며;
제9 양태에 따른 액세스 프록시가 PCIe 익스체인저 내에 구축된다.
제11 양태에서, 컴퓨터 시스템에 액세스하는 PCI 익스프레스(PCIe) 엔드포인트 디바이스에 자원을 할당하기 위한 방법이 제공되는데, 이 방법은,
PCIe 엔드포인트 디바이스에 액세스하기 위한 각각의 포트에 대해 특정한 자원 지분(specific share of resources)을 예비(reserving)하는 단계 - 특정한 지분은 PCIe 엔드포인트 디바이스의 요구되는 자원량(resource quantity)보다 크거나 그와 동일함 - ; 및
예비된 특정한 자원 지분에 따라, PCIe 엔드포인트 디바이스에 액세스하기 위한 각각의 포트에 예비된 특정한 자원 지분을 할당하는 단계
를 포함한다.
제11 양태에 따르면, 제1 구현 방식에서, 특정한 지분은 최대 자원량 요구를 갖는 유형의 PCIe 엔드포인트 디바이스의 요구되는 자원량이다.
제11 양태, 또는 제11 양태의 가능한 제1 구현 방식에 따르면, 가능한 제2 구현 방식에서, 프로세서 및 컴퓨터 시스템에 액세스하는 PCIe 엔드포인트 디바이스는 PCIe 필드를 구성하고, PCIe 필드는 대응하는 PCIe 트리로 구성되며;
방법은 PCIe 엔드포인트 디바이스에 액세스하기 위한 각각의 포트에 할당된 특정한 자원 지분을 PCIe 트리 내에 기록하는 단계를 더 포함한다.
제11 양태의 가능한 제2 구현 방식에 따르면, 가능한 제3 구현 방식에서, 방법은, 각각의 PCIe 엔드포인트 디바이스가 컴퓨터 시스템으로부터 오프라인일 때, PCIe 엔드포인트 디바이스에 액세스하기 위한 각각의 포트에 할당되고 PCIe 트리 내에 기록된 특정한 자원 지분을 예비하는 단계
를 더 포함한다.
제12 양태에서, 컴퓨터 시스템이 제공되는데, 이 컴퓨터 시스템은,
프로세서;
PCI 익스프레스(PCIe) 엔드포인트 디바이스를 접속하도록 구성된 PCIe 버스;
PCIe 엔드포인트 디바이스에 액세스하기 위한 각각의 포트를 위한 특정한 자원 지분을 예비하도록 구성된 기본 입출력 시스템(BIOS) - 특정한 지분은 PCIe 엔드포인트 디바이스의 요구되는 자원량보다 크거나 그와 동일함 - ; 및
BIOS에 의해 예비되는 특정한 자원 지분에 따라, PCIe 엔드포인트 디바이스에 액세스하기 위한 각각의 포트에 예비된 특정한 자원 지분을 할당하도록 구성된 PCIe 관리 모듈
을 포함한다.
본 발명의 실시예들에서, 프로세서는 더 이상 액세스될 PCIe 엔드포인트 디바이스에 직접 액세스하지 않고, 액세스 프록시를 이용하여 액세스를 완료한다. 액세스 프록시는 PCIe 엔드포인트 디바이스의 비정상적인 오프라인에 의해 야기된 충격을 고립시킬 수 있고, 액세스 요청의 응답 메시지를 프로세서에 리턴하여, 프로세서에 캐싱된 태스크들이 타임아웃으로 인해 누적되지 않게 할 수 있으며, 따라서 프로세서는 MCE 리셋을 회피한다.
본 발명의 실시예들에서, 시스템은 PCIe 엔드포인트 디바이스에 액세스하기 위한 포트에 특정한 자원 지분을 예비 및 할당하여, PCIe 엔드포인트 디바이스가 시스템에 액세스할 때, 프로세서가 PCIe 엔드포인트 디바이스를 스캐닝하지 않게 한다. 이것은 PCIe 엔드포인트 디바이스가 컴퓨터 시스템에 액세스할 때 발생할 수 있는 MCE 에러에 의해 야기되는 전체 시스템의 리셋을 회피한다.
본 발명의 실시예들에서의 기술적 해법을 더 명확하게 설명하기 위해, 실시예들을 설명하는 데에 필요한 첨부 도면이 이하에 간략하게 소개된다. 분명히, 이하의 설명의 첨부 도면들은 본 발명의 일부 실시예들을 보여줄 뿐이며, 본 기술분야에 통상의 지식을 가진 자는 창의적 노력 없이도 이들 첨부 도면들로부터 다른 도면들을 도출해낼 수 있다.
도 1은 본 발명의 실시예에 따른 컴퓨터 시스템의 구성도이다.
도 2는 본 발명의 실시예에 따라 메모리 내에 포함되는 프로그램 모듈들의 구성도이다.
도 3은 본 발명의 실시예에 따른 다른 컴퓨터 시스템의 구성도이다.
도 4는 본 발명의 실시예에 따른 다른 컴퓨터 시스템의 구성도이다.
도 5는 본 발명의 실시예에 따른 방법의 흐름도이다.
도 6은 본 발명의 실시예에 따른 다른 방법의 흐름도이다.
도 7은 본 발명의 실시예에 따른 다른 방법의 흐름도이다.
도 8은 본 발명의 실시예에 따른 다른 방법의 흐름도이다.
도 9는 본 발명의 실시예에 따른 다른 방법의 흐름도이다.
도 10은 본 발명의 실시예에 따른 다른 방법의 흐름도이다.
도 11은 본 발명의 실시예에 따라 PCIe 엔드포인트 디바이스에 액세스하기 위한 장치의 구성도이다.
도 12는 본 발명의 실시예에 따른 컴퓨터의 구성도이다.
본 발명의 실시예들은 PCIe 엔드포인트 디바이스에 액세스하기 위한 방법, 컴퓨터 시스템 및 장치를 제공한다. PCIe 엔드포인트 디바이스 상에서 핫 스왑 동작이 수행될 필요가 있을 때, 시스템은 사전처리(preprocessing) 전에 통보를 받지 못할 수 있고, PCIe 엔드포인트 디바이스와 프로세서 간의 접속은 직접 분리된다. 이 때에는, 프로세서 상에서 MCE 리셋 리스크가 발생하지 않는다. 본 발명의 실시예들에서, PCIe 엔드포인트 디바이스가 시스템으로부터 직접 제거되거나 오류로 인해 오프라인으로 되는 상황은, 총괄하여 PCIe 엔드포인트 디바이스의 비정상 오프라인이라고 지칭된다.
본 발명의 실시예의 시스템 아키텍쳐
도 1은 본 발명의 실시예에 따른 컴퓨터 시스템의 구성도이다. 도 1에 도시된 컴퓨터 시스템은 CPU(110), 메모리(120) 및 PCIe 엔드포인트 디바이스(130)를 포함한다. PCIe 엔드포인트 디바이스(130)는 PCIe 버스(140)를 통해 CPU(110)에 접속하고, 컴퓨터 시스템에 삽입되거나 그로부터 제거될 수 있다. PCIe 엔드포인트 디바이스(130)는 그래픽 처리 유닛(131), 네트워크 인터페이스 카드(132), 고체 상태 디스크(133) 및 비디오 가속 컴포넌트(134)와 같은 다수의 유형을 포함한다. 메모리(120)는 데이터를 저장하도록 구성되며, 저장된 데이터는 CPU에 의해 외부 디바이스로부터 취득된 데이터일 수 있거나, CPU가 실행될 수 있게 하는 프로그램 데이터일 수도 있다. 구체적으로, 메모리 내에 하나 이상의 프로그램 모듈이 저장될 수 있고, CPU(110)는 프로그램 모듈의 컴퓨터 실행 명령어에 따라 관련 연산을 수행한다. 도 1에 도시된 컴퓨터 시스템 내의 PCIe 엔드포인트 디바이스(130) 및 CPU(110)는 PCIe 필드(PCIe field)를 구성하고, PCIe 필드 내의 모든 디바이스는 PCIe 버스(140)를 통해 CPU(110)에 접속하고, CPU(110)에 의해 제어된다.
도 2에 도시된 바와 같이, 도 1에 도시된 시스템 아키텍쳐에서, 메모리(120) 내의 프로그램 모듈들은 특히 애플리케이션 모듈(121), 드라이브 모듈(122) 및 호스트 운영 체제(HOS: Host Operation System)(123)를 포함할 수 있다. 애플리케이션 모듈(121)은 PCIe 엔드포인트 디바이스에 액세스하기 위한 요구를 만들어낸다. 드라이브 모듈(122)은 PCIe 엔드포인트 디바이스에 액세스하기 위한 애플리케이션 모듈의 요구에 따라, (액세스 인터페이스가 HOS에 의해 제공된다면) HOS(123)의 대응 인터페이스를 호출할 수 있다. HOS(123)는 드라이브 모듈에 의한 호출에 응답하여 그에 따라 연산 명령어를 생성하고, 그에 의해 CPU는 연산 명령어에 따라 대응하는 PCIe 엔드포인트 디바이스에 액세스하거나 그것을 제어하게 된다. 일반적으로, 하나의 PCIe 엔드포인트 디바이스가 하나의 드라이브 모듈에 대응한다(확실히, 각각의 PCIe 엔드포인트 디바이스가 대응하는 드라이브 모듈을 구비하는 것이 보장되기만 한다면, 하나의 드라이브 모듈이 복수의 PCIe 엔드포인트 디바이스에 대응하는 것이 가능함). 예를 들어, 도 1에 도시된 시스템 아키텍쳐에 따르면, 메모리(120) 내의 PCIe 엔드포인트 디바이스들의 드라이브 모듈들은 그래픽 처리 유닛의 드라이브 모듈(122-1), 네트워크 인터페이스 카드(NIC)의 드라이브 모듈(122-2), 고체 상태 디스크(SSD)의 드라이브 모듈(122-3), 및 비디오 가속 컴포넌트의 드라이브 모듈(122-4)을 포함할 수 있다.
예를 들어, 애플리케이션 모듈이 고체 상태 디스크(SSD)에 액세스하기 위한 요구를 만들어내는 경우, CPU에 의해 PCIe 엔드포인트 디바이스에 액세스하기 위한 현재의 방법에 따라, SSD의 드라이브 모듈(122-3)은 애플리케이션 모듈(121)에 의한 호출에 응답하여 수신한 후에 HOS(123)를 호출하고; HOS(123)는 디폴트로 구성된 액세스 인터페이스에 따라 CPU(110)에 대한 연산 명령어를 생성하고, 여기에서 연산 명령어는 액세스될 디바이스 SSD(133)의 명령어 및 관련 연산 요구조건을 포함하고; CPU(110)는 SSD의 드라이브 모듈(122-3)의 연산 명령어에 따라 SSD(133)에 액세스 요청을 송신하여, SSD(133)의 레지스터에의 액세스를 요구하고; SSD(133)가 비정상적으로 오프라인으로 된 경우, CPU(110)는 SSD(133)로부터 CPU(110)의 액세스 요청의 응답 메시지를 수신하지 않을 것이고, 이 때 CPU는 액세스 태스크를 불완전한 것으로 간주하며; 그러한 불완전한 태스크들이 CPU 상에 소정의 정도까지 누적되면, CPU는 전체 시스템을 비정상으로 간주하고, 리셋을 위해 MCE 에러를 보고한다.
본 발명의 본 실시예에서, CPU에 의해 PCIe 엔드포인트 디바이스에 액세스하는 방법이 변경된다. CPU는 더 이상 PCIe 엔드포인트 디바이스에 직접 액세스하지 않고, 제3자를 이용하여 PCIe 엔드포인트 디바이스에 액세스한다. 도 1에 도시된 바와 같이, 액세스 프록시(160)는 본 발명의 본 실시예에서 시스템에 새롭게 추가되며, 여기에서 액세스 프록시(160)는 PCIe 엔드포인트 디바이스에 액세스하고 PCIe 엔드포인트 디바이스의 비정상적인 오프라인이 CPU(110)에 가하는 충격을 고립시키기 위해 CPU(110)를 대신하여 이용된다. 도 1에 도시된 바와 같이, CPU(110)는 더 이상은 SSD(133)에 액세스하기 위해 라인 1을 이용하지 않고, 라인 2 및 라인 3을 이용한다(라인 1은 도면에 도시된 라인1이고, 라인 2는 도면에 도시된 라인2이고, 라인 3은 도면에 도시된 라인3이며, 도면에 도시된 라인1-3의 점선은 실제의 접속이 아니라, 각각의 구성 모듈 간의 신호 흐름 라인들을 시각적으로 보여주기 위해서만 이용됨). CPU(110)는 먼저 연산 명령어를 취득하고, 그 연산 명령어는 CPU에게 액세스 프록시(160)를 이용하여 SSD(133)에 액세스할 것을 명령한다. 그러면, CPU(110)는 라인 2를 통해 액세스 요청을 액세스 프록시(160)에 송신한다. 액세스 프록시(160)는 라인 2를 통해 액세스 요청의 응답 메시지를 CPU(110)에 리턴한다. 후속하여, 액세스 프록시는 액세스 요청에 따라 PCIe 엔드포인트 디바이스에의 액세스를 수행하는데, 즉 라인 3을 통해 SSD(133)의 레지스터에 대해 판독 및 기입 동작을 수행한다. 이러한 방식으로, 일 양태에서, CPU(110)는 PCIe 엔드포인트 디바이스(130)와의 직접 신호 관계를 만들어내지 않으므로, CPU(110)에게는 PCIe 엔드포인트 디바이스(130)가 오프라인인지의 여부가 보이지 않고, 즉 PCIe 엔드포인트 디바이스는 CPU(110)의 서비스 처리에 영향을 주지 않고; 다른 양태에서, 본 발명의 본 실시예에 의해 제공되는 액세스 프록시(160)는 CPU(110)로부터 액세스 명령어를 수신한 후에 CPU(110)에 응답 메시지를 리턴할 수 있으며, 그에 의해 CPU(110)에 의해 송신되는 액세스 요청에 대해 대응하는 응답 메시지가 항상 수신될 수 있다. 그러므로, CPU(110)의 액세스 태스크는 태스크의 불완전한 완료로 인해 누적되지 않으며, MCE 에러가 생성되지 않고, CPU에 의해 개시되는 시스템 리셋이 방지된다.
본 발명의 본 실시예에서, CPU에 의해 PCIe 엔드포인트 디바이스에 액세스하기 위한 방법은 PCIe 엔드포인트 디바이스에 대응하는 드라이브 모듈을 업그레이드하거나 개선하는 것에 의해 변경될 수 있다. 그것이 PCIe 엔드포인트 디바이스에 대응하는 드라이브 모듈을 재구성하는 것에 의해 구현될 때, 액세스 인터페이스는 PCIe 엔드포인트 디바이스에 대응하는 드라이브 모듈 내에 미리 설정되고, 여기에서 미리 설정된 액세스 인터페이스는 액세스 프록시를 가리키며; PCIe 엔드포인트 디바이스에 대응하는 드라이브 모듈이 PCIe 엔드포인트 디바이스에 액세스할 필요가 있다고 결정할 때, PCIe 엔드포인트 디바이스의 드라이브 모듈은 미리 설정된 액세스 인터페이스에 따라 CPU의 연산 명령어를 생성하고, 연산 명령어는 CPU에게 액세스 프록시를 이용하여 PCIe 엔드포인트 디바이스에 액세스할 것을 명령한다.
그에 더하여, CPU에 의해 PCIe 엔드포인트 디바이스에 액세스하기 위한 방법의 변경은 다른 구현 방법을 가질 수 있다. 예를 들어, 변경은 HOS를 수정하는 것에 의해 구현된다. 액세스 인터페이스는 HOS 상에 미리 설정되고, 미리 설정된 액세스 인터페이스는 액세스 프록시를 가리킨다. PCIe 엔드포인트 디바이스에의 액세스가 요구된다고 결정하면, PCIe 엔드포인트 디바이스의 드라이브 모듈은 PCIe 엔드포인트 디바이스에 액세스하기 위해 여전히 HOS를 호출한다. HOS가 PCIe 엔드포인트 디바이스의 드라이브 모듈에 의해 송신된 호출 명령어를 수신한 후, HOS 상에 구성된 PCIe 엔드포인트 디바이스에 액세스하기 위한 인터페이스는 액세스 프록시에 대해 미리 설정되어 있으므로, HOS는 연산 명령어를 생성하고, 그 연산 명령어는 CPU에게 액세스 프록시를 이용하여 PCIe 엔드포인트 디바이스에 액세스할 것을 명령한다.
이하에서는, 본 발명의 본 실시예에 따른 액세스 프록시의 기능 및 상세한 구현 형태를 설명한다. 본 발명의 본 실시예에 따른 액세스 프록시는 고립 기능 및 액세스 프록시 기능을 포함한다. 고립 모듈로서 기능하면서, 액세스 프록시는 PCIe 엔드포인트 디바이스로부터의 독립성을 보장할 필요가 있고, 또한 CPU로부터의 독립성도 보장할 필요가 있다. PCIe 엔드포인트 디바이스로부터의 독립성을 유지하기 위해, 액세스 프록시가 PCIe 엔드포인트 디바이스와 함께 직접 제거되지 않을 것이 보장될 필요가 있고, 따라서 액세스 프록시 및 PCIe 엔드포인트 디바이스는 물리적 세팅에 있어서 상이한 디바이스들에 속할 필요가 있고; CPU로부터의 독립성을 유지하기 위해서는, 액세스 프록시가 독립적인 프로세서를 가질 것이 주로 보장된다. 액세스 프록시의 프로세서가 시스템의 CPU로부터 독립되어 있을 때는, PCIe 엔드포인트 디바이스가 직접 제거되더라도, 액세스 프록시 모듈에 대한 충격이 CPU에 영향을 주지 않을 것이다. 프록시 모듈로서 기능하면서, 액세스 프록시는 PCIe 엔드포인트 디바이스에의 액세스를 구현하고, CPU로부터 수신된 액세스 요청의 응답 메시지를 리턴할 필요가 있으며, 액세스 요청의 응답 메시지는 확인 응답, 거부 응답 또는 실패 응답일 수 있다. 그러나, 응답 메시지의 임의의 종류에 무관하게, 그 메시지는 CPU에게 CPU에 의해 송신된 액세스 요청이 수신되었음을 나타낸다. CPU는 응답 메시지를 수신한 후에 현재 태스크가 완료되었다고 결정하며, 그 태스크에 대해 개시된 타이머를 셧오프할 수 있다. 이러한 방식으로, CPU의 태스크 타임아웃 셧오프 메커니즘은 CPU 상에 캐싱되는 정상 및 기타 메시지들이 타임아웃으로 인해 누적되지 않게 유지하며, 그에 의해 CPU에 의해 만들어지는 MCE 리셋을 방지한다.
액세스 프록시의 기능에 대한 고찰에 기초하여, 시스템 내의 액세스 프록시는 또한 복수의 형태로 설정될 수 있다. 도 1에 도시된 시스템 아키텍쳐에서, 액세스 프록시(160)는 새롭게 추가된 독립적인 디바이스로서 컴퓨터 시스템 내에 설정되며, 액세스 프록시는 PCIe 버스를 통해 CPU 및 PCIe 엔드포인트 디바이스에 접속된다. 추가로, 액세스 프록시(160)는 또한 구현을 위해 PCIe 필드 내의 기존 디바이스와 함께 패키징될 수 있다. 예를 들어, 액세스 프록시(160)는 펌웨어로서 CPU와 함께 패키징된다.
본 발명의 본 실시예에서의 액세스 프록시는 기존 하드웨어를 이용하여 구현될 수 있다. 예를 들어, 액세스 프록시는 직접 메모리 액세스(DMA: direct memory access) 엔진을 이용하여 구현된다. 액세스 프록시는 또한 새로운 하드웨어에 의해서도 구현될 수 있다. 예를 들어, 액세스 프록시 기능을 갖는 소프트웨어 모듈이 독립적인 프로세서를 갖는 하드웨어 디바이스 상에 설치된다.
본 발명의 본 실시예의 액세스 프록시는 액세스 요청의 응답 메시지를 CPU에 리턴할 필요가 있으므로, 특정 구현 동안, 액세스 프록시의 기능을 구현하기 위한 상이한 방식들이 존재한다. 구현 방식 중 하나는 액세스 프록시와 CPU 간의 접속 관계가 유지 상태(holding state)에 있도록 보장되는 것인데, 즉 둘 간의 접속 관계는 분리되지 않을 것이고, 또는 액세스 프록시가 CPU에 대해 핫 스왑 가능하지 않다. 예를 들어, 액세스 프록시가 로딩되는 하드웨어 디바이스 또는 액세스 프록시를 구현하기 위해 이용되는 하드웨어 디바이스가, CPU에 접속된 인쇄 회로 보드(PCB) 상에 납땜되거나, 액세스 프록시가 로딩되는 하드웨어 디바이스 또는 액세스 프록시를 구현하기 위해 이용되는 하드웨어 디바이스와 프로세서를 접속하기 위한 인터페이스가 커넥터를 이용하여 고정된다.
도 3은 본 발명의 다른 실시예에 따른 컴퓨터 시스템을 도시한다.
도 3에 도시된 컴퓨터 시스템에서, 도 1에 도시된 CPU, PCIe 버스 및 PCIe 엔드포인트 디바이스 외에, PCIe 익스체인저(150)가 더 포함된다. PCIe 익스체인저(150)의 업스트림 포트는 PCIe 버스(140)를 통해 CPU(110)에 접속되고, 다운스트림 포트는 각각의 PCIe 엔드포인트 디바이스를 위한 PCIe 포트를 제공하며, 각각의 PCIe 포트는 PCIe 버스(140)를 통해 각각의 PCIe 엔드포인트 디바이스에 접속된다. PCIe 익스체인저(150)는 데이터를 대응하는 PCIe 포트에 다운스트림 라우팅하고, 각각의 독립적인 PCIe 포트로부터의 데이터를 CPU(110)로 업스트림 라우팅하도록 구성된다. 도 3에 도시된 실시예에서, 새롭게 추가된 액세스 프록시(160)는 PCIe 익스체인저(150) 내에 설정되고, 본 실시예의 액세스 프록시(160)는 DMA 엔진을 이용하여 구현된다. PCIe 엔드포인트 디바이스(130)는 PCIe 버스(140)를 통해 PCIe 익스체인저(150)에 접속된다. PCIe 익스체인저(150) 및 PCIe 엔드포인트 디바이스(130)는 상이한 디바이스들에 속하므로, 임의의 PCIe 엔드포인트 디바이스의 직접 제거가 시스템으로부터의 PCIe 익스체인저(150)의 제거를 유발하지 않으며, 즉 액세스 프록시(160)가 PCIe 엔드포인트 디바이스의 제거와 함께 제거되지 않을 것이 보장되고, 그에 의해 액세스 프록시(160)의 독립성 및 PCIe 엔드포인트 디바이스(130)의 독립성이 구현된다. 추가로, 본 실시예에서, DMA 엔진은 독립적인 프로세서를 가지므로, 임의의 PCIe 엔드포인트 디바이스가 직접 제거되고, DMA로부터 PCIe 엔드포인트 디바이스에의 액세스가 영향을 받더라도, DMA는 그 충격을 고립시킨다. PCIe 엔드포인트 디바이스에의 액세스가 성공적인지에 무관하게, DMA가 CPU(110)에 의해 송신된 액세스 요청의 응답 메시지를 CPU(110)에 리턴할 것이 보장되며, 그에 의해 CPU에 의해 개시되는 MCE 리셋의 문제를 방지한다.
애플리케이션 모듈이 고체 상태 디스크(SSD)(133)에 액세스하기 위한 요구를 만들어내는 예가 여전히 이용된다. CPU(110)는 고체 상태 디스크(SSD)의 드라이브 모듈(122-3)에 의해 생성된 연산 명령어를 취득하고, 그 연산 명령어는 CPU(110)에게 DMA를 이용하여 고체 상태 디스크(SSD)(133)에 액세스할 것을 명령한다. CPU(110)는 고체 상태 디스크(SSD)의 드라이브 모듈(122-3)의 연산 명령어에 따라 DMA에 데이터 이동 요청을 송신하고, 그 데이터 이동 요청은 DMA 엔진에게, PCIe 엔드포인트 디바이스의 메모리 내의 특정 데이터를 컴퓨터 시스템의 메모리로 이동시키거나, 컴퓨터 시스템의 메모리 내의 특정 데이터를 PCIe 엔드포인트 디바이스의 메모리로 이동시킬 것을 명령한다. CPU(110)의 데이터 이동 요청을 수신한 후, DMA는 데이터 이동 요청의 응답 메시지를 CPU(110)에 리턴하고, 고체 상태 디스크(SSD)(133)에 대하여 데이터 이동을 수행하고, 데이터 이동이 완료된 후, 액세스 완료의 통보 메시지를 CPU(110)에 리턴하여, CPU(110)에게 액세스의 결과를 취득할 것을 명령한다.
또한, 본 발명의 본 실시예의 DMA는 PCIe 익스체인저(150) 내에 구축되므로, PCIe 익스체인저(150)가 CPU(110)에 접속되는 인쇄 회로 보드(PCB) 상에 더 납땜될 수 있거나, PCIe 익스체인저(150)와 CPU(110)를 접속하기 위한 인터페이스가 커넥터를 이용하여 고정된다. 이것은 PCIe 익스체인저(150) 내에 구축된 DMA가 시스템으로부터 제거되지 않을 것을 보장하고, 따라서 DMA가 항상 CPU에 액세스 요청의 응답 메시지를 리턴할 수 있을 것을 보장한다.
도 4는 본 발명의 다른 실시예에 따른 컴퓨터 시스템을 도시한다.
도 4에 도시된 실시예에서, 액세스 프록시(160)가 CPU(110) 내에 새롭게 추가된다는 것이 도 3에 보여진 실시예와 다르고, 액세스 프록시(160)는 DMA 엔진을 이용하여 구현될 수 있다. 액세스 프록시(160)는 CPU(110) 내에 설정되고, 즉 액세스 프록시(160)가 PCIe 엔드포인트 디바이스의 제거와 함께 제거되지 않을 것이 보장되고, 그에 의해 액세스 프록시(160)의 독립성 및 PCIe 엔드포인트 디바이스(130)의 독립성이 구현된다. 추가로, 본 실시예에서, DMA 엔진은 독립적인 프로세서를 가지므로, 임의의 PCIe 엔드포인트 디바이스가 직접 제거되고, DMA로부터 PCIe 엔드포인트 디바이스에의 액세스가 영향을 받더라도, DMA는 그 충격을 고립시켜, CPU(110)가 영향을 받지 않게 한다. PCIe 엔드포인트 디바이스에의 액세스가 성공적인지에 무관하게, DMA가 CPU(110)에 의해 송신된 액세스 요청의 응답 메시지를 CPU(110)에 리턴할 것이 보장되며, 그에 의해 CPU에 의해 개시되는 MCE 리셋의 문제를 방지한다. 본 실시예의 상세한 액세스 방법은 도 1 및 도 3에 도시된 실시예들에서 설명된 것들과 일치하므로, 더 이상의 상세는 여기에 제공되지 않는다.
본 발명의 실시예들에서 PCIe 엔드포인트 디바이스에 액세스하는 방법은 도 1, 도 3 또는 도 4에 도시된 컴퓨터 시스템 내에서 구현될 수 있다. 그러나, 도 1, 도 3 또는 도 4에 도시된 것은 본 발명의 실시예들에 적용되는 예에 지나지 않으며, 본 발명의 응용에 대한 구체적인 한정이 아니다. 다른 시스템 실시예들 또는 응용 시나리오는 본 명세서에 설명되지 않는다. 추가로, 도 1, 도 3 또는 도 4에 도시된 시스템 내의 액세스 프록시의 설정은 예시에 지나지 않는다. 본 기술분야의 숙련된 자들은 본 발명의 실시예들에서 새롭게 추가된 액세스 프록시를 시스템 내의 다른 위치에 설정할 수 있거나, 본 발명의 실시예들의 기술적 원리에 따른 구현을 위해 다른 기술적 수단을 이용할 수 있다.
도 1, 도 3 또는 도 4에 도시된 CPU(110) 또한 예시에 지나지 않는다. 예를 들어, 그것은 또한 특정 집적 회로일 수 있다. 어떤 형태인지에 관계없이, 그것은 컴퓨터 시스템 내의 프로세서 기능을 구현한다. 본 발명의 실시예들 내의 컴퓨터 시스템은 컴퓨터 서버일 수 있고, 아니면 스위치와 같이 루트를 관리하는 서버일 수 있다. 컴퓨터 시스템의 상세한 구현 형태는 본 발명의 본 실시예에서 한정되지 않는다.
PCIe 엔드포인트 디바이스에 액세스하기 위한 프로세스
이하에서는, 본 발명의 실시예에 따라 PCIe 엔드포인트 디바이스에 액세스하기 위한 프로세스가 설명되는데, 여기에서 프로세스는 컴퓨터 시스템 내에 새롭게 추가된 액세스 프록시에 의해 구현된다. 도 5에 도시된 바와 같이, 본 발명의 본 실시예에서 PCIe 엔드포인트 디바이스에 액세스하기 위한 프로세스는 이하를 포함한다:
S501 : CPU는 연산 명령어를 취득하고, 연산 명령어는 CPU에게 컴퓨터 시스템 내의 액세스 프록시를 이용하여 PCIe 엔드포인트 디바이스에 액세스할 것을 명령한다.
특히, 연산 명령어는 PCIe 엔드포인트 디바이스의 드라이브 모듈에 의해 생성될 수 있다. PCIe 엔드포인트 디바이스의 드라이브 모듈은 액세스 프록시로서 PCIe 엔드포인트 디바이스에 액세스하기 위한 인터페이스를 미리 설정해놓기 때문에, 상위 계층 애플리케이션 모듈이 PCIe 엔드포인트 디바이스에 액세스하기 위한 요구를 만들어낼 때, PCIe 엔드포인트 디바이스의 드라이브 모듈은 PCIe 엔드포인트 디바이스에 액세스하기 위한 연산 명령어를 생성하고, 그 연산 명령어는 CPU에게 컴퓨터 시스템 내의 액세스 프록시를 이용하여 액세스될 PCIe 엔드포인트 디바이스에 액세스할 것을 명령한다. 대안적으로, 연산 명령어는 컴퓨터 시스템 내의 HOS에 의해서도 생성될 수 있다. HOS는 액세스 프록시로서 PCIe 엔드포인트 디바이스에 액세스하기 위한 인터페이스를 미리 설정해 놓는다. 상위 계층 애플리케이션 모듈이 PCIe 엔드포인트 디바이스에 액세스하기 위한 요구를 만들어낼 때, PCIe 엔드포인트 디바이스의 드라이브 모듈은 HOS를 호출하고, HOS는 미리 설정된 액세스 인터페이스에 따라 연산 명령어를 생성하고, 그 연산 명령어는 CPU에게 컴퓨터 시스템 내의 액세스 프록시를 이용하여 액세스될 PCIe 엔드포인트 디바이스에 액세스할 것을 명령한다.
S502 : CPU는 연산 명령어에 따라 액세스 프록시에 액세스 요청을 송신하며, 액세스 요청은 액세스 프록시에게 PCIe 엔드포인트 디바이스에 액세스할 것을 명령한다.
S503 : 액세스 프록시는 CPU에 의해 송신된 액세스 요청을 수신한 후, 액세스 요청의 응답 메시지를 CPU에 리턴한다.
액세스 요청의 응답 메시지는 확인 응답, 거부 응답 또는 실패 응답일 수 있다. 그러나, 응답 메시지의 임의의 종류에 무관하게, 그 메시지는 CPU에게 CPU에 의해 송신된 액세스 요청이 수신되었음을 나타낸다. CPU는 응답 메시지를 수신한 후에 현재 태스크가 완료되었다고 결정하며, 그 태스크에 대해 개시된 타이머를 셧오프할 수 있다. 이러한 방식으로, CPU의 태스크 타임아웃 셧오프 메커니즘이 정상으로 유지된다.
프로세스에서, CPU는 액세스될 PCIe 엔드포인트 디바이스에 직접 액세스하지 않고, 액세스 프록시를 이용하여 액세스를 완료한다. 액세스 프록시는 PCIe 엔드포인트 디바이스의 비정상적인 오프라인에 의해 야기된 충격을 고립시킬 수 있고, 액세스 프록시는 액세스 요청의 응답 메시지를 CPU에 리턴하여, CPU에 캐싱된 태스크들이 타임아웃으로 인해 누적되지 않게 하며, 그에 의해 CPU에 대한 MCE 리셋을 방지한다.
또한, 도 6에 도시된 바와 같이, 본 발명의 다른 프로세스 실시예에서, PCIe 엔드포인트 디바이스에 액세스하기 위한 액세스 프록시를 위한 프로세스는 이하를 포함한다:
S601-S603 : 이 단계들은 단계들(S501-S503)과 동일하므로, 여기에 추가의 상세는 제공되지 않는다.
S604 : 액세스 프록시가 CPU로부터의 액세스 요청에 따라 PCIe 엔드포인트 디바이스에의 액세스 동작을 개시한다.
S605 : 액세스 프록시는 PCIe 엔드포인트 디바이스에 대해 개시된 액세스 동작이 성공적으로 실행되었는지를 판정하고, 액세스 동작이 성공적인 경우에는 단계(606)를 실행하고, 액세스 동작이 실패한 경우에는 단계(608)를 수행한다.
S606 : 액세스 프록시는 CPU에 액세스 완료의 제1 통보 메시지를 송신한다.
S607 : CPU는 제1 통보 메시지를 수신한 후에 액세스 결과를 취득한다.
CPU는 액세스 결과에 따라 액세스의 완료를 상위 계층 모듈에 더 통보할 수 있다.
S608 : 액세스 프록시는 CPU에 액세스 실패의 제2 통보 메시지를 송신한다.
S609 : CPU는 제2 통보 메시지를 수신한 후에 액세스 실패에 대한 후속 처리를 실행한다.
특히, 액세스 실패에 대한 후속 처리는, 액세스 프록시가 PCIe 엔드포인트 디바이스에 액세스하는 데에 실패한 이유를 결정하고; 액세스 실패의 이유가 액세스될 PCIe 엔드포인트 디바이스가 비정상적으로 오프라인으로 된 것인 경우, CPU에 의해 PCIe 엔드포인트 디바이스에의 액세스를 중단하고; 액세스 실패의 이유가 액세스 프록시가 고장난 것인 경우, CPU에 의해 액세스 프록시를 리셋하거나, 액세스 프록시에 오류가 있음을 나타내는 통보를 송신하여, 액세스 프록시의 오류를 수정하는 것을 포함한다.
PCIe 엔드포인트 디바이스에의 액세스를 중단한 후, CPU는 상위 계층 모듈에게 PCIe 엔드포인트 디바이스에의 액세스를 중단한 것을 더 통보할 수 있다.
프로세스는 본 발명의 본 실시예에서 PCIe 엔드포인트 디바이스에 액세스하기 위한 방법을 설명한다. 이 방법에서, 액세스 프록시는 CPU를 대신하여 PCIe 엔드포인트 디바이스에 액세스하고, 액세스 요청의 응답 메시지를 CPU에 리턴하며, 그에 의해 CPU에 의해 생성되는 MCE 에러에 의해 야기되는 전체 시스템의 리셋을 방지한다. 또한, 액세스 프록시가 PCIe 엔드포인트 디바이스에 액세스하는 데에 실패할 때, 액세스 프록시는 CPU에게 액세스 실패의 메시지를 통보한다. CPU는 오류 진단을 수행하고, 액세스 실패가 액세스될 PCIe 엔드포인트 디바이스의 비정상적인 오프라인에 의해 야기된 것으로 판정될 때, 액세스될 PCIe 엔드포인트 디바이스에의 액세스를 중단하고, 그에 의해 시스템이 성공할 수 없는 반복적인 액세스를 계속하여 수행할 때에 야기되는 자원의 낭비를 피한다.
도 3 또는 도 4에 도시된 컴퓨터 시스템의 실시예의 조합에서, 액세스 프록시가 DMA 엔진을 이용하여 구현될 때, 상위 계층 애플리케이션 모듈은 SSD에 대한 판독 동작 요구를 생성하고, 구체적인 액세스 프로세스는 도 7에 나타나 있으며, 이하를 포함한다:
S701 : 컴퓨터 시스템 내의 CPU가 연산 명령어를 획득하고, 그 연산 명령어는 액세스 인터페이스 및 액세스 컨텐츠를 반송하며, 액세스 인터페이스는 DMA 엔진을 가리키고, 액세스 컨텐츠는 액세스 객체가 SSD이며 액세스가 판독 동작임을 나타내고, 판독 동작의 소스 어드레스를 나타내고; 액세스 컨텐츠는 판독 동작의 길이를 더 나타낼 수 있지만, 일반적으로는 판독 동작의 길이는 시스템 내의 디폴트 길이를 따를 수 있다.
업스트림 엔드포인트가 SSD 디바이스에 대한 판독 동작 요구를 생성할 때, SSD 디바이스의 드라이브 모듈은 업스트림 엔드포인트에 의한 호출에 응답하여 수신하고, 미리 설정된 액세스 인터페이스에 따라 PCIe 엔드포인트 디바이스에 액세스하기 위한 연산 명령어를 생성한다.
드라이브 모듈에 의해 CPU에 송신되는 연산 명령어의 상세한 구현 방법은 또 다른 방식일 수 있다. 예를 들어, 연산 명령어는 액세스 객체가 SSD이며 액세스가 판독 동작임을 나타내고, 판독 동작의 시작 어드레스를 나타내는 표시를 반송하며; 추가로, SSD에의 액세스가 DMA 엔진을 작동시킴으로써 구현될 것을 명령하는 하나의 표시가 연산 명령어 내에 새롭게 추가된다.
S702 : CPU는 연산 명령어에 따라 DMA 엔진에 데이터 이동 요청을 송신하고, 그 데이터 이동 요청은 DMA 엔진에게, PCIe 엔드포인트 디바이스의 메모리 내의 특정 데이터를 컴퓨터 시스템의 메모리로 이동시킬 것을 명령하기 위해 이용된다.
특히, SSD의 드라이브 모듈의 연산 명령어를 취득한 후, CPU는 판독 동작의 목적지 어드레스를 컴퓨터 시스템의 메모리에 신청하고, 판독 동작의 목적지 어드레스를 취득한 후에 데이터 이동 요청을 DMA 엔진에 송신하며, 데이터 이동 요청은 DMA 엔진에게 판독 동작의 길이만큼의 데이터를 판독 동작의 소스 어드레스로부터 판독 동작의 목적지 어드레스로 이동시킬 것을 명령하기 위해, 판독 동작의 소스 어드레스, 목적지 어드레스 및 길이를 나타낸다.
S703 : DMA 엔진은 CPU의 데이터 이동 요청을 수신한 후에 데이터 이동 요청의 응답 메시지를 CPU에 리턴하고, CPU는 CPU 내에 캐싱된 다른 메시지들이 CPU로 하여금 누적으로 인한 MCE 리셋을 생성하게 하지 않을 것을 보장하기 위해, 데이터 이동 요청의 응답 메시지를 수신한 후에는 데이터 이동 요청에 관한 타임아웃 카운팅을 수행하지 않는다.
S704 : DMA 엔진은 SSD 디바이스에의 판독 요청을 개시하고, 판독 요청은 판독 동작의 소스 어드레스를 반송하고, 판독 동작은 DMA 엔진의 캐시 내로 판독될 판독 동작의 소스 어드레스에 대응하는 레지스터의 값을 요청하기 위해 이용된다.
S705 : DMA 엔진은 판독 요청이 성공적으로 실행되었는지를 판정하고; 판독 요청이 성공적으로 실행된 경우에는 단계(706)를 수행하고; 판독 요청이 실행되는 데에 실패한 경우에는 단계(709)를 수행한다.
S706 : DMA 엔진은 자기 자신의 캐시 내의 데이터를 기입 요청에 따라 판독 동작의 목적지 어드레스 내에 기입한다.
S707 : DMA 엔진은 CPU에 제1 통보 메시지를 송신하고, 제1 통보 메시지는 특히 CPU에게 액세스가 완료되었음을 통보하기 위한 제1 MSI(Message Signaled Interrupts) 인터럽션일 수 있다.
S708 : CPU는 제1 MSI 인터럽션 메시지를 수신한 후에 판독 동작의 목적지 어드레스로부터 데이터를 판독하고, SSD 디바이스의 드라이브 모듈에게 액세스가 완료되었음을 통보할 수 있다.
S709 : DMA 엔진은 CPU에 제2 통보 메시지를 송신하고, 제2 통보 메시지는 특히 CPU에게 액세스가 실패했음을 통보하기 위한 제2 MSI 인터럽션일 수 있다.
S710 : CPU는 제2 MSI 인터럽션 메시지를 수신한 후에 액세스 실패에 대한 후속 처리를 실행한다.
특히, 액세스 실패의 후속 처리는: DMA 엔진이 오류를 갖는지를 판정하기 위해 DMA 엔진에 대해 진단을 개시하는 것;
DMA 엔진이 오류를 갖는 경우, CPU에 의해 DMA 엔진을 리셋하거나, DMA 엔진이 오류를 가짐을 나타내는 통보를 송신하여 DMA 엔진의 오류를 복구하는 것; 및
DMA 엔진이 오류를 갖지 않는 경우, 액세스 실패의 원인이 SSD 디바이스가 비정상적으로 오프라인으로 된 것이라고 결정하고, CPU에 의해 SSD 디바이스에의 액세스를 중단하는 것
을 포함한다.
또한, CPU는 SSD 디바이스의 드라이브 모듈에게 SSD 디바이스에의 액세스를 중단할 것을 더 명령할 수 있다.
다른 양태에서, 도 3 또는 도 4에 도시된 컴퓨터 시스템의 실시예를 참조하면, 액세스 프록시가 DMA 엔진을 이용하여 구현될 때, 상위 계층 애플리케이션 모듈은 SSD에 대한 기입 동작 요구를 생성하고, 구체적인 액세스 프로세스는 도 8에 나타나 있으며, 이하를 포함한다:
S801 : CPU가 SSD의 드라이브 모듈에 의해 생성된 연산 명령어를 취득하고, 그 연산 명령어는 액세스 인터페이스 및 액세스 컨텐츠를 반송하며, 액세스 인터페이스는 DMA 엔진을 가리키고, 액세스 컨텐츠는 액세스 객체가 SSD 디바이스이며 액세스는 기입 동작임을 나타내고, 기입 동작의 소스 어드레스 및 목적지 어드레스를 나타낸다.
드라이브 모듈에 의해 CPU에 송신되는 연산 명령어의 상세한 구현 방법은 또 다른 방식일 수 있다. 예를 들어, 연산 명령어는 액세스 객체가 SSD이며 액세스가 기입 동작임을 나타내고, 기입 동작의 소스 어드레스 및 목적지 어드레스를 나타내는 표시를 반송하며; 추가로, SSD에의 액세스가 DMA 엔진을 작동시킴으로써 구현될 것을 명령하기 위해 하나의 표시가 연산 명령어 내에 새롭게 추가된다.
S802 : CPU는 SSD의 드라이브 모듈의 연산 명령어에 따라 DMA 엔진에 액세스 요청을 송신하고, 그 데이터 이동 요청은 DMA 엔진에게, 컴퓨터 시스템의 메모리 내의 특정 데이터를 PCIe 엔드포인트 디바이스의 메모리에 이동시킬 것을 명령하기 위해 이용된다.
특히, CPU는 SSD의 드라이브 모듈의 연산 명령어를 취득한 후에 DMA 엔진에 데이터 이동 요청을 송신하고, 데이터 이동 요청은 DMA 엔진에게 기입 동작의 길이만큼의 데이터를 기입 동작의 소스 어드레스로부터 기입 동작의 목적지 어드레스로 이동시킬 것을 명령하기 위해, 기입 동작의 소스 어드레스, 목적지 어드레스 및 길이를 나타낸다.
S803 : DMA 엔진은 CPU의 데이터 이동 요청을 수신한 후, 데이터 이동 요청의 응답 메시지를 CPU에 리턴한다.
S804 : DMA 엔진은 소스 어드레스의 데이터를 DMA 엔진의 캐시 내로 판독하기 위해, 기입 동작의 소스 어드레스에 대한 판독 요청을 개시한다.
S805 : DMA 엔진은 소스 어드레스의 데이터가 자기 자신의 캐시 내로 판독된 후에 SSD 디바이스에 대한 기입 요청을 개시하고, 기입 요청은 기입 동작의 목적지 어드레스를 반송하며, 기입 요청은 DMA 엔진의 캐시 내의 데이터를 목적지 어드레스에 대응하는 레지스터 내에 기입하기 위해 이용된다.
S806 : DMA 엔진은 기입 요청이 성공적으로 실행되었는지를 판정하고; 기입 요청이 성공적으로 실행된 경우에는 단계(807)를 수행하고; 기입 요청이 실행되는 데에 실패한 경우에는 단계(809)를 수행한다.
S807 : DMA 엔진은 먼저 CPU에게 액세스가 완료되었음을 통보하기 위해 CPU에 대한 제1 MSI(Message Signaled Interrupts) 인터럽션을 개시한다.
S808 : CPU는 제1 MSI 인터럽션 메시지를 수신한 후에 기입 동작이 완료되었음을 알게 되고, SSD 디바이스의 드라이브 모듈에게 액세스가 완료되었음을 더 통보할 수 있다.
S809 : DMA 엔진은 CPU에게 액세스가 실패했음을 통보하기 위해 CPU에 대한 제2 MSI 인터럽션을 개시한다.
S810 : CPU는 제2 MSI 인터럽션 메시지를 수신한 후에 액세스 실패에 대한 후속 처리를 실행한다.
특히, 액세스 실패의 후속 처리는: DMA 엔진이 오류를 갖는지를 판정하기 위해 DMA 엔진에 대해 진단을 개시하는 것;
DMA 엔진이 오류를 갖는 경우, CPU에 의해 DMA 엔진을 리셋하거나, DMA 엔진이 오류를 가짐을 나타내는 통보를 송신하여 DMA 엔진의 오류를 복구하는 것; 및
DMA 엔진이 오류를 갖지 않는 경우, 실패의 원인이 SSD 디바이스가 비정상적으로 오프라인으로 된 것이라고 결정하고, CPU에 의해 SSD 디바이스에의 액세스를 중단하는 것
을 포함한다.
또한, CPU는 SSD 디바이스의 드라이브 모듈에게 SSD 디바이스에의 액세스를 중단할 것을 더 명령할 수 있다.
도 7 및 도 8에 도시된 프로세스들은 본 발명의 실시예들에서 DMA 엔진이 SSD 디바이스에 대해 판독 또는 기입을 완료하기 위한 방법 프로세스를 기술한다. 판독 또는 기입 방법에서, DMA 엔진은 CPU를 대신하여 PCIe 엔드포인트 디바이스에 액세스하고, 액세스 요청의 응답 메시지를 CPU에 리턴하여, CPU가 MCE 에러를 발생시키지 않게 하고, 전체 시스템의 리셋이 방지된다. 또한, DMA 엔진이 SSD 디바이스로부터의 데이터 이동에 실패할 때, DMA 엔진은 CPU에게 액세스 실패의 메시지를 통보하고, CPU는 오류 진단을 수행하고, 액세스 실패가 SSD 디바이스가 시스템으로부터 직접 제거된 것으로 인해 또는 오류가 있는 것으로 인해 발생했다고 판정될 때, SSD 디바이스에의 액세스를 중단하고, 그에 의해 시스템이 성공할 수 없는 반복적인 액세스를 계속하여 수행할 때에 야기되는 자원의 낭비를 피한다.
추가로, 본 발명의 본 실시예에서, CPU가 PCIe 엔드포인트 디바이스에 액세스하기 위한 방법은 PCIe 엔드포인트 디바이스에 대응하는 드라이브 모듈 또는 호스트 운영 체제를 업그레이드하거나 개선하는 것에 의해 변경될 수 있다. CPU가 PCIe 엔드포인트 디바이스에 액세스하는 방법을 변경하기 위해 PCIe 엔드포인트 디바이스에 대응하는 드라이브 모듈이 이용되는 경우, 이하의 프로세스가 포함될 수 있다:
S901 : PCIe 엔드포인트 디바이스의 드라이브 모듈이 상위 계층 애플리케이션 모듈의 호출 명령어를 수신하고, 호출 명령어는 PCIe 엔드포인트 디바이스가 액세스될 필요가 있음을 나타낸다.
S902 : PCIe 엔드포인트 디바이스에 대응하는 드라이브 모듈은 PCIe 엔드포인트 디바이스에 액세스하기 위한 미리 설정된 인터페이스에 따라 연산 명령어를 생성하고, PCIe 엔드포인트 디바이스에 액세스하기 위한 미리 설정된 인터페이스는 액세스 프록시를 가리키며, 연산 명령어는 CPU에게 액세스 프록시를 이용하여 PCIe 엔드포인트 디바이스에 액세스할 것을 명령하기 위해 이용된다.
호스트 운영 체제가 CPU가 PCIe 엔드포인트 디바이스에 액세스하는 방법을 변경하도록 구성되는 경우, 이하의 프로세스가 포함될 수 있다:
S1001 : PCIe 엔드포인트 디바이스에 대응하는 드라이브 모듈이 상위 계층 애플리케이션 모듈의 호출 명령어를 수신하고, 호출 명령어는 PCIe 엔드포인트 디바이스가 액세스될 필요가 있음을 나타낸다.
S1002 : PCIe 엔드포인트 디바이스에 대응하는 드라이브 모듈이 호스트 운영 체제를 호출하고, 호출 명령어는 PCIe 엔드포인트 디바이스가 액세스될 필요가 있음을 나타낸다.
S1003 : 호스트 운영 체제는 PCIe 엔드포인트 디바이스에 액세스하기 위한 미리 설정된 인터페이스에 따라 연산 명령어를 생성하고, PCIe 엔드포인트 디바이스에 액세스하기 위한 미리 설정된 인터페이스는 액세스 프록시를 가리키며, 연산 명령어는 CPU에게 액세스 프록시를 이용하여 PCIe 엔드포인트 디바이스에 액세스할 것을 명령하기 위해 이용된다.
본 발명의 실시예의 장치
도 11에 도시된 바와 같이, 본 발명의 실시예에서 제공되는 PCI 익스프레스(PCIe) 엔드포인트 디바이스에 액세스하기 위한 장치는 이하를 포함한다:
PCIe 엔드포인트 디바이스가 액세스될 필요가 있음을 나타내는 호출 명령어를 수신하도록 구성된 수신 모듈(1101); 및
PCIe 엔드포인트 디바이스에 액세스하기 위한 미리 설정된 인터페이스에 따라 PCIe 엔드포인트 디바이스에 액세스하기 위한 연산 명령어를 생성하도록 구성된 생성 모듈(1102) - PCIe 엔드포인트 디바이스에 액세스하기 위한 미리 설정된 인터페이스는 액세스 프록시를 가리키며, 연산 명령어는 CPU에게 액세스 프록시를 이용하여 PCIe 엔드포인트 디바이스에 액세스할 것을 명령하기 위해 이용됨 -.
특히, 액세스 장치는 PCIe 엔드포인트 디바이스의 드라이브 모듈 또는 컴퓨터 시스템의 호스트 운영 체제일 수 있다.
도 12는 본 발명의 실시예에 따른 컴퓨터의 구조적 구성도이다. 본 발명의 본 실시예의 컴퓨터는 이하를 포함할 수 있다:
프로세서(1201), 메모리(1202), 시스템 버스(1204) 및 통신 인터페이스(1205). CPU(1201), 메모리(1202) 및 통신 인터페이스(1205)는 시스템 버스(1204)를 이용하여 서로 접속되어 서로 간에 통신을 완료한다.
프로세서(1201)는 싱글 코어 또는 멀티 코어 처리 유닛, 또는 특정 집적 회로일 수 있거나, 본 발명의 본 실시예에서 하나 이상의 집적 회로로서 구성된다.
메모리(1202)는 고속 RAM 메모리일 수 있거나, 적어도 하나의 자기 디스크 메모리와 같은 비휘발성 메모리(non-volatile memory)일 수 있다.
메모리(1202)는 컴퓨터 실행 명령어(1203)를 저장하도록 구성된다. 특히, 컴퓨터 실행 명령어(1203)는 프로그램 코드를 포함할 수 있다.
컴퓨터가 실행 중일 때, 프로세서(1201)는 컴퓨터 실행 명령어(1203)를 실행하고, 도 5 내지 도 10 중 어느 하나에 보여진 방법 프로세스가 실행될 수 있다.
PCIe 엔드포인트 디바이스에 액세스하기 위한 컴퓨터 시스템
PCIe 엔드포인트 디바이스가 컴퓨터 시스템으로부터 제거된 때, 그것이 나중에 컴퓨터 시스템에 다시 삽입되는 것이 가능하다. 추가로, 새로운 PCIe 엔드포인트 디바이스가 실행 상태의 컴퓨터 시스템에 접속될 필요가 있는 상황도 존재한다. 예를 들어, SSD 디바이스의 대중성으로서, 사용자가 SSD 디바이스를 직접 삽입하거나 제거하는 현상이 점점 더 빈번하게 발생한다. 종래 기술에서, 임의의 PCIe 엔드포인트 디바이스가 켜지고 시스템에 접속될 때, CPU는 PCIe 엔드포인트 디바이스를 위한 스캐닝 및 자원 할당 프로세스를 개시하고; CPU가 새롭게 켜진 PCIe 엔드포인트 디바이스를 스캐닝하는 과정에서, PCIe 엔드포인트 디바이스가 시스템으로부터 직접 제거된다면, CPU가 MCE 에러를 보고하는 것이 가능하고, 이것은 시스템 리셋을 야기한다. 이러한 문제를 방지하기 위해, 본 발명의 본 실시예는 PCIe 엔드포인트 디바이스가 새롭게 켜지고 시스템에 접속될 때 CPU가 그 새롭게 켜진 PCIe 엔드포인트 디바이스를 스캐닝하거나 그것에 자원을 할당할 필요가 없도록, PCIe 엔드포인트 디바이스에 자원을 할당하기 위한 새로운 해법을 제시한다.
컴퓨터 시스템의 개시 동안, 기본 입출력 시스템(BIOS: Basic Input-Output System)은 시스템 내의 각각의 디바이스에 대해 자원을 예비할 필요가 있다. PCIe 엔드포인트 디바이스에 대하여, BIOS는 PCIe 엔드포인트 디바이스에 액세스하기 위한 각각의 포트를 스캐닝한다. 스캐닝을 통해 PCIe 엔드포인트 디바이스를 찾을 때, BIOS는 PCIe 엔드포인트 디바이스의 대응하는 레지스터를 판독하고, PCIe 엔드포인트 디바이스의 요구조건에 따라 대응하여 자원을 예비하는데, 예를 들어 버스 자원 및 메모리 어드레스 자원을 예비한다. 구체적으로, 본 발명의 본 실시예에 설명된 PCIe 엔드포인트 디바이스에 액세스하기 위한 포트는 PCIe 익스체인저의 다운로드 포트 또는 시스템 내의 노스브리지(northbridge)의 다운링크 포트일 수 있다.
본 발명의 본 실시예에서 제공되는 PCIe 엔드포인트 디바이스에 자원을 할당하기 위한 해법에서, 컴퓨터 시스템의 BIOS를 위한 자원 예비 방법은 종래 기술과는 다르다. 컴퓨터 시스템의 개시 동안, BIOS는 스캐닝을 통해 실제로 발견된 PCIe 엔드포인트 디바이스의 실제 요구에 따라 자원을 예비하는 것이 아니라, PCIe 엔드포인트 디바이스에 액세스하기 위한 각각의 포트에 대한 특정한 자원 지분(specific share of resources)를 예비하며, 특정한 지분은 PCIe 엔드포인트 디바이스의 요구되는 자원량보다 많거나 그와 동일하며, 바람직하게는 특정한 지분은 최대 자원량 요구를 갖는 유형의 PCIe 엔드포인트 디바이스의 자원량 요구일 수 있다. 예를 들어, BIOS는 컴퓨터 시스템 내의 PCIe 엔드포인트 디바이스에 액세스하기 위한 각각의 포트를 스캐닝하고, 스캐닝을 통해 PCIe 엔드포인트 디바이스가 발견되었는지에 상관없이, 또한 스캐닝을 통해 어떤 유형의 PCIe 엔드포인트 디바이스가 발견되었는지에 상관없이, PCIe 엔드포인트 디바이스에 액세스하기 위한 각각의 포트가 최대 자원량 요구를 갖는 유형의 PCIe 엔드포인트 디바이스에 의해 후속하여 액세스될 수 있음을 규정한다. 현재 시스템에서 10가지 유형의 PCIe 엔드포인트 디바이스가 이용될 수 있고, 최대 자원량 요구를 갖는 것이 프리페치될 수 없는 10M 메모리 자원 및 3개의 PCIe 버스를 요구하는 SSD 디바이스인 경우, BIOS는 PCIe 엔드포인트 디바이스에 액세스하기 위한 각각의 포트에 대해 프리페치될 수 없는 10M 메모리 자원 및 3개의 PCIe 버스 자원을 예비한다.
두번째로, BIOS가 자원을 예비한 후, 컴퓨터 시스템의 PCIe 관리 모듈은 컴퓨터 시스템 내의 하나의 CPU에 의해 관리되는 모든 PCIe 엔드포인트 디바이스 및 PCIe 익스체인저가 PCIe 필드를 구성하는 것을 허용하며, PCIe 필드에 대한 대응하는 PCIe 트리를 구성하며, PCIe 트리는 PCIe 필드 내의 각각의 PCIe 엔드포인트 디바이스로부터 CPU로의 접속 관계의 각 계층 및 각각의 PCIe 엔드포인트 디바이스의 자원 구성 조건을 기술하기 위해 이용된다. BIOS가 PCIe 엔드포인트 디바이스에 액세스하기 위한 각각의 포트에 대한 특정한 자원 지분을 예비했으므로, PCIe 엔드포인트 디바이스에 액세스하기 위한 각각의 포트를 로딩할 때, PCIe 관리 모듈은 포트의 PCIe 엔드포인트 디바이스의 실제 자원량 요구를 스캔하지 않고, BIOS의 자원 예비 조건에 따라 자원을 할당하는데, 즉 BIOS에 의해 예비된 특정한 자원 지분을 PCIe 엔드포인트 디바이스에 액세스하기 위한 각각의 포트에 할당하고, 특정한 자원 지분을 할당하는 조건을 PCIe 트리 내에 기록한다.
또한, PCIe 엔드포인트 디바이스가 오류를 갖거나 컴퓨터 시스템으로부터 오프라인될 때, PCIe 관리 모듈은 PCIe 엔드포인트 디바이스가 오프라인임을 결정한 때에, 전원이 꺼진 PCIe 엔드포인트 디바이스에 할당된 특정한 자원 지분을 해제하지 않는다. 추가로, PCIe 트리의 아키텍쳐는 변경되지 않은 채로 유지되는데, 즉 오프라인 PCIe 엔드포인트 디바이스의 접속 관계 및 자원 구성 조건은 PCIe 트리 내에 보유된다. 이러한 방식으로, PCIe 엔드포인트 디바이스의 자원 및 접속 관계가 PCIe 필드 내에 구성되어 있으므로, PCIe 엔드포인트 디바이스가 켜지고 PCIe 필드에 액세스할 때, PCIe 관리 모듈은 PCIe 엔드포인트 디바이스가 켜지고 PCIe 엔드포인트 디바이스가 컴퓨터 시스템의 PCIe 필드에의 액세스를 완료했음을 대응 드라이브 모듈에 통보한다. 이러한 해법에서, PCIe 엔드포인트 디바이스가 켜질 때, CPU는 PCIe 엔드포인트 디바이스를 스캐닝할 필요가 없고, 그에 의해 PCIe 엔드포인트 디바이스가 컴퓨터 시스템에 액세스할 때 발생할 수 있는 MCE 에러에 의해 야기되는 전체 시스템의 리셋을 회피한다.
본 기술분야의 통상의 지식을 가진 자는 본 발명의 각각의 양태 또는 각각의 양태의 가능한 구현 방식이 구체적으로는 시스템, 방법 또는 컴퓨터 프로그램 제품으로서 구현될 수 있음을 이해할 수 있다. 그러므로, 본 발명의 각각의 양태 또는 각각의 양태의 가능한 구현 방식은 완전히 하드웨어인 실시예, 완전히 소프트웨어인 실시예(펌웨어, 상주 소프트웨어 및 그와 유사한 것을 포함), 또는 여기에서 총괄하여 "회로", "모듈" 또는 "시스템"으로 지칭되는 소프트웨어와 하드웨어를 조합한 실시예의 형태를 이용할 수 있다. 추가로, 본 발명의 각각의 양태 또는 각각의 양태의 가능한 구현 방식은 컴퓨터 프로그램 제품의 형태를 이용할 수 있으며, 컴퓨터 프로그램 제품은 컴퓨터 판독가능한 매체 내의 컴퓨터 판독가능한 프로그램 코드를 지칭한다.
컴퓨터 판독가능한 매체는 컴퓨터 판독가능한 신호 매체 또는 컴퓨터 판독가능한 메모리 매체일 수 있다. 컴퓨터 판독가능한 메모리 매체는 랜덤 액세스 메모리(RAM), 판독 전용 메모리, 소거가능 프로그램가능 판독 전용 메모리(EPROM 또는 플래시 메모리), 광섬유, 및 휴대용 판독 전용 메모리(CD-ROM)와 같이, 전자, 자기, 광학, 전자기, 적외선 또는 반도체 시스템, 디바이스 또는 장치, 또는 그들의 임의의 적절한 조합을 포함하지만, 그에 한정되지는 않는다.
컴퓨터의 프로세서는 컴퓨터 판독가능한 매체 내에 저장된 컴퓨터 판독가능한 프로그램 코드를 판독하고, 그에 의해 프로세서는 흐름도의 각 단계 또는 각 단계의 조합에 규정된 기능 동작을 실행할 수 있고, 블록도의 각 블록 또는 블록들의 조합에 규정된 기능 동작을 구현하는 장치가 생성된다.
컴퓨터 판독가능한 프로그램 코드는 사용자의 컴퓨터 상에서 전적으로 실행되거나, 부분적으로 사용자의 컴퓨터 상에서 실행되거나, 독립적인 소프트웨어 패키지로서 기능할 때, 부분적으로는 사용자의 컴퓨터 상에서 실행되고 부분적으로는 원격 컴퓨터 상에서 실행되거나, 전적으로 원격 컴퓨터 또는 서버 상에서 실행될 수 있다. 일부 대안적인 구현 해법들에서, 흐름도의 각 단계 또는 블록도의 각 블록에 나타내어진 기능들은 흐름도 또는 블록도에 나타내어진 순서대로 발생하지 않을 수 있음에 주목해야 한다. 예를 들어, 수반되는 기능에 따라, 차례로 보여진 2개의 단계 또는 2개의 블록이 실제로는 동시에 실행될 수 있거나, 때로는 블록들이 역순으로 실행된다.
본 기술분야의 통상의 지식을 가진 자들은, 본 명세서에서 개시된 실시예들에 설명된 예시들과 함께, 유닛들 및 알고리즘 단계들이 전자 하드웨어, 또는 컴퓨터 소프트웨어와 전자 하드웨어의 조합에 의해 구현될 수 있음을 알 수 있다. 기능들이 하드웨어에 의해 수행되는지 아니면 소프트웨어에 의해 수행되는지는 기술적 해법의 특정한 응용 및 설계 제약 조건에 의존한다. 본 기술분야의 숙련된 자들은 각각의 특정한 응용에 대하여, 설명된 기능들을 구현하기 위해 상이한 방법들을 이용할 수 있지만, 그러한 구현이 본 발명의 범위를 벗어나는 것으로 간주되어서는 안 된다.
상기의 설명은 본 발명의 특정한 실시예에 지나지 않으며, 본 발명의 보호 범위를 제한하도록 의도된 것이 아니다. 본 발명에 개시된 기술적 범위 내에서 본 기술분야의 숙련된 자가 쉽게 알아낼 수 있는 임의의 변형 또는 대체는 본 발명의 보호 범위 내에 포함되어야 한다. 그러므로, 본 발명의 보호 범위는 청구항들의 보호범위에 종속되어야 한다.

Claims (46)

  1. 컴퓨터 시스템으로서,
    프로세서; 및
    PCI 익스프레스(PCIe: peripheral component interconnect express) 엔드포인트 디바이스에 접속하기 위한 PCIe 버스
    를 포함하고,
    상기 컴퓨터 시스템은 액세스 프록시(access proxy)를 더 포함하고, 상기 액세스 프록시는 상기 프로세서와 상기 PCIe 엔드포인트 디바이스에 접속하며,
    상기 프로세서는 연산 명령어(operation instruction)를 취득하고, 상기 연산 명령어에 따라 상기 액세스 프록시에 액세스 요청을 송신하도록 구성되고, 상기 연산 명령어는, 상기 액세스 프록시를 통해 상기 PCIe 엔드포인트 디바이스에 액세스하라고 상기 프로세서에게 명령하고, 상기 액세스 요청은 상기 PCIe 엔드포인트 디바이스에 액세스하라고 상기 액세스 프록시에게 명령하고,
    상기 액세스 프록시는, 상기 프로세서에 의해 송신된 상기 액세스 요청을 수신한 후에 상기 액세스 요청의 응답 메시지를 상기 프로세서에 송신하도록 구성되는, 컴퓨터 시스템.
  2. 제1항에 있어서, 상기 컴퓨터 시스템은, 상기 PCIe 엔드포인트 디바이스에 액세스하기 위한 호출 명령어(invoking instruction)를 수신하고, 상기 PCIe 엔드포인트 디바이스에 액세스하기 위한 미리 설정된 인터페이스(preset interface)에 따라 상기 연산 명령어를 생성하도록 구성된 상기 PCIe 엔드포인트 디바이스의 드라이브 모듈을 더 포함하고,
    상기 PCIe 엔드포인트 디바이스에 액세스하기 위한 미리 설정된 인터페이스는 상기 액세스 프록시를 가리키며,
    상기 프로세서는 상기 PCIe 엔드포인트 디바이스의 드라이브 모듈에 의해 생성된 상기 연산 명령어를 취득하도록 구성되는, 컴퓨터 시스템.
  3. 제1항에 있어서, 상기 PCIe 엔드포인트 디바이스의 드라이브 모듈 및 호스트 운영 체제를 더 포함하고,
    상기 PCIe 엔드포인트 디바이스의 드라이브 모듈은 상기 PCIe 엔드포인트 디바이스에 액세스하기 위한 호출 명령어를 수신하고, 상기 PCIe 엔드포인트 디바이스에 액세스하기 위해 상기 호스트 운영 체제를 호출하도록 구성되고,
    상기 호스트 운영 체제는 상기 PCIe 엔드포인트 디바이스의 드라이브 모듈에 의해 수행되는 호출에 응답하고, 상기 PCIe 엔드포인트 디바이스에 액세스하기 위한 미리 설정된 인터페이스에 따라 상기 연산 명령어를 생성하도록 구성되고, 상기 PCIe 엔드포인트 디바이스에 액세스하기 위한 미리 설정된 인터페이스는 상기 액세스 프록시를 가리키며,
    상기 프로세서는 상기 호스트 운영 체제에 의해 생성된 상기 연산 명령어를 취득하도록 구성되는, 컴퓨터 시스템.
  4. 제1항에 있어서, 상기 액세스 프록시는 상기 액세스 요청에 따라 상기 PCIe 엔드포인트 디바이스에 액세스하도록 또한 구성되는, 컴퓨터 시스템.
  5. 제4항에 있어서, 상기 액세스 프록시는 직접 메모리 액세스(DMA: direct memory access) 엔진에 의해 구현되고,
    상기 프로세서는 상기 연산 명령어에 따라 상기 DMA 엔진에 데이터 이동 요청(data migration request)을 송신하도록 구성되고,
    상기 DMA 엔진은 상기 데이터 이동 요청에 따라 상기 PCIe 엔드포인트 디바이스의 메모리 내의 특정 데이터를 상기 컴퓨터 시스템의 메모리로 이동시키거나, 또는 상기 컴퓨터 시스템의 메모리 내의 특정 데이터를 상기 PCIe 엔드포인트 디바이스의 메모리로 이동시키도록 구성되는, 컴퓨터 시스템.
  6. 제4항에 있어서,
    상기 액세스 프록시는 상기 프로세서에 제1 통보 메시지를 송신하도록 또한 구성되고, 상기 제1 통보 메시지는, 상기 PCIe 엔드포인트 디바이스로의 액세스가 성공했음을 나타내고,
    상기 프로세서는 상기 제1 통보 메시지를 수신한 후에 액세스 결과를 취득하도록 또한 구성되는, 컴퓨터 시스템.
  7. 제4항에 있어서,
    상기 액세스 프록시는 상기 프로세서에 제2 통보 메시지를 송신하도록 또한 구성되고, 상기 제2 통보 메시지는, 상기 PCIe 엔드포인트 디바이스로의 액세스가 실패했음을 나타내고,
    상기 프로세서는 상기 제2 통보 메시지를 수신한 후에 액세스 실패에 대한 후속 처리를 실행하도록 또한 구성되는, 컴퓨터 시스템.
  8. 제7항에 있어서, 상기 프로세서는, 상기 제2 통보 메시지를 수신한 후에, 상기 액세스 프록시가 상기 PCIe 엔드포인트 디바이스에 액세스하는 데에 실패한 이유를 결정하고, 상기 액세스의 실패의 이유가 상기 PCIe 엔드포인트 디바이스가 비정상적으로 오프라인으로 된 것인 경우, 상기 PCIe 엔드포인트 디바이스로의 액세스를 중단하도록 구성되는, 컴퓨터 시스템.
  9. 제8항에 있어서, PCIe 관리 모듈을 더 포함하고,
    상기 PCIe 관리 모듈은, 상기 PCIe 엔드포인트 디바이스가 비정상적으로 오프라인으로 되었음을 나타내는 통보를 취득하고, 상기 PCIe 엔드포인트 디바이스에 할당된 자원들을 예비(reserve)하도록 구성되는, 컴퓨터 시스템.
  10. 제1항에 있어서, 상기 액세스 프록시는 상기 프로세서와 함께 패키징되는, 컴퓨터 시스템.
  11. 제1항에 있어서, 상기 액세스 프록시는 상기 프로세서에 접속하는 인쇄 회로 보드 상에 용접되거나, 또는 접속 펌웨어를 이용함으로써 상기 프로세서에 접속되는, 컴퓨터 시스템.
  12. 제1항에 있어서, 상기 컴퓨터 시스템은 PCIe 익스체인저를 더 포함하고, 상기 PCIe 익스체인저의 업스트림 포트는 상기 PCIe 버스를 통해 상기 프로세서에 접속하고, 상기 PCIe 익스체인저의 다운스트림 포트는 상기 PCIe 버스를 통해 상기 PCIe 엔드포인트 디바이스에 접속하는, 컴퓨터 시스템.
  13. 제12항에 있어서, 상기 액세스 프록시는 상기 PCIe 익스체인저 내에 패키징되는, 컴퓨터 시스템.
  14. 제13항에 있어서, 상기 PCIe 익스체인저는 상기 프로세서에 접속하는 인쇄 회로 보드 상에 용접되거나, 또는 접속 펌웨어를 이용함으로써 상기 프로세서에 접속되는, 컴퓨터 시스템.
  15. PCI 익스프레스(PCIe: peripheral component interconnect express) 엔드포인트 디바이스에 액세스하는 방법으로서 - 컴퓨터 시스템의 프로세서는 PCIe 버스를 통해 상기 PCIe 엔드포인트 디바이스에 접속함 -,
    상기 프로세서에 의해, 연산 명령어를 취득하는 단계 - 상기 연산 명령어는, 액세스 프록시를 이용함으로써 상기 PCIe 엔드포인트 디바이스에 액세스하라고 상기 프로세서에게 명령함 -;
    상기 프로세서에 의해, 상기 연산 명령어에 따라 상기 액세스 프록시에 액세스 요청을 송신하는 단계 - 상기 액세스 요청은 상기 PCIe 엔드포인트 디바이스에 액세스하라고 상기 액세스 프록시에게 명령함 -; 및
    상기 프로세서에 의해, 상기 액세스 프록시에 의해 송신되는 상기 액세스 요청의 응답 메시지를 수신하는 단계
    를 포함하는 방법.
  16. 제15항에 있어서,
    상기 프로세서에 의해, 연산 명령어를 취득하는 단계는,
    상기 프로세서에 의해, 상기 PCIe 엔드포인트 디바이스에 액세스하기 위한 미리 설정된 인터페이스에 따라 상기 PCIe 엔드포인트 디바이스의 드라이브 모듈에 의해 생성된 상기 연산 명령어를 취득하는 단계 - 상기 PCIe 엔드포인트 디바이스에 액세스하기 위한 미리 설정된 인터페이스는 상기 액세스 프록시를 가리킴 -; 또는
    상기 프로세서에 의해, 상기 PCIe 엔드포인트 디바이스에 액세스하기 위한 미리 설정된 인터페이스에 따라 호스트 운영 체제에 의해 생성된 상기 연산 명령어를 취득하는 단계 - 상기 PCIe 엔드포인트 디바이스에 액세스하기 위한 미리 설정된 인터페이스는 상기 액세스 프록시를 가리킴 -
    를 포함하는, 방법.
  17. 제16항에 있어서,
    상기 액세스 프록시는 직접 메모리 액세스(DMA: direct memory access) 엔진에 의해 구현되고, 상기 연산 명령어는 특히 상기 DMA 엔진을 이용함으로써 상기 PCIe 엔드포인트 디바이스에 액세스하라고 상기 프로세서에게 명령하고,
    상기 프로세서에 의해, 상기 연산 명령어에 따라 상기 액세스 프록시에 액세스 요청을 송신하는 단계는, 상기 프로세서에 의해, 상기 연산 명령어에 따라 상기 DMA 엔진에 데이터 이동 요청을 송신하는 단계를 포함하고,
    상기 데이터 이동 요청은, 상기 PCIe 엔드포인트 디바이스의 메모리 내의 특정 데이터를 상기 컴퓨터 시스템의 메모리로 이동시키거나, 또는 상기 컴퓨터 시스템의 메모리 내의 특정 데이터를 상기 PCIe 엔드포인트 디바이스의 메모리로 이동시키라고 상기 DMA 엔진에게 명령하는, 방법.
  18. 제17항에 있어서, 상기 연산 명령어는 또한 액세스 유형이 판독 동작임을 나타내며, 상기 판독 동작의 소스 어드레스 및 상기 판독 동작의 길이를 나타내고,
    상기 프로세서에 의해, 상기 연산 명령어에 따라 상기 DMA 엔진에 데이터 이동 요청을 송신하는 단계는,
    상기 프로세서에 의해, 상기 컴퓨터 시스템의 메모리에 의해 할당된 상기 판독 동작의 목적지 어드레스를 취득하는 단계; 및
    상기 프로세서에 의해, 상기 DMA 엔진에 상기 데이터 이동 요청을 송신하는 단계 - 상기 데이터 이동 요청은, 상기 판독 동작의 길이만큼의 데이터를 상기 판독 동작의 소스 어드레스로부터 상기 판독 동작의 목적지 어드레스로 이동시키라고 상기 DMA 엔진에게 명령하기 위해, 상기 판독 동작의 소스 어드레스, 상기 판독 동작의 목적지 어드레스 및 상기 판독 동작의 길이를 반송함(carry) -
    를 포함하는, 방법.
  19. 제16항에 있어서,
    상기 프로세서에 의해, 상기 액세스 프록시에 의해 송신되는 상기 액세스 요청의 응답 메시지를 수신하는 단계 이후에,
    상기 액세스 프록시에 의해, 상기 PCIe 엔드포인트 디바이스에 대해 개시된 액세스 동작이 성공적으로 실행되었는지를 판정하고, 상기 액세스 동작이 실패한 경우에는 상기 프로세서에 제2 통보 메시지를 송신하는 단계;
    상기 프로세서에 의해, 상기 액세스 프록시에 의해 송신되는 상기 제2 통보 메시지를 수신하는 단계 - 상기 제2 통보 메시지는, 상기 액세스 프록시가 상기 PCIe 엔드포인트 디바이스에 액세스하는 데에 실패했음을 나타냄 -; 및
    상기 프로세서에 의해, 상기 액세스 프록시가 상기 PCIe 엔드포인트 디바이스에 액세스하는 데에 실패한 이유를 결정하고, 상기 액세스의 실패의 이유가 상기 PCIe 엔드포인트 디바이스가 비정상적으로 오프라인으로 된 것인 경우, 상기 프로세서에 의해, 상기 PCIe 엔드포인트 디바이스로의 액세스를 중단하는 단계
    를 더 포함하는 방법.
  20. 제19항에 있어서,
    상기 프로세서에 의해, 상기 액세스 프록시가 상기 PCIe 엔드포인트 디바이스에 액세스하는 데에 실패한 이유가 상기 PCIe 엔드포인트 디바이스가 비정상적으로 오프라인으로 된 것이라고 결정한 이후에,
    상기 PCIe 엔드포인트 디바이스에 할당된 자원들을 예비하는 단계를 더 포함하는 방법.
  21. 컴퓨터로서,
    프로세서, 메모리, 버스 및 통신 인터페이스를 포함하고,
    상기 메모리는 컴퓨터 실행 명령어를 저장하도록 구성되고, 상기 프로세서는 상기 버스를 통해 상기 메모리에 접속하고, 상기 컴퓨터가 실행 중일 때, 상기 프로세서는 상기 메모리에 저장된 상기 컴퓨터 실행 명령어를 실행하여, 상기 컴퓨터가,
    상기 프로세서에 의해, 연산 명령어를 취득하는 단계 - 상기 연산 명령어는, 액세스 프록시를 이용함으로써 PCIe 엔드포인트 디바이스에 액세스하라고 상기 프로세서에게 명령함 -;
    상기 프로세서에 의해, 상기 연산 명령어에 따라 상기 액세스 프록시에 액세스 요청을 송신하는 단계 - 상기 액세스 요청은 상기 PCIe 엔드포인트 디바이스에 액세스하라고 상기 액세스 프록시에게 명령함 -; 및
    상기 프로세서에 의해, 상기 액세스 프록시에 의해 송신되는 상기 액세스 요청의 응답 메시지를 수신하는 단계
    를 포함하는 액세스 방법을 실행하게 하는, 컴퓨터.
  22. 컴퓨터 실행 명령어를 포함하는 컴퓨터 판독가능한 매체로서,
    컴퓨터는, 상기 컴퓨터의 프로세서가 상기 컴퓨터 실행 명령어를 실행할 때,
    상기 프로세서에 의해, 연산 명령어를 취득하는 단계 - 상기 연산 명령어는, 액세스 프록시를 이용함으로써 PCIe 엔드포인트 디바이스에 액세스하라고 상기 프로세서에게 명령함 -;
    상기 프로세서에 의해, 상기 연산 명령어에 따라 상기 액세스 프록시에 액세스 요청을 송신하는 단계 - 상기 액세스 요청은 상기 PCIe 엔드포인트 디바이스에 액세스하라고 상기 액세스 프록시에게 명령함 -; 및
    상기 프로세서에 의해, 상기 액세스 프록시에 의해 송신되는 상기 액세스 요청의 응답 메시지를 수신하는 단계
    를 포함하는 액세스 방법을 실행하는, 컴퓨터 판독가능한 매체.
  23. PCI 익스프레스(PCIe: peripheral component interconnect express) 엔드포인트 디바이스에 액세스하는 방법으로서 - 상기 PCIe 엔드포인트 디바이스는 PCIe 버스를 통해 컴퓨터 시스템의 프로세서에 접속함 -,
    호출 명령어를 수신하는 단계 - 상기 호출 명령어는, 상기 PCIe 엔드포인트 디바이스가 액세스될 필요가 있음을 나타냄 -; 및
    상기 PCIe 엔드포인트 디바이스에 액세스하기 위한 미리 설정된 인터페이스에 따라 연산 명령어를 생성하는 단계 - 상기 PCIe 엔드포인트 디바이스에 액세스하기 위한 미리 설정된 인터페이스는 액세스 프록시를 가리키며, 상기 연산 명령어는, 상기 액세스 프록시를 이용함으로써 상기 PCIe 엔드포인트 디바이스에 액세스하라고 상기 프로세서에게 명령하는데 이용됨 -
    를 포함하는 방법.
  24. 제23항에 있어서, 상기 호출 명령어를 수신하는 단계는, 상기 PCIe 엔드포인트 디바이스의 드라이브 모듈에 의해, 상기 호출 명령어를 수신하는 단계를 포함하고,
    그에 따라, 상기 PCIe 엔드포인트 디바이스에 액세스하기 위한 미리 설정된 인터페이스에 따라 연산 명령어를 생성하는 단계는, 상기 PCIe 엔드포인트 디바이스에 액세스하기 위한 미리 설정된 인터페이스에 따라, 상기 PCIe 엔드포인트 디바이스의 드라이브 모듈에 의해, 상기 PCIe 엔드포인트 디바이스에 액세스하기 위한 상기 연산 명령어를 생성하는 단계를 포함하는, 방법.
  25. 제23항에 있어서, 상기 호출 명령어를 수신하는 단계는, 상기 컴퓨터 시스템의 호스트 운영 체제에 의해, 상기 PCIe 엔드포인트 디바이스의 드라이브 모듈의 호출 명령어를 수신하는 단계를 포함하고,
    그에 따라, 상기 PCIe 엔드포인트 디바이스에 액세스하기 위한 미리 설정된 인터페이스에 따라 연산 명령어를 생성하는 단계는, 상기 PCIe 엔드포인트 디바이스에 액세스하기 위한 미리 설정된 인터페이스에 따라, 상기 호스트 운영 체제에 의해, 상기 PCIe 엔드포인트 디바이스에 액세스하기 위한 연산 명령어를 생성하는 단계를 포함하는, 방법.
  26. 컴퓨터로서,
    프로세서, 메모리, 버스 및 통신 인터페이스를 포함하고,
    상기 메모리는 컴퓨터 실행 명령어를 저장하도록 구성되고, 상기 프로세서는 상기 버스를 통해 상기 메모리에 접속하고, 상기 컴퓨터가 실행 중일 때, 상기 프로세서는 상기 메모리에 저장된 상기 컴퓨터 실행 명령어를 실행하여, 상기 컴퓨터가,
    호출 명령어를 수신하는 단계 - 상기 호출 명령어는, PCIe 엔드포인트 디바이스가 액세스될 필요가 있음을 나타냄 -; 및
    상기 PCIe 엔드포인트 디바이스에 액세스하기 위한 미리 설정된 인터페이스에 따라, 상기 PCIe 엔드포인트 디바이스에 액세스하기 위한 연산 명령어를 생성하는 단계 - 상기 PCIe 엔드포인트 디바이스에 액세스하기 위한 미리 설정된 인터페이스는 액세스 프록시를 가리키며, 상기 연산 명령어는, 상기 액세스 프록시를 이용함으로써 상기 PCIe 엔드포인트 디바이스에 액세스하라고 상기 프로세서에게 명령하는데 이용됨 -
    를 포함하는 방법을 실행하게 하는, 컴퓨터.
  27. 컴퓨터 실행 명령어를 포함하는 컴퓨터 판독가능한 매체로서,
    컴퓨터는, 상기 컴퓨터의 프로세서가 상기 컴퓨터 실행 명령어를 실행할 때,
    호출 명령어를 수신하는 단계 - 상기 호출 명령어는, PCIe 엔드포인트 디바이스가 액세스될 필요가 있음을 나타냄 -; 및
    상기 PCIe 엔드포인트 디바이스에 액세스하기 위한 미리 설정된 인터페이스에 따라, 상기 PCIe 엔드포인트 디바이스에 액세스하기 위한 연산 명령어를 생성하는 단계 - 상기 PCIe 엔드포인트 디바이스에 액세스하기 위한 미리 설정된 인터페이스는 액세스 프록시를 가리키며, 상기 연산 명령어는, 상기 액세스 프록시를 이용함으로써 상기 PCIe 엔드포인트 디바이스에 액세스하라고 상기 프로세서에게 명령하는데 이용됨 -
    를 포함하는 방법을 실행하는, 컴퓨터 판독가능한 매체.
  28. 삭제
  29. 삭제
  30. 삭제
  31. 삭제
  32. 삭제
  33. 삭제
  34. 삭제
  35. 삭제
  36. 삭제
  37. 삭제
  38. 삭제
  39. 삭제
  40. 삭제
  41. 삭제
  42. 삭제
  43. 삭제
  44. 삭제
  45. 삭제
  46. 삭제
KR1020137032327A 2013-05-02 2013-05-02 컴퓨터 시스템, pci 익스프레스 엔드포인트 디바이스에 액세스하는 방법 및 장치 KR101539878B1 (ko)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/CN2013/075088 WO2014176775A1 (zh) 2013-05-02 2013-05-02 一种计算机系统、高速外围组件互联端点设备的访问方法、和装置

Publications (2)

Publication Number Publication Date
KR20150005854A KR20150005854A (ko) 2015-01-15
KR101539878B1 true KR101539878B1 (ko) 2015-07-27

Family

ID=51135815

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020137032327A KR101539878B1 (ko) 2013-05-02 2013-05-02 컴퓨터 시스템, pci 익스프레스 엔드포인트 디바이스에 액세스하는 방법 및 장치

Country Status (10)

Country Link
US (3) US8782317B1 (ko)
EP (3) EP2811413B1 (ko)
JP (1) JP5953573B2 (ko)
KR (1) KR101539878B1 (ko)
AU (1) AU2013263866B2 (ko)
BR (1) BR112013033792B1 (ko)
CA (1) CA2833940C (ko)
ES (3) ES2687609T3 (ko)
WO (1) WO2014176775A1 (ko)
ZA (1) ZA201308948B (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109684084A (zh) * 2018-12-12 2019-04-26 浪潮(北京)电子信息产业有限公司 一种总线资源的分配方法、系统及相关组件

Families Citing this family (151)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11614893B2 (en) 2010-09-15 2023-03-28 Pure Storage, Inc. Optimizing storage device access based on latency
US8589640B2 (en) 2011-10-14 2013-11-19 Pure Storage, Inc. Method for maintaining multiple fingerprint tables in a deduplicating storage system
CN104126181A (zh) * 2011-12-30 2014-10-29 英特尔公司 作为随机存取存储器的非易失性半导体存储装置的系统存取的薄变换
ES2687609T3 (es) * 2013-05-02 2018-10-26 Huawei Technologies Co., Ltd. Sistema informático, método para acceder a un terminal de interconexión de componentes periféricos exprés y equipo
US9552323B1 (en) * 2013-07-05 2017-01-24 Altera Corporation High-speed peripheral component interconnect (PCIe) input-output devices with receive buffer management circuitry
US9003144B1 (en) 2014-06-04 2015-04-07 Pure Storage, Inc. Mechanism for persisting messages in a storage system
US9218244B1 (en) 2014-06-04 2015-12-22 Pure Storage, Inc. Rebuilding data across storage nodes
US9836234B2 (en) 2014-06-04 2017-12-05 Pure Storage, Inc. Storage cluster
US10574754B1 (en) 2014-06-04 2020-02-25 Pure Storage, Inc. Multi-chassis array with multi-level load balancing
US9213485B1 (en) 2014-06-04 2015-12-15 Pure Storage, Inc. Storage system architecture
US8850108B1 (en) 2014-06-04 2014-09-30 Pure Storage, Inc. Storage cluster
US11652884B2 (en) 2014-06-04 2023-05-16 Pure Storage, Inc. Customized hash algorithms
US11960371B2 (en) 2014-06-04 2024-04-16 Pure Storage, Inc. Message persistence in a zoned system
US11399063B2 (en) 2014-06-04 2022-07-26 Pure Storage, Inc. Network authentication for a storage system
US11068363B1 (en) 2014-06-04 2021-07-20 Pure Storage, Inc. Proactively rebuilding data in a storage cluster
US9367243B1 (en) 2014-06-04 2016-06-14 Pure Storage, Inc. Scalable non-uniform storage sizes
US9836245B2 (en) 2014-07-02 2017-12-05 Pure Storage, Inc. Non-volatile RAM and flash memory in a non-volatile solid-state storage
US11604598B2 (en) 2014-07-02 2023-03-14 Pure Storage, Inc. Storage cluster with zoned drives
US8868825B1 (en) 2014-07-02 2014-10-21 Pure Storage, Inc. Nonrepeating identifiers in an address space of a non-volatile solid-state storage
US9021297B1 (en) 2014-07-02 2015-04-28 Pure Storage, Inc. Redundant, fault-tolerant, distributed remote procedure call cache in a storage system
US11886308B2 (en) 2014-07-02 2024-01-30 Pure Storage, Inc. Dual class of service for unified file and object messaging
US10114757B2 (en) 2014-07-02 2018-10-30 Pure Storage, Inc. Nonrepeating identifiers in an address space of a non-volatile solid-state storage
US9747229B1 (en) * 2014-07-03 2017-08-29 Pure Storage, Inc. Self-describing data format for DMA in a non-volatile solid-state storage
US10853311B1 (en) 2014-07-03 2020-12-01 Pure Storage, Inc. Administration through files in a storage system
US8874836B1 (en) 2014-07-03 2014-10-28 Pure Storage, Inc. Scheduling policy for queues in a non-volatile solid-state storage
US9811677B2 (en) 2014-07-03 2017-11-07 Pure Storage, Inc. Secure data replication in a storage grid
US9558069B2 (en) 2014-08-07 2017-01-31 Pure Storage, Inc. Failure mapping in a storage array
US9495255B2 (en) 2014-08-07 2016-11-15 Pure Storage, Inc. Error recovery in a storage cluster
US9082512B1 (en) 2014-08-07 2015-07-14 Pure Storage, Inc. Die-level monitoring in a storage cluster
US9766972B2 (en) 2014-08-07 2017-09-19 Pure Storage, Inc. Masking defective bits in a storage array
US9483346B2 (en) 2014-08-07 2016-11-01 Pure Storage, Inc. Data rebuild on feedback from a queue in a non-volatile solid-state storage
US10983859B2 (en) 2014-08-07 2021-04-20 Pure Storage, Inc. Adjustable error correction based on memory health in a storage unit
US10079711B1 (en) 2014-08-20 2018-09-18 Pure Storage, Inc. Virtual file server with preserved MAC address
US10229085B2 (en) 2015-01-23 2019-03-12 Hewlett Packard Enterprise Development Lp Fibre channel hardware card port assignment and management method for port names
US9948615B1 (en) 2015-03-16 2018-04-17 Pure Storage, Inc. Increased storage unit encryption based on loss of trust
US11294893B2 (en) 2015-03-20 2022-04-05 Pure Storage, Inc. Aggregation of queries
US9940234B2 (en) 2015-03-26 2018-04-10 Pure Storage, Inc. Aggressive data deduplication using lazy garbage collection
US10082985B2 (en) 2015-03-27 2018-09-25 Pure Storage, Inc. Data striping across storage nodes that are assigned to multiple logical arrays
US10178169B2 (en) 2015-04-09 2019-01-08 Pure Storage, Inc. Point to point based backend communication layer for storage processing
US9672125B2 (en) 2015-04-10 2017-06-06 Pure Storage, Inc. Ability to partition an array into two or more logical arrays with independently running software
US10140149B1 (en) 2015-05-19 2018-11-27 Pure Storage, Inc. Transactional commits with hardware assists in remote memory
US9817576B2 (en) 2015-05-27 2017-11-14 Pure Storage, Inc. Parallel update to NVRAM
US10846275B2 (en) 2015-06-26 2020-11-24 Pure Storage, Inc. Key management in a storage device
US10983732B2 (en) 2015-07-13 2021-04-20 Pure Storage, Inc. Method and system for accessing a file
US11232079B2 (en) 2015-07-16 2022-01-25 Pure Storage, Inc. Efficient distribution of large directories
CN105938461B (zh) * 2015-07-31 2019-02-19 杭州迪普科技股份有限公司 一种dma数据传输方法、装置以及网络设备
US10108355B2 (en) 2015-09-01 2018-10-23 Pure Storage, Inc. Erase block state detection
US11341136B2 (en) 2015-09-04 2022-05-24 Pure Storage, Inc. Dynamically resizable structures for approximate membership queries
ES2726302T3 (es) * 2015-09-21 2019-10-03 Huawei Tech Co Ltd Sistema informático y procedimiento para acceder a un dispositivo de punto extremo del mismo
US9768953B2 (en) 2015-09-30 2017-09-19 Pure Storage, Inc. Resharing of a split secret
US10762069B2 (en) 2015-09-30 2020-09-01 Pure Storage, Inc. Mechanism for a system where data and metadata are located closely together
US10853266B2 (en) 2015-09-30 2020-12-01 Pure Storage, Inc. Hardware assisted data lookup methods
US9843453B2 (en) 2015-10-23 2017-12-12 Pure Storage, Inc. Authorizing I/O commands with I/O tokens
US10007457B2 (en) 2015-12-22 2018-06-26 Pure Storage, Inc. Distributed transactions with token-associated execution
CN105824622B (zh) * 2016-03-11 2020-04-24 联想(北京)有限公司 数据处理方法及电子设备
US10261690B1 (en) 2016-05-03 2019-04-16 Pure Storage, Inc. Systems and methods for operating a storage system
US11861188B2 (en) 2016-07-19 2024-01-02 Pure Storage, Inc. System having modular accelerators
US10768819B2 (en) 2016-07-22 2020-09-08 Pure Storage, Inc. Hardware support for non-disruptive upgrades
US11449232B1 (en) 2016-07-22 2022-09-20 Pure Storage, Inc. Optimal scheduling of flash operations
US9672905B1 (en) 2016-07-22 2017-06-06 Pure Storage, Inc. Optimize data protection layouts based on distributed flash wear leveling
US11080155B2 (en) 2016-07-24 2021-08-03 Pure Storage, Inc. Identifying error types among flash memory
US10216420B1 (en) 2016-07-24 2019-02-26 Pure Storage, Inc. Calibration of flash channels in SSD
US11604690B2 (en) 2016-07-24 2023-03-14 Pure Storage, Inc. Online failure span determination
US11797212B2 (en) 2016-07-26 2023-10-24 Pure Storage, Inc. Data migration for zoned drives
US10366004B2 (en) 2016-07-26 2019-07-30 Pure Storage, Inc. Storage system with elective garbage collection to reduce flash contention
US11886334B2 (en) 2016-07-26 2024-01-30 Pure Storage, Inc. Optimizing spool and memory space management
US10203903B2 (en) 2016-07-26 2019-02-12 Pure Storage, Inc. Geometry based, space aware shelf/writegroup evacuation
US11734169B2 (en) 2016-07-26 2023-08-22 Pure Storage, Inc. Optimizing spool and memory space management
US11422719B2 (en) 2016-09-15 2022-08-23 Pure Storage, Inc. Distributed file deletion and truncation
US10756816B1 (en) 2016-10-04 2020-08-25 Pure Storage, Inc. Optimized fibre channel and non-volatile memory express access
US9747039B1 (en) 2016-10-04 2017-08-29 Pure Storage, Inc. Reservations over multiple paths on NVMe over fabrics
US10481798B2 (en) 2016-10-28 2019-11-19 Pure Storage, Inc. Efficient flash management for multiple controllers
US11550481B2 (en) 2016-12-19 2023-01-10 Pure Storage, Inc. Efficiently writing data in a zoned drive storage system
US11307998B2 (en) 2017-01-09 2022-04-19 Pure Storage, Inc. Storage efficiency of encrypted host system data
US9747158B1 (en) 2017-01-13 2017-08-29 Pure Storage, Inc. Intelligent refresh of 3D NAND
US11955187B2 (en) 2017-01-13 2024-04-09 Pure Storage, Inc. Refresh of differing capacity NAND
US10979223B2 (en) 2017-01-31 2021-04-13 Pure Storage, Inc. Separate encryption for a solid-state drive
US10528488B1 (en) 2017-03-30 2020-01-07 Pure Storage, Inc. Efficient name coding
US11016667B1 (en) 2017-04-05 2021-05-25 Pure Storage, Inc. Efficient mapping for LUNs in storage memory with holes in address space
CN108733479B (zh) * 2017-04-24 2021-11-02 上海宝存信息科技有限公司 卸载固态硬盘卡的方法以及使用该方法的装置
US10944671B2 (en) 2017-04-27 2021-03-09 Pure Storage, Inc. Efficient data forwarding in a networked device
US10141050B1 (en) 2017-04-27 2018-11-27 Pure Storage, Inc. Page writes for triple level cell flash memory
US10516645B1 (en) 2017-04-27 2019-12-24 Pure Storage, Inc. Address resolution broadcasting in a networked device
US10223318B2 (en) 2017-05-31 2019-03-05 Hewlett Packard Enterprise Development Lp Hot plugging peripheral connected interface express (PCIe) cards
US11467913B1 (en) 2017-06-07 2022-10-11 Pure Storage, Inc. Snapshots with crash consistency in a storage system
US11947814B2 (en) 2017-06-11 2024-04-02 Pure Storage, Inc. Optimizing resiliency group formation stability
US11782625B2 (en) 2017-06-11 2023-10-10 Pure Storage, Inc. Heterogeneity supportive resiliency groups
US11138103B1 (en) 2017-06-11 2021-10-05 Pure Storage, Inc. Resiliency groups
US10425473B1 (en) 2017-07-03 2019-09-24 Pure Storage, Inc. Stateful connection reset in a storage cluster with a stateless load balancer
US10402266B1 (en) 2017-07-31 2019-09-03 Pure Storage, Inc. Redundant array of independent disks in a direct-mapped flash storage system
US10877827B2 (en) 2017-09-15 2020-12-29 Pure Storage, Inc. Read voltage optimization
US10210926B1 (en) 2017-09-15 2019-02-19 Pure Storage, Inc. Tracking of optimum read voltage thresholds in nand flash devices
US10545687B1 (en) 2017-10-31 2020-01-28 Pure Storage, Inc. Data rebuild when changing erase block sizes during drive replacement
US11024390B1 (en) 2017-10-31 2021-06-01 Pure Storage, Inc. Overlapping RAID groups
US10884919B2 (en) 2017-10-31 2021-01-05 Pure Storage, Inc. Memory management in a storage system
US10496330B1 (en) 2017-10-31 2019-12-03 Pure Storage, Inc. Using flash storage devices with different sized erase blocks
US10515701B1 (en) 2017-10-31 2019-12-24 Pure Storage, Inc. Overlapping raid groups
US10860475B1 (en) 2017-11-17 2020-12-08 Pure Storage, Inc. Hybrid flash translation layer
US10990566B1 (en) 2017-11-20 2021-04-27 Pure Storage, Inc. Persistent file locks in a storage system
CN107957885B (zh) * 2017-12-01 2021-02-26 麒麟软件有限公司 一种基于飞腾平台的pcie链路设备待机与恢复方法
US10719265B1 (en) 2017-12-08 2020-07-21 Pure Storage, Inc. Centralized, quorum-aware handling of device reservation requests in a storage system
US10929053B2 (en) 2017-12-08 2021-02-23 Pure Storage, Inc. Safe destructive actions on drives
US10929031B2 (en) 2017-12-21 2021-02-23 Pure Storage, Inc. Maximizing data reduction in a partially encrypted volume
US10467527B1 (en) 2018-01-31 2019-11-05 Pure Storage, Inc. Method and apparatus for artificial intelligence acceleration
US10976948B1 (en) 2018-01-31 2021-04-13 Pure Storage, Inc. Cluster expansion mechanism
US10733053B1 (en) 2018-01-31 2020-08-04 Pure Storage, Inc. Disaster recovery for high-bandwidth distributed archives
US11036596B1 (en) 2018-02-18 2021-06-15 Pure Storage, Inc. System for delaying acknowledgements on open NAND locations until durability has been confirmed
US11494109B1 (en) 2018-02-22 2022-11-08 Pure Storage, Inc. Erase block trimming for heterogenous flash memory storage devices
CN108509155B (zh) * 2018-03-31 2021-07-13 深圳忆联信息系统有限公司 一种远程访问磁盘的方法和装置
US11995336B2 (en) 2018-04-25 2024-05-28 Pure Storage, Inc. Bucket views
US11385792B2 (en) 2018-04-27 2022-07-12 Pure Storage, Inc. High availability controller pair transitioning
US10931450B1 (en) 2018-04-27 2021-02-23 Pure Storage, Inc. Distributed, lock-free 2-phase commit of secret shares using multiple stateless controllers
US10853146B1 (en) 2018-04-27 2020-12-01 Pure Storage, Inc. Efficient data forwarding in a networked device
US11436023B2 (en) 2018-05-31 2022-09-06 Pure Storage, Inc. Mechanism for updating host file system and flash translation layer based on underlying NAND technology
US11438279B2 (en) 2018-07-23 2022-09-06 Pure Storage, Inc. Non-disruptive conversion of a clustered service from single-chassis to multi-chassis
US11017071B2 (en) * 2018-08-02 2021-05-25 Dell Products L.P. Apparatus and method to protect an information handling system against other devices
US11500570B2 (en) 2018-09-06 2022-11-15 Pure Storage, Inc. Efficient relocation of data utilizing different programming modes
US11354058B2 (en) 2018-09-06 2022-06-07 Pure Storage, Inc. Local relocation of data stored at a storage device of a storage system
US11868309B2 (en) 2018-09-06 2024-01-09 Pure Storage, Inc. Queue management for data relocation
US11520514B2 (en) 2018-09-06 2022-12-06 Pure Storage, Inc. Optimized relocation of data based on data characteristics
US10846155B2 (en) * 2018-10-16 2020-11-24 Samsung Electronics Co., Ltd. Method for NVMe SSD based storage service using RPC and gRPC tunneling over PCIe +
US10454498B1 (en) 2018-10-18 2019-10-22 Pure Storage, Inc. Fully pipelined hardware engine design for fast and efficient inline lossless data compression
US10976947B2 (en) 2018-10-26 2021-04-13 Pure Storage, Inc. Dynamically selecting segment heights in a heterogeneous RAID group
US11334254B2 (en) 2019-03-29 2022-05-17 Pure Storage, Inc. Reliability based flash page sizing
US11775189B2 (en) 2019-04-03 2023-10-03 Pure Storage, Inc. Segment level heterogeneity
US11099986B2 (en) 2019-04-12 2021-08-24 Pure Storage, Inc. Efficient transfer of memory contents
JP7326863B2 (ja) * 2019-05-17 2023-08-16 オムロン株式会社 転送装置、情報処理装置、および、データ転送方法
US11714572B2 (en) 2019-06-19 2023-08-01 Pure Storage, Inc. Optimized data resiliency in a modular storage system
US11281394B2 (en) 2019-06-24 2022-03-22 Pure Storage, Inc. Replication across partitioning schemes in a distributed storage system
US11893126B2 (en) 2019-10-14 2024-02-06 Pure Storage, Inc. Data deletion for a multi-tenant environment
US11847331B2 (en) 2019-12-12 2023-12-19 Pure Storage, Inc. Budgeting open blocks of a storage unit based on power loss prevention
US11416144B2 (en) 2019-12-12 2022-08-16 Pure Storage, Inc. Dynamic use of segment or zone power loss protection in a flash device
US11704192B2 (en) 2019-12-12 2023-07-18 Pure Storage, Inc. Budgeting open blocks based on power loss protection
US11188432B2 (en) 2020-02-28 2021-11-30 Pure Storage, Inc. Data resiliency by partially deallocating data blocks of a storage device
US11507297B2 (en) 2020-04-15 2022-11-22 Pure Storage, Inc. Efficient management of optimal read levels for flash storage systems
US11256587B2 (en) 2020-04-17 2022-02-22 Pure Storage, Inc. Intelligent access to a storage device
US11474986B2 (en) 2020-04-24 2022-10-18 Pure Storage, Inc. Utilizing machine learning to streamline telemetry processing of storage media
US11416338B2 (en) 2020-04-24 2022-08-16 Pure Storage, Inc. Resiliency scheme to enhance storage performance
CN111767242B (zh) * 2020-05-28 2022-04-15 西安广和通无线软件有限公司 Pcie设备控制方法、装置、计算机设备和存储介质
US11768763B2 (en) 2020-07-08 2023-09-26 Pure Storage, Inc. Flash secure erase
US11513974B2 (en) 2020-09-08 2022-11-29 Pure Storage, Inc. Using nonce to control erasure of data blocks of a multi-controller storage system
US11681448B2 (en) 2020-09-08 2023-06-20 Pure Storage, Inc. Multiple device IDs in a multi-fabric module storage system
US11487455B2 (en) 2020-12-17 2022-11-01 Pure Storage, Inc. Dynamic block allocation to optimize storage system performance
US11614880B2 (en) 2020-12-31 2023-03-28 Pure Storage, Inc. Storage system with selectable write paths
US11847324B2 (en) 2020-12-31 2023-12-19 Pure Storage, Inc. Optimizing resiliency groups for data regions of a storage system
US11630593B2 (en) 2021-03-12 2023-04-18 Pure Storage, Inc. Inline flash memory qualification in a storage system
US11507597B2 (en) 2021-03-31 2022-11-22 Pure Storage, Inc. Data replication to meet a recovery point objective
US11832410B2 (en) 2021-09-14 2023-11-28 Pure Storage, Inc. Mechanical energy absorbing bracket apparatus
CN113868181B (zh) * 2021-09-30 2023-07-21 苏州浪潮智能科技有限公司 一种存储设备pcie链路协商方法、系统、设备及介质
EP4213007A3 (en) * 2021-12-24 2023-09-27 Samsung Electronics Co., Ltd. Storage device having deduplication manager, method of operating the same, and method of operating storage system including the same
US11994723B2 (en) 2021-12-30 2024-05-28 Pure Storage, Inc. Ribbon cable alignment apparatus

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080147937A1 (en) 2006-12-19 2008-06-19 Freimuth Douglas M System and method for hot-plug/remove of a new component in a running pcie fabric
US20120137042A1 (en) 2009-08-07 2012-05-31 Chengdu Huawei Symantec Technologies Co., Ltd. Method and system for taking over devices

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5630076A (en) * 1995-05-05 1997-05-13 Apple Computer, Inc. Dynamic device matching using driver candidate lists
KR100244778B1 (ko) * 1997-07-19 2000-02-15 윤종용 정상 동작중인 시스템에 보드를 실장 또는 탈장하는 회로
US7152167B2 (en) 2002-12-11 2006-12-19 Intel Corporation Apparatus and method for data bus power control
US7404047B2 (en) 2003-05-27 2008-07-22 Intel Corporation Method and apparatus to improve multi-CPU system performance for accesses to memory
US7484045B2 (en) 2004-03-30 2009-01-27 Intel Corporation Store performance in strongly-ordered microprocessor architecture
US7484016B2 (en) * 2004-06-30 2009-01-27 Intel Corporation Apparatus and method for high performance volatile disk drive memory access using an integrated DMA engine
US7543094B2 (en) 2005-07-05 2009-06-02 Via Technologies, Inc. Target readiness protocol for contiguous write
US7546487B2 (en) * 2005-09-15 2009-06-09 Intel Corporation OS and firmware coordinated error handling using transparent firmware intercept and firmware services
JP4809166B2 (ja) 2006-09-06 2011-11-09 株式会社日立製作所 リモートi/oを構成する計算機システム及びi/oデータ転送方法
US7657663B2 (en) 2006-12-19 2010-02-02 International Business Machines Corporation Migrating stateless virtual functions from one virtual plane to another
US7835391B2 (en) 2007-03-07 2010-11-16 Texas Instruments Incorporated Protocol DMA engine
US8141094B2 (en) * 2007-12-03 2012-03-20 International Business Machines Corporation Distribution of resources for I/O virtualized (IOV) adapters and management of the adapters through an IOV management partition via user selection of compatible virtual functions
US7934033B2 (en) * 2008-03-25 2011-04-26 Aprius, Inc. PCI-express function proxy
CN101763221B (zh) * 2008-12-24 2013-01-30 成都市华为赛门铁克科技有限公司 一种存储方法、存储系统及控制器
US8521915B2 (en) * 2009-08-18 2013-08-27 Fusion-Io, Inc. Communicating between host computers and peripheral resources in an input/output (I/O) virtualization system
ES2687609T3 (es) * 2013-05-02 2018-10-26 Huawei Technologies Co., Ltd. Sistema informático, método para acceder a un terminal de interconexión de componentes periféricos exprés y equipo

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080147937A1 (en) 2006-12-19 2008-06-19 Freimuth Douglas M System and method for hot-plug/remove of a new component in a running pcie fabric
US20120137042A1 (en) 2009-08-07 2012-05-31 Chengdu Huawei Symantec Technologies Co., Ltd. Method and system for taking over devices

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109684084A (zh) * 2018-12-12 2019-04-26 浪潮(北京)电子信息产业有限公司 一种总线资源的分配方法、系统及相关组件

Also Published As

Publication number Publication date
EP3385854A1 (en) 2018-10-10
ES2866156T3 (es) 2021-10-19
US9477632B2 (en) 2016-10-25
US20150234772A1 (en) 2015-08-20
BR112013033792B1 (pt) 2018-12-04
BR112013033792A2 (pt) 2017-02-07
AU2013263866A1 (en) 2014-12-04
EP2811413A4 (en) 2014-12-10
CN104335194A (zh) 2015-02-04
US8782317B1 (en) 2014-07-15
JP2015519665A (ja) 2015-07-09
US10025745B2 (en) 2018-07-17
KR20150005854A (ko) 2015-01-15
EP3385854B1 (en) 2021-01-27
WO2014176775A1 (zh) 2014-11-06
EP2811413A1 (en) 2014-12-10
JP5953573B2 (ja) 2016-07-20
CA2833940A1 (en) 2014-11-02
CA2833940C (en) 2018-12-04
EP3173936B1 (en) 2018-07-18
AU2013263866B2 (en) 2016-02-18
ES2610978T3 (es) 2017-05-04
US20140331000A1 (en) 2014-11-06
ES2687609T3 (es) 2018-10-26
EP2811413B1 (en) 2016-10-19
EP3173936A1 (en) 2017-05-31
ZA201308948B (en) 2016-01-27

Similar Documents

Publication Publication Date Title
KR101539878B1 (ko) 컴퓨터 시스템, pci 익스프레스 엔드포인트 디바이스에 액세스하는 방법 및 장치
JP6140303B2 (ja) 仮想マシンのライブマイグレーション方法、仮想マシンのメモリデータ処理方法、サーバ及び仮想マシンシステム
US8078764B2 (en) Method for switching I/O path in a computer system having an I/O switch
WO2016165304A1 (zh) 一种实例节点管理的方法及管理设备
JP2012203636A (ja) 仮想計算機の制御方法及び計算機
JP2006072591A (ja) 仮想計算機制御方法
RU2614569C2 (ru) Стойка с функцией автоматического восстановления и способ автоматического восстановления для этой стойки
JP2016512912A (ja) メモリデータを移行するための方法、コンピュータ、および装置
CN114817105A (zh) 设备枚举的方法、装置、计算机设备以及存储介质
CN116382913A (zh) 资源分配装置、方法、电子设备和存储介质
CN114116203A (zh) 一种资源调用控制方法、资源调用控制装置及存储介质
CN113722147A (zh) 一种保持业务连接方法及相关设备
CN104283950A (zh) 一种业务请求处理的方法、装置及系统
WO2016075813A1 (ja) 計算機システム、及びその制御方法
WO2018110452A1 (ja) 周辺装置、ホスト装置、保守装置、情報処理システム、方法および記録媒体
JP2015011357A (ja) 情報処理システム及び情報処理システムの制御方法
CN117251039A (zh) 设备复位方法、装置、存储介质及电子设备
CN114676085A (zh) 一种ccix总线控制方法、装置、介质

Legal Events

Date Code Title Description
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20180628

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20190617

Year of fee payment: 5