Korean Institute of Information Technology

Current Issue

The Journal of Korean Institute of Information Technology - Vol. 22 , No. 3

[ Article ]
The Journal of Korean Institute of Information Technology - Vol. 21, No. 2, pp. 59-68
Abbreviation: Journal of KIIT
ISSN: 1598-8619 (Print) 2093-7571 (Online)
Print publication date 28 Feb 2023
Received 26 Dec 2022 Revised 09 Jan 2023 Accepted 12 Jan 2023
DOI: https://doi.org/10.14801/jkiit.2023.21.2.59

RAM 디스크 원격 백업을 통한 장애 복구 방법
구본근*
*한국교통대학교 컴퓨터공학과 교수

A Recovery Method of RAM Disk by using Remote Backup
Bongen Gu*
Correspondence to : Bongen Gu Dept. of Computer Engineering, Korea National University of Transportation, 50 Daehak-ro, Chungju, Chungbuk, 27469, Korea Tel.: +82-43-841-5348, Email: bggoo@ut.ac.kr

Funding Information ▼

초록

RAM 디스크는 디스크 입출력 성능이 높지만, 휘발성 저장 매체이므로 전원 공급 단절에 따른 데이터 소실 문제가 있다. 본 논문에서는 RAM 디스크의 데이터 소실 문제를 해결하기 위해 전체 파일 시스템을 원격 시스템에 백업하는 방법을 제안한다. 본 논문에서 제안하는 방법은 디스크 읽기, 쓰기 요구를 처리하는 RAM 디스크 장치 구동기가 쓰기 요구를 처리하는 중에 대상 디스크 블록을 원격 시스템에 전송하여 저장한다. 또, 본 논문의 장애 복구 방법은 RAM 디스크 드라이브 사용을 위해 드라이버가 적재될 때 원격 시스템으로부터 전체 파일 시스템을 복구하여 사용한다. 따라서, 본 논문에서 제안한 방법의 RAM 디스크는 하드웨어 고장 또는 조직 업무 이관 등 호스트 교체가 필요한 경우에 새로운 하드웨어 환경에서 파일 시스템을 효과적으로 복구할 수 있다. 본 논문에서 제안한 장애 복구 방법이 유효함을 보이기 위해 시험 구현을 하였으며, RAM 디스크의 파일 시스템이 정상적으로 복구됨을 확인하였다.

Abstract

The performance of RAM disk that is volatile storage media is high. However, RAM Disk has serious problems, such as data loss when any power supply problem occurs. In this paper, we propose a recovery method by using remote backup to solve the data loss problem of the RAM disk. Our method transfers disk blocks for disk write requests to the remote system while the RAM disk driver processes disk i/o requests. And our proposed method recovers the whole RAM disk file system from the remote system when the device driver module for the RAM disk is loaded. Therefore, our proposed backup and recovery method for RAM Disk can effectively recover the file system in new hardware environment in the case that required to change a host because of hardware fault or job relocation of organization. To show that our recovery method is valid, we experimentally implemented our way and verified that our implementation successfully recovered the RAM disk file system from the remote system.


Keywords: RAM disk, file system, backup, recovery, device driver, kernel module, linux

Ⅰ. 서 론

기계학습, 빅데이터 등의 대용량 데이터 처리가 필요한 분야는 처리의 오버헤드 감소를 위해 고성능 스토리지 시스템이 필요하다[1][2]. 고성능 스토리지 구현은 RAID[3] 등 다중 디스크를 이용하는 방법과 시스템의 주기억장치 공간의 일부 영역에 파일 시스템을 구성하여 디스크 서비스를 제공하는 방법 등이 있다. 또, 실시간 처리가 요구되는 IoT 장치도 RAM을 스토리지로 사용하고 있다[3][4].

RAM 디스크는 호스트 시스템의 주기억장치의 일부 영역에 디스크 서비스를 위한 파일 시스템을 구성하여 사용자에게 디스크 입출력 서비스를 제공하는 것이다[1][5]. RAM 디스크는 반도체 메모리를 이용하므로 물리적인 동작이 요구되는 디스크 또는 플래시 메모리 기반의 SSD보다 고속의 동작이 가능하여 높은 디스크 입출력 성능을 보인다. 하지만 RAM 디스크는 DRAM 등 휘발성 메모리를 이용하므로 정전, 전원 공급 시스템의 고장 등으로 전원 공급이 차단되면 모든 데이터가 소실되는 문제가 있다[3]. 또, 시스템 오류, 운영체제 업그레이드 등으로 인한 시스템 재시작은 RAM 디스크의 모든 데이터가 소실되게 한다. RAM 디스크가 고성능 스토리지로서 역할을 하지만 전원 공급 중단, 재시작 등은 그것의 활용성 및 활용 분야를 제한한다.

