DockerSSD

DockerSSD는 카이스트에서 2022년에 발표한 인스토리지 프로세싱 연구다. 인스토리지 프로세싱은 스토리지 내에서 데이터를 처리하는 모델로 대규모 데이터셋 처리할 때 에너지 효율적인 해법으로 알려졌다. 다만 저장장치의 제한된 연산 자원과 실행 환경이 적용 범위를 제한한다.

논문의 핵심 기여는 기존 Docker 이미지를 활용해 다양한 애플리케이션을 실행할 수 있는 인스토리지 런타임이다.

Docker 이미지를 재사용해 스토리지 내부에서 컨테이너를 자율적으로 실행한다. 이를 위해 새로운 통신 방식과 가상 펌웨어 스택을 설계하고 일부 기능을 하드웨어로 오프로딩한다.

인스토리지 프로세싱 모델

인스토리지 프로세싱에서는 연산을 구현하는 것뿐 아니라 응용을 실행할 런타임이 필요하다. 요구사항이 변하는 응용을 장치마다 수정하고 이식해야 한다면 활용 범위가 제한된다. DockerSSD는 기존 실행 환경을 재사용하는 방향으로 이 문제에 접근한다.

플래시 근처에서 데이터 처리를 하면서 동시에 블록 디바이스 자체의 I/O 요청을 관리해야 한다. 이 과정에서 데이터 처리와 일반 I/O가 자원을 경쟁할 수 있다. 그래서 ISP는 연산 자체는 FPGA같은 하드웨어에서 처리하는 방식으로 구현되고 있지만, 여전히 특정 데이터 처리 응용에 활용되는 수준이다.

논문은 인스토리지 프로세싱의 제약을 분석한 뒤, 통신 방식과 가상 펌웨어로 이 비용을 줄이는 구조를 제안한다.

고성능 SSDs

nvmf

그림을 통해 SSD 핵심 아키텍처 모듈과 내부 펌웨어 스택을 살펴본다. 현대 SSD는 프런트엔드 복합체와 백엔드 스토리지 두 부분으로 구성된다. 프런트엔드는 임베디드 프로세서와 내부 DRAM을 포함하여 고속 인터커넥트를 통해 PCIe 엔드포인트와 백엔드를 연결한다.

반면 백엔드는 채널이라는 복수의 I/O 버스를 통합하여 플래시 메모리 컨트롤러를 통해 플래시 패키지를 연결한다.

최근 수년간 프런트엔드(코어)는 역량이 발전하여 데이터 처리가 가능해졌다고 한다.

추가로 확인할 부분은 SSD 내부 프로세서가 담당하는 연산과 별도 하드웨어로 오프로딩한 기능의 경계다.

OS 수준 가상화

컨테이너는 cgroups와 namespace 같은 커널 기능을 통해 자원을 관리하고 실행 환경을 격리한다. OCI(Open Container Initiative)는 런타임과 이미지 등에 관한 표준을 정의하는 프로젝트이며, 그 자체가 하나의 런타임은 아니다.

cgroups와 namespace는 커널 기능이므로 이 방식은 OS 수준 가상화에 해당한다.

파일 레이아웃의 부재

대부분 애플리케이션은 파일시스템을 통해 스토리지 관련 데이터를 관리하지만, 펌웨어는 파일 데이터 레이아웃에 대한 지식이 없다. 사용자는 파일 오프셋에 연결된 LBA 집합을 얻어서, 이 LBA 집합을 오프로딩된 ISP 커널에 전달해야 한다.

성능 영향 평가

논문은 프로그래머블 ISP의 시스템 호출과 파일 접근 비용을 분석한다. 평가에서는 스토리지 지연이 호스트 대비 평균 약 50% 감소했지만, 컨텍스트 전환과 직렬화·역직렬화가 추가되면서 전체 지연은 오히려 증가했다. 이 수치는 논문의 비교 조건에 해당한다. 데이터 이동을 줄였다고 전체 실행 시간이 반드시 줄어드는 것은 아니라는 점이 중요하다.

제안

이 모든 분석을 바탕으로 DockerSSD를 제안한다. 호스트 독립적으로 컨테이너 단위 실행을 자율 관리하고, “커널 단위 왕복”을 줄이는 것을 목표로 한다. 또한 표준 도커 이미지 재사용으로 소스 수정/교차 컴파일을 제거하고 장치 의존성을 내리는 것이다.

내 연구에서 참고할 만한 부분

내 연구에서도 스토리지 서버에서 전처리한 결과를 호스트로 전달하는 비용을 함께 측정할 필요가 있다. 전송 데이터의 크기를 줄이는 효과가 직렬화·역직렬화와 실행 환경 전환 비용을 상쇄하는지 확인해야 한다.