KR20220069826A - 셔플 가속을 위한 시스템, 방법, 및 장치 - Google Patents

셔플 가속을 위한 시스템, 방법, 및 장치 Download PDF

Info

Publication number
KR20220069826A
KR20220069826A KR1020210154986A KR20210154986A KR20220069826A KR 20220069826 A KR20220069826 A KR 20220069826A KR 1020210154986 A KR1020210154986 A KR 1020210154986A KR 20210154986 A KR20210154986 A KR 20210154986A KR 20220069826 A KR20220069826 A KR 20220069826A
Authority
KR
South Korea
Prior art keywords
data
memory
batch
shuffle
partitioning
Prior art date
Application number
KR1020210154986A
Other languages
English (en)
Inventor
첸 조우
후이 장
이주환
기양석
Original Assignee
삼성전자주식회사
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 삼성전자주식회사 filed Critical 삼성전자주식회사
Publication of KR20220069826A publication Critical patent/KR20220069826A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0646Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
    • G06F3/0647Migration mechanisms
    • 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5061Partitioning or combining of resources
    • G06F9/5066Algorithms for mapping a plurality of inter-dependent sub-tasks onto a plurality of physical CPUs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30032Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
    • 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
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • 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/0638Organizing or formatting or addressing of data
    • G06F3/0644Management of space entities, e.g. partitions, extents, pools
    • 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
    • G06F3/0656Data buffering arrangements
    • 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/0673Single storage device
    • G06F3/0679Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Software Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

데이터를 셔플링(shuffling)하는 방법은 셔플링된 데이터의 제 1 배치를 생성하기 위해 메모리 계층의 제 1 레벨 상의 제 1 메모리를 이용하여 데이터의 제 1 배치를 셔플링하는 단계, 셔플링된 데이터의 제 2 배치를 생성하기 위해 상기 제 1 메모리를 이용하여 데이터의 제 2 배치를 셔플링하는 단계, 및 셔플링된 데이터의 상기 제 1 배치 및 셔플링된 데이터의 상기 제 2 배치를 상기 메모리 계층의 제 2 레벨 상의 제 2 메모리에 저장하는 단계를 포함할 수 있다. 상기 방법은 셔플링된 데이터의 상기 제 1 배치 및 셔플링된 데이터의 상기 제 2 배치를 병합하는 단계를 더 포함할 수 있다. 데이터 셔플링(shuffling) 장치는 하나 이상의 기록들을 저장하고, 상기 하나 이상의 기록들 중 적어도 하나를 무작위 액세스에 의해 그룹핑 장치로 전송하는 버퍼 메모리를 포함할 수 있다.

Description