이러한 문제를 해결하기 위해 배터리 백업 장치를 장착한 시스템이 있다. DRAM-SSD는 휘발성 기억장치인 DRAM을 저장 매체로 사용하며, SSD를 백업 장치로 사용한다[6]. 또, 전원 공급이 중단되더라도 DRAM에 구성된 파일 시스템을 유지하기 위한 전원 공급의 이중화를 구현하였다. 이 시스템은 기억장치인 DRAM에 파일 시스템을 구성하지만 PCIe 버스를 통해 연결되어 HDD 또는 SSD 등과 같은 종류의 보조기억장치로 인식된다. 저장 매체로 DRAM을 사용하는 DRAM-SSD는 고성능 디스크 입출력 서비스를 제공하지만, 주기억장치의 메모리 공간 중 일부를 할당하여 파일 시스템을 구성하고, 디스크 입출력 서비스를 제공하는 RAM 디스크의 특징을 갖고 있지 않다.

NRD(Network RamDisk)는 SBC 등 소형 시스템의 블록 장치 구동기를 통해 원격 시스템의 메모리 공간에 접근하는 것으로, 크기 제한으로 인해 물리적 블록 장치를 장착할 수 없는 소형 임베디드 시스템이 파일 시스템을 갖는 블록 장치처럼 사용할 수 있도록 한다[7]. 이것은 로컬 시스템에서 블록 IO를 할 때마다 네트워크 접근이 요구되므로 상대적으로 긴 접근 시간이 필요하다.

휘발성 메모리 대신 PRAM(Phase change RAM) 비휘발성 메모리에 파일 시스템을 구성하여 고성능 IO를 제공하는 스토리지를 위한 연구도 활발하게 진행되고 있다[8]. 하지만 메모리 버스에 연결되는 비휘발성 메모리 사용이 아직 일반화되어 있지 않은 것으로 파악된다.

본 논문에서는 호스트의 주기억장치가 제공하는 메모리 공간 중 일부를 할당하여 구성한 RAM 디스크가 전원 공급 장치의 고장, 시스템 재시작 등의 상황에서 그 내용이 소실되는 것을 방지하기 위해 RAM 디스크에 구성된 파일 시스템을 원격 호스트에 백업하는 방법을 제안한다. 본 논문에서 제안하는 RAM 디스크 원격 백업 방법은 디스크 쓰기 요청의 블록을 RAM 디스크에 저장함과 동시에 원격 백업 호스트에 전송한다. 고장 또는 사전 계획된 일정에 따라 호스트를 정지한 후 재시작을 하는 경우 본 논문에서 제안하는 방법은 RAM 디스크를 재생성할 때 원격 호스트에 백업한 블록을 이용하여 RAM 디스크에 구성된 파일 시스템을 복구한다.

본 논문의 구성은 다음과 같다. 본 논문의 2장은 고성능 디스크 시스템을 위해 저장 매체로 RAM을 이용한 기존의 방법을 소개하고, 3장은 본 논문에서 제안하는 RAM 디스크의 원격 백업 방법과 복구 방법 및 시스템 구성을 기술한다. 4장은 본 논문에서 제안하는 원격 백업 및 복구 방법을 리눅스 시스템에서 구현한 내용을 기술하고, 제5장은 결론 및 향후 연구과제를 제시한다.


Ⅱ. 관련 연구
2.1 NRD

NRD는 로컬 호스트의 파일 시스템을 통해 원격 시스템의 RAM 영역에 접근하는 것으로, 크기에 제약이 있어 디스크 등 보조기억장치 설치에 한계가 있는 임베디드 시스템이 원격 호스트의 RAM 영역 중 일부를 파일 시스템을 이용하여 접근할 수 있도록 한다[7]. NRD는 리눅스 커널에 적재되는 장치 구동기 모듈과 통신을 수행하는 사용자 수준의 클라이언트와 서버 데몬으로 구성되어 있다. 로컬 호스트의 사용자 프로그램이 파일 입출력을 위한 시스템 콜을 호출하면, NRD 커널 모듈은 이 호출에 대응하여 관련 요청을 NRD 클라이언트 데몬에 전달한다. NRD 클라이언트는 소켓 통신을 통해 원격 호스트의 NRD 서버 데몬에게 관련 요청을 전달하며, NRD 서버 데몬은 이 요청을 처리하고 반응한다.

NRD는 원격 호스트의 RAM 영역을 호스트의 보조기억장치로 사용하므로 전원 공급의 문제 또는 재시작 등 원격 호스트에 문제가 있는 경우 파일 시스템의 내용이 모두 소실되는 문제가 있다.

2.2 휘발성 메모리를 이용한 저장 매체

