Project


목차

  1. SAGE: 확률 그래프 분석 프레임워크 설계 및 IO 최적화 연구
  2. 클라우드 환경을 위한 Persistent Memory 캐시 연구
  3. 차세대 NVMe 요소 기술 연구
  4. 디스크 기반 그래프엔진에서의 IO 최적화 및 캐시 기법 연구
  5. 멀티테넌트 환경에서 IO 비율을 조절하기 위한 스케쥴링 기법 연구
  6. LeavO 캐시: SSD Cache와 HDD RAID5로 이루어진 하이브리드 스토리지에서의 캐시 기법 연구
  7. DM-SRC: Log-Structured RAID 기반의 대용량 SSD Array 캐시 기법 연구
  8. SSD의 FTL에서의 Extent Mapping 기법 연구
  9. eSAP: 플래시의 신뢰도와 성능 향상을 위한 Chip-level RAID5 기법 연구

SAGE: 확률 그래프 분석 프레임워크 설계 및 IO 최적화 연구

  • 소속: 울산과학기술원

  • 기간: 2017.09-2021.03

  • 사용기술: C++, PThread, LibAIO, Boost.ASIO, HDFS

  • 프로젝트 소개 박사과정 중 가장 많은 시간을 보낸 프로젝트로, 확률그래프 분석을 위한 프레임워크 설계 및 IO 최적화에 대한 연구입니다. 확률그래프 분석을 위해서는 연결 확률에 기반해서 다수의 샘플 그래프를 생성한 후, 각각의 샘플그래프에서 분석알고리즘이 진행됩니다. 그래서 많은 양의 샘플 그래프를 처리할수록 정확도가 향상될 수 있지만, 대용량의 메모리와 계산 자원이 필요하다는 문제가 있습니다.

    이 연구에서는 메모리 관리 및 병렬 처리에 대한 시스템 지식이 없이도, 대규모 확률 그래프에 대한 알고리즘을 작성할 수 있는 프레임워크(SAGE)를 설계합니다. SAGE는 확률 그래프 처리를 위해 자주 수행되는 기능들을 API 및 추상함수로 제공해서 확률 그래프 분석 알고리즘을 쉽게 구현할 수 있도록 설계했습니다. 또한 SAGE는 대규모 샘플링을 지원할 수 있도록 SSD에 데이터를 저장하는 External Memory 방식을 지원합니다. External Memory 방식에서는 IO가 발생하기 때문에, 다양한 IO 최적화 기법을 프레임워크 내부에 구현했습니다. (1) 재계산을 통한 IO 감소, (2) 그래프 스케쥴링을 고려한 우선순위 캐시, (3) 데이터 압축, (4) 동일 Vertex 프로그램 동시처리 등의 기법이 포함되어 있습니다.

    그 결과, 기존 그래프 엔진 들을 이용해서 확률 그래프 분석 알고리즘을 구현할때보다 평균 12배에서 최대 60배나 빠르게 계산할 수 있었습니다. 해당 연구 결과는 국제 우수 학회에 논문으로 제출해서 리뷰중에 있습니다. 그리고 현재 분산처리를 지원하기 위해서 추가적인 구현을 진행하고 있습니다.

  • 수행역할 및 개발 내용 메인 연구원으로 프로그래밍 모델과 IO 최적화 기법을 고안했으며, 프레임워크 전부분을 단독개발했습니다. C++을 이용해 개발했으며, 성능 최적화를 하기 위해서 PThread, Linux AIO 등의 라이브러리를 사용했습니다. 또한 현재 Boost.ASIO와 LibHDFS를 통해서 분산노드 버전을 구현하고 있습니다.

클라우드 환경을 위한 Persistent Memory 캐시 연구

  • 소속: 울산과학기술원

  • 기간: 2021.03-2021.03

  • 사용기술: C, Ceph, Fuse, Device-Mapper

  • 프로젝트 소개 최근에 기존에 연구실에서 개발된 Persistent Memory 캐시 모듈을 활용해서, 클라우드 환경에 맞게 최적화를 진행중인 연구입니다. 아직 연구 초기단계로, 실험을 반복하며 연구 방향을 고려중인 상태입니다. 현재 클라우드 스토리지 환경에서 많이 사용되는 Ceph를 이용해 실험 환경을 구축하여 성능테스트를 진행하고 있습니다. 최근에 Ceph RBD의 소스코드에 Pesrstient Memory 캐시 모듈이 공식적으로 추가되었기 때문에, 개선사항을 찾고자 캐시 관련 소스코드를 분석 중에 있습니다.

  • 수행역할 및 개발 내용 최근에 서브연구원으로 연구에 참여하면서, Ceph의 소스코드에서 캐시와 관련된 부분을 분석을 하고 있습니다. 또한 Ceph를 이용해 실험환경을 구축하여 Client-side 캐시에 대한 성능테스트를 진행하고 있습니다.