셔플 가속을 위한 시스템, 방법, 및 장치{SYSTEMS, METHODS, AND DEVICES FOR SHUFFLE ACCELERATION}
본 개시는 데이터 셔플링(shuffling)에 관한 것으로, 좀 더 상세하게는 셔플 가속을 위한 시스템, 방법, 및 장치에 관한 것이다.
데이터 셔플링은 데이터가 모든 노드들에서 병렬로 처리될 수 있도록 분산 데이터 프로세싱 시스템(distributed data processing system)의 다수의 노드들로 데이터를 재분배하기 위해 사용될 수 있다.
본 배경 기술 란에 개시된 상기 정보는 오직 발명의 배경 기술의 이해를 돕기 위한 것이며, 선행 기술을 구성하지 않는 정보를 포함할 수 있다.
본 개시는 셔플 가속을 위한 시스템, 방법, 및 장치를 제공한다.
데이터를 셔플링(shuffling)하는 방법은 셔플링된 데이터의 제 1 배치를 생성하기 위해 메모리 계층의 제 1 레벨 상의 제 1 메모리를 이용하여 데이터의 제 1 배치를 셔플링하는 단계, 셔플링된 데이터의 제 2 배치를 생성하기 위해 상기 제 1 메모리를 이용하여 데이터의 제 2 배치를 셔플링하는 단계, 및 셔플링된 데이터의 상기 제 1 배치 및 셔플링된 데이터의 상기 제 2 배치를 상기 메모리 계층의 제 2 레벨 상의 제 2 메모리에 저장하는 단계를 포함할 수 있다. 상기 방법은 셔플링된 데이터의 상기 제 1 배치 및 셔플링된 데이터의 상기 제 2 배치를 병합하는 단계를 더 포함할 수 있다. 상기 방법은 상기 제 1 메모리를 이용하여 데이터의 상기 제 1 배치를 셔플링하는 단계는 상기 제 1 메모리로부터 데이터의 상기 제 1 배치의 일부를 스트리밍(streaming)하는 단계를 포함할 수 있다. 상기 방법은 데이터의 상기 제 1 배치의 상기 일부를 스트리밍하는 것에 기반하여 데이터의 상기 제 1 배치를 파티셔닝하는 단계를 더 포함할 수 있다. 상기 제 1 메모리를 이용하여 데이터의 상기 제 1 배치를 셔플링하는 단계는 상기 제 1 메모리로부터 데이터의 상기 제 1 배치의 일부를 무작위로 액세스하는 단계를 포함할 수 있다. 상기 방법은 데이터의 상기 제 1 배치의 상기 일부를 무작위로 액세스하는 것에 기반하여 데이터의 상기 제 1 배치를 그룹핑하는 단계를 더 포함할 수 있다. 데이터의 상기 제 1 배치를 그룹핑하는 단계는 데이터의 상기 제 1 배치를 정렬하는 단계, 및 상기 정렬에 기반하여 데이터의 상기 제 1 배치를 생성하는 단계를 포함할 수 있다. 데이터의 상기 제 1 배치를 정렬하는 단계는 데이터의 상기 제 1 배치에 대한 포인터들을 정렬하는 단계를 포함할 수 있다. 상기 방법은 데이터의 상기 제 1 배치를 파티셔닝하는 것에 기반하여 셔플링된 데이터의 상기 제 1 배치에 대한 하나 이상의 인덱스들을 생성하는 단계를 더 포함할 수 있다. 상기 방법은 상기 하나 이상의 인덱스들에 기반하여 셔플링된 데이터의 상기 제 1 배치 및 셔플링된 데이터의 상기 제 1 배치를 병합하는 단계를 더 포함할 수 있다. 셔플링된 데이터의 상기 제 1 배치 및 셔플링된 데이터의 상기 제 2 배치를 병합하는 단계는 셔플링된 데이터의 상기 제 1 배치 및 셔플링된 데이터의 상기 제 2 배치를 열 형태로 저장하는 단계를 포함할 수 있다. 셔플링된 데이터의 상기 제 1 배치 및 셔플링된 데이터의 상기 제 2 배치를 병합하는 단계는 셔플링된 데이터의 상기 제 1 배치 및 셔플링된 데이터의 상기 제 2 배치를 저장 장치 상에 병합하는 단계를 포함할 수 있다.
데이터 셔플링(shuffling) 장치는 파티셔닝 장치, 및 하나 이상의 기록들을 저장하고, 상기 파티셔닝 장치로 상기 하나 이상의 기록들의 하나 이상의 제 1 일부들을 스트리밍(streaming)하는 버퍼 메모리를 포함할 수 있다. 상기 버퍼 메모리는 상기 하나 이상의 기록들 중 적어도 하나를 더 저장하고, 상기 하나 이상의 기록들의 상기 하나 이상의 제 1 일부들을 병렬로 더 스트리밍할 수 있다. 상기 버퍼 메모리는 상기 파티셔닝 장치로 상기 하나 이상의 기록들의 상기 하나 이상의 제 1 일부들을 스트리밍하고, 상기 하나 이상의 기록들의 하나 이상의 제 2 일부들을 병렬로 더 페치(fetch)할 수 있다. 상기 파티셔닝 장치는 상기 버퍼 메모리가 상기 하나 이상의 기록들 중 적어도 하나를 저장하는 것과 병렬로 상기 하나 이상의 기록들의 상기 하나 이상의 제 1 일부들에 대해 정렬 동작을 수행할 수 있다. 상기 파티셔닝 장치 및 상기 버퍼 메모리는 상기 하나 이상의 기록들의 배치들 상에서 동작할 수 있다. 상기 데이터 셔플링 장치는 그룹핑 장치를 더 포함하고, 상기 버퍼 메모리는 상기 하나 이상의 기록들 중 적어도 하나를 무작위 액세스에 의해 상기 그룹핑 장치로 전송할 수 있다.
데이터 셔플링(shuffling) 장치는 그룹핑 장치, 및 하나 이상의 기록들을 저장하고, 상기 하나 이상의 기록들 중 적어도 하나를 무작위 액세스에 의해 상기 그룹핑 장치로 전송하는 버퍼 메모리를 포함할 수 있다. 상기 데이터 셔플링 장치는 정렬 출력을 생성하기 위해 상기 하나 이상의 기록들을 정렬하는 정렬 회로를 더 포함하고, 상기 그룹핑 장치는 상기 정렬 출력에 기반하여 상기 하나 이상의 기록들을 그룹핑할 수 있다.
본 개시의 실시 예에 따르면 메모리 계층 구조의 서로 다른 레벨들에서 데이터 셔플 동작들이 수행될 수 있는 레벨화된 셔플 방식을 구현할 수 있다.
도면은 반드시 일정한 비율로 도시된 것은 아니며, 유사한 구조들 또는 기능들의 구성 요소들은 일반적으로 도면 전체에 걸쳐 설명을 위한 목적으로 유사한 참조 번호들 또는 그 일부들로 표시될 수 있다. 도면은 여기에 설명된 다양한 실시 예들의 설명을 용이하게 하기 위한 것일 뿐이다. 도면은 여기에 개시된 교시의 모든 측면들을 설명하지 않으며, 청구 범위들을 제한하지 않는다. 도면이 불명확해지는 것을 방지하기 위해 모든 구성 요소나 연결 등이 표시되지 않을 수 있고, 모든 구성 요소들에 참조 번호들이 표시되지 않을 수 있다. 그러나 요소의 구성 패턴들은 도면에서 쉽게 알 수 있다. 첨부된 도면은 본 명세서와 함께 본 개시의 실시 예들을 도시한 것으로, 상세한 설명과 함께 본 개시의 원리를 설명하기 위한 것이다.
도 1은 본 개시의 실시 예에 따른 데이터 셔플 동작의 예를 나타낸다.
도 2는 본 개시의 실시 예에 따른 셔플 가속 방식의 예를 나타낸다.
도 3은 본 개시의 실시 예에 따른 셔플 가속기의 예를 나타낸다.
도 4는 본 개시의 실시 예에 따른 파티셔닝 방식의 예를 나타낸다.
도 5는 본 개시의 실시 예에 따른 셔플 가속기의 미세 구조의 예를 나타낸다.
도 6은 본 개시의 실시 예에 따른 병합 장치의 미세 구조의 예를 나타낸다.
도 7은 본 개시의 실시 예에 따른 데이터 셔플링 방법의 예를 나타낸다.
개요
데이터 셔플링(shuffling)은 데이터가 모든 노드들에서 병렬로 처리될 수 있도록 분산 데이터 프로세싱 시스템(distributed data processing system)의 다수의 노드들로 데이터를 재분배하기 위해 사용될 수 있다. 일부 실시 예들에서, 데이터 셔플 동작들은 데이터를 셔플링하는 것과 관련된 작업들을 수행하기 위해 상당 비율의 프로세싱 및/또는 메모리 리소스들을 소비할 수 있다. 데이터 셔플 동작들은 또한 저장 장치들 및 프로세싱 리소스들 사이에서 데이터를 이동시키기 위해 상당 비율의 네트워크 대역폭을 소비할 수 있다. 그러므로, 일부 실시 예들에서, 데이터 셔플 동작들은 분산 데이터 프로세싱 시스템에서 성능 병목(bottleneck)을 초래할 수 있다. 예를 들어, 데이터 셔플링은 분산 온라인 분석 프로세싱(online analytical processing; OLAP) 시스템들에서, CPU 시간의 40퍼센트 상당을 소비할 수 있다.
본 개시의 실시 예에 따른 셔플 가속 구조는 메모리 계층 구조(memory hierarchy)의 서로 다른 레벨들에서 데이터 셔플 동작들이 수행될 수 있는 레벨화된(leveled) 셔플 방식을 구현할 수 있다. 예를 들어, 셔플 가속기는 배치 셔플 동작들을 위해 빠르고 및/또는 효율적인 메모리 액세스들을 제공할 수 있는 제 1 계층 레벨의 내부 메모리 리소스들을 사용하여 데이터의 배치들을 셔플할 수 있다. 배치 셔플 동작들의 결과들은 더 큰 그래뉼래러티(granularity)에서 동작할 수 있고, 및/또는 더 큰 용량, 데이터 폭 매칭, 순차적 액세스 등을 제공할 수 있는 제 2 계층 레벨의 외부 메모리 리소스들로 병합될 수 있다. 임의의 수의 배치들은 셔플링될 수 있고 및/또는 병합될 수 있다.
일부 실시 예들에서, 셔플 가속기는 그룹핑 동작에서 수집(gathering) 처리를 위한 무작위 메모리 액세스들을 제공할 수 있는 스크래치패드(scratchpad) 메모리 버퍼를 구현할 수 있고, 또한 파티셔닝(partitioning) 동작을 위한 스트리밍(streaming) 메모리 액세스를 제공할 수 있다.
일부 실시 예들에서, 셔플 가속 구조는 더 높은 출력량을 얻기 위해 하나 이상의 병렬 처리(parallelism) 유형들을 활용하기 위한 하나 이상의 메커니즘들을 구현할 수 있다. 예를 들어, 셔플 가속기는 그룹핑 동작 동안 전체 기록들 또는 기록들의 상당 부분을 처리하기 위한 상대적으로 넓은 데이터 경로를 구현함으로써 데이터 수준의 병렬 처리를 활용할 수 있다. 또 다른 예로서, 셔플 가속기는 프리페칭(prefetching) 동작들, 파티셔닝 동작들 등을 겹침으로써(동시에 수행함으로써) 서브 작업(subtask) 수준의 병렬 처리를 활용할 수 있다. 또 다른 예로서, 작업 수준의 병렬 처리는 현재 배치의 그룹핑 및 이전 배치의 파티셔닝과 같은 동작들을 겹칠 수 있는 다중 배치 프로세싱 셔플 가속기들을 구현함으로써 활용될 수 있다.
본 명세서에 개시된 원리들은 독립적인 활용성을 갖고, 개별적으로 구현될 수 있으며, 모든 실시 예가 모든 원리를 활용하지 않을 수 있다. 그러나, 원리들은 다양한 조합들에서 구현될 수 있고, 그 중 일부는 시너지 방식으로 개별적인 원리들의 장점들을 증폭시킬 수 있다.
나아가, 일부 실시 예들에서, 상술한 기술적 특징들은 향상된 스토리지 입출력(I/O) 패턴들, 스토리지 액세스 그래뉼래러티를 조정하기 위한 중간 셔플 결과들의 병합 등을 포함하는 소프트웨어 기술, 스필링 오버헤드(spilling overhead)를 감소시키기 위한 더 큰 용량을 위한 불휘발성 메모리의 사용이나 원격 셔플링 등과 같은 메모리 확장 기술, 원격 다이렉트 메모리 액세스(remote direct memory access; RDMA)와 같은 네트워크 가속 기술, 직렬화 기술 등을 포함하는 하나 이상의 추가적인 기술과 함께 시너지를 내도록 결합될 수 있다.
데이터 셔플링
도 1은 본 개시의 실시 예에 따른 데이터 셔플 동작의 예를 나타낸다. 도 1에 나타난 실시 예는 제 1 노드, 제 2 노드, 및 제 3 노드의 3개의 노드들을 갖는 분산 프로세싱 시스템 상에서 수행될 수 있다. 각 노드는 초기에 상태 A에 나타난 바와 같이 무작위로 분산된 9개의 기록들을 수신할 수 있다. 파티셔닝 동작(102) 동안, 각 노드의 기록들은 기록들을 위한 셔플 키에 기반한 파티셔닝 방식을 적용함으로써 파티션 ID로 레이블링될 수 있다. 파티셔닝 ID는 각 기록에 대한 최종 도착 파티션을 결정할 수 있다. 파티셔닝 방식의 예들은 해시 기반 방식들, 범위 기반 방식들 등을 포함한다. 이 예에서, 기록들은 상태 B에 나타난 바와 같이 셔플 키로서의 색깔(빨강(R), 초록(G), 파랑(B))에 기반하여 3개의 파티션들로 분할될 수 있다.
그룹핑 동작(104) 동안, 각 노드 내의 기록들은 상태 C에 나타난 바와 같이 그룹핑 방식에 기반하여 그들의 도착 파티션들에 따라 그룹핑될 수 있다. 그룹핑 방식들의 예들은 버켓(bucket) 방식들, 정렬 방식들 등을 포함한다. 일부 실시 예들에서, 정렬 기반의 그룹핑 방식은 각 기록의 파티션 ID에 따라 각 기록을 정렬하고, 그리고 동일한 파티션을 향할 수 있는 그룹들로 기록들을 수집한다.
분배 동작(106) 동안, 각 노드로부터의 기록들은 특정 파티션 ID를 갖는 모든 기록들이 동일한 노드(상태 D에 나타난 바와 같이) 또는 다른 도착 지점에 도착할 수 있도록, 파티션 ID에 기반하여 노드들 또는 다른 도착지들로 재분배될 수 있다.
일부 실시 예들에서, 셔플 동작들은 범용 프로세서 및 메모리 구조들을 이용하여 구현하기 어려울 수 있다. 예를 들어, 그룹핑 동작(104)은 데이터 재사용이 거의 없거나 또는 전혀 없는 대형 작업 데이터셋의 데이터 집약적인 무작위 액세스들을 수반할 수 있고, 이는 캐시 기반 메모리 계층 구조의 낮은 활용성을 야기할 수 있다. 또 다른 예에서, 파티셔닝 방식들의 일부 실시 예들에서, 파티셔닝된 결과들은 메모리에 들어가지 않을 수 있고, 저장 장치들로 유출될 수 있다. 이는 파티셔닝 동작 및/또는 이후의 그룹핑 동작 둘 다에서, 프로세싱 리소스들 및 하나 이상의 저장 장치들 사이의 늘어난 네트워크 트래픽을 야기할 수 있다.
셔플 가속
본 개시의 실시 예들에 따른 셔플 가속 방식은, 예를 들어 계산 저장 장치 상의 가속기로 하나 이상의 셔플 작업들을 오프로드(offload)할 수 있다. 구현의 세부 사항들에 따라, 이는 셔플 동작의 출력량 및/또는 효율성을 증가시킬 수 있고, 저장 장치들 및 중앙화된 프로세싱 리소스들 사이의 네트워크 트래픽을 감소시킬 수 있고, 다른 작업들을 위한 프로세싱 및/또는 메모리 리소스들을 해방할 수 있다. 나아가, 본 개시의 실시 예에 따른 셔플 가속기는 셔플 동작들에 적용될 수 있는 프로세스들의 출력량 및/또는 효율성을 더 증가시킬 수 있는 미세 구조(microarchitecture) 및/또는 메모리 계층 구조를 구현할 수 있다.
도 2는 본 개시의 실시 예에 따른 셔플 가속 방식의 예를 나타낸다. 도 2에 나타난 실시 예는 예를 들어, 분산 프로세싱 시스템의 노드를 구현하기 위해 사용될 수 있다. 도 2에 나타난 실시 예는 셔플 가속기(204), 가속기 메모리(206), 저장 장치 컨트롤러(208), 저장 장치 메모리(210), 및 저장 매체(212)를 갖는 저장 장치(202)를 포함할 수 있다. 저장 장치(202)는 통신 링크(216)를 통해 호스트(214)와 연결될 수 있다. 호스트(214)는 프로세싱 유닛(218) 및 호스트 메모리(220)를 포함할 수 있다.
셔플 가속기(204)는 셔플 시스템들, 방법들, 구조들, 기술들, 및/또는 본 명세서에 개시된 유사한 것들 중 어느 하나를 구현할 수 있다. 셔플 가속기(204)는 하드웨어, 소프트웨어, 또는 이들의 조합을 이용하여 구현될 수 있다. 예를 들어, 일부 실시 예들에서, 가속기는 결합 로직, 순차 로직, 하나 이상의 타이머들, 카운터들, 레지스터들, 상태 머신들, DRAM 및/또는 SRAM과 같은 휘발성 메모리들, NAND 메모리를 포함하는 플래시 메모리와 같은 불휘발성 메모리, 크로스-그리드된(cross-gridded) 불휘발성 메모리와 같은 영구 메모리, 대량의(bulk) 저항 변화를 갖는 메모리, 및/또는 이들의 조합, CPLD(complex programmable logic device), FPGA(field programmable gate array), ASIC(application specific integrated circuit), x86 프로세서들과 같은 CISC(complex instruction set computer) 프로세서들 및/또는 ARM 프로세서들과 같은 RISC(reduced instruction set computer) 프로세서들 등과 같은 CPU들, 임의의 유형의 메모리에 저장된 실행 명령들, GPU(graphic processing unit), NPU(neural processing unit), TPU(tensor processing unit) 등을 이용하여 구현될 수 있다.
가속기 메모리(206) 또는 그 일부는, 메모리 계층의 제 1 레벨의 적어도 일부를 구현할 수 있다. 가속기 메모리(206)는 DRAM, SRAM, 플래시 메모리, 영구 메모리 등을 이용하여 구현될 수 있다. 일부 실시 예들에서, 가속기 메모리(206)는 셔플 가속기(204)와 적어도 부분적으로 통합될 수 있다.
저장 장치(202)는 예를 들어, 자기 저장 매체를 포함할 수 있는 하드 디스크 드라이브(HDD), NAND 플래시 메모리와 같은 솔리드 스테이트 저장 매체를 포함할 수 있는 솔리드 스테이트 드라이브(SSD), 광학 저장 장치, 크로스-그리드된 불휘발성 메모리와 같은 임의의 유형의 영구 메모리, 대량의 저항 변화를 갖는 메모리 및/또는 이들의 조합과 같은 임의의 유형의 저장 매체(212)를 사용할 수 있는 임의의 유형의 저장 장치를 이용하여 구현될 수 있다. 일부 실시 예들에서, 저장 장치(202)는 예를 들어, 하나 이상의 서버 샤시(chassis), 서버 랙(rack)들, 서버 랙들의 그룹들, 서버 클러스터들, 데이터룸들, 데이터 센터들, 엣지 데이터 센터들, 모바일 엣지 데이터 센터들, 및/또는 이들의 조합에 구성된 하나 이상의 서버들 상에서 사용될 수 있다.
저장 장치 컨트롤러(208)는 셔플 가속기(204)에 관해 상술한 하드웨어, 소프트웨어, 또는 이들의 조합을 이용하여 구현될 수 있다. 저장 장치(202)가 SSD로서 구현되는 일부 실시 예들에서, 저장 장치 컨트롤러(208)는 플래시 변환 레이어(flash translation layer; FTL)을 포함할 수 있거나, 또는 FTL에 포함될 수 있다.
저장 장치 메모리(210) 또는 그 일부는, 메모리 계층의 제 2 레벨의 적어도 일부를 구현할 수 있다. 저장 장치 메모리(210)는 DRAM, SRAM, 플래시 메모리, 영구 메모리 등을 이용하여 구현될 수 있다. 일부 실시 예들에서, 저장 장치 메모리(210)는 저장 장치 컨트롤러(208)와 적어도 부분적으로 통합될 수 있다.
호스트(214)는 하나 이상의 CPU, GPU, NPU, TPU 등과 같은 임의의 유형의 프로세싱 유닛(218), 그리고 DRAM, SRAM, 플래시 메모리, 영구 메모리 등과 같은 임의의 유형의 메모리(220)를 이용하여 구현될 수 있다.
통신 링크(216)는 임의의 유형의 네트워크 리소스들, 인터커넥트 리소스들 등을 이용하여 구현될 수 있다. 네트워크 및/또는 인터커넥트 리소스들의 예들은, TCP/IP, RoCE(RDMA(Remote Direct Memory Access) over Converged Ethernet) 등과 같은 임의의 유형의 네트워크 프로토콜들을 사용하는 이더넷, 파이버 채널(Fibre Channel), 인피니밴드(InfiniBand) 등과 같은 임의의 유형의 네트워크 패브릭, 그리고 PCIe, SATA, SCSI(Small Computer Systems Interface), SAS(Serial Attached SCSI), NVMe(Non-Volatile Memory Express), NVMe-oF(NVMe-over-fabric) 등과 같은 임의의 유형의 인터커넥트 및/또는 저장 인터페이스들, 및/또는 프로토콜들을 포함할 수 있다.
일부 실시 예들에서, 저장 장치(202)의 임의의 구성 요소들은 DDR(double data rata) 인터페이스, OMI(Open Memory Interface), PCIe, CXL(Compute Express Link), AXI(Advanced eXtensible Interface), OpenCAPI(Open Coherent Accelerator Processor Interface), Gen-Z 등을 포함하는 임의의 유형의 인터커넥트, 인터페이스, 프로토콜 등을 이용하여 연결될 수 있다.
가속기 구조
도 3은 본 개시의 실시 예에 따른 셔플 가속기 구조의 예를 나타낸다. 도 3에 나타난 셔플 가속기(304)는 예를 들어, 도 2에 나타난 셔플 가속기(204) 및/또는 도 1에 나타난 노드들(예를 들어, 제 1 노드, 제 2 노드, 또는 제 3 노드) 중 하나에 대한 셔플 동작을 구현하기 위해 사용될 수 있다.
일부 실시 예들에서, 도 3에 나타난 셔플 가속기(304)는 입력 데이터의 배치들에 대해 셔플 동작들을 수행할 수 있다. 배치 셔플들의 결과들은 더 높은 그래뉼래러티를 갖는 출력을 제공하기 위해 병합될 수 있다. 셔플 가속기(304)는 읽기 장치(322), 파티셔닝 장치(324), 그룹핑 장치(326), 쓰기 장치(328), 병합 장치(330), 및 컨트롤러(332)를 포함할 수 있다.
읽기 장치(322)는 입력 데이터 기록들을 프리페치(prefetch)할 수 있고, 메모리 계층의 제 1 레벨의 일부일 수 있는 스크래치패드 메모리(306)에 저장할 수 있다. 읽기 장치(322)는 스크래치패드 메모리(306)를 버퍼로서 관리하여, 파티셔닝 장치(324)로 키들의 스트리밍 메모리 액세스를 제공할 수 있고, 그룹핑 장치(326)로 기록들의 무작위 액세스를 제공할 수 있다.
일부 실시 예들에서, 셔플링될 입력 데이터는 행들과 열들로 이루어진 테이블 형태일 수 있다. 일부 실시 예들에서, 행은 기록을 포함할 수 있고, 기록의 하나의 열은 기록에 대한 키를 포함할 수 있다. 파티셔닝 장치(324)는 읽기 장치(322)로부터 키들의 스트림(336)을 수신할 수 있고, 기록들이 파티션 ID와 행 ID의 튜플(tuple)들 (Pid, RowID)로서 표현되고, 예를 들어 파티션 ID에 의해 정렬될 수 있는 정렬 테이블을 생성하기 위해, 키들에 의해 기록들을 파티셔닝할 수 있는 파티셔닝 방식을 적용할 수 있다.
그룹핑 장치(326)는 파티셔닝 장치(324)로부터 정렬된 튜플들(338)의 스트림을 수신함으로써 그룹핑 동작을 수행할 수 있고, 스크래치패드 메모리(306)의 무작위 액세스들을 통해 읽기 장치(322)로부터 대응하는 기록들(예를 들어, 행들)(340)의 수집을 수행할 수 있다.
쓰기 장치(328)는 그룹핑 장치(326)로부터 기록들의 셔플링된 배치들의 스트림(342)을 수신할 수 있고, 버퍼링할 수 있다. 쓰기 장치(328)는 예를 들어, 메모리 계층의 제 2 레벨의 일부일 수 있는 외부 메모리로 기록들을 쓸 수 있다. 쓰기 장치(328)는 배치의 각 파티션에 속하는 출력 데이터의 일부들을 식별하기 위한 인덱스들을 생성할 수 있는 인덱싱 장치(344)를 포함할 수 있다.
병합 장치(330)는 인덱싱 장치(344)에 의해 생성된 인덱스들에 기반하여 쓰기 장치(328)로부터 블록들로 셔플링된 출력 데이터의 배치들(346)을 병합할 수 있다. 일부 실시 예들에서, 병합 장치(330)는 일부 또는 모든 기록들(예를 들어, 행들)이 파티션 ID에 의해 배열될 수 있도록 데이터를 배열할 수 있다.
컨트롤러(332)는 예를 들어, 배치화된(batched) 셔플 방식을 구현하기 위해 임의 또는 모든 개별 구성 요소들을 포함하는 셔플 가속기(304)의 전체 동작을 제어할 수 있다.
파티셔닝
도 4는 본 개시의 실시 예에 따른 파티셔닝 방식의 예를 나타낸다. 비록 도 4에 나타난 실시 예가, 예를 들어, 본 명세서에 개시된 셔플 가속 방법들, 장치들 등과 함께 사용될 수 있지만, 본 명세서에 개시된 셔플 가속 방법들, 장치들 등은 임의의 다른 파티셔닝 방법과 함께 사용될 수도 있다.
도 4에 나타난 실시 예는 비트 bi가 셔플 키의 i번째 비트일 수 있고, hj가 출력의 j번째 비트일 수 있는 비트들의 레이어들을 갖는 폴딩 해시(folding hash)에 기반할 수 있다. 그러나, 도 4에 나타난 실시 예는 대안적인 폴드들 상에서 셔플 키의 비트들을 반전시키는 추가적인 기술을 통합할 수 있다. 그러므로, 이는 지그재그 폴드(zigzag-fold) 해시로서 설명될 것이다. 일부 실시 예들에서, 그리고 구현의 세부 사항들에 따라, 각 레이어의 비트들을 반전시키는 것은 해시 함수의 견고성 및/또는 균일성을 향상시킬 수 있다.
그룹핑
본 명세서에 개시된 셔플 가속 방법들, 장치들 등은 임의의 특정 그룹핑 방식과 함께 사용되는 것으로 제한되는 것은 아니다. 그러나, 일부 실시 예들에서, 정렬 기반의 그룹핑은 셔플 가속 구조와 잘 통합될 수 있다. 정렬 기반 그룹핑 방식은 기록들을(잠재적으로 제 자리에) 파티셔닝 프로세스에 의해 할당될 수 있는 파티션 레이블(예를 들어, 파티션 ID)에 의해 정렬할 수 있다.
일부 실시 예들에서, 기록들을 직접적으로 정렬하는 대신, 셔플 가속기는 기록들에 대한 포인터들을 정렬할 수 있다. 예를 들어, 정렬 프로세스는 파티션 ID 및 대응하는 기록에 대한 포인터의 튜플들을 포함하는 정렬 테이블을 생성할 수 있다. 정렬 테이블은 파티션 ID에 의해 정렬될 수 있고, 그 후 그룹핑 동작은 정렬된 포인터들을 이용하여 수집 동작을 수행할 수 있다. 일부 실시 예들에서, 그리고 구현의 세부 사항들에 따라, 이는 기록 당 데이터 복사 동작들의 복잡도를 O(logN)에서 O(1)로 감소시킬 수 있다. 그러므로, 일부 실시 예들에서, 그룹핑 동작은 수집 프로세스와 결합된 정렬 프로세스로서 구현될 수 있다.
미세 구조
도 5는 본 개시의 실시 예에 따른 셔플 가속기 미세 구조의 예를 나타낸다. 도 5에 나타난 셔플 가속기(504)는 예를 들어, 도 2에 나타난 셔플 가속기(204), 도 3에 나타난 셔플 가속기(304), 도 1에 나타난 노드들 중 하나에 대한 셔플 동작 등을 포함하는 본 명세서에 개시된 셔플 가속 장치들 및/또는 방법들 중 어느 하나를 구현하기 위해 사용될 수 있다. 도 5에 나타난 실시 예는 특정 정렬 방식, 정렬 테이블, 파티셔닝 방식, 인터커넥트들 및 관련된 인터페이스들과 같은 일부 구현 사항들의 예의 맥락에서 설명될 수 있으나, 원리들은 다른 구현 세부 사항들을 갖는 다른 실시 예들에 대해 적용될 수 있다.
도 5에 나타난 셔플 가속기(504)는 읽기 장치(522), 파티셔닝 장치(524), 그룹핑 장치(526), 쓰기 장치(528), 병합 장치(530), 및 이 예에서는 유한 상태 머신(finite state machine; FSM)을 이용하여 구현될 수 있는 컨트롤러(532)를 포함할 수 있다. 병합 장치의 실시 예는 도 6에서 더 상세히 설명된다.
도 5를 참조하면, 읽기 장치(522)는 인터커넥트(548)을 통해, 예를 들어, 배치들의 형태로 입력 데이터를 페치할 수 있다. 입력 데이터는 스크래치패드 메모리(506)에 저장될 수 있다. 일부 실시 예들에서, 입력 데이터는 각 기록이 다수의 열들을 갖는 데이터의 행을 포함하는 테이블 기록들의 형태일 수 있다. 열들 중 하나는 키 K를 포함할 수 있고, 다른 열들은 예를 들어 값들 V1, V2, V3, …과 같은 다른 데이터를 포함할 수 있다. 읽기 장치(522)는 스트리밍 인터커넥트(552)를 통해 파티셔닝 장치(524)로 출력 키들의 스트림(536)을 제공할 수 있는 버퍼로서 스크래치패드 메모리(506)를 관리할 수 있고, 또한 무작위 액세스 데이터 경로(554)를 통해 그룹핑 장치(526)로 데이터의 빠르고 및/또는 효율적인 무작위 액세스를 제공할 수도 있다.
일부 실시 예들에서, 스크래치패드 메모리(506)는 메모리 계층의 제 1 레벨의 일부일 수 있다. 예를 들어, 가속기(504)가 도 2에 나타난 바와 같이 계산 저장 장치의 FPGA를 이용하여 구현된 실시 예에서, 스크래치패드 메모리(506)는 FPGA(204)의 내부 SRAM을 이용하여 구현될 수 있고, 가속기 메모리(206)(FPGA 내부 또는 외부의 DRAM일 수 있는)는 메모리 계층의 제 2 레벨의 일부일 수 있다. 대안적으로 또는 추가적으로, 저장 장치 메모리(210)(예를 들어, DRAM)는 메모리 계층의 제 2 레벨의 일부일 수 있다.
일부 실시 예들에서, 읽기 장치(522)는 파티셔닝 장치(524)에서의 파티셔닝 및 정렬 동작들이 스크래치패드 메모리(506)에 대한 데이터 페칭과 겹칠 수 있는 서브 작업 병렬 처리를 지원할 수 있다. 예를 들어, 읽기 장치(522)는 인터커넥트(548)를 통해 외부 메모리로부터 하나 이상의 키 열들을 먼저 페치할 수 있고, 스트리밍 인터커넥트(552)를 통해 파티셔닝 장치(524)로 하나 이상의 키들을 스트리밍하여, 읽기 장치(522)가 외부 메모리의 테이블로부터 하나 이상의 기록들(예를 들어, 행들)의 다른 열들을 페치하는 동안, 파티셔닝 장치(524)는 하나 이상의 키들에 대한 파티셔닝 및/또는 정렬 동작들을 수행할 수 있다.
읽기 장치(522)는 또한 일부 실시 예들에서 그룹핑 장치(526)와 함께 부분 작업 및/또는 데이터 병렬 처리를 지원할 수 있다. 예를 들어, 읽기 장치(522)는 외부 테이블로부터 입력 데이터의 새로운 배치를 페치하는 동안, 입력 데이터의 이전 배치로부터 버퍼링된 기록들의 무작위 액세스를 그룹핑 장치(526)로 제공할 수 있는 핑-퐁(ping-pong) 스타일 스크래치패드 버퍼를 포함할 수 있다.
일부 실시 예들에서, 읽기 장치(522)는 외부 메모리(예를 들어, 제 2 레벨 메모리)로부터 들어오는 데이터 트래픽과 일치하는 대역폭, 셔플 구현의 그룹핑 동작에서 데이터 수준의 병렬 처리를 위한 데이터의 유연한 랜덤 액세스, 서로 다른 열 종류들의 프로그래밍 가능성을 유지함과 동시에 스크래치패드 메모리의 용량의 효과적인 사용, 서브 작업 수준 병렬 처리를 위해 파티셔닝 프로세스와 키가 아닌(non-key) 데이터의 스크래치패드 관리를 겹치는 것과 같은 기술적 특징들 및/또는 장점들을 제공할 수 있다.
일부 실시 예들에서, 스크래치패드 메모리(506)가 셔플 그룹핑을 위해 그룹핑 장치(526)로의 넓은 무작위 액세스를 제공함과 동시에 파티셔닝 장치(524)로 고속 스트리밍 액세스를 제공하도록 활성화시키기 위해, 읽기 장치(522)는 전체 기록(OLAP 애플리케이션에서는, 전체 행)이 스크래치패드 메모리의 한 사이클(예를 들어, FPGA의 SRAM 클록) 동안 스크래치패드 메모리(506)로부터 읽힐 수 있는 레이아웃 및/또는 정렬을 포함할 수 있다. 일부 실시 예들에서, 기록 레이아웃은 다수의 메모리 뱅크들에 걸쳐 있을 수 있다.
파티셔닝 장치(524)는 스크래치패드 메모리(506)로부터 수신된 키들 K를 저장하기 위한 키 버퍼(556)와, 각 기록에 대한 파티션 ID를 생성하기 위한 해시 로직(558)과, 정렬된 기록들의 테이블을 저장하기 위한 정렬 장치(560) 및 정렬 테이블 버퍼(562)를 포함할 수 있다.
파티셔닝 장치(524)는 각 기록으로 해시 로직(558)에 의해 생성된 파티션 ID(Pid)를 할당함으로써 해시 기반의 파티셔닝 방식을 구현할 수 있다. 예를 들어, 파티셔닝 장치(524)는 각 기록에 대해 파티션 ID 및 기록 ID(예를 들어, 행 ID)를 포함하는 튜플을 생성할 수 있다. 정렬 장치(560)는 그 후 정렬 테이블 버퍼(562)에 저장될 수 있는 정렬 테이블을 생성하기 위해 튜플들을 정렬할 수 있다.
일부 실시 예들에서, 정렬 장치(560)는 효율적인 정렬 프로세스를 제공할 수 있는 병합 정렬 방식을 구현할 수 있으나, 다른 정렬 방식들도 사용될 수 있다. 일부 실시 예들에서, 해시 로직(558)은 통계적으로 균일하고 및/또는 효율적인 파티셔닝을 제공할 수 있는, 도 4에 나타난 지그재그 폴드 해시를 구현할 수 있으나, 다른 해시 함수들도 사용될 수 있다. 비록 파티셔닝 장치(524)는 해시 기반의 파티셔닝 방식을 구현하는 것으로 나타나 있으나, 범위 기반 파티셔닝과 같은 다른 파티셔닝 방식들도 사용될 수 있다. 예를 들어, 일부 실시 예들에서, 파티셔닝 장치(524)는 부분 작업 수준의 병렬 처리를 여전히 제공하면서도 서로 다른 파티셔닝 방식들 사이에서 프로그램적으로 전환할 수 있도록 하는 유연한 미세 구조를 이용하여 구현될 수 있다. 일부 실시 예들에서, 파티셔닝 장치(524)는 정렬 및 파티션 부분 작업 파이프라인에서 부분 작업 병렬 처리를 지원하기 위해 핑-퐁 스타일 버퍼를 포함할 수 있다.
일부 실시 예들에서, 기록들을 직접적으로 정렬하는 대신, 정렬 장치(560)는 상술한 바와 같이 기록들에 대한 포인터들을 정렬할 수 있다. 예를 들어, 정렬 장치(560)는 대응하는 기록(예를 들어, 기록 ID(예를 들어, 행 ID)에 기반할 수 있는)에 대한 파티션 ID(P) 및 포인터(Ptr)을 각각 포함하는 튜플들을 포함하는 정렬 테이블 버퍼(562)에 나타난 바와 같이 정렬 테이블(561)을 생성할 수 있다. 정렬 테이블(561)은 파티션 ID에 의해 정렬될 수 있고, 또 다른 스트리밍 인터커넥트(564)를 통해 그룹핑 장치(526)로 스트리밍될 수 있다. 그러므로, 일부 실시 예들에서, 실제 기록들 대신 오직 기록들의 키들만이 파티셔닝 장치(524)로 스트리밍될 수 있다.
그룹핑 장치(526)는 정렬 테이블(561)로부터 정렬된 튜플들의 스트림(538)을 읽어들이고, 스크래치패드 메모리(506)로부터 무작위 액세스 데이터 경로(554)를 통해 포인터들에 대응하는 기록들(540)을 수집함으로써 정렬 기반 그룹핑 방식을 구현할 수 있다. 그룹핑 장치(526)에 의해 읽히는 기록들(540)은 이미 파티션 ID(P)에 의해 그룹핑되었을 수 있는데, 정렬 장치(560)에 의해 포인터(Ptr)들이 파티션 ID에 따라 그룹핑될 수 있기 때문이다. 그룹핑 장치(526)는 그 후 하나 이상의 FIFO(first-in, first-out) 버퍼들(570)에 그룹핑된 기록들을 저장할 수 있다.
일부 실시 예들에서, 스크래치패드 메모리(506)는 상대적으로 넓은 데이터 경로(554)를 구현하여, 그룹핑 장치(526)가 그룹핑 동작을 정렬 및 수집 방식으로서 구현할 수 있도록 할 수 있는 빠르고 및/또는 효율적인 랜덤 액세스를 제공할 수 있다.
쓰기 장치(528)는 또 다른 스트리밍 인터커넥트(574)를 통해 그룹핑된 기록들의 스트림들(542)을 수신할 수 있고, 출력 FIFO 버퍼(576)에 기록들을 저장할 수 있다. 쓰기 장치(528)는 파티션-중심(partition-major) 인덱스들(예를 들어, 서로 다른 파티션들의 데이터의 경계들을 상의 인덱스 마크들)의 스트림을 생성할 수 있는 인덱싱 장치(544)를 포함할 수 있다. 쓰기 장치(528)는 동일한 파티션에 속하는 데이터의 셔플링된 배치 각각의 공통되는(contiguous) 영역들을 식별할 수 있다. 일부 실시 예들에서, 기록들(예를 들어, 행들)이 이미 파티션 ID에 의해 정렬되었을 수 있기 때문에, 각 파티션에 대해 공통되는 영역을 식별하는 것은 오직 얼마나 많은 기록들이 동일한 파티션 ID를 갖고 있는지 판단하는 것만을 수반할 수 있다. 쓰기 장치(528)는 인덱스들 및 대응하는 데이터 기록들을 각각 인덱스 인터커넥트(578) 및 데이터 출력 인터커넥트(580)를 통해 병합 장치(530)로 전송할 수 있다.
일부 실시 예들에서, 쓰기 장치(528)는 이하에서 나열되는 기술적 특징들을 구현할 수 있거나, 및/또는 장점들을 제공할 수 있다. 쓰기 장치(528)는 쓰기 버퍼(576) 및/또는 인덱싱 장치(544)를 관리하여 배치들 상의 셔플 데이터를 처리할 수 있다. 쓰기 장치(528)는 스크래치패드 메모리(506)로부터 행-중심(row-major) 입력을 수신하여 데이터 수준의 병렬 처리를 활용할 수 있다. 쓰기 장치(528)는 데이터의 다수의 좁은(narrow) 기록들(예를 들어, 행들)을 폴딩하여 외부 메모리 인터페이스의 폭에 맞도록 할 수 있는데, 이는 외부 쓰기 효율성을 증가시킬 수 있다. 쓰기 장치(528)는 병합 장치(530)의 어드레스 생성 및/또는 페칭 프로세스들을 쉽게 하기 위해 파티션-중심 인덱스들을 생성할 수 있다. 쓰기 장치(528)는 병합 장치(530)의 읽기 성능을 증가시킬 수 있는 행-중심 중간 출력 형식(row-major intermediate output format)의 데이터를 생성할 수 있다.
유한 상태 머신(532)은 예를 들어, 배치화된 셔플 방식을 구현하기 위해 셔플 가속기(504)(그 일부 또는 모든 개별 구성 요소들을 포함)의 전체 동작을 제어할 수 있다. 인터커넥트들(548, 552, 564, 574, 578, 580)은 PCIe, CXL, AXI 등을 포함하는 인터커넥트들, 인퍼에시드르, 프로콜들을 이용하여 구현될 수 있다. 일부 실시 예들에서, 키들 및 파티션 ID만이 아닌, 실제 기록들이 파티셔닝 장치(524) 그리고 그룹핑 장치(526)로 스트리밍될 수 있다.
도 6은 본 개시의 실시 예에 따른 병합 장치의 미세 구조의 예를 나타낸다. 도 6에 나타난 병합 장치(630)는 쓰기 장치(528)로부터 인덱스들 및 대응하는 데이터를 각각 인덱스 인터커넥트(678) 및 데이터 인터커넥트(680)를 통해 수신할 수 있다. 수신된 데이터는 버퍼(684)에 저장될 수 있다. 병합 장치(630)는 예를 들어, 버퍼들(686) 상의 배치들에 걸쳐 동일한 최종 파티션을 향하는 기록들(예를 들어, 행들)을 그룹핑하기 위해 셔플링된 데이터의 배치들을 병합할 수 있다. 일부 실시 예들에서, 병합 장치(630)는 모든 파티션 ID들에 걸쳐 반복하는 병합 동작을 구현할 수 있고, 동일한 파티션으로 향하는 각 배치의 기록들을 그룹핑할 수 있다. 병합 장치(630)은 인덱스 인터커넥트(678)로부터 인덱스들의 스트림을 수신할 수 있고, 각 배치의 특정 파티션들의 경계들을 가리키는 어드레스들을 생성할 수 있는 어드레스 생성 로직(682)를 포함할 수 있다. 병합 장치(630)는 예를 들어, 인터커넥트(688)를 통해, 외부 메모리 또는 다른 도착지로 셔플링된 데이터의 병합된 배치들을 기록할 수 있다.
일부 실시 예들에서, 병합 장치(630)는 이하에서 나열되는 기술적 특징들을 구현할 수 있거나, 및/또는 장점들을 제공할 수 있다. 병합 장치(630)는 각 열 출력 및 외부 데이터 경로 사이의 버퍼링 및/또는 데이터 폭 매칭을 제공할 수 있다. 병합 장치(630)는 셔플 방식의 분배 부분을 구현할 수 있는 구성 요소들과의 통합을 쉽게 할 수 있는 열 출력 형식을 노출할 수 있다. 예를 들어, 쓰기 장치(528)로부터의 출력을 열 출력 형식으로 변환하는 것은 예를 들어, 통신 링크들과 함께 사용하기 위해, 후속적인 열 압축 기술들을 가능하게 할 수 있는데, 이들 중 일부는 더 높은 압축률을 가질 수 있다. 구현의 세부 사항들에 따라, 이는 성능을 증가시키거나, 및/또는 에너지 소비를 감소시킬 수 있다.
메모리 계층 구조를 위한 레벨화된 셔플링
일부 실시 예들에서, 셔플 시스템들, 방법들, 및/또는 장치들은 데이터 집약적인 셔플 작업 부하(workload)들을 위해 조정되거나 또는 최적화될 수 있다. 예를 들어, 셔플 방식은 배치의 크기가 가속기의 내부 메모리 리소스들에 의해 제한될 수 있는 배치들 상에서 구현될 수 있다. 내부 메모리(예를 들어, 스크래치패드 메모리)는 셔플 방식의 그룹핑 부분의 수집 프로세스를 위한 빠르고 및/또는 효율적인 무작위 액세스를 제공할 수 있는 메모리 계층의 제 1 레벨을 형성할 수 있다. 그 후 배치 셔플 결과들은 부분들을 그룹핑함으로써, 예를 들어, 메모리 계층의 제 2 레벨을 형성할 수 있는 외부 메모리의 컨텐츠들을 조절함으로써 병합될 수 있다. 제 2 레벨에서의 데이터 이동은 더 큰 그래뉼래러티를 가질 수 있는(예를 들어, 병합 동작의 구체적인 사항에 의해 제공될 수 있는) 블록들의 형태로 이루어질 수 있고, 따라서 제 2 레벨(예를 들어, 외부) 메모리의 전체 대역폭을 활용할 수 있다.
일부 실시 예들에서, 구현의 세부 사항들 및/또는 작업 부하 요구량에 따라, 데이터의 블록들을 조정함으로써 배치 셔플 동작의 결과들이, 예를 들어 자장 장치 상에 외부적으로 병합될 수 있는 메모리 계층의 제 3 레벨이 구현될 수 있다. 일부 실시 예들에서, 셔플 가속기는 예를 들어, 가상 병합(virtual merging)을 달성하기 위한 배치 셔플 데이터의 맵핑을 재구성하기 위해 SSD의 플래시 변환 레이어(FTL)와 함께 인터페이스 및/또는 통합할 수 있다.
스크래치패드 메모리
일부 실시 예들에서, 상술한 바와 같이, 그룹핑 동작은 수집 프로세스를 수반할 수 있다. 일부 실시 예들에서, 각 기록(예를 들어, 테이블의 행)은 그룹핑 동작 동안 한 번만 수집될 수 있고, 그러므로 수집 프로세스 동안 시간적 지역성(temporal locality)이 거의 또는 전혀 없을 수 있다. 나아가, 수집 프로세스는 더 큰 작업 데이터셋의 다수의 무작위 액세스들을 수반할 수 있고, 그러므로 공간적 지역성(spatial locality)이 거의 또는 전혀 없을 수 있다. 그러므로, 셔플 방식의 그룹핑 부분을 위해 캐시 구조를 사용하는 것은 더 많은 데이터를 페칭하는 것(예를 들어, 캐시 라인 크기에 기반하여)과 관련된 지연 및/또는 에너지 오버헤드를 야기할 수 있고, 및/또는 내부 메모리 리소스들을 낭비할 수 있다.
본 개시의 실시 예들에 따른 셔플 시스템들, 방법들, 및/또는 장치들의 일부 실시 예들에서, 스크래치패드 메모리는 효율적인 스트리밍 및/또는 레벨화된 셔플 프로세스의 제 1 레벨로서 배치 셔플링을 지원할 수 있는 무작위 액세스를 제공할 수 있다. 일부 실시 예들에서, 스크래치패드 메모리는 플랫 메모리로서 구현될 수 있다. 일부 실시 예들에서, 플랫 메모리는 데이터 상에 지역성이 거의 또는 전혀 없을 수 있기 때문에, 지역성 활용을 위한 태그 어레이들 없이 구현될 수 있다.
병렬 처리
본 개시의 실시 예들에 따른 셔플 시스템들, 방법들, 및/또는 장치들의 일부 실시 예들에서, 하나 이상의 유형의 병렬 처리가 활용될 수 있다. 예를 들어, 일부 실시 예들에서, 셔플 그룹핑 부분 작업은 정렬된 포인터들을 사용하여 기록될 수 있는 전체 기록들을 전송함으로써 데이터 수준의 병렬 처리를 구현할 수 있다. 일부 실시 예들에서, 스크래치패드 메모리는 데이터 수준의 병렬 처리를 활용하기 위한 무작위 액세스들을 수용할 수 있는 상대적으로 넓은 데이터 경로를 특징으로 할 수 있다.
또한 부분 작업 수준 병렬 처리는 예를 들어, 읽기 장치의 데이터 프리페칭과, 파티셔닝 장치의 파티셔닝 및/또는 포인터 정렬 프로세스들을 겹침으로써 활용될 수도 있다. 일부 실시 예들에서, 이러한 병렬 처리는 키들의 프리페칭에 우선순위를 부여하고, 동시에 파티셔닝 장치로 키들을 스트리밍함으로써 활용될 수 있다. 키들이 페칭되고 나면, 기록의 다른 값들의 프리페칭은 파티셔닝 장치에서의 키들의 파티셔닝 및 포인터 정렬과 함께 겹쳐질 수 있다.
또한 작업 수준 병렬 처리는 예를 들어, 더 높은 출력량을 달성하기 위해 다수의 셔플 가속기들을 병렬로 활용함으로써 셔플링될 데이터 배치들에 걸쳐 활용될 수 있다. 일부 실시 예들에서, 부분 작업들은 멀티-쓰레딩(multi-threading)을 통해 파이프라인화될 수 있다.
외부 메모리 대역폭이 가속기들의 확장에 제한을 부여할 수 있는 구현들에서, 본 개시의 실시 예들에 따른 셔플 가속기 구조 및/또는 미세 구조는 현재 배치의 그룹핑 동작 및 이전 배치의 파티셔닝 동작을 겹치도록 할 수 있다. 일부 실시 예들에서, 그리고 구현의 세부 사항들에 따라, 이는 외부 메모리의 지연을 숨길 수 있고, 대신 부분 작업 수준 병렬 처리를 활용할 수 있다.
셔플 작업들의 적응적 실행
일부 실시 예들에서, 작은 셔플 작업들(예를 들어, 셔플링될 전체 데이터 크기의 관점에서)은 감소된 성능을 야기할 수 있다. 예를 들어, 셔플 가속기 상의 셔플 배치를 시작하는 것은 다수의 작은 배치들과 함께 증폭될 수 있는 동기화 오버헤드(synchronization overhead)를 암시할 수 있다. 또한, 작은 셔플 작업들은 각 열 및/또는 각 도착 파티션에 대한 작은 출력 블록들을 발생시킬 수 있다. 이는 배치 병합 과정 동안 최적화되지 않은 메모리 액세스 패턴을 야기할 수 있다.
그러므로, 일부 실시 예들에서, 셔플 작업들은 실행을 위해 적응적으로 그룹핑될 수 있다. 예를 들어, 셔플 작업의 시작은, 셔플링될 데이터의 양이 임계 수치 이하인 경우 유한 상태 머신에 의해 지연될 수 있다. 둘 이상의 셔플 작업들은 그 후 함께 그룹핑될 수 있고, 이는 셔플 가속기 성능을 안정적으로 만들 수 있다.
도 7은 본 개시의 실시 예에 따른 데이터 셔플링 방법의 예를 나타낸다. 방법은 동작 702에서 시작할 수 있다. 동작 704에서, 방법은 셔플링된 데이터의 제 1 배치를 생성하기 위해 메모리 계층의 제 1 레벨 상의 제 1 메모리를 사용하여 데이터의 제 1 배치를 셔플링할 수 있다. 동작 706에서, 방법은 셔플링된 데이터의 제 2 배치를 생성하기 위해 제 1 메모리를 사용하여 데이터의 제 2 배치를 셔플링할 수 있다. 동작 708에서, 방법은 셔플링된 데이터의 제 1 배치 및 셔플링된 데이터의 제 2 배치를 메모리 계층의 제 2 레벨 상의 제 2 메모리에 저장할 수 있다. 방법은 동작 710에서 종료할 수 있다.
도 7에 나타난 실시 예뿐만 아니라 본 명세서에 설명된 모든 다른 실시 예들은 동작들 및/또는 구성 요소들의 예이다. 일부 실시 예들에서, 일부 동작들 및/또는 구성 요소들은 생략될 수 있거나, 및/또는 다른 동작들 및/또는 구성 요소들이 포함될 수 있다. 나아가, 일부 실시 예들에서, 동작들 및/또는 구성 요소들의 시간적 및/또는 공간적 순서는 달라질 수 있다. 비록 일부 구성 요소들 및/또는 동작들이 개별적인 구성 요소들로서 도시되었어도, 일부 실시 예들에서, 개별적으로 나타난 일부 구성 요소들 및/또는 동작들은 단일의 구성 요소들 및/또는 동작들로 통합될 수 있고, 단일의 구성 요소들로 나타난 일부 구성 요소들 및/또는 동작들은 다수의 구성 요소들 및/또는 동작들을 이용하여 구현될 수 있다.
상술한 실시 예들은 다양한 구현의 세부 사항들의 맥락에서 설명되었으나, 본 개시의 원리들은 이러한 또는 다른 세부 사항들에 제한되지 않는다. 예를 들어, 일부 기능은 특정 구성 요소들에 의해 구현되는 것으로 설명되었으나, 다른 실시 예들에서, 그 기능은 서로 다른 위치들에 존재하고 다양한 사용자 인터페이스들을 갖는 서로 다른 시스템들 및 구성 요소들 사이에 분배될 수 있다. 특정 실시 예들은 특정 프로세스들, 동작들 등을 갖는 것으로 설명되었으나, 이러한 용어들은 또한 특정 프로세스, 동작 등이 다수의 프로세스들, 동작들 등을 이용하여 구현될 수 있거나, 다수의 프로세스들, 동작들 등이 단일의 프로세스, 단계 등으로 통합될 수 있는 실시 예들을 포함할 수 있다. 구성 요소 또는 요소에 대한 참조는 해당 구성 요소 또는 요소의 오직 일부를 지칭할 수 있고, 블록에 대한 참조는 전체 블록 또는 하나 이상의 서브블록들을 지칭할 수 있다. 본 개시 및 청구 범위에서 “제 1”및 “제 2”와 같은 용어들의 사용은 그들이 변형하는 것들을 구별하기 위한 목적일 뿐이며, 내용으로부터 명확하지 않은 이상 그 어떤 공간적 또는 시간적 순서도 나타내지 않을 수 있다. 일부 실시 예들에서, 특정 사항에 대한 참조는 그 특정 사항의 적어도 일부를 지칭할 수 있다. 예를 들어, “에 기반하여”는 “~에 적어도 부분적으로 기반하여”를 나타낼 수 있고, “~에 액세스하다”는 “~에 적어도 부분적으로 액세스하다”를 나타낼 수 있는 등이다. 첫 번째 요소로의 참조는 두 번째 요소의 존재를 암시하지 않을 수 있다. 섹션의 제목과 같이 다양한 구조적 보조 요소들 등은 편의를 위해 제공될 수 있으나, 이러한 보조 요소들에 따라 배열되는 주제 및 본 개시의 원리들은 이러한 구조적인 보조 요소들에 제한되지 않는다.
상술한 다양한 세부 사항들 및 실시 예들은 본 개시의 원리들에 따라 추가적인 실시 예들을 생성하기 위해 결합될 수 있다. 본 개시의 원리들은 발명의 개념을 벗어나지 않는 범위 내에서 배열 및 세부 사항이 변화할 수 있으므로, 이러한 변화들 및 변경들은 다음 청구 범위에 속하는 것으로 간주된다.