휘발성 메모리를 이용한 저장 매체 구현 연구는 호스트 시스템의 RAM 영역 일부를 이용하여 리눅스 블록 장치 구동기를 구현하고, 성능 시험을 통해 메모리 기반의 저장 매체가 작업 부하의 양과 관련 없이 성능 차이가 거의 없음을 보여 주었다[1]. 반면, 이 결과는 HDD와 SSD가 작업 부하의 양에 따라 각각 최대 30배, 15배의 성능 차이가 남을 보였다. 즉, RAM과 같은 휘발성 메모리를 이용하여 이 연구에서 구현한 저장 매체는 작업 부하의 양에 상관없이 거의 일관된 성능을 보였다. 또, 이 연구에서 구현한 저장 매체는 리눅스 시스템의 부팅 중 시스템 메모리를 할당함으로써 저장 매체를 위한 메모리 주소 공간을 고정하여 할당함으로써 성능을 높이고 있다.

이 시스템도 앞서 기술한 것과 같이 전원 공급 장치 고장 등 다양한 원인으로 시스템을 재시작하면 휘발성 메모리의 내용이 모두 소실되는 문제를 갖고 있다.

2.3 영속성 있는 하이브리드 RAM 디스크

미션 크리티컬한 작업을 실시간으로 처리해야 하는 IoT 장치들은 RAM을 스토리지로 사용하고 있다[3][4]. 다양한 환경에서 동작하는 IoT 장치가 안정적이고 영속적인 동작이 가능하지 않을 수 있어 IoT 장치에 구현된 RAM 디스크는 데이터 소실의 가능성을 항상 갖고 있다. 이를 해결하기 위한 하이브리드 RAM 디스크[3]는 IoT 장치를 위한 것으로 RAM 디스크의 내용을 SSD를 이용하여 백업하는 방법을 제공하고 있다.

하이브리드 RAM 디스크는 RAM의 내용을 SSD에 동시 저장하므로 메모리 내용 소실 문제를 해결할 수 있지만 IoT 장치에 SSD를 설치해야 하므로 장치의 크기와 전력 소모가 증가하는 문제가 있다.


Ⅲ. RAM 디스크의 원격 백업, 복구를 위한 시스템 구성 및 방법
3.1 시스템 구성

전원 공급의 중단 또는 시스템 재시작 등의 상황으로 인해 RAM 디스크의 파일 시스템이 소실되는 문제를 해결하기 위해 본 논문에서 제안하는 방법은 RAM 디스크를 대상으로 한 블록 쓰기 요청을 원격 호스트에 실시간으로 백업하는 것이다. 본 논문에서 제안하는 방법은 그림 1에서 나타낸 것과 같이 드라이브 서비스와 블록 백업 및 복구 서비스로 구성되어 있다. 사용자 공간의 프로세스가 파일 접근을 위해 시스템 호출을 이용하여 파일 시스템에 접근하면 파일 시스템은 이를 서비스하기 위해 시스템 호출의 대상이 되는 디스크 블록에 대한 읽기 또는 쓰기 요청(Request)을 큐에 추가한다. 블록 읽기 또는 쓰기 요청이 큐에 추가되면 드라이브 서비스는 큐에서 요청을 꺼내어 처리한다. 요청의 종류가 블록 읽기이면 드라이브 서비스는 RAM 디스크를 위해 사전에 할당된 메모리 영역에서 해당 블록의 내용을 읽어 이 요청을 처리한다. 큐에서 꺼낸 것이 블록 쓰기 요청이면 이 서비스는 블록의 내용을 메모리 영역에 저장함과 동시에 백업 서비스에 블록의 내용을 전달한다. 즉, 드라이브 서비스는 RAM의 메모리 영역을 이용한 디스크 입출력을 서비스하고, 블록 쓰기 요청에 대한 백업 서비스를 활성화하는 역할을 한다.


Fig. 1. 
Architecture of RAM disk block backup/recovery

백업 및 복구 서비스는 블록 쓰기에 대한 백업 서비스와 원격 호스트에 백업된 블록을 이용하여 RAM 디스크의 파일 시스템을 복구하는 복구 서비스로 구성되어 있다. 백업 서비스는 블록 쓰기 요청에 포함되어있는 블록 번호와 블록 내용을 원격 호스트에 전송하여 그 내용을 백업하는 역할을 수행한다. 파일 시스템에 의해 그 내용이 변경되는 블록만이 백업 대상이 되므로 백업 서비스는 블록 쓰기 요청에 대해 활성화된다. 복구 서비스는 시스템 업그레이드 등을 포함한 여러 원인으로 시스템을 재시작한 경우에 원격 호스트에 백업한 파일 시스템을 이용하여 RAM 디스크를 복구하는 기능을 수행한다. 또한, 복구 서비스는 네트워크를 이용하여 원격 호스트에 백업된 파일 시스템을 복구하므로 그림 2에 나타낸 것과 같이 다른 호스트로 교체하여 RAM 디스크를 구성하여도 파일 시스템을 복구할 수 있다는 장점이 있다. 즉, 그림 2(a)는 호스트 A에서 구성된 RAM 디스크 파일 시스템이 백업 호스트에 백업되는 것을 나타내고 있으며, 그림 2(b)는 그 백업 호스트에 저장된 파일 시스템 백업을 이용하여 다른 호스트 B에 복구하는 것을 나타내고 있다. 이러한 복구 방법은 호스트의 하드웨어 고장 또는 교체가 필요한 경우와 더불어 조직의 업무 이관 등으로 인한 호스트 변경이 필요한 경우에 효과적으로 활용될 수 있다.


