KR20160096173A - 높은 스루풋 키값 저장부의 구현을 위한 메모리 배치 - Google Patents

높은 스루풋 키값 저장부의 구현을 위한 메모리 배치 Download PDF

Info

Publication number
KR20160096173A
KR20160096173A KR1020167018476A KR20167018476A KR20160096173A KR 20160096173 A KR20160096173 A KR 20160096173A KR 1020167018476 A KR1020167018476 A KR 1020167018476A KR 20167018476 A KR20167018476 A KR 20167018476A KR 20160096173 A KR20160096173 A KR 20160096173A
Authority
KR
South Korea
Prior art keywords
memory
data
routing
key value
block
Prior art date
Application number
KR1020167018476A
Other languages
English (en)
Other versions
KR102261805B1 (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 KR20160096173A publication Critical patent/KR20160096173A/ko
Application granted granted Critical
Publication of KR102261805B1 publication Critical patent/KR102261805B1/ko

Links

Images

Classifications

    • G06F17/30312
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0604Improving or facilitating administration, e.g. storage management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/18File system types
    • G06F16/185Hierarchical storage management [HSM] systems, e.g. file migration or policies thereof
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/24569Query processing with adaptation to specific hardware, e.g. adapted for using GPUs or SSDs
    • G06F17/30221
    • G06F17/30519
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0683Plurality of storage devices

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Human Computer Interaction (AREA)
  • Computational Linguistics (AREA)
  • Software Systems (AREA)
  • Dram (AREA)

Abstract

데이터 처리 회로가 개시된다. 이 회로는 키값 저장부 데이터 트랜잭션을 구현하기 위한 요청을 수신하는 입력(306)과, 키값 저장부와 연관된 복수의 메모리 장치(316, 320)에 대한 접근을 가능하게 하는 상이한 메모리 유형과 연관된 복수의 메모리 인터페이스(314, 318)와, 데이터 전송 기준에 기초하여 상기 복수의 메모리 인터페이스에 의해 데이터의 라우팅을 제어하는 메모리 관리 회로(108, 304)를 포함한다.

Description

높은 스루풋 키값 저장부의 구현을 위한 메모리 배치{MEMORY ARRANGEMENT FOR IMPLEMENTATION OF HIGH-THROUGHPUT KEY-VALUE STORES}
본 발명은 일반적으로 집적 회로에 관한 것으로, 특히 데이터 처리 회로 및 방법에 관한 것이다.
집적 회로는 데이터 처리 장치에서 구현될 수 있다. 또한, 데이터는 데이터 전송 표준에 부합하는 사적 프로토콜 또는 공적 프로토콜일 수 있는 상이한 프로토콜에 따라 처리될 수 있다. 그러나 주어진 프로토콜에 따라서, 상이한 하드웨어 요소가 요구될 수 있다. 각종 하드웨어 요소의 구현은 예를 들면 스루풋(throughput), 대기시간 및 전력 소모와 같은 장치의 성능에 영향을 줄 수 있다. 이러한 성능 기준은 각각 장치의 평가에 있어서 중요하다. 즉, 회로 개발자는 장치의 전력 소모를 줄이면서 장치의 속도를 계속하여 개선하고 있다.
또한, 집적 회로를 구현하는 비용을 감소시키고자 하는 노력이 계속되고 있다. 집적 회로를 구현하는 비용을 감소시키는 한가지 방법은 주어진 회로를 각종의 다른 응용에 사용할 수 있게 하는 것이다. 즉, 만일 회로가 다른 구성으로 동작하고 다른 회로를 구현하도록 프로그램될 수 있다면, 집적 회로를 가진 더 비용 효율적인 장치가 달성될 수 있다. 회로 개선으로부터 이익을 얻을 수 있는 하나의 데이터 처리 영역은 키값 저장부(key-value store, KVS)의 구현이다.
종래의 서버는 키값 저장부를 위해 그 주 메모리를 사용할 수 있고, 클라이언트 장치와 인터페이스하기 위한 네트워크 어댑터를 갖는다. 데이터 저장을 위해 다른 종류의 메모리를 사용할 수 있지만, 다른 종류의 메모리는 다른 동작 파라미터를 갖고 KVS 동작에 영향을 줄 수 있다. 따라서, 융통성을 제공하고 그에 따라서 데이터 처리 성능을 개선하는 장치가 필요하다.
데이터 처리 회로가 개시된다. 이 회로는 키값 저장부 데이터 트랜잭션을 구현하기 위한 요청을 수신하는 입력과, 키값 저장부와 연관된 복수의 메모리 장치에 대한 접근을 가능하게 하는 상이한 메모리 유형과 연관된 복수의 메모리 인터페이스와, 데이터 전송 기준에 기초하여 상기 복수의 메모리 인터페이스에 의해 데이터의 라우팅을 제어하는 메모리 관리 회로를 포함한다.
대안적으로, 데이터 처리 회로는 키값 저장부 데이터 트랜잭션을 구현하기 위한 요청을 수신하는 입력과, 키값 저장부와 연관된 제1 유형 메모리의 메모리 위치에 대한 접근을 가능하게 하는 제1 메모리 인터페이스와, 키값 저장부와 연관된 제2 유형 메모리의 메모리 위치에 대한 접근을 가능하게 하는 제2 메모리 인터페이스와, 상기 입력과 상기 제1 및 제2 메모리 인터페이스 사이에 결합되고 데이터 전송 기준에 기초하여 상기 제1 및 제2 메모리 인터페이스에 의해 데이터의 라우팅을 제어하는 메모리 관리 회로를 포함한다.
데이터 처리 방법이 또한 개시된다. 이 방법은 키값 저장부와 연관된 데이터 처리를 구현하기 위한 요청을 수신하는 단계와, 데이터 전송 기준에 기초하여 복수의 메모리 인터페이스에 의해 데이터의 라우팅을 제어하는 단계와, 제1 메모리 인터페이스에 의해 키값 저장부와 연관된 제1 유형 메모리의 메모리 위치에 대한 접근을 허용하는 단계와, 제2 메모리 인터페이스에 의해 키값 저장부와 연관된 제2 유형 메모리의 메모리 위치에 대한 접근을 허용하는 단계를 포함한다.
도 1은 데이터 처리 회로의 블록도이다.
도 2는 도 1의 회로의 메모리 인터페이스의 블록도이다.
도 3은 키값 저장부가 복수의 메모리 유형을 구현하는 것을 가능하게 하는 회로의 블록도이다.
도 4는 키값 저장부가 복수의 메모리 유형을 구현하고 접근 대역폭을 개선하기 위해 복수의 인터페이스를 병렬로 이용할 수 있게 하는 회로의 블록도이다.
도 5는 제1 유형 메모리의 메모리 제어기의 블록도이다.
도 6은 제2 유형 메모리의 메모리 제어기의 블록도이다.
도 7은 키값 저장부의 구현시에 데이터 블록의 데이터를 상이한 유형의 메모리에 할당하는 것을 보인 도이다.
도 8은 동적 랜덤 액세스 메모리(DRAM)의 블록도이다.
도 9는 도 8의 DRAM의 메모리 요소의 블록도이다.
도 10은 솔리드 스테이트 드라이브(solid-state drive; SSD) 메모리의 블록도이다.
도 11은 도 9의 솔리드 스테이트 드라이브의 메모리 요소의 블록도이다.
도 12는 키값 저장부와 연관된 데이터 처리를 보인 흐름도이다.
도 13은 키값 저장부의 동작을 보인 표들을 포함한 도이다.
도 14는 키값 저장부를 구현하기 위한 데이터 패킷의 필드를 보인 도이다.
도 15는 키값 저장부와 연관된 데이터 처리 방법을 보인 흐름도이다.
도 16은 프로그래머블 리소스를 가진 장치를 프로그래밍하기 위한 시스템의 블록도이다.
도 17은 프로그래머블 리소스를 가진 집적 회로의 블록도이다.
도 18은 도 17의 집적 회로의 구성가능 논리 요소의 블록도이다.
키값 저장부(KVS)는 대부분의 데이터 센터에서 기본적으로 중요한 미들웨어 계층이다. 키값 저장부의 기능은 통신 또는 네트워크 인터페이스를 통해 (어드레스로 인덱스된 것이 아닌) 키와 연관된 값들을 저장하고 검색하는 것이다. 최근에, 키값 저장부는 가장 빈번하게 접근되는 객체(object)를 캐싱함으로써 그들의 웹 존재의 성능을 가속화하기 위해 데이터 센터에서 널리 전개된다. KVS 서버는 전형적으로 큰 데이터베이스의 콘텐츠를 캐시하는데 사용되기 때문에, 이러한 KVS 서버의 중요한 양태는 그 기억 밀도이고, 캐시가 크면 클수록 KVS의 효과가 더 커진다. 또한, KVS 서버의 스루풋 및 대기시간은 이들이 본질적으로 웹사이트가 어셈블될 수 있는 속도를 결정하기 때문에 중요한 특성이다. 마지막으로, 서버의 운영 비용(그 에너지 소비가 지배적임)이 그 자본화 비용보다 더 커지기 시작하기 때문에 전력 소모가 점차적으로 중요하게 되고 있다.
이하에서 개시되는 각종 회로 및 방법은 프로그래머블 로직 또는 커스텀 IC에서 키값 저장부의 구현을 위한 솔리드 스테이트 드라이브(SSD) 조력 데이터 흐름 아키텍처를 설명한다. 각종 구현예의 일 양태는 상이한 유형의 메모리의 조합을 통하여 매우 높은 기억 밀도(예를 들면, 테라바이트) 및 매우 낮은 대기시간 및 전력 소모와 함께 극히 높은 스루풋(예를 들면, 80Gbps)이 달성될 수 있다는 것이다. 이하에서 개시되는 각종 회로 및 방법은 예컨대 SSD 및 DRAM에 의한 하이브리드 메모리 아키텍처를 사용함으로써 매우 낮은 대기시간 및 높은 전력 효율과 함께 높은 데이터 스루풋을 여전히 제공하면서 사용자가 수 테라바이트까지 필요한 기록 밀도를 스케일할 수 있게 한다. 더 구체적으로, 이 성능은 DRAM과 SSD 간의 스마트한 데이터 분배를 통하여, 및 많은 SSD에 병렬로 데이터를 저장함으로써 달성될 수 있고, 이것에 의해 과잉 설비(overprovisioning)를 통한 접근 대역폭을 증가시킨다. 아키텍처가 필드 프로그래머블 게이트 어레이(FPGA)(뒤에서 자세히 설명함)와 같은 프로그래머블 논리 장치 또는 특수 용도 집적 회로(ASIC)에서 구현될 수 있지만, 개선된 KVS 아키텍처의 필요한 융통성은 아키텍처가 FPGA 또는 어떤 다른 프로그래머블 논리 장치에 더 적합하게 만든다.
먼저, 도 1을 참조하면, 데이터 처리 회로의 블록도가 도시되어 있다. 특히 네트워크 L2-L4 처리 블록(102)은 KVS와 연관된 데이터를 KVS 프로토콜 처리 블록(102)에 제공한다. 네트워크 계층 처리 블록은 데이터가 개방 시스템 상호접속(Open Systems Interconnection, OSI) 참조 모델에 따라 처리될 수 있게 하고, 여기에서 L2 계층은 통신 링크를 동작시키는 절차를 규정하고 패킷 에러를 검출 및 보정하는 데이터 링크 계층에 관련되고, L3 계층은 데이터가 네트워크 장치들 간에 전송되는 법을 결정하고 패킷들이 고유한(unique) 네트워크 장치 어드레스로 라우팅할 수 있게 하며, L4 계층은 네트워크에서 종점 대 종점(end-to-end) 메시지 전달을 관리하는 운송 계층에 관련된다. 비록 도 1의 회로가 OSI 참조 모델에 관한 것이고 네트워크 계층 L2-L4를 인용하지만, 네트워크 계층에 대한 참조는 예로서 제공된 것이고, 회로 및 방법은 임의 유형의 데이터 네트워크, 특히 키값 저장부를 구현하는 임의 유형의 데이터 네트워크에서 구현될 수 있다는 것을 이해하여야 한다.
KVS 프로토콜 처리 블록(104)에서 발생된 데이터는 해시 테이블 제어기(106)에 제공되고, 상기 해시 테이블 제어기(106)는 메모리 관리 회로(108)에 의해 조력된다. 메모리 관리 회로(108)는 값 저장부 제어기(110)와 연관된 메모리의 동작을 제어한다. 메모리 관리 회로(108)는 값 저장부에 어드레스 페이지를 할당하고, 해시 테이블에 하나 이상의 어드레스를 제공하며, 어느 유형의 메모리가 데이터를 수신하는지 결정한다. 해시 테이블 메모리 인터페이스(111)는 예컨대 DRAM 또는 SRAM, 또는 대안적으로 프로그래머블 논리 장치의 BRAM(도 17을 참조하여 뒤에서 자세히 설명함) 또는 임의의 다른 메모리 유형일 수 있는 해시 메모리에 대한 접근을 가능하게 한다. 해시 테이블의 구현 및 KVS의 동작은 도 12-14를 참조하면서 뒤에서 자세히 설명한다. 값 저장부 제어기(110)에서 발생된 데이터는 KVS 프로토콜 포맷팅 회로(112)에 제공되고, 그 출력은 네트워크 L2-L4 처리 블록(114)에서 처리된다.
값 저장부 제어기(110)는 메모리 관리 회로(108)에 의해 복수의 메모리 인터페이스와 또한 통신하고, 상기 메모리 관리 회로(108)는 데이터를 그 어드레스에 따라 복수의 메모리 인터페이스로 라우팅한다. 더 구체적으로, 메모리 인터페이스 유형 A(120), 메모리 인터페이스 유형 B(122) 및 메모리 인터페이스 유형 n(124)은 각각 n개의 다른 유형의 메모리 요소에 대한 접근을 가능하게 한다. 뒤에서 자세히 설명하는 바와 같이, 메모리 인터페이스 유형 A(120)는 DRAM 등의 제1 유형의 메모리와 인터페이스할 수 있다. 메모리 인터페이스 유형 B(122)는 SSD와 같이 상기 제1 유형의 메모리와는 다른 제2 유형의 메모리와 인터페이스할 수 있다. 메모리 인터페이스 유형 n은 종래의 자기 디스크 드라이브와 같이 상기 2개 유형의 메모리와는 별개인 어떤 다른 유형의 메모리와 인터페이스할 수 있다. 도 2를 참조하면서 뒤에서 자세히 설명하는 바와 같이, 각각의 메모리 인터페이스는 복수의 메모리 장치와 통신할 수 있다. 따라서, 도 1의 회로는 메모리 장치의 유리한 상이한 특성들을 취하기 위해 상이한 메모리 장치를 선택적으로 구현함으로써 키값 저장부의 가장 효율적인 구현을 가능하게 한다.
더 구체적으로, 도 1의 회로는 훨씬 더 큰 기억 밀도가 가능한 하이브리드 메모리 아키텍처를 이용하는 아키텍처(예를 들면, DRAM과 함께 SSD를 이용하는 아키텍처)를 제공한다. 이 하이브리드 메모리 아키텍처는 극히 높은 스루풋 및 고밀도 KVS의 구현이 가능하면서도 전력 소모가 매우 낮다. 또한, SSD에 의한 맞춤형 하드웨어 데이터 흐름 아키텍처의 고유한 구현은 종래의 장치에 비하여 개선된 응답 시간을 제공한다.
KVS와 연관된 패킷들은 하나 이상의 네트워크 인터페이스를 통하여 수신될 수 있다. 네트워크 L2-L4 처리 회로(102)는 처리 계층 1-4를 구현하여 동작이 저장 동작인지 또는 검색 동작인지, 및 키 및 값의 어떤 크기가 키값 저장부 동작에 대한 것인지 결정하기 위해 KVS 프로토콜 계층이 처리될 수 있게 한다. 전형적으로 DRAM에 저장된 해시 테이블과 연관된 해시 테이블 제어기(106)는 메모리 내의 어디에 키값 쌍이 위치될 것인지 결정하기 위해 접근된다. 메모리 관리 회로(108)는 상이한 유형의 메모리 장치(예를 들면, DRAM과 SSD 장치)들 간의 데이터 배분을 결정하여, 패킷이 KVS 프로토콜에 따라서 KVS 프로토콜 포맷팅 회로(112)에 의해 다시 포맷(reformat)되어 네트워크 L2-L4 처리 회로(114)에 의해 출력되기 전에 값 저장부 제어기(110)가 적당한 메모리(예를 들면, 적당한 DRAM 또는 SSD 또는 둘 다)에 접근할 수 있게 한다.
이제, 도 2를 참조하면, 도 1의 회로의 메모리 인터페이스의 블록도가 도시되어 있다. 각각의 메모리 인터페이스(120-124)는 복수의 메모리 제어기 및 대응하는 메모리 장치에 결합된 조정자(202)를 포함할 수 있다. 예를 들면, 제1 메모리 제어기(204)는 제1 메모리 장치(206)에 결합되고, 제2 메모리 제어기(208)는 제2 메모리 장치(210)에 결합되며, 제n 메모리 제어기(212)는 제n 메모리 장치(214)에 결합된다. 도 5 및 도 6을 참조하면서 자세히 설명하는 바와 같이, 각각의 메모리 제어기는 DRAM 또는 SSD와 같이 기선택된 유형의 메모리와의 상호작용을 가능하게 하고, 임의의 유형의 메모리에 특유한 것일 수 있다. 여기에서 설명하는 바와 같이, 메모리의 유형은 키값 저장부 내 데이터의 가장 효율적인 처리를 가능하게 하는 하나 이상의 기준에 따라 선택될 것이다.
이제, 도 3을 참조하면, 키값 저장부가 복수의 메모리 장치를 구현하는 것을 가능하게 하는 회로의 블록도가 도시되어 있다. 집적 회로(302)는 데이터를 수신하는 하나 이상의 네트워크 인터페이스(308)에 결합된 I/O 블록(306) 및 데이터를 출력하는 하나 이상의 네트워크 인터페이스(312)에 결합된 I/O 블록(310)과 인터페이스하는 키값 저장부 제어 회로(304)에 의해 구현될 수 있다. 도 3의 구현예에 따르면, 메모리 인터페이스(314)는 여기에서 DRAM으로서 표시된 제1의 복수의 메모리 장치(316) 중 하나 이상의 메모리 장치와 통신할 수 있고, 제2 메모리 인터페이스(318)는 여기에서 SSD로서 표시된 제2의 복수의 메모리 장치(320) 중 하나 이상의 메모리 장치와 통신할 수 있다.
SSD는 낮은 비용 및 낮은 전력 소모를 포함한 많은 장점들을 제공한다. 그러나 더 중요하게, SSD는 키값 저장부가 훨씬 더 큰 기억 밀도(예를 들면, 500GB 메모리)를 더 적은 수의 핀(예를 들면, 4개의 핀)을 통해 접속할 수 있게 한다. 즉, SSD는 SATA(serial advanced technology attachment), SAS(serial attached SCSI) 또는 PCIe(peripheral component interconnect express)와 같은 고속 직렬 인터페이스를 사용하기 때문에, 필요한 입력/출력(I/O) 핀의 수가 적다. 이와 대조적으로, DRAM SODIMM은 8GB 스토리지를 접속하기 위해 약 140개의 I/O 핀이 필요하다. SSD가 일반적으로 DRAM에 비하여 더 느린 접근 속도를 갖지만, 회로의 동작은 큰 데이터 블록이 SSD에 저장될 때와 같이 데이터가 적당한 메모리 장치에 저장될 때 개선될 수 있다. SSD는 NAND 기반 플래시 메모리, 또는 고속 직렬 인터페이스 및 낮은 I/O 핀 필요조건을 가진 어떤 다른 유형의 플래시 메모리일 수 있다.
메모리 인터페이스(314, 318)는 예를 들면 도 2의 메모리 인터페이스에 따라 구현될 수 있다. DRAM 및 SSD를 예로서 도시하였지만, 다른 유형의 메모리 요소들이 구현될 수 있고, 이때 특수 유형의 메모리 장치의 선택은 뒤에서 자세히 설명하는 바와 같이 메모리 장치의 동작 파라미터에 기초를 둔다는 점을 이해하여야 한다. 제1 및 제2의 복수의 메모리 장치(316, 320)의 메모리 장치가 집적 회로(302)로부터 분리되어 도시되어 있지만, 메모리 장치들은 집적 회로(302) 상에서 구현될 수 있고, 키값 저장부와 연관된 상이한 유형의 복수의 메모리 장치를 구현하는 회로 및 방법이 단일 집적 회로에서 구현될 수 있다는 점을 이해하여야 한다.
키값 저장부의 데이터에 접근하기 위한 하나 이상의 메모리 요소의 선택은 키값 저장부의 각종 데이터에 대하여 어떤 유형의 메모리 장치를 사용할 것인지 결정하기 위해 상이한 메모리 장치의 접근 속성을 고려함으로써 키값 저장부의 효율적인 동작을 가능하게 한다. 일 구현예에 따르면, 메모리 관리 회로는 데이터 블록을 제1 데이터부와 제2 데이터부로 분할하고, 상기 제1 데이터부와 제2 데이터부는 다른 메모리 유형에 제공된다. 다른 구현예에 따르면, 메모리 관리 회로는 데이터를 예컨대 접근 속도 또는 접근 빈도와 같은 접근 기준에 기초하여 기선택된 메모리 유형에 (완전한 데이터 블록으로서 또는 일부 데이터 블록으로서) 라우팅한다.
SSD의 한가지 중요한 양태는 그 블록 방식 접근 특성 및 낮은 I/O 핀 필요조건과 관련된다. 이 접근 특성이 키값 저장부를 구현하는 일부 응용에서는 바람직하지 않지만, 이 접근 특성은 키값 저장부를 구현하는 다른 응용에서는 유리하게 사용될 수 있다. 예를 들면, 페이지 크기(예를 들면, 4 킬로바이트 페이지 크기)보다 더 작은 SSD에서의 접근은 매우 비효율적으로 될 수 있다. 그러므로 접근 성능을 최대화하기 위해, DRAM은 DRAM과 SSD 사이에서 데이터를 배분하기 위해 SSD에 추가하여 제공된다. 그러나 DRAM은 데이터를 전송하기 위해 더 큰 I/O 핀 필요조건을 갖는다. 따라서 하이브리드 구현에서 메모리 요소들의 선택은 많은 인수들을 고려할 수 있다.
일 구현예에 따르면, KVS에 접근 또는 저장된 데이터는 2개의 부분으로 나누어진다. 복수의 페이지 크기로 구성되는 값 부분은 SSD에 저장되고 나머지는 DRAM에 저장된다. 그러므로 SSD는 완전한(full) 페이지 크기로만 접근됨으로써 접근 성능을 최대화한다. 리스트를 유지하고 DRAM과 SSD 사이에서 값들을 이동하기 위해 추가적인 오버헤드가 필요할 수 있지만, 하이브리드 아키텍처는 크게 개선된 성능을 제공한다. 데이터를 구획하는 예는 도 7을 참조하면서 자세히 설명할 것이다.
대안적으로, 역치보다 더 작은 크기의 값들은 DRAM에 저장되고 더 큰 크기의 값들은 SSD에 저장된다. 즉, 데이터의 블록을 구획하기 보다는 키값 저장부와 연관된 데이터의 블록이 그 데이터 블록의 크기에 따라 DRAM에 또는 SSD에 저장될 수 있다. 이 대안적인 구현예는 DRAM 밀도 및 값 밀도에 정합되는 값 크기 분포를 가진 응용에 유용하다.
다른 구현예에 따르면, 상이한 메모리 유형들 간의 데이터 배분은 접근 빈도에 기초를 둘 수 있다. 주어진 메모리 유형에 대한 접근 시간이 다른 메모리 유형과 상이할 수 있기 때문에, 고속 접근 시간을 갖는 메모리 유형에서 빈번하게 접근되는 데이터를 저장하는 것이 유리할 수 있다. 즉, 빈번하게 접근되는 데이터 값들은 DRAM에 저장된다. 이러한 데이터 블록의 구획은 DRAM이 본질적으로 SSD에 대한 캐시인 구현예를 나타내고, 이것은 더 작은 값들이 더 빈번하게 접근되는 유즈 케이스에 대하여 최상으로 동작한다.
이제, 도 4를 참조하면, 키값 저장부가 복수의 메모리 유형을 구현하고 병렬 저장 동작을 갖는 것을 가능하게 하는 회로의 블록도가 도시되어 있다. SSD는 페이지 크기를 효과적으로 감소시키기 위해 과잉 설비(over-provision)될 수 있다. 도 4의 구현예에 따르면, 역시 SSD로서 표시된 복수의 메모리(402)는 복수의 메모리(320)에 추가하여 제공된다. 메모리(402)는 메모리(320)와 동일한 콘텐츠를 저장하고, 메모리(320)와 병렬로 접근된다. 여기에서 설명하는 방식으로 다수의 SSD를 병렬로 제공하는 것이 값 저장부 크기 자체를 증가시키지 않지만, SSD의 접근 대역폭은 동일한 콘텐츠가 이제 복수의 링크를 통해 접근될 수 있기 때문에 증가할 것이다.
다른 메모리 유형을 사용하기 때문에, 다른 메모리 인터페이스가 또한 필요하다. 도 5에 도시된 바와 같이, 제1 유형의 메모리에 대한 메모리 인터페이스의 블록도가 도시되어 있다. 예로서, 도 5의 메모리 제어기는 SSD에 대하여 사용될 수 있다. 도 5의 메모리 제어기는 사용자 인터페이스(502)와 물리적 인터페이스(504)를 포함한다. 사용자 인터페이스(502)는 커맨드(cmd)와 어드레스(addr) 정보를 수신하고, 상기 정보는 물리적 인터페이스(504)와 통신된다. 데이터가 또한 송신(tx) 또는 수신(rx) 데이터로서 물리적 인터페이스에 의해 통신된다. SSD에 대한 제어기로서 구현될 때, 송신 및 수신 데이터는 직렬 데이터를 나타낸다. 따라서, 도 5의 회로는 복수의 메모리(320, 402) 중의 각 SSD에 대하여 구현될 것이다. 다른 유형의 메모리에 대한 사용자 인터페이스(602)도 또한 커맨드(cmd)와 어드레스(addr) 정보를 수신하고, 상기 정보는 물리적 인터페이스(604)와 통신된다. 물리적 인터페이스(604)에 의해 통신되는 데이터 외에, 제어(ctrl), 클럭(clk) 및 어드레스(addr) 신호가 또한 전송된다. DRAM으로 구현될 때, 도 6의 물리적 인터페이스는 데이터를 병렬로 통신한다.
이제, 도 7을 참조하면, 상이한 유형의 메모리에 데이터 블록의 데이터를 할당하는 도면이 도시되어 있다. 전술한 바와 같이, 키값 저장부의 보다 효율적인 동작은 하나 이상의 SSD에서 SSD의 SSD 접근 블록 크기에 대응하는 데이터 블록의 부분들을 저장하고 DRAM에 나머지를 저장함으로써 달성될 수 있다. 즉, 모듈로 함수(modulo function)를 구현하여 DRAM에 저장되는 나머지 값(이것은 SSD 접근 블록 크기보다 작음)을 결정할 수 있다. 도 7에 도시된 바와 같이, m+1 바이트를 가진 데이터의 블록은 SSD 블록 크기를 가진 2개의 블록과 나머지를 포함한다. 따라서 상기 2개의 블록이 각각 SSD에 저장되고, 나머지가 DRAM에 저장된다. 예로서 만일 데이터 블록이 8 킬로바이트와 12 킬로바이트 사이를 가지면(예를 들면, 8 킬로바이트와 10 바이트), 2개의 4 킬로바이트 블록이 SSD에 저장되고 10 바이트가 DRAM에 저장될 것이다.
이제, 도 8을 참조하면, 동적 랜덤 액세스 메모리(DRAM)의 블록도가 도시되어 있다. DRAM 블록(400)은 복수의 셀(802)을 포함하고, 각 셀은 어드레스 디코더(804)에 결합된다. 어드레스 디코더(804)는 어드레스 선(806)을 수신하고, 도시된 것처럼 복수의 메모리 셀(802)에 결합되는 어드레스를 발생한다. 어드레스 디코더(804)는 칩 인에이블 신호를 수신하고, 각각의 메모리 셀(802)은 기준 전압(Vref)을 수신한다. 기록 블록(810)은 메모리 셀(802)로부터의 데이터 판독 또는 메모리 셀(802)에의 데이터 기록을 가능하게 한다. 특히, 데이터 선(812)에 의해 제공되는 데이터는 만일 기록 블록(810)에 제공된 기록 인에이블 신호가 게이트(814)에 의해 메모리 셀(802)에의 기록을 허용하면 어드레스 디코더에 제공된 어드레스에 기록된다. 만일 기록 인에이블 신호가 메모리 셀(802)에의 기록을 허용하지 않으면 인버터(816)에 결합되는 데이터가 데이터 선(818)에서 발생된다. 뒤에서 자세히 설명하는 바와 같이, DRAM 블록의 셀들에 저장되는 데이터는 그 데이터를 유지하기 위해 주기적으로 리프레시되어야 한다.
이제, 도 9를 참조하면, 도 8의 DRAM의 메모리 요소의 블록도가 도시되어 있다. 특히, 제1 트랜지스터(902)는 드레인(904)이 참조 비트 선에 결합되고 소스(906)가 커패시터(908)에 결합된다. 트랜지스터(902)는 참조 워드 선에 의해 게이트에서 제어된다. 제2 트랜지스터(914)는 드레인(916)이 비트 선에 결합되고 소스(918)가 커패시터(920)에 결합된다. 트랜지스터(914)는 워드 선에 의해 게이트에서 제어된다. 데이터는 워드 선을 하이(high)로 올리고 커패시터(920)를 충전하도록 비트선에 저장될 바람직한 값을 인가함으로써 기록된다. 메모리로부터 데이터를 판독하기 위해, 센스 앰프(926)는 참조 비트 선의 커패시터(912)에 저장된 전압과 비트 선의 커패시터(924)에 저장된 전압 간의 차를 검출하여 출력 값을 발생할 것이다. 비트 선의 값이 결정된 후에, 그 값은 커패시터(924)에 적당한 전하를 저장함으로써 비트 선에 재기록된다. 즉, 커패시터(924)는 셀에 의해 저장되는 데이터의 정확한 값을 유지하기 위해 주기적으로 재충전된다. 개별적인 DRAM 메모리 셀이 SRAM 셀보다 작기 때문에 더 유리하지만, DRAM 메모리 셀은 저장된 데이터를 표시하는 커패시터에서의 전하를 유지하기 위해 주기적으로 리프레시되어야 하고, SRAM 셀보다 접근 시간이 더 길 수 있다.
이제, 도 10을 참조하면, 솔리드 스테이트 드라이브(SSD) 메모리의 블록도가 도시되어 있다. SSD는 멀티플렉스/디멀티플렉서(1008)와 각각 인터페이스하는 프로세서(1004) 및 버퍼 회로(1006)를 가진 SSD 제어기(1002)를 포함한다. 멀티플렉스/디멀티플렉서 회로(1008)는 복수의 플래시 장치(1010-1016) 중의 하나에 데이터를 제공하거나 그로부터 데이터를 수신한다. 인터페이스 회로(1018)는 FPGA(302)의 메모리 인터페이스(318)와 같은 장치의 메모리 인터페이스와 SSD 사이에서 데이터의 전송을 가능하게 한다.
이제, 도 11을 참조하면, 도 10의 반도체 디스크의 메모리 요소의 블록도가 도시되어 있다. 도 11의 메모리 요소는 비트 선에 의해 제어되는 소스(1104) 및 드레인(1106)을 가진 기판(1102)을 포함한다. 워드 선은 산화물 층(1114) 위의 플로팅 게이트(1112)로부터 산화물 층(1110)에 의해 분리된 제어 게이트(1108)를 가진 게이트 요소를 제어한다. 비록 DRAM 및 SSD 메모리 장치와 연관된 회로의 예를 제공하지만, 다른 회로를 구현할 수도 있다는 것을 이해하여야 한다.
이제, 도 12를 참조하면, 키값 저장부와 연관된 데이터의 처리를 보인 흐름도가 도시되어 있다. 일 구현예에 따라서, 회로 블록(1202)의 파이프라인은 키값 저장부를 구현하기 위한 복수의 블록을 포함한다. 도 12에 따른 회로 블록(1202)의 파이프라인은 해시 계산 회로(1204), 해시 테이블 판독 회로(1206), 해시 테이블 기록 회로(1208), 키값(KV) 판독 회로(1210), 값 갱신 회로(1212), 캐시 관리 회로(1214), KV 테이블 기록(1216) 및 포맷 응답 패킷 블록(1218)을 포함한다. 회로 블록(108)의 파이프라인 외부에 있는 메모리 또는 제어 회로와 같은 각종 회로들이 메모리 관리 회로(108) 또는 해시 테이블 메모리 인터페이스(111)와 같이 또한 사용될 수 있다.
도 12에는 회로 블록(108)의 파이프라인에서 회로 블록들이 특정 순서로 도시되어 있지만, 회로 블록들은 다른 순서로 배열될 수 있고, 도 12에 도시된 특정 순서는 단순히 예를 든 것임을 이해하여야 한다. 또한, 회로 블록들의 파이프라인은 키값 저장부의 구현을 가능하게 하지만, 회로 블록들의 파이프라인은 다른 함수를 구현하는 다른 회로 블록들을 포함할 수 있다. 트랜잭션 상태 정보가 도 14에 도시된 필드 중의 하나에서 또는 상태 정보의 분리된 헤더 필드에서 패킷 헤더의 일부로서 통신될 수 있다. 예로서, 트랜잭션 상태는 (해시 실행, 해시 판독 실행, 해시 기록 실행, 키 판독 실행 ...)과 같이 파이프라인의 회로 블록들에 대한 함수들의 리스트를 제공할 수 있다. 대안적으로, 상태 정보는 공유 흐름 제어와 함께 서브채널로서 송출될 수 있다.
메모리 관리 회로(108)는 "해시" 값을 매핑하고, 해시 값은 2개의 메모리 요소, 더 구체적으로는 복수의 메모리 장치(316)의 키값 저장부 메모리 A 및 복수의 메모리 장치(320)의 키값 저장부 메모리 B로서 도 13에 도시된 키값 저장부 내의 고유한 메모리 어드레스로 키로부터 쉽게 계산된다. 해시 함수는 모든 가능한 키(1302)들을 도 13에 도시된 것처럼 관련 해시 테이블(1304) 내 어드레스에 매핑한다. 그 다음에, 해시 테이블은 실제 키값 저장부 내의 어드레스에 매핑한다. 키값 저장부의 각 값은 키 및 대응하는 값을 포함하고, 저장부의 값은 복수의 메모리 장치로 분할될 수 있다. 대안적으로, 키는 키값 저장부에 존재하는 값에 대한 어드레스와 함께 해시 테이블에 저장될 수 있고, 이것은 값 저장부로서 기능할 것이다. 따라서 키값 저장부는 키를 저장하는 해시 테이블 및 키와 관련된 값들을 저장하는 메모리를 이용하여 구현될 수 있다. 해시 테이블은 복수의 메모리 장치에 저장된 데이터에 접근하기 위한 필요한 어드레스를 발생한다. 도 13에 도시된 바와 같이, 키값 저장부 메모리 A와 연관된 값 A-1 및 키값 저장부 메모리 B와 연관된 값 A-2는 키 A와 연관된 어드레스에 기초하여 접근된다. 도 13에 도시된 바와 같이, 다른 키(예를 들면, 키 C)와 연관된 값들은 키값 저장부 메모리 A 및 키값 저장부 메모리 B 양측에 또한 저장되고, 다른 키(예를 들면, 키 I)와 연관된 값은 단일 메모리에만 저장된다.
동작시에, 도 1의 회로는 네트워크 인터페이스(104)를 통하여 유입 요청들을 수신한다. 그 다음에, 기본 네트워크 프로토콜들이 네트워크 L2-L4 처리 블록(102)에서 처리된다. 전형적으로 이것은 매체 접근 제어(MAC) 블록 및 그 다음에 UDP 및 TCP 처리를 포함한다. 네트워크 처리 블록(102)에 의해 발생된 패킷들은 그 다음에 KVS 프로토콜 처리 블록(104)으로 통과되고, KVS 프로토콜 처리 블록(104)은 처리 파이프라인을 통하는 패킷 흐름을 결정한다. 처리 트랜잭션 상태를 고려할 수 있는, 활성화될 필요가 있는 처리 블록들은 그 다음에 파이프라인을 통하여 패킷과 함께 통과된다. 그 다음에, 처리 파이프라인의 각 스테이지는 관련 상태 비트들을 시험하여 다음 스테이지로 넘어가기 전에 패킷에서 어떤 처리(만일 있으면)가 수행되어야 하는지 결정한다.
따라서, 처리 파이프라인은 해시 테이블에 대하여 판독 또는 기록하는 동작, 키값 저장부에 대하여 판독 또는 기록하는 동작, 값들을 수정하는 동작, 응답 패킷들을 포맷팅하는 동작 및 기타 필요한 극소(atomic) 동작을 위해 해시 함수를 계산하는 블록들을 포함한다. 따라서, 처리 파이프라인은 키값 저장부 트랜잭션 프로토콜의 일부인 모든 극소 동작들의 수퍼셋을 효과적으로 구현한다. 이러한 극소 동작들은 프로그래머블 리소스, 전용 하드웨어 블록 또는 종래의 마이크로프로세서에 의한 것을 포함한 많은 다른 방법으로 구현될 수 있다.
이제, 도 14를 참조하면, 키값 저장부를 구현하기 위한 데이터 패킷의 필드를 보인 도가 도시되어 있다. 특히, 데이터 패킷은 프로토콜 헤더부와 패킷 보디를 포함한다. 프로토콜 헤더부는 매직 넘버 필드, 오피코드(Opcode) 필드, 키 길이 필드, 엑스트라 길이 필드, 데이터 유형 필드, 상태 필드, 보디 길이 필드, 고유한 트랜잭션 ID 및 고유한 아이템 ID를 포함한 각종 필드를 갖는다. 패킷 보디는 엑스트라 필드, 키 및 값을 포함할 수 있다.
이제, 도 15를 참조하면, 키값 저장부와 연관된 데이터를 처리하는 방법의 흐름도가 도시되어 있다. 단계 1502에서, 키값 저장부와 연관된 데이터 트랜잭션을 구현하는 요청이 수신된다. 단계 1504에서, 복수의 메모리 인터페이스에 의한 데이터 라우팅이 데이터 전송 기준에 기초하여 제어된다. 단계 1506에서, 제1 메모리 인터페이스와 연관된 제1 유형 메모리의 메모리 위치가 접근될 수 있다. 단계 1508에서, 제2 메모리 인터페이스에 의해 키값 저장부와 연관된 제2 유형 메모리의 메모리 위치가 접근될 수 있다. 도 15의 방법은 전술한 도 1-4의 회로를 이용하여, 도 16-18을 참조하면서 뒤에서 설명하는 프로그래머블 리소스를 가진 집적 회로에서 구현될 수 있다.
이제, 도 16을 참조하면, 구현예에 따라 프로그래머블 리소스를 가진 장치를 프로그래밍하는 시스템의 블록도가 도시되어 있다. 특히, 컴퓨터(1602)는 메모리(1606)로부터 응용 설계(1604)를 수신하고 비휘발성 메모리(1608)에 저장되는 구성 비트스트림을 발생하도록 결합된다. 뒤에서 자세히 설명하는 바와 같이, 회로 설계는 하드웨어 기술 언어(HDL)로 규정된 회로 설계와 같은 하이 레벨 설계일 수 있다. 또한, 컴퓨터는 비휘발성 메모리(1608)에 저장되고 도 17을 참조하면서 뒤에서 설명하는 집적 회로와 같은 프로그래머블 집적 회로일 수 있는 집적 회로(1610)에 제공되는 구성 비트스트림을 발생하는 소프트웨어를 구동하도록 구성될 수 있다.
회로 설계가 프로그래머블 집적 회로에서 구현되게 하는 소프트웨어 흐름은 업계에 잘 알려져 있는 바와 같이 합성, 패킹, 배치 및 라우팅을 포함한다. 합성은 하이 레벨 설계에서의 회로 설계를 프로그래머블 집적 회로에서 나타나는 요소들의 구성으로 변환하는 단계를 포함한다. 예를 들면, 컴퓨터에 의해 동작되는 합성 툴은 예를 들면 구성가능 논리 블록(CLB) 또는 디지털 신호 처리(DSP) 블록에서 임의의 기능을 구현하는 회로 설계의 부분들을 구현할 수 있다. 합성 툴의 예는 캘리포니아주 산호세에 소재하는 자일링스사(Xilinx, Inc.)로부터 입수 가능한 ISE 툴이다. 패킹은 회로 설계의 부분들을 CLB와 같이 장치의 규정된 블록들로 그룹화하는 단계를 포함한다. 배치는 패킹 단계 중에 규정된 장치의 블록들의 위치를 결정하는 단계를 포함한다. 마지막으로 라우팅은 프로그래머블 집적 회로에서 프로그래머블 상호 접속과 같은 상호접속 요소들의 경로를 선택하는 단계를 포함한다. 배치 및 라우팅의 종단에서, 모든 기능, 위치 및 접속들이 공지되고, 그 다음에 구성 비트스트림이 생성된다. 비트스트림은 캘리포니아주 산호세에 소재하는 자일링스사(Xilinx, Inc.)로부터 입수 가능한 비트젠(BitGen)이라고 부르는 소프트웨어 모듈에 의해 생성될 수 있다. 비트스트림은 케이블에 의해 다운로드되거나 프로그래머블 집적 회로로 전달하기 위해 EPROM에 프로그램된다.
이제, 도 17을 참조하면, 프로그래머블 리소스를 가진 집적 회로의 블록도가 도시되어 있다. 비록 프로그래머블 리소스를 가진 장치들이 프로그래머블 리소스를 구비한 특수 용도 집적 회로(ASIC)와 같은 임의 유형의 집적 회로 장치로 구현될 수 있지만, 다른 장치들은 전용 프로그래머블 논리 장치(PLD)를 포함한다. 일 유형의 PLD는 복합 프로그래머블 논리 장치(CPLD)이다. CPLD는 2개 이상의 "기능 블록"을 포함하고, 상기 기능 블록들은 함께 접속됨과 아울러 상호접속 스위치 매트릭스에 의해 입력/출력(I/O) 리소스에 접속된다. CPLD의 각각의 기능 블록은 프로그래머블 로직 어레이(PLA) 또는 프로그래머블 어레이 로직(PAL) 장치에서 사용하는 것과 유사한 2-레벨 AND/OR 구조를 포함한다. 다른 유형의 PLD는 필드 프로그래머블 게이트 어레이(FPGA)이다. 전형적인 FPGA에 있어서, 구성가능 논리 블록(CLB)의 어레이는 프로그래머블 입력/출력 블록(IOB)에 결합된다. CLB와 IOB는 프로그래머블 라우팅 리소스의 계층 구조에 의해 상호접속된다. 이러한 CLB, IOB 및 프로그래머블 라우팅 리소스는 전형적으로 오프 칩 메모리로부터 FPGA의 구성 메모리 셀로 구성 비트스트림을 로딩함으로써 맞춤 제작된다. 이러한 2가지 유형의 프로그래머블 논리 장치에 있어서, 장치의 기능은 그 목적으로 장치에 제공되는 구성 비트스트림의 구성 데이터 비트에 의해 제어된다. 구성 데이터 비트는 휘발성 메모리(예를 들면, FPGA 및 일부 CPLD에서와 같이 정적 메모리 셀)에, 비휘발성 메모리(예를 들면, 일부 CPLD에서와 같이 플래시 메모리)에, 또는 임의의 다른 유형의 메모리 셀에 저장될 수 있다.
도 17의 장치는 멀티 기가비트 송수신기(MGT)(1701), CLB(1702), 랜덤 액세스 메모리 블록(BRAM)(1703), 입력/출력 블록(IOB)(1704), 구성 및 클럭킹 로직(CONFIG/CLOCKS)(1705), 디지털 신호 처리 블록(DSP)(1706), 특수 입력/출력 블록(I/O)(1707)(예를 들면, 구성 포트 및 클럭 포트), 및 디지털 클럭 관리자, 아날로그-디지털 컨버터, 시스템 감시 로직 등과 같은 기타의 프로그래머블 로직(1708)을 포함한 다수의 상이한 프로그래머블 타일을 구비한 FPGA 아키텍처(1700)를 포함한다. 일부 FPGA는 예를 들면 소프트웨어 애플리케이션을 구현하기 위해 사용할 수 있는 전용 프로세서 블록(PROC)(1710)을 또한 포함한다.
일부 FPGA에 있어서, 각각의 프로그래머블 타일은 각 인접 타일의 대응하는 상호접속 요소에 대한 표준화 접속을 가진 프로그래머블 상호접속 요소(INT)(1711)를 구비한다. 그러므로 함께 취해진 프로그래머블 상호접속 요소들은 예시된 FPGA에 대하여 프로그램 가능한 상호접속 구조를 구현한다. 프로그래머블 상호접속 요소(1711)는 도 17의 상부에 포함된 예로 나타낸 바와 같이 동일 타일 내의 프로그래머블 논리 요소에 대한 접속들을 또한 구비한다.
예를 들면, CLB(1702)는 사용자 로직을 구현하도록 프로그램될 수 있는 구성가능 논리 요소(CLE)(1712) 및 단일 프로그래머블 상호접속 요소(1711)를 구비할 수 있다. BRAM(1703)은 하나 이상의 프로그래머블 상호접속 요소 외에 BRAM 논리 요소(BRL)(1713)를 구비할 수 있다. BRAM은 구성 논리 블록의 분산형 RAM으로부터 분리된 전용 메모리를 구비한다. 전형적으로, 타일에 내포되는 상호접속 요소의 수는 타일의 높이에 의존한다. 도시된 구현예에 있어서, BRAM 타일은 5개의 CLB와 같은 높이를 갖지만, 다른 개수가 또한 사용될 수 있다. DSP 타일(1706)은 적당한 수의 프로그래머블 상호접속 요소 외에도 DSP 논리 요소(DSPL)(1714)를 포함할 수 있다. IOB(1704)는 예를 들면 1 인스턴스의 프로그래머블 상호접속 요소(1711) 외에도 2 인스턴스의 입력/출력 논리 요소(IOL)(1715)를 포함할 수 있다. 장치의 접속 위치는 그 목적으로 장치에 제공되는 구성 비트스트림의 구성 데이터 비트에 의해 제어된다. 프로그래머블 상호접속은, 구성 비트스트림의 비트에 응답하여, 상호접속 선들을 포함한 접속들이 프로그래머블 로직에서 구현되는 회로에, 또는 BRAM 또는 프로세서와 같은 다른 회로에 각종 신호들을 결합하기 위해 사용될 수 있게 한다.
도시된 구현예에 있어서, 다이의 중앙 부근의 컬럼 영역은 구성, 클럭 및 기타의 제어 로직을 위해 사용된다. 이 컬럼으로부터 연장하는 구성/클럭 배분 영역(1709)은 FPGA의 폭을 가로질러서 클럭 및 구성 신호를 배분하기 위해 사용된다. 도 17에 도시한 아키텍처를 이용하는 일부 FPGA는 FPGA의 대부분을 형성하는 규칙적인 원주형 구조를 분열시키는 추가의 논리 블록을 포함한다. 상기 추가의 논리 블록은 프로그래머블 블록 및/또는 전용 로직일 수 있다. 예를 들면, 도 17에 도시된 프로세서 블록(PROC)(1710)은 CLB 및 BRAM의 수 개의 컬럼에 걸쳐진다.
도 17은 단지 예시적인 FPGA 아키텍처만을 보이고자 한 것임에 주목한다. 컬럼 내의 논리 블록의 수, 컬럼들의 상대적인 폭, 컬럼들의 수 및 순서, 각 컬럼에 포함된 논리 블록들의 유형, 논리 블록들의 상대적 크기, 및 도 17의 상부에 표시된 상호접속/로직 구현예들은 순전히 예시적인 것이다. 예를 들면, 실제 FPGA에 있어서, CLB가 나타나는 곳은 어디든지 사용자 로직의 효율적인 구현을 촉진하기 위하여 전형적으로 2개 이상의 인접하는 CLB 컬럼이 포함된다. 비록 도 17의 구현예는 프로그래머블 리소스를 가진 집적 회로에 관한 것이지만, 뒤에서 자세히 설명하는 회로 및 방법은 임의 유형의 ASIC에서 구현될 수 있다는 것을 이해하여야 한다.
일 구현예에 있어서, MGT(1701)는 특징화 수신기를 포함하고, 임의의 CLB(1702)는 BRAM(1703)에 저장된 에러 표시를 이용하여 아이-스캔 제어기 및 PRBS 데이터 체커를 구현하도록 구성된다.
이제, 도 18을 참조하면, 도 17의 집적 회로의 구성가능 논리 요소의 블록도가 도시되어 있다. 특히, 도 18은 도 17의 구성 논리 블록(1702)의 구성가능 논리 요소를 간단한 형태로 도시한 것이다. 도 18의 구현예에 있어서, 슬라이스 M(1801)은 4개의 룩업테이블(LUTM)(1801A-1801D)을 포함하고, 각각의 룩업테이블은 6개의 LUT 데이터 입력 단자(A1-A6, B1-B6, C1-C6, D1-D6)에 의해 구동되고 2개의 LUT 출력 신호(Q5, Q6)를 제공한다. LUT(1801A-1801D)로부터의 Q6 출력 단자는 슬라이스 출력 단자(A-D)를 각각 구동한다. LUT 데이터 입력 신호는 프로그래머블 상호접속 요소(1811)에 의해 구현될 수 있는 입력 멀티플렉서를 통해 FPGA 상호접속 구조에 의해 공급되고, LUT 출력 신호는 상기 상호접속 구조에 또한 공급된다. 슬라이스 M은 출력 단자(AMUX-DMUX)를 구동하는 출력 선택 멀티플렉서(1811A-1811D); 메모리 요소(1802A-1802D)의 데이터 입력 단자를 구동하는 멀티플렉서(1812A-1812D); 연합 멀티플렉서(1816, 1818, 1819); 바운스(bounce) 멀티플렉서 회로(1822-1823); 인버터(1805)와 멀티플렉서(1806)(이들은 함께 입력 클럭 경로에서 선택적 반전을 제공한다)에 의해 표시된 회로; 및 멀티플렉서(1814A-1814D, 1815A-1815D, 1820-1821) 및 배타적 OR 게이트(1813A-1813D)를 구비한 캐리 로직을 또한 포함한다. 상기 요소들은 모두 도 18에 도시된 것처럼 함께 결합된다. 도 18에 도시된 멀티플렉서에 대하여 선택 입력이 도시되지 않은 경우, 그 선택 입력은 구성 메모리 셀에 의해 제어된다. 즉, 구성 메모리 셀에 저장된 구성 비트스트림의 구성 비트는 멀티플렉서에 대한 올바른 입력을 선택하도록 멀티플렉서의 선택 입력에 결합된다. 공지되어 있는 이러한 구성 메모리 셀은 명확성을 위해 도 18에서뿐만 아니라 여기에서의 선택된 다른 도면에서 생략되었다.
도시된 구현예에 있어서, 각각의 메모리 요소(1802A-1802D)는 동기 또는 비동기 플립플롭 또는 래치로서 기능하도록 프로그램될 수 있다. 동기 기능과 비동기 기능 간의 선택은 동기/비동기(Sync/Asynch) 선택 회로(1803)에 의해 슬라이스 내의 4개의 메모리 요소 모두에 대하여 행하여진다. S/R(세트/리세트) 입력 신호가 세트 기능을 제공하도록 메모리 요소가 프로그램된 경우, REV 입력 단자는 리세트 기능을 제공한다. S/R 입력 신호가 리세트 기능을 제공하도록 메모리 요소가 프로그램된 경우, REV 입력 단자는 세트 기능을 제공한다. 메모리 요소(1802A-1802D)는 클럭 신호(CK)에 의해 클럭되고, 상기 클럭 신호는 예를 들면 글로벌 클럭 네트워크에 의해 또는 상호접속 구조에 의해 제공될 수 있다. 이러한 프로그래머블 메모리 요소들은 FPGA 설계 분야에서 잘 알려져 있다. 각각의 메모리 요소(1802A-1802D)는 등록된 출력 신호(AQ-DQ)를 상호접속 구조에 제공한다. 각각의 LUT(1801A-1801D)가 2개의 출력 신호(Q5, Q6)를 제공하기 때문에, LUT는 5개의 공유 입력 신호(IN1-IN5)를 가진 2개의 5-입력 LUT로서, 또는 입력 신호 IN1-IN6를 가진 1개의 6-입력 LUT로서 기능하도록 구성될 수 있다.
도 18의 구현예에 있어서, 각각의 LUTM(1801A-1801D)은 수 개의 모드 중 임의의 모드로 기능할 수 있다. 룩업테이블 모드에 있을 때, 각각의 LUT는 입력 멀티플렉서를 통해 FPGA 상호접속 구조에 의해 공급되는 6개의 데이터 입력 신호(IN1-IN6)를 갖는다. 이 입력 신호(IN1-IN6)들의 값에 기초하여 64개의 데이터 값들 중의 하나가 구성 메모리 셀로부터 프로그램적으로 선택된다. RAM 모드에 있을 때, 각각의 LUT는 어드레싱을 공유하는 단일 64-비트 RAM 또는 2개의 32-비트 RAM으로서 기능한다. RAM 기록 데이터는 입력 단자 DI1을 통해(LUT(1801A-1801C)의 경우에는 멀티플렉서(1817A-1817C)를 통해) 64-비트 RAM에, 또는 입력 단자 DI1 및 DI2를 통해 2개의 32-비트 RAM에 공급된다. LUT RAM에서의 RAM 기록 동작은 멀티플렉서(1806)로부터의 클럭 신호(CK)에 의해서 및 멀티플렉서(1807)로부터의 기록 인에이블 신호(WEN)에 의해서 제어되고, 멀티플렉서(1807)는 클럭 인에이블 신호(CE) 또는 기록 인에이블 신호(WE)를 선택적으로 통과시킬 수 있다. 시프트 레지스터 모드에서, 각각의 LUT는 2개의 16-비트 시프트 레지스터로서, 또는 단일 32-비트 시프트 레지스터를 생성하도록 직렬로 결합된 2개의 16-비트 시프트 레지스터와 함께 기능한다. 시프트-인 신호는 입력 단자(DI1, DI2) 중의 어느 하나 또는 둘 다를 경유하여 제공된다. 16-비트 및 32-비트 시프트 아웃 신호는 LUT 출력 단자를 통하여 제공되고, 32-비트 시프트 아웃 신호는 LUT 출력 단자(MC31)를 경유하여 더 직접적으로 또한 제공될 수 있다. LUT(1801A)의 32-비트 시프트 아웃 신호(MC31)는 출력 선택 멀티플렉서(1811D) 및 CLE 출력 단자(DMUX)를 경유하여 시프트 레지스터 체이닝(chaining)을 위해 일반 상호접속 구조에 또한 제공될 수 있다. 따라서, 전술한 회로 및 방법은 도 17 및 도 18에 도시된 장치와 같은 장치에서, 또는 임의의 다른 적당한 장치에서 구현될 수 있다.
여기에서 설명한 예시적인 장치는 일반적으로 데이터 처리 회로와 관련된다. 이 회로는 키값 저장부 데이터 트랜잭션을 구현하기 위한 요청을 수신하는 입력과; 키값 저장부와 연관된 복수의 메모리 장치에 대한 접근을 가능하게 하는 상이한 메모리 유형과 연관된 복수의 메모리 인터페이스와; 데이터 전송 기준에 기초하여 상기 복수의 메모리 인터페이스에 의해 데이터의 라우팅을 제어하는 메모리 관리 회로를 포함한다.
일부 이러한 장치에 있어서, 메모리 관리 회로는 제1 데이터부 및 제2 데이터부로의 데이터 블록의 라우팅을 제어할 수 있다.
일부 이러한 장치에 있어서, 메모리 관리 회로는, 제1 메모리 인터페이스에 의해 데이터 블록의 제1 부분을 라우팅하게 하고 제2 메모리 인터페이스에 의해 데이터 블록의 제2 부분을 라우팅하게 할 수 있다.
일부 이러한 장치에 있어서, 메모리 관리 회로는 데이터 블록의 일부를 접근 기준에 기초하여, 선택되어 있는 메모리 유형에 라우팅할 수 있다.
일부 이러한 장치에 있어서, 상기 접근 기준은 상기 데이터 블록의 데이터의 크기에 기초할 수 있다.
일부 이러한 장치에 있어서, 상기 접근 기준은 상기 데이터 블록의 데이터의 접근 빈도에 기초할 수 있다.
일부 이러한 장치에 있어서, 상기 복수의 메모리 인터페이스는 DRAM으로의 데이터 라우팅을 가능하게 하는 제1 메모리 인터페이스 및 SSD 메모리로의 데이터 라우팅을 가능하게 하는 제2 메모리 인터페이스를 포함할 수 있다.
여기에서 설명한 다른 예시적인 장치는 일반적으로 데이터 처리 회로와 관련된다. 이 회로는 대안적으로 키값 저장부 데이터 트랜잭션을 구현하기 위한 요청을 수신하는 입력과; 키값 저장부와 연관된 제1 유형 메모리의 메모리 위치에 대한 접근을 가능하게 하는 제1 메모리 인터페이스와; 키값 저장부와 연관된 제2 유형 메모리의 메모리 위치에 대한 접근을 가능하게 하는 제2 메모리 인터페이스와; 상기 입력과 상기 제1 및 제2 메모리 인터페이스 사이에 결합되고 데이터 전송 기준에 기초하여 상기 제1 및 제2 메모리 인터페이스에 의해 데이터의 라우팅을 제어하는 메모리 관리 회로를 포함할 수 있다.
일부 이러한 장치에 있어서, 메모리 관리 회로는 제1 메모리 인터페이스에 의해 데이터 블록의 제1 부분을 라우팅하게 하고 제2 메모리 인터페이스에 의해 데이터 블록의 제2 부분을 라우팅할 수 있다.
일부 이러한 장치에 있어서, 메모리 관리 회로는 데이터의 크기에 기초하여 제1 메모리 인터페이스 또는 제2 메모리 인터페이스에 의해 데이터를 라우팅할 수 있다.
일부 이러한 장치에 있어서, 메모리 관리 회로는 데이터의 접근 빈도에 기초하여 제1 메모리 인터페이스 또는 제2 메모리 인터페이스에 의해 데이터를 라우팅할 수 있다.
일부 이러한 장치에 있어서, 상기 제1 메모리 인터페이스는 DRAM 메모리로의 데이터 라우팅을 가능하게 하고 상기 제2 메모리 인터페이스는 SSD 메모리로의 데이터 라우팅을 가능하게 할 수 있다.
일부 이러한 장치에 있어서, 상기 제2 메모리 인터페이스에 의해 라우팅된 데이터는 복수의 메모리 장치에 저장된다.
일부 이러한 장치에 있어서, 상기 메모리 관리 회로는 상기 복수의 메모리 장치 내 상이한 데이터 블록에 동시에 접근하게 할 수 있다.
여기에서 설명한 예시적인 방법은 일반적으로 데이터 처리에 관한 것이다. 이 방법은 키값 저장부와 연관된 데이터 트랜잭션을 구현하기 위한 요청을 수신하는 단계와; 데이터 전송 기준에 기초하여 복수의 메모리 인터페이스에 의해 데이터의 라우팅을 제어하는 단계와; 제1 메모리 인터페이스에 의해 키값 저장부와 연관된 제1 유형 메모리의 메모리 위치에 대한 접근을 허용하는 단계와; 제2 메모리 인터페이스에 의해 키값 저장부와 연관된 제2 유형 메모리의 메모리 위치에 대한 접근을 허용하는 단계를 포함할 수 있다.
일부 이러한 방법에 있어서, 상기 데이터 전송 기준에 기초하여 복수의 메모리 인터페이스에 의해 데이터의 라우팅을 제어하는 단계는, 상기 제1 메모리 인터페이스에 의해 데이터 블록의 제1 부분을 그리고 상기 제2 메모리 인터페이스에 의해 상기 데이터 블록의 제2 부분을 라우팅하는 단계를 포함할 수 있다.
일부 이러한 방법에 있어서, 상기 데이터 전송 기준에 기초하여 복수의 메모리 인터페이스에 의해 데이터의 라우팅을 제어하는 단계는, 데이터의 크기에 기초하여 상기 제1 메모리 인터페이스 또는 상기 제2 메모리 인터페이스에 의해 데이터를 라우팅하는 단계를 포함할 수 있다.
일부 이러한 방법에 있어서, 상기 데이터 전송 기준에 기초하여 복수의 메모리 인터페이스에 의해 데이터의 라우팅을 제어하는 단계는, 데이터의 접근 빈도에 기초하여 상기 제1 메모리 인터페이스 또는 상기 제2 메모리 인터페이스에 의해 데이터를 라우팅하는 단계를 포함할 수 있다.
일부 이러한 방법에 있어서, 상기 제1 메모리 인터페이스에 의해 키값 저장부와 연관된 제1 유형 메모리의 메모리 위치에 대한 접근을 허용하는 단계는, SSD 메모리로 데이터를 라우팅하는 단계를 포함할 수 있다.
일부 이러한 방법에 있어서, 상기 제2 메모리 인터페이스에 의해 키값 저장부와 연관된 제2 유형 메모리의 메모리 위치에 대한 접근을 허용하는 단계는, DRAM으로 데이터를 라우팅하는 단계를 포함할 수 있다.
따라서, 지금까지 설명한 회로 및 방법은 데이터 처리를 위한 새로운 회로 및 방법에 관한 것이다. 비록 키값 저장부에 대하여 특별히 참조하였지만, 도 1 내지 도 3에 도시된 회로 구성은 쿼리 프로세서, 데이터 스캔 등과 같은 다른 관련된 "빅 데이터" 응용에까지 연장될 수 있다. 본 명세서 및 예시된 구현예는 단지 예로서 고려되고, 구현예의 진정한 범위 및 정신은 첨부되는 특허 청구범위에 의해 표시되는 것으로 의도된다.

Claims (14)

  1. 데이터 처리 회로에 있어서,
    키값 저장부 데이터 트랜잭션을 구현하기 위한 요청을 수신하는 입력과,
    키값 저장부와 연관된 복수의 메모리 장치에 대한 접근을 가능하게 하는 상이한 메모리 유형과 연관된 복수의 메모리 인터페이스와,
    데이터 전송 기준에 기초하여 상기 복수의 메모리 인터페이스에 의해 데이터의 라우팅을 제어하는 메모리 관리 회로를 포함하는 데이터 처리 회로.
  2. 제1항에 있어서, 상기 메모리 관리 회로는 제1 데이터부 및 제2 데이터부로의 데이터 블록의 라우팅을 제어하는 것인 데이터 처리 회로.
  3. 제1항 또는 제2항에 있어서, 상기 메모리 관리 회로는, 제1 메모리 인터페이스에 의해 데이터 블록의 제1 부분을 라우팅하게 하고 제2 메모리 인터페이스에 의해 데이터 블록의 제2 부분을 라우팅하게 하는 것인 데이터 처리 회로.
  4. 제3항에 있어서, 상기 메모리 관리 회로는 데이터 블록의 일부를 접근 기준에 기초하여, 선택되어 있는 메모리 유형에 라우팅하는 것인 데이터 처리 회로.
  5. 제4항에 있어서, 상기 접근 기준은 상기 데이터 블록의 데이터의 크기에 기초하는 것인 데이터 처리 회로.
  6. 제4항에 있어서, 상기 접근 기준은 상기 데이터 블록의 데이터의 접근 빈도에 기초하는 것인 데이터 처리 회로.
  7. 제1항 내지 제6항 중 어느 한 항에 있어서, 상기 복수의 메모리 인터페이스의 메모리 인터페이스는, DRAM 메모리로의 데이터 라우팅을 가능하게 하고 제2 메모리 인터페이스는 SSD 메모리로의 데이터 라우팅을 가능하게 하는 것인 데이터 처리 회로.
  8. 제1항 내지 제7항 중 어느 한 항에 있어서, 상기 제2 메모리 인터페이스에 의해 라우팅된 데이터는, 복수의 메모리 장치에 저장되는 것인 데이터 처리 회로.
  9. 데이터 처리 방법에 있어서,
    키값 저장부와 연관된 데이터 트랜잭션을 구현하기 위한 요청을 수신하는 단계와,
    데이터 전송 기준에 기초하여 복수의 메모리 인터페이스에 의해 데이터의 라우팅을 제어하는 단계와,
    제1 메모리 인터페이스에 의해 상기 키값 저장부와 연관된 제1 유형 메모리의 메모리 위치에 대한 접근을 허용하는 단계와,
    제2 메모리 인터페이스에 의해 상기 키값 저장부와 연관된 제2 유형 메모리의 메모리 위치에 대한 접근을 허용하는 단계를 포함하는 데이터 처리 방법.
  10. 제9항에 있어서, 상기 데이터 전송 기준에 기초하여 복수의 메모리 인터페이스에 의해 데이터의 라우팅을 제어하는 단계는, 상기 제1 메모리 인터페이스에 의해 데이터 블록의 제1 부분을 라우팅하고 상기 제2 메모리 인터페이스에 의해 상기 데이터 블록의 제2 부분을 라우팅하는 단계를 포함하는 것인 데이터 처리 방법.
  11. 제9항 또는 제10항에 있어서, 상기 데이터 전송 기준에 기초하여 복수의 메모리 인터페이스에 의해 데이터의 라우팅을 제어하는 단계는, 데이터의 크기에 기초하여 상기 제1 메모리 인터페이스 또는 상기 제2 메모리 인터페이스에 의해 데이터를 라우팅하는 단계를 포함하는 것인 데이터 처리 방법.
  12. 제9항 또는 제10항 또는 제16항에 있어서, 상기 데이터 전송 기준에 기초하여 복수의 메모리 인터페이스에 의해 데이터의 라우팅을 제어하는 단계는, 데이터의 접근 빈도에 기초하여 상기 제1 메모리 인터페이스 또는 상기 제2 메모리 인터페이스에 의해 데이터를 라우팅하는 단계를 포함하는 것인 데이터 처리 방법.
  13. 제1항 내지 제12항 중 어느 한 항에 있어서, 상기 제1 메모리 인터페이스에 의해 상기 키값 저장부와 연관된 제1 유형 메모리의 메모리 위치에 대한 접근을 허용하는 단계는, SSD 메모리로 데이터를 라우팅하는 단계를 포함하는 것인 데이터 처리 방법.
  14. 제13항에 있어서, 상기 제2 메모리 인터페이스에 의해 상기 키값 저장부와 연관된 제2 유형 메모리의 메모리 위치에 대한 접근을 허용하는 단계는, DRAM으로 데이터를 라우팅하는 단계를 포함하는 것인 데이터 처리 방법.
KR1020167018476A 2013-12-09 2014-12-02 높은 스루풋 키값 저장부의 구현을 위한 메모리 배치 KR102261805B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/100,250 2013-12-09
US14/100,250 US9323457B2 (en) 2013-12-09 2013-12-09 Memory arrangement for implementation of high-throughput key-value stores
PCT/US2014/068228 WO2015088837A1 (en) 2013-12-09 2014-12-02 Memory arrangement for implementation of high-throughput key-value stores

Publications (2)

Publication Number Publication Date
KR20160096173A true KR20160096173A (ko) 2016-08-12
KR102261805B1 KR102261805B1 (ko) 2021-06-04

Family

ID=52134422

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020167018476A KR102261805B1 (ko) 2013-12-09 2014-12-02 높은 스루풋 키값 저장부의 구현을 위한 메모리 배치

Country Status (6)

Country Link
US (1) US9323457B2 (ko)
EP (1) EP3080719B1 (ko)
JP (1) JP6564375B2 (ko)
KR (1) KR102261805B1 (ko)
CN (1) CN105814560B (ko)
WO (1) WO2015088837A1 (ko)

Families Citing this family (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101752583B1 (ko) * 2013-03-14 2017-07-11 마이크론 테크놀로지, 인크. 트레이닝, 데이터 조직, 및/또는 섀도잉을 포함하는 메모리 시스템들 및 방법들
US9934194B2 (en) 2013-12-20 2018-04-03 Rambus Inc. Memory packet, data structure and hierarchy within a memory appliance for accessing memory
JP6034512B2 (ja) * 2013-12-25 2016-11-30 株式会社日立製作所 計算機システム及びデータ管理方法
US10831731B2 (en) * 2014-03-12 2020-11-10 Dell Products L.P. Method for storing and accessing data into an indexed key/value pair for offline access
WO2015155103A1 (de) * 2014-04-08 2015-10-15 Fujitsu Technology Solutions Intellectual Property Gmbh Verfahren zum verbesserten zugriff auf einen hauptspeicher eines computersystems, entsprechendes computersystem sowie computerprogramm-produkt
US9772939B2 (en) * 2015-01-05 2017-09-26 International Business Machines Corporation Heat-based key-value slot organization for flash-optimized data placement in multi-tiered storage systems
US9727416B2 (en) * 2015-07-01 2017-08-08 Xilinx, Inc. Variable code rate solid-state drive
KR102416004B1 (ko) * 2015-09-02 2022-07-04 삼성전자주식회사 인터페이스 회로들, 메모리 모듈들 및 인터페이스 회로들과 메모리 모듈들을 연결하는 스위치 회로를 포함하는 서버 장치
EP3623954A1 (en) 2016-06-14 2020-03-18 Huawei Technologies Co. Ltd. Data access method and related apparatus and system
US10257122B1 (en) * 2016-10-12 2019-04-09 Barefoot Networks, Inc. Distributing key-value pairs to forwarding elements for caching
CN106557571A (zh) * 2016-11-23 2017-04-05 福建亿榕信息技术有限公司 一种基于k‑v存储引擎的数据去重方法及装置
US10404408B1 (en) 2016-12-13 2019-09-03 Xilinx, Inc. Pam multi-level error distribution signature capture
US10482129B1 (en) 2017-04-11 2019-11-19 Xilinx, Inc. Pipelined database processing circuit and method
US10649969B2 (en) * 2017-06-13 2020-05-12 Western Digital Technologies, Inc. Memory efficient persistent key-value store for non-volatile memories
US10033523B1 (en) 2017-08-14 2018-07-24 Xilinx, Inc. Circuit for and method of measuring latency in an integrated circuit
US10839286B2 (en) * 2017-09-14 2020-11-17 Xilinx, Inc. System and method for implementing neural networks in integrated circuits
CN110377535B (zh) * 2018-04-13 2020-11-06 北京忆芯科技有限公司 分布式kv存储系统
WO2020066148A1 (ja) * 2018-09-27 2020-04-02 ソニー株式会社 記憶装置、High Dimensional Gaussian Filtering回路、Stereo Depth計算回路、並びに情報処理装置
US11321244B2 (en) 2019-12-16 2022-05-03 Samsung Electronics Co., Ltd. Block interface emulation for key value device
US11747996B2 (en) * 2020-08-05 2023-09-05 Dropbox, Inc. System and methods for implementing a key-value data store
KR20220023605A (ko) * 2020-08-21 2022-03-02 삼성전자주식회사 인터페이스 회로 및 이를 포함하는 시스템
CN117435121A (zh) * 2022-07-15 2024-01-23 中兴通讯股份有限公司 数据处理方法、ssd控制器、电子设备及可读存储介质

Citations (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001067881A (ja) * 1999-08-30 2001-03-16 Toshiba Corp 連想記憶装置及び記憶媒体
US20010019509A1 (en) * 1999-12-22 2001-09-06 Ari Aho Memory controller
US6446141B1 (en) * 1999-03-25 2002-09-03 Dell Products, L.P. Storage server system including ranking of data source
US20100019509A1 (en) * 2008-07-24 2010-01-28 Chad Allen Perrott Fastener
KR20100085564A (ko) * 2009-01-21 2010-07-29 삼성전자주식회사 데이터 처리 시스템과 데이터 처리 방법
US20100325199A1 (en) * 2009-06-22 2010-12-23 Samsung Electronics Co., Ltd. Client, brokerage server and method for providing cloud storage
US20120072656A1 (en) * 2010-06-11 2012-03-22 Shrikar Archak Multi-tier caching
JP2013030254A (ja) * 2011-07-29 2013-02-07 Toshiba Corp 半導体記憶装置、情報処理装置
US20130290599A1 (en) * 2012-04-25 2013-10-31 International Business Machines Corporation Leveraging a hybrid infrastructure for dynamic memory allocation and persistent file storage
US20130292964A1 (en) * 2012-05-04 2013-11-07 Srg Global, Inc. Daylight opening system for vehicle
US8700683B2 (en) * 2011-10-24 2014-04-15 Nokia Corporation Method and apparatus for providing a key-value based storage interface

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2000040061A (ja) * 1998-05-20 2000-02-08 Oki Data Corp バス使用権調停システム
KR101498673B1 (ko) * 2007-08-14 2015-03-09 삼성전자주식회사 반도체 드라이브, 그것의 데이터 저장 방법, 그리고 그것을포함한 컴퓨팅 시스템
US8397051B2 (en) 2009-02-23 2013-03-12 Autonomy, Inc. Hybrid hash tables
US20110276744A1 (en) * 2010-05-05 2011-11-10 Microsoft Corporation Flash memory cache including for use with persistent key-value store
US10558705B2 (en) * 2010-10-20 2020-02-11 Microsoft Technology Licensing, Llc Low RAM space, high-throughput persistent key-value store using secondary memory

Patent Citations (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6446141B1 (en) * 1999-03-25 2002-09-03 Dell Products, L.P. Storage server system including ranking of data source
JP2001067881A (ja) * 1999-08-30 2001-03-16 Toshiba Corp 連想記憶装置及び記憶媒体
US20010019509A1 (en) * 1999-12-22 2001-09-06 Ari Aho Memory controller
US20100019509A1 (en) * 2008-07-24 2010-01-28 Chad Allen Perrott Fastener
KR20100085564A (ko) * 2009-01-21 2010-07-29 삼성전자주식회사 데이터 처리 시스템과 데이터 처리 방법
US20100325199A1 (en) * 2009-06-22 2010-12-23 Samsung Electronics Co., Ltd. Client, brokerage server and method for providing cloud storage
US20120072656A1 (en) * 2010-06-11 2012-03-22 Shrikar Archak Multi-tier caching
JP2013030254A (ja) * 2011-07-29 2013-02-07 Toshiba Corp 半導体記憶装置、情報処理装置
US8700683B2 (en) * 2011-10-24 2014-04-15 Nokia Corporation Method and apparatus for providing a key-value based storage interface
US20130290599A1 (en) * 2012-04-25 2013-10-31 International Business Machines Corporation Leveraging a hybrid infrastructure for dynamic memory allocation and persistent file storage
US20130292964A1 (en) * 2012-05-04 2013-11-07 Srg Global, Inc. Daylight opening system for vehicle

Also Published As

Publication number Publication date
EP3080719A1 (en) 2016-10-19
JP2017502402A (ja) 2017-01-19
CN105814560B (zh) 2019-06-18
US20150160862A1 (en) 2015-06-11
CN105814560A (zh) 2016-07-27
EP3080719B1 (en) 2020-08-05
JP6564375B2 (ja) 2019-08-21
KR102261805B1 (ko) 2021-06-04
WO2015088837A1 (en) 2015-06-18
US9323457B2 (en) 2016-04-26

Similar Documents

Publication Publication Date Title
KR102261805B1 (ko) 높은 스루풋 키값 저장부의 구현을 위한 메모리 배치
JP6530815B2 (ja) ハイブリッドメモリシステムの動作を制御するための回路および方法
US9153292B2 (en) Integrated circuit devices having memory and methods of implementing memory in an integrated circuit device
US9135185B2 (en) Die-stacked memory device providing data translation
US9590635B1 (en) Partial reconfiguration of programmable devices
US8063660B1 (en) Method and apparatus for configurable address translation
JP3853736B2 (ja) ユーザによる構成可能なオンチップメモリシステム
US9519486B1 (en) Method of and device for processing data using a pipeline of processing blocks
US7106098B1 (en) Split FIFO configuration of block RAM
TWI528322B (zh) 折疊先進先出記憶體產生器
US9478272B1 (en) Configurable storage blocks with embedded first-in first-out and last-in first-out circuitry
US7315918B1 (en) Processor block placement relative to memory in a programmable logic device
US7196963B1 (en) Address isolation for user-defined configuration memory in programmable devices
US8116334B1 (en) Dataflow FIFO communication buffer using highly-multiported memories
US20220244867A1 (en) Fabric Memory Network-On-Chip Extension to ALM Registers and LUTRAM
US20230033822A1 (en) Method for configuring multiple input-output channels
US20240184459A1 (en) Selectively powered embedded memory systems and methods

Legal Events

Date Code Title Description
A201 Request for examination
E701 Decision to grant or registration of patent right
GRNT Written decision to grant