Claims (10)

  1. 데이터를 셔플링(shuffling)하는 방법에 있어서,
    셔플링된 데이터의 제 1 배치를 생성하기 위해 메모리 계층의 제 1 레벨 상의 제 1 메모리를 이용하여 데이터의 제 1 배치를 셔플링하는 단계;
    셔플링된 데이터의 제 2 배치를 생성하기 위해 상기 제 1 메모리를 이용하여 데이터의 제 2 배치를 셔플링하는 단계; 및
    셔플링된 데이터의 상기 제 1 배치 및 셔플링된 데이터의 상기 제 2 배치를 상기 메모리 계층의 제 2 레벨 상의 제 2 메모리에 저장하는 단계를 포함하는 방법.
  2. 제 1 항에 있어서,
    셔플링된 데이터의 상기 제 1 배치 및 셔플링된 데이터의 상기 제 2 배치를 병합하는 단계를 더 포함하는 방법.
  3. 제 1 항에 있어서,
    상기 제 1 메모리를 이용하여 데이터의 상기 제 1 배치를 셔플링하는 단계는 상기 제 1 메모리로부터 데이터의 상기 제 1 배치의 일부를 스트리밍(streaming)하는 단계를 포함하는 방법.
  4. 제 3 항에 있어서,
    데이터의 상기 제 1 배치의 상기 일부는 데이터의 상기 제 1 배치의 제 1 일부를 포함하고,
    상기 방법은 데이터의 상기 제 1 배치의 상기 제 1 일부를 스트리밍하는 것과 병렬로 데이터의 상기 제 1 배치의 제 2 일부를 페칭(fetching)하는 단계를 더 포함하는 방법.
  5. 제 3 항에 있어서,
    데이터의 상기 제 1 배치의 상기 일부를 스트리밍하는 것에 기반하여 데이터의 상기 제 1 배치를 파티셔닝하는 단계를 더 포함하는 방법.
  6. 제 1 항에 있어서,
    상기 제 1 메모리를 이용하여 데이터의 상기 제 1 배치를 셔플링하는 단계는 상기 제 1 메모리로부터 데이터의 상기 제 1 배치의 일부를 무작위로 액세스하는 단계를 포함하는 방법.
  7. 제 6 항에 있어서,
    데이터의 상기 제 1 배치의 상기 일부를 무작위로 액세스하는 것에 기반하여 데이터의 상기 제 1 배치를 그룹핑하는 단계를 더 포함하는 방법.
  8. 제 7 항에 있어서,
    데이터의 상기 제 1 배치를 그룹핑하는 단계는:
    데이터의 상기 제 1 배치를 정렬하는 단계; 및
    상기 정렬에 기반하여 데이터의 상기 제 1 배치를 생성하는 단계를 포함하는 방법.
  9. 파티셔닝 장치; 및
    하나 이상의 기록들을 저장하고, 상기 파티셔닝 장치로 상기 하나 이상의 기록들의 하나 이상의 제 1 일부들을 스트리밍(streaming)하는 버퍼 메모리를 포함하는 데이터 셔플링(shuffling) 장치.
  10. 그룹핑 장치; 및
    하나 이상의 기록들을 저장하고, 상기 하나 이상의 기록들 중 적어도 하나를 무작위 액세스에 의해 상기 그룹핑 장치로 전송하는 버퍼 메모리를 포함하는 데이터 셔플링(shuffling) 장치.