차세대 NVMe 요소 기술 연구

  • 프로젝트명: 차세대 NVMe 요소 기술 연구

  • 소속: 울산과학기술원

  • 기간: 2018.02 - 2020.04

  • 사용기술: C, 리눅스 커널, Docker, Expect

  • 프로젝트 소개 SK 하이닉스 산학 과제로, NVMe 스펙에 새로 추가된 기능들에 대해서 연구를 진행했던 프로젝트입니다. SK 하이닉스에서 해당 기능이 구현된 펌웨어와 프로토타입 SSD를 전달받은 뒤, 호스트에서 성능을 측정하고, 호스트에서 성능을 향상시킬 수 있는 최적화 방안, 적용 가능 사례 등에 대해서 연구를 했습니다. NVMe 스펙에 새로 추가된 기능 중, 주로 Multi-Stream(1년차)과 Read Recovery Level(2년차)에 대해서 연구를 진행했습니다.

    1. Multi-Stream Multi-Stream은 데이터 수명에 따라 데이터를 모아 저장하는 기술로, SSD의 성능과 수명을 향상시킵니다. 이 기능은 관련 논문이 다수의 논문이 이미 발표되어, 당시에 리눅스 커널에 인터페이스가 추가되가있었지만, 어플리케이션 소스코드에서 수정이 되어야 적용이 가능한 단점이 있었습니다. 본 프로젝트에서는 어플리케이션의 소스코드를 수정해서 하이닉스 SSD의 Multi-Stream 성능에 대해서 평가를 하고, Multi-Stream의 성능을 더 향상시킬수 있는 기법에 대해 연구를 진행했습니다.

    2. Read Recovery Level Read Recovery Level은 SSD 내부에서 에러가 발생했을때, 호스트에 의해서 복구 수준을 다르게 적용할 수 있는 기술입니다. 본 프로젝트에서는 RAID가 적용된 스토리지에서 효율적인 Read Recovery Level 적용에 대해 연구했습니다. RAID가 적용되어 있을경우, SSD 내부에서 에러를 복구하는 시간보다 RAID에 의해 복구되는 시간이 더 빠를 수 있습니다.

  • 수행역할 및 개발 내용 2-3명이 진행한 개발과제로, 보조 연구원으로 시작을 했다가 중간에 메인 연구원으로 변경되어, 프로젝트를 주도하며 개발했습니다.

    1. Multi-Stream Hynix SSD의 성능테스트를 하기 위해서, 실험에 필요한 어플리케이션의 수정이 필요했습니다. RocksDB, MySQL, Hadoop, GraphChi 등의 어플리케이션을 선정한 뒤, Multi-Stream 지원하도록 코드를 수정했고, Multi-Stream의 성능 측정 환경울 구축했습니다. FIO, YCSB, Filebench 등 다양한 벤치마크를 통해서 성능을 측정했고, Docker와 Bash를 이용해서 테스트 스크립트를 작성했습니다. 그리고 관련 논문을 읽고, 리눅스 커널에서 Device-Mapper 프레임워크와 VFS 등의 수정을 통해, 논문으로 발표된 기존 기법 등을 구현했습니다. 그 후, IO 워크로드 분석을 통해, 기존 기법보다 5%내외의 성능는 향상되도록 최적화를 진행했습니다.

    2. Read Recovery Level Bash와 Expect 스크립트를 통해서, Read Recovery Level의 성능을 측정을 위한 테스트 스크립트를 작성했습니다. 또한 RAID 스토리지에서 Read-Recovery Level을 사용할 수 있도록, 리눅스 커널의 Software-RAID와 NVMe Driver의 소스코드를 수정했습니다.