Fig. 2. 
Recovery from RAM disk file system of another host

3.2 백업/복구 프로토콜

백업 및 복구 서비스는 네트워크를 통해 원격 백업 호스트에 디스크 블록을 백업 또는 복구를 위한 프로토콜을 실행한다. 백업 및 복구 서비스는 소켓 기반 서버-클라이언트 통신 모델을 기반으로 하고 있으며, RAM 디스크를 생성하는 호스트가 클라이언트, 백업을 위한 원격 호스트가 서버 역할을 한다. 그림 3은 원격 호스트에 백업된 블록을 이용하여 호스트의 RAM 디스크를 위한 파일 시스템을 복구하기 위한 프로토콜을 나타내고 있다. 복구 서비스는 호스트에 새로운 RAM 디스크를 생성하는 경우에 실행되며, 사전 부여된 식별자(ID)와 블록 수(nBlk) 등 호스트에 생성하고자 하는 RAM 디스크의 식별 정보를 백업 기능을 수행하는 원격 호스트에 전송한다. 원격 백업 호스트에 RAM 디스크의 파일 시스템 백업 본이 존재하면 백업 호스트는 식별자와 블록 수를 호스트에 전송한다. 만약, 파일 시스템의 백업이 존재하지 않으면 백업 호스트는 블록 수에 0을 넣어 호스트에 전송한다. 프로토콜에서 DskReq와 DskRes는 각각 디스크에 대한 파일 시스템 백업 본의 존재 여부를 확인하기 위한 코드이다.


Fig. 3. 
File system recovery protocol