KR1020210154986A 2020-11-20 2021-11-11 셔플 가속을 위한 시스템, 방법, 및 장치 KR20220069826A (ko)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US202063116801P 2020-11-20 2020-11-20
US63/116,801 2020-11-20
US17/225,085 US20220164122A1 (en) 2020-11-20 2021-04-07 Systems, methods, and devices for shuffle acceleration
US17/225,085 2021-04-07

Publications (1)

Publication Number Publication Date
KR20220069826A true KR20220069826A (ko) 2022-05-27

Family

ID=78592592

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020210154986A KR20220069826A (ko) 2020-11-20 2021-11-11 셔플 가속을 위한 시스템, 방법, 및 장치

Country Status (3)

Country Link
US (1) US20220164122A1 (ko)
EP (1) EP4002117A1 (ko)
KR (1) KR20220069826A (ko)

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7293024B2 (en) * 2002-11-14 2007-11-06 Seisint, Inc. Method for sorting and distributing data among a plurality of nodes
US8996464B2 (en) * 2012-06-11 2015-03-31 Microsoft Technology Licensing, Llc Efficient partitioning techniques for massively distributed computation

Also Published As

Publication number Publication date
EP4002117A1 (en) 2022-05-25
US20220164122A1 (en) 2022-05-26

Similar Documents