디스크 기반 그래프엔진에서의 IO 최적화 및 캐시 기법 연구

  • 소속: 울산과학기술원

  • 기간: 2016.08-2019.07

  • 사용기술: C++, PThread, Python

  • 프로젝트 소개 대규모 그래프를 분석하기 위해서는 대용량의 메모리 자원와 병렬처리 기법이 필요합니다. 그래프 엔진은 개발자가 메모리 관리나 병렬처리와 같은 시스템 지식이 없이도, 그래프 분석 알고리즘을 쉽게 작성할 수 있도록 도와주는 프레임워크입니다. 대규모 그래프를 처리하기 위해서, 그래프 엔진은 분산 인메모리 방식과 디스크 기반 (외부 메모리) 방식, 2가지가 많이 사용되며, 이 프로젝트는 디스크 기반 그래프 엔진의 성능 최적화에 대한 연구입니다. 그래프 엔진에서는 일반적으로 100 바이트 이하의 작은 IO가 많이 발생하는데, SSD와 같은 저장장치는 4KB/8KB 등 페이지 단위로 IO를 처리합니다. 또한 그래프 엔진에서는 페이지 단위와 동일한 크기로 교체되는 LRU 블록 캐시를 많이 사용합니다. 그로인해, 페이지 캐시 안에서 실제 페이지의 사용률은 매우 낮은 문제가 있습니다.

    본 연구에서는 캐시의 효율성을 높이기 위한 2가지 기법에 대해 연구합니다. 첫번째는 그래프 전처리 분석을 통해서, 페이지 사용률이 낮은 Vertex를 찾아내, 바이트 단위 정적인 캐시에 저장해서, 페이지 캐시를 우회하는 방법입니다. 두번째는 그래프 오더링을 통해, 비슷한 시점에 호출될 수 있는 Vertex의 연결 정보를 동일 또는 인접한 페이지에 함께 저장해서 페이지의 사용률을 높이는 기법입니다.

    프로젝트 초기에는 연결이 많은 Vertex에서 로컬리티가 높을 것으로 예상했지만, 실험을 통해 확인한 결과, 그래프 엔진 내부의 스케쥴링과 IO 병합으로 인해서 대부분의 알고리즘에서 로컬리티는 매우 낮았습니다. 그래서 캐시 기법에 대한 초기 설계를 많이 변경하며 진행했고, 기존과 다른 캐시기법을 제안 할 수 있었습니다. 그 결과 연구결과를 ATC'19이라는 국제 우수학회에서 발표할 수 있는 기회가 되었습니다.

  • 수행역할 및 개발 내용 메인 연구원으로 참여하여 2명의 보조 연구원과 함께 프로젝트를 주도하며 진행했습니다. 그래프 엔진에서의 IO 워크로드 분석을 통해 캐시 기법을 설계했습니다. 그 후, FlashGraph와 Graphene 이라는 오픈소스 디스크 기반 그래프엔진을 수정하여 캐시 기법을 구현했습니다. 또한 그래프 전처리 분석을 빠르게 수행하기 위해서, PThread를 이용해 병렬적으로 빠르게 분석하는 코드를 작성했습니다.

멀티테넌트 환경에서 IO 비율을 조절하기 위한 스케쥴링 기법 연구

  • 소속: 울산과학기술원

  • 기간: 2016.02-2016.09

  • 사용기술: Python, HBase, YCSB, FIO

  • 프로젝트 소개 가상환경에서는 하나의 SSD를 다수의 VM(또는 컨테이너)가 공유가능하여 사용할 수 있습니다. 이때, 리눅스에서는 Cgroup을 통해서 각 VM마다 IO 성능의 비율을 지정할 수 있습니다. 리눅스에서는 CFQ 스케쥴러를 통해서 timeslice 또는 IOPS를 기준으로 정해진 비율만큼 SSD의 성능을 쪼개서 VM에게 할당합니다. 하지만 SSD의 복잡한 아키텍쳐(채널, NCQ, 캐시)와 병렬성으로 인해서 HDD에 비해서 지정한 IO 비율이 지켜지지 않는 문제가 있습니다. 이 연구에서는 다양한 실험을 통해서 SSD의 아키텍쳐에 따라서 IO 비율에 미치는 영향을 분석하고, 섹터 기반의 스케쥴링을 통해서 IO 비율을 잘 지켜서 QoS를 향상하는 기법을 제안합니다. 이 연구의 결과을 논문으로 정리해서 MASCOTS'16 학회와 IEEE Access 저널에서 발표했습니다.

  • 수행역할 및 개발 내용 보조 연구원으로 참여해서, 각 실험의 리눅스 커널 및 KVM 초기 세팅, 실험 자동화 등을 작업했습니다. 연구 특성상 반복적인 실험이 많았기 때문에, 수작업으로 진행하기보다는 스크립트를 통해서 실험을 자동화하고 결과와 과정을 검증해야 했습니다. 자동화 스크립트는 호스트와 가상머신(KVM) 간의 통신을 통해서 자동으로 실험을 진행할 수 있도록 개발했습니다. KVM 간의 IO를 측정하기 위해서, HBase를 세팅한 후, YCSB 벤치마크와 FIO 벤치마크를 사용해 성능을 측정했습니다.