백업 호스트에 RAM 디스크를 위한 파일 시스템 백업이 존재하면 호스트는 RAM 디스크를 위한 공간을 자신의 메모리 공간에서 확보한 후 원격 호스트에 백업된 블록을 이용하여 파일 시스템을 복구한다. 백업된 블록 요청을 위해 호스트는 식별자(ID), 블록 번호(#Blk), 블록 수(nBlk)를 필드로 갖는 BlkRReq 메시지를 백업 호스트에 전송하며, 이에 대한 반응으로 백업 호스트는 식별자(ID), 블록 번호(#Blk), 블록 수(nBlk) 및 블록의 내용(Conts)으로 구성된 BLKRRes 메시지를 호스트에 전송한다.

복구 과정에서 원격 호스트가 전송하는 블록은 블록 번호(#Blk)부터 연속된 블록 수(nBlk)개의 블록이다. 즉, 복구 서비스가 0(#Blk=0)번 블록부터 연속된 네 개의 블록(nBlk=4)을 요청하면 원격 호스트는 0, 1, 2, 3번의 백업된 블록을 전송한다. 복구 서비스가 파일 시스템 복구 프로토콜을 완료하면 호스트에 생성된 RAM 디스크는 복구된 파일 시스템을 기반으로 디스크 입출력 서비스를 제공할 수 있다.

파일 시스템이 복구된 RAM 디스크는 사용자 프로세스를 위한 파일 입출력 서비스를 제공할 수 있다. 사용자 프로세스가 파일 접근을 요청하면 드라이브 서비스는 RAM의 메모리 영역에 저장된 블록을 이용하여 서비스할 수 있다. 이때 파일 쓰기 요청은 메모리에 저장된 블록의 내용을 수정하므로, 앞서 기술한 상황에 따른 데이터 소실의 가능성이 있어 원격 호스트로 그 블록들을 즉시 전송하여 백업하여야 한다.

그림 4는 블록 쓰기 요청에 대응하여 백업 서비스가 수행하는 프로토콜을 나타낸 것이다. 파일 시스템 복구 과정에서 수행한 원격 호스트와의 연결 과정을 통해 관련 정보를 교환하였으므로 백업 서비스는 관련 정보의 교환이 필요하지 않으며, 백업할 블록에 대한 정보를 원격 호스트에 전송하면 된다. 블록 백업을 위해 백업 서비스가 원격 호스트에 전송하는 메시지는 식별자(ID), 블록 번호(#Blk), 블록 수(nBlk), 블록 내용(Conts)으로 구성된 BlkWReq이다. 한 개의 BlkWReq 메시지에는 블록 번호 #Blk부터 연속된 nBlk 개의 블록을 포함할 수 있다.


Fig. 4. 
Block backup protocol


Ⅳ. RAM 디스크의 원격 백업, 복구 구현

본 논문에서 제안하는 RAM 디스크 백업 및 복구 방법이 유효함을 보이기 위해 RAM 디스크를 위한 리눅스 커널 모듈을, 블록 백업을 위한 사용자 수준의 소켓 서버를 구현하였다. 본 논문에서의 구현은 RAM 디스크를 위한 모듈을 호스트 시스템의 커널에 적재하고, 백업 서버를 원격 호스트에서 실행하였다. 표 1은 본 논문에서의 구현 환경은 나타내고 있다. RAM 드라이버를 위한 호스트와 백업을 위한 원격 호스트는 단일 보드 컴퓨터(SBC)를 이용하여 구현하였다.

Table 1. 
Implementation envonments
Host A Host B Remote host
kernel 4.9 4.9 4.9
Memory 4GB 32GB 4GB
CPU ARM ARM ARM
Network 1Gb 1Gb 1Gb
SBC Odroid N2 Jetson AGX Odroid N2

본 논문에서 구현한 커널 모듈은 리눅스 커널 4.9 버전을 기반으로 하고 있으며, 그림 1에 나타낸 드라이브 서비스와 백업 및 복구 서비스를 실행한다. 본 논문에서 구현한 RAM 디스크를 위한 커널 모듈은 리눅스 커널에 적재되는 동안에 RAM 디스크를 위한 메모리 공간을 확보하고, 복구 절차를 실행한 후 드라이브 서비스를 시작한다.

4.1 RAM 디스크 커널 모듈 구현

그림 5그림 3의 복구 프로토콜을 실행하는 복구 서비스를 위한 구조를 나타내고 있다. 복구 프로토콜 실행을 위한 원격 백업 서버와의 상호작용은 상대적으로 긴 지연시간이 필요하므로 복구 서비스는 메시지 전송, 메시지 수신, 프로토콜 메시지 처리 기능을 갖는 세 개의 커널 스레드를 생성한다. 세 스레드는 네트워크를 통해 전송 또는 수신되는 메시지를 이용하여 실행을 동기화한다. 프로토콜 메시지 처리 스레드(Protocol thread)는 복구 프로토콜을 위한 요청 메시지를 생성하여 전송 큐(Sender queue)에 추가한 후 응답 메시지가 도착할 때까지 대기한다. 전송 큐에 새로운 메시지가 추가될 때까지 대기하는 전송 스레드(Sender thread)는 큐에서 메시지를 가지고 와 백업 호스트로 전송하고, 다음 메시지가 전송 큐에 추가될 때까지 대기한다. 백업 호스트는 수신한 요청 메시지에 대한 응답 메시지를 전송하며, 이를 수신한 수신 스레드(Receiver thread)는 응답 메시지를 수신 큐(Receiver queue)에 추가한다. 앞서 응답 메시지가 도착할 때까지 대기하는 프로토콜 처리 스레드는 수신 큐에 새로운 메시지가 추가되면 이를 큐에서 가져와 처리함으로써 복구 프로토콜에 따른 절차를 진행한다.


Fig. 5. 
Thread and synchronization for recovery

RAM 디스크 모듈이 호스트의 커널에서 제거될 때까지 원격 호스트에 백업이 계속되므로 이를 이용하여 복구된 RAM 디스크의 파일 시스템은 정상적인 디스크 서비스를 제공할 수 있다. 알고리즘 1은 블록 IO 요청을 처리하는 드라이브 서비스를 위한 알고리즘이며, 요청 큐에 블록 IO 요청이 추가되면 동작한다. 이 서비스는 큐에서 가져온 요청의 종류에 따라 처리 내용이 다르다.

블록 읽기 요청이면 이 서비스는 요청에 있는 블록 번호와 크기를 기반으로 RAM 디스크 메모리 영역에 저장된 블록 내용을 요청의 버퍼로 복사한다. 블록 쓰기 요청이면 이 서비스는 요청의 버퍼에 저장된 블록의 내용을 RAM 디스크 메모리 영역에 복사하고, 이 블록의 백업을 위해 앞서 소개한 프로토콜 스레드를 통해 백업 호스트에 전송한다.

백업 서비스는 파일 접근에 따른 블록 쓰기뿐만 아니라 파일 시스템을 생성하는 동안에 요청되는 블록 쓰기 등 RAM 디스크를 대상으로 한 모든 블록 쓰기 요청에 대해 블록의 내용을 원격 호스트로 전송하므로 RAM 디스크 파일 시스템 전체를 백업할 수 있다.

Algorithm 1. 
Algorithm for drive service
1. fetch Block I/O request from queue
2. if block read request:
3. copy block of RAM to buffer of request
4. else:
5. copy buffer contents of request to block of RAM
6. enqueue block contents in send queue

4.2 백업 서버 구현

백업 서버는 원격 호스트에서 사용자 수준에서 동작하는 소켓 서버이다. 이 서버는 호스트로부터 수신한 DskReq 메시지의 블록 수와 사전 정의된 블록 크기를 기반으로 파일을 생성하고, 이 파일에 RAM 디스크의 블록을 백업한다. 복구 또는 백업 프로토콜의 메시지에 있는 블록 번호는 백업 파일에서 블록의 위치 결정을 위해 사용된다.

4.3 백업 및 복구 실험

본 논문에서 제안하고 구현한 RAM 디스크의 원격 백업 및 복구 동작이 정상적으로 수행되었음을 보이기 위해 표 1에 나타낸 구현 환경에서 원격 호스트에 백업 서버를 실행하고, 호스트 A에 본 논문에서 구현한 RAM 디스크 모듈을 커널에 적재하고, 실험을 하였다. 실험 환경은 블록 크기를 512바이트, 블록 수를 216개 즉, 32MB 크기의 RAM 디스크를 생성하였으며, 1Gbps 연결을 지원하는 스위칭 허브에 두 호스트를 연결하였다. 소용량인 32MB 크기의 RAM 디스크를 생성한 이유는 복구 시간을 짧게 하여 백업 및 복구가 정상적으로 실행됨을 신속하게 확인하기 위함이다.

생성된 RAM 디스크가 정상 작동함을 확인하기 위해 실시한 실험은 파일 시스템 생성, 드라이브 탑재(Mount), 파일 복사, 삭제, 소스 프로그램 편집, 컴파일 및 실행과 드라이브 내림(Un-mount) 등 파일 시스템을 갖는 블록 장치를 이용하여 수행할 수 있는 작업을 성공적으로 수행하였다. 파일 시스템의 정상 복구 확인을 위한 실험은 두 가지 방법으로 진행하였다. 첫 번째 실험은 최초 RAM 디스크를 생성하고, 사용한 호스트 A의 커널에서 모듈을 제거한 후 다시 모듈을 적재하는 과정에서 원격 호스트에 있는 백업을 이용하여 파일 시스템이 성공적으로 복구된 것을 확인하는 것이다. 그림 6은 첫 번째 실험을 위한 실험 시나리오를 나타낸 것이며, 시나리오의 모든 단계는 호스트 A에서 진행되었다.


Fig. 6. 
Backup and recovery test in a single host

두 번째 실험은 호스트 A의 RAM 디스크를 위한 원격 시스템의 백업을 이용하여 호스트 B에 RAM 디스크를 복구하는 것이다.

그림 7은 두 번째 실험을 위한 시나리오를 나타낸 것이며, 호스트 A에서 실행되는 일반적인 작업에 따라 RAM 디스크의 내용이 원격 호스트에 백업되고, 이 백업을 이용하여 호스트 B에서 파일 시스템이 복구되는 것을 확인한느 것이다. 원격 호스트에 있는 백업 파일에 대한 접근은 단 한 개의 호스트만 가능하므로 두 호스트가 동시에 백업 또는 복구할 수 없다. 따라서, 실험은 각 호스트에 대해 순차적으로 진행되었다.


Fig. 7. 
Recovery test in a host which is not a back-up host

성공적 복구의 확인 방법은 복구가 완료된 후 RAM 디스크를 루트 파일 시스템의 한 디렉토리에 탑재하고, 이전에 저장이 되어 있든 파일들이 이 디렉토리에 정상적으로 존재하며, 파일 시스템 관련 각종 명령어의 정상 동작 여부를 확인하는 것이다.

실험 시나리오에 따른 실험 결과는 본 논문에서 구현한 모듈을 호스트 A 또는 호스트 B의 커널에 적재했을 때 RAM 디스크를 위한 파일 시스템이 성공적으로 복구되었고, 파일 시스템 관련 각 명령어 실행에 문제가 없음을 보였다. 다만, 현재의 구현은 64개의 블록 즉, 32KB 단위로 복구를 진행하여 복구에 긴 시간이 필요하였다.

4.4 백업 기능을 갖는 RAM 디스크 성능 평가

RAM 디스크에 구성된 파일 시스템의 블록을 원격 호스트에 백업하는 것은 네트워크를 블록 데이터 전송 오버헤드로 인한 성능 저하가 있다. 따라서, 본 논문에서는 백업 기능을 갖지 않는 RAM 디스크와 본 논문에서 제안하는 방법으로 백업하는 RAM 디스크의 성능 차이 분석을 위해 사용자 수준에서 파일 읽기, 쓰기 성능 평가를 수행하였다. 성능 평가는 생성한 RAM 드라이브에 /dev/zero 파일을 복사(쓰기)한 후, 저장한 파일을 /dev/zero로 복사(읽기)하는 과정을 위해 리눅스 명령어 dd를 사용하였고, 각 블록 크기별 256개 블록을 읽기, 쓰기를 하였으며, 성능은 MB/s 단위로 평가하였다.

그림 8은 본 논문에서 구현한 RAM 디스크와 백업 및 복구 기능을 갖는 RAM 디스크 사이의 읽기 성능을 나타내고 있다. 성능 평가 결과는 본 논문에서 제안한 백업 및 복구 기능이 있는 RAM 디스크의 읽기 성능이 기본 RAM 디스크의 성능보다 낮음을 보였다. 이것은 본 논문에서 제안한 RAM 디스크에서 프로토콜을 처리하는 스레드들이 주기적으로 활성화되어 CPU 자원을 사용하는 것과 함께 최적화되지 않는 디스크 서비스 루틴이 원인인 것으로 판단된다.


Fig. 8. 
Read performance for each block size(units:MB/s)

특히, 프로토콜을 처리하는 스레드는 전송할 메시지가 큐에 추가되거나 수신한 메시지가 있는 경우에 활성화되어 메시지를 처리하지만 메시지를 위한 큐가 비어 있으면 계속 대기 상태를 유지한다.

모듈의 제거 등으로 인해 메시지가 큐에 추가되지 않는 상황에서도 커널 스레드는 계속 대기 상태를 유지하므로 커널에 설치되어 있는 모듈에 대한 제거 및 재탑재 등의 동작을 수행할 수 없었다.

따라서, 메시지를 위한 큐가 비어 있어도 주기적으로 커널 스레드가 활성화되도록 하여 이러한 문제를 해결하였으나 고속으로 읽기를 처리하는 RAM 디스크의 특성으로 인해 이것이 읽기 성능 저하에 상대적으로 많은 영향을 준 것으로 판단된다.

그림 9는 두 구성의 쓰기 성능을 나타내고 있다. 디스크 블록 쓰기 요청은 파일 시스템에서 사용하지 않는 블록을 찾고, 관련 정보를 수정하는 등의 동작이 요구되어 블록 읽기 요청보다 상대적으로 낮은 성능을 보인다. 특히, 블록 쓰기 요청은 블록 백업을 위해 네트워크를 이용한 메시지 교환이 요구되므로 백업 기능을 수행하는 RAM 디스크가 그렇지 않은 것 대비 낮은 성능을 보인다.


Fig. 9. 
Write performance for each block size(units:MB/s)

그림 9에 나타낸 두 구성 사이의 성능 차이는 앞서 소개한 바 있는 주기적으로 활성화되는 커널 스레드와 네트워크를 이용한 메시지 교환으로 인한 것으로 판단이 된다. 또, 블록 할당을 위해 파일 시스템 정보 접근(i-node 등)과 블록 쓰기를 위해 메모리 접근이 요구되므로 기본 RAM 디스크의 성능이 블록 크기가 일정 크기 이상일 때 성능이 포화되는 것은 SBC의 제한된 메모리 밴드 폭(Band width)이 원인인 것으로 판단된다. 그리고, 본 논문에서 제안하는 백업 및 복구 기능을 갖는 RAM 디스크는 성능 평가를 위해 설정한 블록 크기 증가에 따른 데이터 교환 용량이 메모리 밴드 폭과 네트워크의 전송 속도 한계에 도달하지 않아 그 성능이 블록 크기 증가에 정비례하였다.

그림 10은 읽기 성능 대비 쓰기 성능의 비를 나타낸 것이다. 앞서 기술한 바와 같이 블록 쓰기 요청은 블록 처리를 위한 오버헤드가 있으므로 읽기 요청보다 상대적으로 낮은 성능을 보인다. 그림 8에 나타낸 비는 블록 쓰기 요청을 처리할 때 백업을 위한 프로토콜 수행이 쓰기 요청의 성능 저하에 더 큰 영향을 주는지를 확인할 수 있다. 분석한 결과에 따르면 백업을 수행하지 않는 구성과 백업을 수행하는 구성의 상대적 성능 저하는 블록 크기별 다소 차이가 있지만 유의미한 차이가 있다고 할 수 없는 것으로 판단된다.


Fig. 10. 
Ratio of write performace relative to read


Ⅴ. 결론 및 향후 과제

주기억장치가 제공하는 메모리 공간의 일부 영역에 파일 시스템을 구성하여 일반 블록 장치와 같이 디스크 입출력 서비스를 제공하는 RAM 디스크는 높은 디스크 입출력 성능을 보인다. 하지만, 주기억장치를 구성하는 반도체 메모리는 비휘발성이라는 한계로 인해 전원 공급 중단, 하드웨어 고장 등 시스템 오류로 인한 시스템 재시작 상황에서는 RAM 디스크의 데이터가 소실되는 문제가 있다.

RAM 디스크의 데이터 소실 문제를 해결하기 위해 본 논문에서는 블록 쓰기 요청에 대해 원격 호스트에 백업하는 방법을 제안하였다. 블록 쓰기 요청의 대상이 되는 블록을 원격 호스트에 백업하는 방법의 유효성을 보이기 위해 본 논문에서는 RAM 디스크를 위한 드라이브 기능과 백업 및 복구 기능을 갖는 리눅스 커널 모듈을 구현하였다. 본 논문에서 구현한 모듈은 리눅스 커널에 탑재될 때 원격 호스트에 있는 백업된 블록을 이용하여 원래의 파일 시스템을 복구한다.

본 논문에서 제안한 블록 단위 백업 방법은 호스트의 RAM 디스크에 구성된 파일 시스템 전체를 백업하므로 다양한 원인으로 시스템을 재시작하여도 RAM 디스크 내용의 소실을 방지할 수 있다는 점과 다른 호스트에 생성된 RAM 디스크를 위해 파일 시스템을 복원할 수 있어 한 호스트에서 운영하던 RAM 디스크를 다른 호스트로 이전할 수 있다는 점에서 본 연구의 의의를 찾을 수 있다. 그러나, 백업 기능을 수행하는 모듈의 최적화가 되어 있지 않아 기대 성능보다 다소 낮은 성능을 보인다는 점과 원격 호스트의 백업을 이용한 파일 시스템 복구에 긴 시간이 필요하다는 점 등이 본 연구의 한계하고 할 수 있다. 따라서, 향후 연구과제는 모듈의 최적화를 통해 백업 기능이 없는 RAM 디스크 성능에 근접하는 것과 파일 시스템 복구를 위한 프로토콜 및 전송 방법 개선을 통해 복구 시간을 감소시키는 것이다.


Acknowledgments

2021년 한국교통대학교 지원을 받아 수행하였음


References
1. Y. W. Jeong, D. S. Ko, and S. K. Cheong, "A Study on the Storage Medium, Implementation and Performance Tests Using the Open Source Based Volatile Memory", Journal of KIIT, Vol. 13, No. 2, pp. 17-25, Feb. 2015.
2. J. J. Jeong, H. R. Kim, and S. K. Cheong, "A Study on the Performance Evaluation Tool of Hybrid Storage System Combined SSD and HDD", Journal of KIIT, Vol. 14, No. 5, pp. 131-136, May 2016.
3. S. H. Baek and K. W. Park, "A Durable Hybrid RAM Disk with a Rapid Resilience for Sustainable IoT Devices", Sensors, Vol. 20, No. 8, Apr. 2020.
4. M. Bagatin, S. Gerardin, A. Paccagnella, S. Beltrami, E. Gamerlenghi, M. Bertuccio, A. Costantino, A. Zadeh, V. F. Cavrois, and G. Santin, "Effects of heavy-ion irradiation on vertial 2-D NAND flash memories", IEEE Trans. Nucl. Sci, Vol. 65, No. 1, pp. 318-325, Jan. 2018.
5. Wikipedia, https://en.wikipedia.org/wiki/RAM_drive [accessed: Dec. 20, 2022]
6. D. S. Ko and S. K. Cheung, "Experimental Analysis about Database Performance Enhancement using DRAM-based SSD", Journal of KIIT, Vol. 8, No. 12, pp. 231-237, Dec. 2010.
7. T. Y. Son and S. R. Rim, "Block Device Driver of Linux for Accessing the NRD", Journal of the Korea Academia-Industrial cooperation Society, Vol. 16, No. 5, pp. 3399-3406, 2015.
8. J. W. Kim, J. H. Kim, Y. J. Kim, and S. Y. Park, "Parallelizing a Single File Write Operation of Non-Volatile Memory File Systems", Proc. Conf. of Korea Software, pp. 1308-1310, 2018.

저자소개
구 본 근 (Bongen Gu)

1991년 2월 : 인제대학교 전산학과(이학사)

1993년 2월 : 부산외국어대학교 대학원 컴퓨터공학과(공학석사)

1998년 2월 : 경북대학교 대학원 컴퓨터공학과(공학박사)

1998년 4월 ~ 현재 : 한국교통대학교 컴퓨터공학과 교수

관심분야 : 컴퓨터구조, 병렬/분산시스템, ML 기반 IoT