Publication Publication Date Title
CN107967124B (zh) 一种分布式持久性内存存储系统及方法
CN104765575B (zh) 信息存储处理方法
Kang et al. Towards building a high-performance, scale-in key-value storage system
Rasmussen et al. {TritonSort}: A Balanced {Large-Scale} Sorting System
Stuedi et al. Crail: A High-Performance I/O Architecture for Distributed Data Processing.
US9158540B1 (en) Method and apparatus for offloading compute resources to a flash co-processing appliance
De et al. Minerva: Accelerating data analysis in next-generation ssds
US20180095996A1 (en) Database system utilizing forced memory aligned access
US20150347434A1 (en) Reducing metadata in a write-anywhere storage system
US20160132541A1 (en) Efficient implementations for mapreduce systems
Chung et al. Lightstore: Software-defined network-attached key-value drives
Jun et al. Terabyte sort on FPGA-accelerated flash storage
CN104765574A (zh) 数据云端存储方法
US9411528B1 (en) Storage management systems and methods
US20200210114A1 (en) Networked shuffle storage
KR20220068910A (ko) 스토리지 셔플 가속을 위한 시스템, 방법 및 장치
Adams et al. Respecting the block interface–computational storage using virtual objects
US20200301825A1 (en) Technologies for column-based data layouts for clustered data systems
Islam et al. Efficient data access strategies for Hadoop and Spark on HPC cluster with heterogeneous storage
CN104778100A (zh) 一种安全备份数据的方法
Zhou et al. Hierarchical consistent hashing for heterogeneous object-based storage
Asiatici et al. Dynaburst: Dynamically assemblying dram bursts over a multitude of random accesses
Csordas et al. In search of lost bandwidth: Extensive reordering of DRAM accesses on FPGA
Zou et al. PSACS: Highly-Parallel Shuffle Accelerator on Computational Storage.
KR20220069826A (ko) 셔플 가속을 위한 시스템, 방법, 및 장치