LeavO 캐시: SSD Cache와 HDD RAID5로 이루어진 하이브리드 스토리지에서의 캐시 기법 연구

  • 소속: 서울시립대학교 대학원

  • 기간: 2013.06 ~ 2015.04

  • 사용기술: C, Linux Kernel

  • 프로젝트 소개 DM-SRC와 관련된 연구 프로젝트를 진행하다가, 아이디어가 도출되어 시작한 연구 프로젝트입니다. SSD 캐시와 HDD RAID5로 이루어진 하이브리드 스토리지에서 성능을 향상시키는 캐시 기법에 대한 연구입니다. RAID5에서는 WRITE I/O가 내려올때마다, 이전 데이터를 먼저 읽어 새 데이터에 맞는 패리티를 업데이트해야 합니다. 그래서 Small Write가 발생할때마다 패리티 갱신으로 인해 처리속도가 느려지는 문제가 있습니다. 이 논문에서는 SSD 캐시에 남겨진 이전 데이터를 이용해서 RAID5의 패리티를 늦추는 기법을 제안합니다. 또한 패리티가 즉각적으로 갱신되지 않더라도 캐시에 남겨진 이전데이터를 이용하면, 데이터 손실이 일어나면 복구가 가능합니다. 이 연구의 결과는 SAC'15 학회에서 발표되었습니다.

  • 수행역할 및 개발 내용 메인 연구원으로서, 아키텍쳐 설계 및 구현을 주도해서 진행했습니다. 커널 모듈을 직접 개발하기보다는 오픈 소스 커널 모듈을 수정해서 구현했습니다. 리눅스 커널의 Software RAID과 Facebook의 오픈소스 캐시 모듈인 FlashCache를 사용했습니다.

DM-SRC: Log-Structured RAID 기반의 대용량 SSD Array 캐시 기법 연구

  • 소속: 서울시립대학교 대학원

  • 기간: 2013.05 ~ 2014.02

  • 사용기술: C, Linux Kernel, Device-Mapper, Pthread, LibAIO

  • 프로젝트 소개 이 연구에서는 다수의 SSD를 Persistent 대용량 캐시 장치로 사용하는 기법에 대한 연구입니다. 다수의 SSD를 Log-Structured RAID로 구성하여, SSD의 성능과 신뢰도를 향상시킬 수 있습니다. RAID에 기록된 패리티로 인해, Write-back 캐시로 사용함에도 데이터 손실을 방지할 수 있습니다. 해당 프로젝트는 DiskSim 기반의 시뮬레이터에서 성능을 실험한 뒤, 리눅스 커널의 Device-Mapper 프레임워크에서 구현이 되었습니다.

    또한 DM-SRC의 커널 모듈 개발 이후, 실제 워크로드를 통해 최대 성능을 측정하기 위해서 ‘Trace Replayer’라는 벤치마크를 추가 구현했습니다. 다수의 SSD가 병렬적으로 수행이 가능했기 때문에, 멀티스레드 기반으로 IO를 처리해야 최대 성능을 측정할 수 있었습니다. 당시 기존의 벤치마크에서는 실제 워크로드를 멀티스레드 기반으로 처리할 수 없었기 때문에 별도의 벤치마크를 추가 구현했습니다.

