Machine learning and big data analysis require large amounts of data processing. We often use accelerators(GPU, FPGA, ASIC) specialized for parallel processing to deal with huge data sets. Compared to working set size, the memory size of the accelerator is limited. Therefore, extra storage is essential to handle large amounts of data. In traditional host-centric programming models, the I/O processing burden was concentrated on the host. In particular, the GPUs have flexible processing abilities, it also relied on hosts for data transfer and thread synchronization. In this thesis, we propose an GPU-initiated direct I/O framework, NVMeDirect-GI, which transfers the I/O burden to GPUs by creating message queues on GPU's memory. With NVMeDirect-GI, GPU kernel can send I/O requests directly to NVMe storage. NVMeDirect-GI allows GPU to handle both I/O and computations. Even when host CPUs are busy, it is possible to access and process data in storages without performance degradation. The evaluation results show that NVMeDirect-GI can transfer I/O burden to GPU with only 3.5% performance degradation compared to the traditional host-centric programming model. In addition, NVMeDirect-GI showed a performance improvement of 1.89x in situations where host CPU is under heavy load.
기계학습과 빅데이터 분석에서는 대용량의 데이터 처리가 필요하기 때문에 병렬 처리에 특화된 별도의 가속기(GPU, FPGA, ASIC)가 자주 이용된다. 대규모의 데이터 처리에 있어 가속기의 메모리 크기는 한정적이기 때문에 모든 데이터를 메모리 위에 상주시키는 것이 불가능하다. 이에 따라 스토리지의 이용은 필수적이다. 하지만 기존의 호스트 중심의 프로그래밍 모델에서는 호스트가 가속기의 데이터 입출력을 관리하기 때문에 입출력 부담이 호스트에 집중되었다. 특히, GPU는 비교적 유연한 연산 처리가 가능함에도 불구하고, 여전히 데이터 전송 및 쓰레드 동기화를 호스트에 의존하고 있다. 본 학위논문에서는 기존의 CPU가 관리하던 입출력 부담을 GPU로 이동킬 수 있는 입출력 프레임워크 NVMeDirect-GI를 제안한다. NVMeDirect-GI를 이용하면 GPU 커널이 NVMe 스토리지에 직접 입출력 요청을 보낼 수 있고, 기존의 호스트 중심의 프로그래밍 모델을 GPU로 옮겨올 수 있다. 이에 따라 호스트 CPU가 바쁜 상황에서도 성능 저하 없이 스토리지에 접근하여 데이터를 처리하는 것이 가능하다. 실제 머신 위에서 데이터 입출력과 연산을 함께 시행한 평가에서 NVMeDirect-GI는 기존의 호스트 중심의 프로그래밍 모델 대비 3.5%의 성능 저하만으로도 GPU로 입출력 부담을 옮길 수 있음을 보여주었다. 또한, 호스트에 높은 부하가 가해지는 상황에서 NVMeDirect-GI는 1.89x의 성능 향상을 얻을 수 있었다.