지난 몇 차례의 블로그 게시를 통해, AWS 클라우드 환경에서 HPC 클러스터를 구성하는 핵심 요소인 EC2 인스턴스와 이들을 연결하는 고속 네트워크 인터페이스인 EFA(Elastic Fabric Adaptor) [https://aws.amazon.com/ko/hpc/efa/]에 대해 소개하였습니다. 이제 HPC 클러스터의 마지막 핵심 요소인 스토리지에 대해 알아보겠습니다. 앞으로 4회에 걸쳐 병렬 파일시스템의 개념과 AWS의 완전관리형 병렬 파일시스템인 Amazon FSx for Lustre [https://aws.amazon.com/ko/fsx/lustre/]를 소개해드리겠습니다. 첫 번째 글에서는 HPC 환경에서 스토리지 솔루션으로 병렬 파일시스템이 선호되는 이유에 대해 알아보겠습니다.
스토리지의 I/O 패턴(성능) 및 HPC 스토리지의 특징
컴퓨팅 노드로 구성된 HPC 클러스터에서 계산 작업을 수행하기 위해서는 스토리지에 데이터를 저장하거나 읽는 작업이 필요합니다. 즉, HPC 시스템의 전체 성능을 결정하는 또다른 중요한 요소 중에 하나가 바로 이 스토리지 시스템입니다.
[https://d2908q01vomqb2.cloudfront.net/2a459380709e2fe4ac2dae5733c73225ff6cfee1/2025/01/16/parallel-filesystem-1.png]
스토리지 성능이 부족하면 워크로드 확장이 제한되어 CPU나 GPU와 같은 컴퓨팅 자원이 제대로 활용되지 못하는 문제가 발생합니다. HPC 클러스터를 구축하는 데 90% 이상의 대부분의 비용은 컴퓨팅 자원에서 발생하며, 이는 클러스터의 성능을 좌우하는 핵심 요소입니다. 따라서 스토리지는 빠르고 효율적인 데이터 액세스를 보장하여 이러한 컴퓨팅 자원을 최대한 활용할 수 있도록 최적화되어야 합니다.
일반적으로, 컴퓨팅 리소스가 증가하면 이에 비례하여 전체 시스템의 성능도 증가하는 것이 이상적입니다. 그러나 스토리지가 최적화되어 있지 않다면, 그림1과 같이 데이터 처리 속도가 병목 현상을 일으켜 전체 시스템 성능이 저하될 수 있습니다. 이는 특히 대규모 데이터 세트를 처리하거나 고성능 컴퓨팅(HPC) 환경에서 병렬 작업을 수행할 때 더욱 두드러지게 나타납니다.
스토리지 최적화는 단순히 용량을 늘리는 것뿐만 아니라, 데이터 액세스 속도를 높이고 지연 시간을 줄이는 방식으로 이루어져야 합니다. 이를 통해 컴퓨팅 자원이 효율적으로 활용될 수 있으며, 클러스터 전체의 성능을 극대화할 수 있습니다.
고성능 컴퓨팅(HPC) 환경에서 스토리지의 I/O 성능은 전체 시스템의 효율성을 결정짓는 핵심 요소입니다. 스토리지 성능 최적화를 위해서는 애플리케이션의 I/O 특성을 정확히 파악하고, 이에 맞는 최적화 전략을 수립해야 합니다. 특히 프로세서 성능이 매년 20% 향상되는 데 비해 디스크 접근 시간은 매년 10%씩만 개선된다는 점을 고려할 때 I/O 성능 최적화의 중요성은 더욱 커질 것으로 예상됩니다[1]. HPC는 일반적으로 입력 데이터 대비 더 큰 볼륨의 출력 데이터를 생성하는 특징이 있습니다. 따라서 HPC 환경에서는 이러한 대용량 데이터를 빠르게 처리할 수 있는 파일시스템이 필수적입니다.
I/O에 민감한 애플리케이션들은 고성능 I/O 시스템 없이는 심각한 성능 저하를 경험하게 됩니다. 특히 데이터 읽기와 쓰기 작업을 기다리는 동안 계산 자원이 유휴 상태로 남게 되어, 전체적인 시스템 효율성이 떨어지게 됩니다. 이러한 I/O 병목 현상을 해결하기 위해 다양한 기술이 도입되고 있습니다. 최적화된 NAS(Network Attached Storage), 공유 디스크 파일시스템, 병렬 파일시스템 등의 솔루션이 대표적입니다. 특히, SSD와 같은 고성능 스토리지 미디어의 도입은 컴퓨팅 노드의 I/O 대역폭을 획기적으로 향상시켰습니다.
HPC 스토리지의 분류
HPC 스토리지 환경에서는 그림2와 같이 스토리지 아키텍처에 따라 분산 파일시스템, 공유 디스크 파일시스템, 병렬 파일시스템의 세 가지 주요 타입이 존재합니다. 하나씩 그 특징들에 대해 알아보도록 하겠습니다.
[https://d2908q01vomqb2.cloudfront.net/2a459380709e2fe4ac2dae5733c73225ff6cfee1/2025/01/16/parallel-filesystem-2.png]
분산 파일시스템은 클라이언트/서버 개념을 기반으로 하며, 모든 데이터 접근이 I/O 서버를 통해 이루어집니다. 이는 구축 비용이 저렴하고 운영이 상대적으로 쉽다는 장점이 있어, 소규모의 그리고 높은 성능을 요구하지 않는 HPC 시스템에 이상적입니다. 앞서 언급한 NAS가 바로 대표적인 분산 파일시스템을 탑재한 스토리지 솔루션입니다. 그러나 분산 파일시스템을 탑재한 스토리지 솔루션은 단일 I/O 서버로 인해 성능과 확장성에 제약이 존재합니다. 그림2에서 볼 수 있는 것처럼 모든 트래픽 처리를 단일 I/O 서버에서 수행하기 때문에, 클라이언트 노드의 수가 증가할 수록 성능 저하는 불가피하며 I/O 서버 장애 시 SPOF(single Point of Failure) 문제로 인해 스토리지 접근이 불가합니다.
공유 디스크 파일시스템은 I/O 서버 없이 스토리지 네트워크를 통해 직접 데이터에 접근할 수 있습니다. 공유 디스크 파일시스템의 대표적인 스토리지 솔루션이 바로 아마도 한 번씩은 들어봤을 만한 SAN(Storage Area Network) 입니다. 파이버 채널을 사용하여 높은 성능을 제공하는 장점이 존재하지만, 전용의 스위치와 케이블, 어댑터 등으로 인한 높은 구축 비용이 최대 단점입니다.
병렬 파일시스템은 데이터를 여러 I/O 서버에 분산하여 저장합니다. 오브젝트/파일/블록 수준의 접근이 가능하며 파일 스트라이핑(striping)을 지원합니다. 따라서 매우 높은 확장성과 성능을 제공하여 I/O 중심의 HPC 시스템에 이상적이지만, 운영의 복잡성이 증가한다는 단점이 있습니다. Lustre 나 IBM의 Spectrum Scale이 대표적인 병렬 파일 스토리지 옵션입니다.
각 시스템은 고유한 장단점을 가지고 있어, HPC 환경의 규모와 요구사항에 따라 적절한 파일시스템을 선택하는 것이 중요합니다. 그러나 대규모 HPC 환경에서는 높은 확장성과 고성능을 제공하는 병렬 파일시스템이 선호되는 것은 분명한 추세입니다. 기존의 NFS와 같은 전통적인 파일시스템으로는 성능 요구사항을 충족시키기 어렵습니다. 일례로, 지구상에서 가장 성능이 우수한 슈퍼컴퓨터인 Top500에는 거의 대부분 스토리지 솔루션으로 병렬 파일시스템이 채택되어 있습니다.
병렬 파일시스템의 개요
앞서 간단히 병렬 파일시스템에 대해 언급하였지만, 병렬 파일시스템이 무엇이고 어떤 장점들이 존재하는지 좀 더 자세히 알아보도록 하겠습니다. 병렬 파일시스템은 여러 클라이언트가 동시에 파일시스템에 접근할 수 있도록 설계된 고급 파일시스템 입니다. 병렬 파일시스템은 다음과 같은 특징을 가지고 있습니다.
* 동시 접근성(concurrent access): 병렬 파일시스템의 가장 큰 특징은 여러 클라이언트가 동시에 하나의 파일에 대해 읽기와 쓰기 작업을 수행할 수 있다는 점입니다. NFS 와 같은 일반 공유 파일시스템에서는 파일 기반의 잠금(file based locking)을 사용하기 때문에 특정 클라이언트가 특정 파일을 점유하고 있으면 다른 클라이언트들은 사용이 완료될 때까지 접근이 불가합니다. HPC 워크로드는 대규모의 데이터셋을 처리하며, 이 과정에서 일반적으로 상당한 양의 중간 결과물과 최종 결과물을 생성합니다. 따라서 이러한 환경에서 NAS와 같은 파일시스템을 사용할 경우 성능이 필연적으로 저하 될 수 밖에 없습니다. 이와는 달리 병렬 파일시스템에서는 블록 기반의 잠금(block based locking)을 사용하여 진정한 의미의 동시 접근이 가능합니다. 따라서 HPC 환경에서 요구되는 높은 처리량과 낮은 지연시간을 제공할 수 있습니다.
* 데이터의 분산: 병렬 파일시스템에서 데이터는 청크(chunk)라는 작은 단위로 쪼개져 여러 데이터 서버에 걸쳐 분산 저장됩니다. 클라이언트는 여러 서버에 분산된 데이터에 동시에 접근할 수 있어 높은 I/O처리량을 확보할 수 있습니다. 스토리지 보호 및 성능 향상 기술인 RAID(Redundant Array of Independent Disk) 기술에서 RAID0의 특징을 알고 계시다면 충분히 이해가 될 내용입니다.
* 투명성: 클라이언트 입장에서는 이러한 병렬 처리가 완전히 투명하게 이루어집니다. 즉, 클라이언트는 마치 로컬 파일시스템을 사용하는 것처럼 느끼며, 실제 데이터가 여러 서버에 분산되어 있다는 사실을 인식할 필요가 없습니다.
* 충돌 관리: 병렬 파일시스템은 로컬 파일시스템의 기본 기능 외에도 여러 클라이언트 간의 잠재적 충돌을 효율적으로 관리해야 합니다. 병렬 파일시스템 특성상 여러 개의 클라이언트가 하나의 파일에 동시에 접근할 수 있기 때문에 동시성에 대한 제어는 필수입니다. 이를 위해 주로 잠금(lock) 메커니즘을 사용하여 특정 파일이나 디렉토리에 대한 동시 접근을 제어하고 제한합니다. 이는 데이터의 일관성을 유지하면서도 효율적인 병렬 접근을 가능하게 합니다.
* 확장성: 시스템은 필요에 따라 I/O노드를 추가하거나 제거할 수 있는 유연한 구조를 가지고 있어, 스토리지 용량과 성능을 쉽게 확장할 수 있습니다.
[https://d2908q01vomqb2.cloudfront.net/2a459380709e2fe4ac2dae5733c73225ff6cfee1/2025/01/16/parallel-filesystem-3.png]
병렬 파일시스템의 아키텍처
병렬 파일시스템은 일반적으로 그림4와 같이 구성됩니다. 아키텍처에 대해 하나씩 알아보도록 하겠습니다.
그림 상단의 클라이언트는 파일시스템에서 데이터를 읽거나 쓰는 역할을 수행하는 주체입니다. 그림 하단의 오른쪽에 존재하는 메타데이터 서버는 파일시스템의 핵심 구성 요소로, 메타데이터 관리와 스토리지 디스크의 데이터 배치를 담당합니다. 또한 동시 접근 제어를 위한 잠금 기능을 관리하여, 여러 클라이언트가 동일한 파일의 같은 부분을 동시에 수정하는 것을 방지합니다. 데이터 서버(그림2에서의 I/O 서버)는 실제 파일 데이터를 저장하는 역할을 수행합니다. 일부 병렬 파일시스템에서는 효율성을 위해 데이터 서버와 메타데이터 서버가 동일한 서버에서 운영될 수 있습니다. 네트워크 인프라는 이러한 모든 구성 요소들을 연결하는 중요한 역할을 합니다. 고성능 컴퓨팅 환경에서는 기가비트 이더넷, 인피니밴드(Infiniband)와 같은 고속 네트워크를 사용하여 I/O 경로를 최적화하고 더 높은 대역폭을 제공합니다. AWS 클라우드 환경의 고속 네트워크 환경은 다음의 블로그 [https://aws.amazon.com/ko/blogs/tech/aws-efaelastic-fabric-adaptor/]를 참고하시기 바랍니다. 실제 데이터를 저장하는 스토리지 디스크 영역은 안정성과 성능 향상을 위하여 RAID기술이 적용된 것을 확인할 수 있습니다.
[https://d2908q01vomqb2.cloudfront.net/2a459380709e2fe4ac2dae5733c73225ff6cfee1/2025/01/16/parallel-filesystem-4.png]
병렬 파일시스템의 아키텍처>
병렬 파일시스템의 데이터 분산 처리 방식
앞서 병렬 파일시스템은 데이터를 고정된 크기의 작은 단위(청크: chunk)로 쪼개어(스트라이핑: striping) 여러 데이터 서버에 분산 저장함으로써 높은 I/O 성능을 제공한다고 이야기 하였습니다. 이와 관련해서 그림5를 통해 보다 구체적으로 설명하겠습니다.
그림 5에서 특정 병렬 파일시스템은 6개의 데이터 서버(그림2의 I/O 서버)와 2개의 메타데이터 서버로 구성되어 있다고 가정하겠습니다. 또한 한 개의 작은 파일과 한 개의 큰 파일이 이러한 병렬 파일시스템에 저장될 필요가 있다고 가정하겠습니다. 이 예에서 작은 파일(bl90)의 경우, 별도의 데이터 스트라이핑 작업 없이 4번째 데이터 서버에 저장됩니다. 그러나 큰 파일의 경우, 높은 I/O 성능을 확보하기 위해 모두 8개의 데이터 청크(bl00 ~ bl07)로 쪼개진 후 라운드 로빈(round robin) 형태로 RAID 로 구성된 디스크 스토리지에 분산 저장됩니다. 이 때 모든 서버들은 네트워크로 연결되어 있어 효율적인 데이터 관리와 접근이 가능하며, 전체 시스템이 하나의 통합된 파일시스템처럼 작동합니다.
[https://d2908q01vomqb2.cloudfront.net/2a459380709e2fe4ac2dae5733c73225ff6cfee1/2025/01/16/parallel-filesystem-5.png]
병렬 파일시스템의 데이터 분산 저장 기법>
동시성을 보장하는 병렬 파일시스템의 잠금(LOCK) 메커니즘
병렬 파일시스템에서는 데이터와 메타데이터의 일관성을 보장하기 위해 잠금 기능을 사용합니다. 이 기능은 여러 프로세스가 동시에 같은 정보에 접근하는 것을 제한하는 역할을 합니다. 이러한 메커니즘은 읽기/쓰기 작업의 원자성을 보장하는 데 매우 중요한 역할을 수행합니다. 예를 들어, 한 프로세스가 데이터 블록을 쓰는 동시에, 다른 프로세스가 그 블록을 읽으려고 할 때 잠금 시스템이 작동합니다.
잠금 기능을 사용함으로써 읽기 프로세스는 데이터 블록의 변경 전 상태나 변경 후 상태 중 하나만을 읽을 수 있게 됩니다. 즉, 읽기 프로세스가 쓰기 프로세스보다 먼저 잠금 기능을 획득하면 변경 전 데이터를, 나중에 획득하면 변경 후 데이터를 읽게 됩니다. 이를 통해 데이터의 일관성이 유지되며, 변경 중인 불완전한 상태의 데이터를 읽는 상황을 방지할 수 있습니다.
잠금 기능의 관리 방식은 파일시스템에 따라 다양합니다. 일부 NFS와 같은 파일시스템에서는 파일 전체에 대해 잠금 기능을 적용하는 파일 수준의 잠금 기능 관리를 사용하고, 병렬 파일시스템과 같은 다른 시스템에서는 파일의 특정 부분에 대해 잠금 기능을 적용하는 스트라이프 수준의 잠금 관리를 사용합니다. 이러한 잠금 시스템을 통해 병렬 파일시스템은 여러 프로세스가 동시에 데이터에 접근하는 복잡한 환경에서도 데이터의 일관성과 무결성을 효과적으로 유지할 수 있습니다. 이는 대규모 병렬 컴퓨팅 환경에서 안정적이고 효율적인 데이터 관리를 가능하게 하는 핵심 메커니즘입니다.
HPC 클러스터 관점에서의 파일시스템
지금까지 병렬 파일시스템을 여러 관점에서 설명하였습니다. 또한 이 블로그를 통해 병렬 파일시스템이 HPC 시스템에 필수적이라는 사실도 알게 되었습니다. 그렇다면 HPC 클러스터를 구성하기 위해서는 병렬 파일시스템만이 필요할까요? 정답은 그렇지 않다는 점입니다.
HPC 클러스터 관점에서 파일시스템은 그림6과 같이 크게 로컬 파일시스템과 글로벌 파일시스템으로 구분할 수 있습니다. 모든 계산에 관여하는 컴퓨팅 노드들은 자체 로컬 파일시스템을 가지고 있으면서 글로벌 파일시스템을 바라보고 있는 형태입니다.
로컬 파일시스템은 개별 노드에서만 접근이 가능한 스토리지 시스템입니다. ZFS나 EXT3/4와 같은 파일시스템을 사용하며, 해당 노드에서만 독점적으로 접근할 수 있는 특징이 있습니다. 다른 노드에서는 직접적인 접근이 불가능합니다. 이는 노드 별 독립적인 데이터 처리가 필요한 경우에 활용됩니다.
글로벌 파일시스템은 클러스터 전체에서 접근이 가능한 공유 스토리지 시스템입니다. 여기서는 병렬 파일시스템의 형태로 구현되어 있으며, 클러스터의 모든 노드에서 동일한 데이터에 접근할 수 있습니다. 이러한 글로벌 파일시스템은 여러 노드가 동시에 데이터를 공유하고 접근해야 하는 HPC 환경에서 매우 중요한 역할을 합니다. 각 노드는 자신의 로컬 파일시스템을 가지고 있으면서도 동시에 글로벌 파일시스템에 접근할 수 있어, 효율적인 데이터 관리와 공유가 가능합니다.
HPC 환경에서는 이러한 두 가지 스토리지 시스템을 목적에 맞게 조합하여 사용합니다. 로컬 스토리지는 빠른 I/O 처리가 필요한 임시 데이터나 노드의 특정 데이터를 저장하는 데 사용되며, 글로벌 스토리지는 전체 클러스터에서 공유해야 하는 데이터나 영구 저장이 필요한 데이터를 저장하는 데 활용됩니다. 물론 LS-DYNA와 같은 일부 구조 해석 솔버(Solver)의 경우에는 병렬 파일 스토리지 보다는 로컬 스토리지를 사용할 경우 더 높은 성능을 확보하는 경우도 존재합니다.
[https://d2908q01vomqb2.cloudfront.net/2a459380709e2fe4ac2dae5733c73225ff6cfee1/2025/01/16/parallel-filesystem-6.png]
온프레미스(ON-PREMISE) 환경의 병렬 파일 스토리지
현재 온프레미스(on-premise) 스토리지 시장에서 병렬 파일시스템을 탑재한 주요 스토리지들은 다음과 같습니다. 만약 다음과 같은 스토리지 제품을 발견한다면, 병렬 파일시스템이 탑재되어 고성능을 제공하는 스토리지라고 생각하시면 됩니다.
파일시스템 제조사 제품명 Lustre Infortend EonStor GS SAS HDD Series Dell Ready Solutions for HPC Lustre Storage DDN EXAScaler IBM Spectrum Scale IBM ESS 3500 Storage Scale System 6000
맺음말
이번 글에서는 병렬 파일시스템의 개념과 특징을 최대한 쉽게 설명하고자 했습니다. 정리하자면, 병렬 파일시스템은 동시 접근성과 데이터 분산 기능을 통해 고성능을 제공하고 확장 가능한 구조를 지원합니다. 이러한 특징 덕분에 대규모 컴퓨팅 노드로 구성된 HPC 환경에 매우 적합한 스토리지 솔루션입니다. 병렬 파일시스템을 도입하면 데이터 접근 속도가 크게 향상되어, 전통적인 엔지니어링 시뮬레이션은 물론 최근에는 초거대 언어 모델을 포함한 머신 러닝의 분산 학습에도 필수적인 인프라 요소로 자리잡았습니다.
다음 블로그에서는 고성능 병렬 파일시스템 중에서 가장 대표적인 파일시스템인 Lustre에 대해 자세히 알아보겠습니다. Lustre는 현재 AWS에서 제공하는 Amazon FSx for Lustre 서비스의 기반이 되는 원천 기술이기도 합니다.
참고자료
[1] https://arnabkrpaul.github.io/publications/hipc20.pdf [https://arnabkrpaul.github.io/publications/hipc20.pdf]