이 연구의 결과는 Middleware'15 학회에서 발표되었습니다.

  • 수행역할 및 개발 내용 보조 연구원으로서, 아키텍쳐 설계와 벤치마크 개발에 참여했습니다. Linux LibAIO와 Pthread를 활용해 ‘Trace Repalyer’ 벤치마크를 개발했고, 최적화를 위해 IO 병합, 버퍼링, Trace 로딩 최적화 등을 구현했습니다. Device-Mapper와 리눅스 Software RAID, 그리고 벤치마크 개발에 대해서 배울 수 있었고, 연구를 진행하면서 LeavO 캐시에 대한 아이디어를 구상할 수 있었습니다.

SSD의 FTL에서의 Extent Mapping 기법 연구

  • 소속: 서울시립대학교 대학원

  • 기간: 2012.11 ~ 2013.03

  • 사용기술: C

  • 프로젝트 소개 플래시메모리에는 호스트의 논리주소(섹터)와 실제 물리주소를 맵핑하는 ‘FTL’이라는 임베디드 중간 계층이 존재합니다. FTL의 맵핑테이블은 일반적으로 4KB당 하나의 엔트리를 저장합니다. 그래서 용량이 커질 경우, 맵핑테이블의 크기도 크게 증가합니다. 하지만, 임베디드 환경에서는 메모리의 크기가 제한되기 때문에 일반적으로 맵핑테이블을 모두 메모리에 저장하지 못하고, 일부분만 캐시합니다. 또한 Sequential IO가 많은 환경에서는 높은 확률로 연속적인 논리주소와 물리주소를 맵핑테이블에 저장하게 됩니다. 이 연구에서는 맵핑테이블을 4KB 단위가 아닌 연속적인 주소 단위로 맵핑테이블을 구축해서, 더 많은 맵핑정보를 메모리에 캐시하도록 기법을 설계했습니다. 하지만 동일 기법의 연구가 발표되어, 도중에 연구가 중단되었습니다. 연구중단으로 인해 논문 실적을 남기지는 못했지만, SSD 내부의 아키텍쳐 및 FTL과 캐시 등에 대해서 자세히 공부를 할 수 있었습니다.

  • 수행역할 및 개발 내용 2인 1팀중 메인 연구원으로서, 캐시 기법을 설계한 후, 기존에 연구실에서 개발한 FTL 시뮬레이터 코드를 수정해서 구현했습니다.

eSAP: 플래시의 신뢰도와 성능 향상을 위한 Chip-level RAID5 기법 연구

  • 소속: 서울시립대학교 대학원
  • 기간: 2012.08 ~ 2012.11
  • 사용기술: Python
  • 프로젝트 소개 대학원에 입학해서 처음으로 참여한 연구과제입니다. 플래시메모리는 Write를 많이 할수록, 에러율이 증가해서 수명이 제한되는 문제가 있습니다. 이 프로젝트는 SSD 내부에 플래시 칩을 RAID로 구성해서 에러율을 줄이고 수명을 증가시키는 기법에 대한 연구입니다. 기존의 RAID 기법을 그대로 적용할 경우, 패리티 갱신으로 인해 성능이 크게 줄어들고, 또한 잦은 패리티 쓰기로 인해서 오히려 수명이 줄어드는 역효과가 발생할 수도 있습니다. 이러한 문제를 없얘기 위해서, 이 프로젝트는 ‘eSAP’이라는 Log-Structured 기반의 RAID 기법을 설계하며, 시뮬레이터 개발을 통해서 성능 측정 실험을 진행합니다. 또한 eSAP RAID 적용으로 향상된 신뢰도와 수명을 수학적 모델과 시뮬레이션을 통해서 증명합니다.

본 연구의 결과는 ‘DSN 2013’ 학회에서 발표되고, ‘Transaction on Computing’ 우수저널에 출간되었습니다.

  • 수행역할 및 개발 내용 3인 1팀에서 보조 연구원으로 참여하여, 신뢰도 계산과 실험을 진행했습니다. 스토리지 신뢰성과 관련 기존 논문과 Markov-Chain, MTTDL 등을 참고하여 SSD 신뢰도 모델을 만들고, 파이썬을 통해서 신뢰도와 수명을 계산 후, matplotlib을 통해 가시화하는 작업을 담당했습니다. 프로젝트에 투입된 시점에 기법 설계나 시뮬레이터 개발은 이미 대부분 완료되어 참여하지 못하지는 못했습니다. 연구를 진행하면서 플래시메모리와 SSD의 특성에 대해 많은 것을 배울 수 있는 계기가 되었습니다.