이 블로그에서는 최근에 발표된 Dell EMC Ready Solutions for HPC BeeGFS Storage 의 주요 기능에 대해 설명합니다. 이 블로그는 BeeGFS 고성능 스토리지 솔루션에 관한 시리즈의 세 번째 블로그입니다. 첫 번째 블로그에서 솔루션 릴리스를 발표했습니다. 두 번째 블로그에서는 Dell EMC Ready Solutions for HPC BeeGFS 스토리지의 확장성에 대해 설명했습니다. 또한 기본 구성, 유연한 확장 가능한 구성 및 다양한 구성의 실제 측정된 순차적 읽기/쓰기 성능에 대한 세부 정보를 제공했으며, 이는 솔루션의 서버 수와 관련하여 확장성이 선형적임을 보여 줍니다. 현재 블로그에서는 BeeGFS의 기본 제공 스토리지 타겟 벤치마크인 "StorageBench"의 사용을 강조합니다.
BeeGFS는 www.beegfs.io 다운로드할 수 있는 오픈 소스 파일 시스템입니다. 여러 스토리지 타겟에 데이터를 분산하는 병렬 파일 시스템입니다. 논리 파일 시스템을 기본 스토리지 하드웨어에서 분리하는 소프트웨어 정의 스토리지로, 사용자가 데이터가 저장되는 방법과 위치를 정의할 수 있습니다. 파일 시스템 소프트웨어에는 고가용성, 할당량 적용 및 액세스 제어 목록과 같은 엔터프라이즈 기능이 포함되어 있습니다. BeeGFS의 주요 특징은 사용 편의성, 확장성 및 유연성입니다. 간편한 사용은 모든 서버 측 구성 요소가 사용자 공간 데몬이라는 사실에서 비롯되며, 클라이언트는 커널 자체에 패치가 필요하지 않은 커널 모듈입니다. 서버를 재부팅하지 않고 모든 BeeGFS 구성 요소를 설치하고 업데이트할 수 있습니다. 따라서 다운타임 없이 기존 시스템에 클라이언트와 서버를 추가할 수 있습니다. 서버를 추가하고 드라이브를 추가하면 파일 시스템의 성능과 용량을 여기에 링크된 블로그에서 더 많이 확장할 수 있습니다. BeeGFS는 여러 Linux 배포를 지원하며 모든 POSIX 호환 로컬 파일 시스템과 함께 작동하도록 설계되었습니다. 또한 BeeGFS는 동일한 서버에서 지정된 서비스의 여러 인스턴스를 실행할 수 있습니다.
Dell EMC Ready Solutions for HPC BeeGFS Storage는 BeeGFS 파일 시스템의 모든 주요 기능을 활용하며 고성능을 위해 엔지니어링되었습니다. 이 솔루션은 PowerEdge R740xd 서버로 메타데이터 및 데이터를 저장하고 처리/처리합니다. 각 PowerEdge R740xd 서버에는 드라이브 기술의 두 번째 주요 도약으로 간주되는 24개의 1.6TB 인텔 P4600 NVMe SSD가 있으며, SSD가 첫 번째입니다. HPC 환경에서는 스크래치 공간이 종종 제한 요소일 수 있습니다. 너무 작거나 느릴 수 있습니다. Dell EMC Ready Solutions for HPC BeeGFS Storage는 스크래치 솔루션으로 사용되도록 설계되었으며 BeeGFS 파일 시스템을 사용하여 스크래치 스토리지를 제공합니다.
BeeGFS에는 네트워크 또는 스토리지 NetBench와 StorageBench 를 각각 특성화하거나 평가하는 데 도움이 되는 2가지 벤치마킹 툴이 내장되어 있습니다. NetBench 모드가 활성화되면 서버는 데이터를 쓰는 대신 수신된 쓰기 요청을 삭제합니다. 마찬가지로 읽기 요청의 경우 기본 파일 시스템에서 읽는 대신 메모리 버퍼만 클라이언트로 전송됩니다. NetBench 모드는 기본 디스크와 무관하게 네트워크 스트리밍 처리량을 테스트하기 위한 것입니다. 반면 StorageBench는 네트워크 성능과 관계없이 기본 파일 시스템의 스트리밍 처리량을 측정하기 위한 것입니다. StorageBench는 네트워크를 사용하지 않는 스토리지 타겟 벤치마크입니다. Storage-bench 명령은 단순히 스토리지 타겟으로 요청을 전송하여 데이터 쓰기/읽기를 시작합니다. 이렇게 하면 네트워크의 영향을 제거할 수 있습니다. 스토리지 벤치의 출력은 네트워크 성능이 이상적인 경우 시스템이 달성할 수 있는 최상의 성능입니다. 이 블로그에서는 StorageBench를 사용하여 다양한 스토리지 타겟의 성능을 비교하여 결함이 있거나 잘못 구성된 타겟을 식별하는 방법을 설명합니다.
StorageBench는 마운트된 파일 시스템을 사용하지 않습니다. StorageBench를 실행하면 파일당 타겟이 하나뿐입니다. Storagebench는 테스트 파일이 생성되는 시스템의 모든 스토리지 타겟에 대해 테스트 스레드 수와 동일한 디렉토리를 생성합니다. 데이터는 각 스토리지 타겟에 사용할 수 있는 낮은 수준의 처리량을 표시하기 위해 이 데이터로 직접 스트리밍됩니다. 네트워크 통신이 없으면 파일 스트라이핑을 시뮬레이션할 수 없습니다. 따라서 스토리지 벤치마크 결과는 스트라이핑이 비활성화된 클라이언트 IO와 유사합니다. 실제 벤치마크가 실행되면 기본 스트라이핑 패턴이 채택되면 파일이 4개의 스토리지 타겟에 걸쳐 스트라이핑됩니다.
다양한 스토리지 타겟을 테스트하기 위해 블로그에 Dell EMC BeeGFS 스토리지 솔루션의 확장성에 대해 설명한 중소형 구성을 사용했습니다. 두 구성 모두 RAID 1에 구성된 메타데이터 타겟 수가 동일합니다. 스토리지 타겟의 RAID 구성은 다릅니다. 소규모 설정에는 6개 드라이브 중 RAID 0에 구성된 스토리지가 있지만 중간 구성에는 RAID 10/6 드라이브에 구성된 스토리지 타겟이 있습니다. 중소 규모 설정에 구성된 스토리지 타겟은 아래 표로 되어 있습니다.
표 1 테스트된 구성 | ||
---|---|---|
구성 | 중간 - 스토리지 타겟용 RAID 10 | 소형 - 스토리지 타겟용 RAID 0 |
메타데이터 타겟 수 | 6 | 6 |
메타데이터 서비스 인스턴스 수 | 6 | 6 |
스토리지 서버 수 | 5 | 2 |
스토리지 타겟 수 | 22 | 10 |
서버당 스토리지 서비스 수 | 4 | 4 |
NUMA 영역당 스토리지 서비스 수 | 2 | 2 |
스토리지 서비스 인스턴스당 타겟 수 | 2 | 2 |
참고: 위의 중간 설정 구성은 StorageBench 툴을 사용하여 다른 RAID 구성으로 구성된 스토리지 타겟의 처리량을 테스트하기 위한 것입니다.
스토리지 벤치마크는 beegfs-ctl 툴을 사용하여 시작 및 모니터링됩니다. beegfs-utils 패키지는 스토리지 타겟 벤치마크를 실행하는 데 사용할 수 있는 beegfs-ctl 명령줄 툴을 제공합니다. 다음 예에서는 입출력 블록 크기가 512KB인 모든 BeeGFS 스토리지 서버의 모든 타겟에서 쓰기 벤치마크를 시작하고, 타겟당 16개의 스레드를 사용하여 각각 200Gb의 데이터를 자체 파일에 기록합니다.
[root@stor1 ~]# beegfs-ctl --storagebench --alltargets --write --blockize=512K --size=200G --threads=16
Write storage benchmark가 시작되었습니다.
beegfs-ctl의 --status 인수로 상태를 쿼리할 수 있습니다.
서버 벤치마크 상태:
실행 중: 10
"실행 중: 10" 출력은 시스템에 구성된 총 10개의 스토리지 타겟이 있음을 나타냅니다.
모든 타겟의 벤치마크 상태/결과를 쿼리하려면 다음 명령을 실행할 수 있습니다.
[root@stor1 ~]# beegfs-ctl --storagebench --alltargets --status
Server benchmark status:
finished: 10
쓰기 벤치마크 결과:
최소 처리량: 4692435 KiB/s nodeID: stor1-numa0-2 [ID: 6], targetID: 최대 처리량 50
: 5368537 KiB/s nodeID: meta-stor-numa1-2 [ID: 2], targetID: 평균 처리량 48
개: 4907091 KiB/s
총 처리량: 49070915 KiB/s
위의 명령에 세부 사항을 추가하면 모든 타겟의 목록과 해당 처리량이 표시됩니다.
[root@meta-stor ~]# beegfs-ctl --storagebench --alltargets --status --verbose
Server benchmark status:
finished: 10
쓰기 벤치마크 결과:
최소 처리량: 4692435 KiB/s nodeID: stor1-numa0-2 [ID: 6], targetID: 6
최대 처리량: 5368537 KiB/s nodeID: meta-stor-numa1-2 [ID: 2], targetID: 2
평균 처리량: 4907091 KiB/s
총 처리량: 49070915 KiB/s
list of all targets:
1 5368477 KiB/s nodeID: meta-stor-numa1-1 [ID: 1]
2 5368537 KiB/s nodeID: meta-stor-numa1-2 [ID: 2]
3 4706368 KiB/s nodeID: stor1-numa0-1 [ID: 3]
4 4896077 KiB/s nodeID: stor1-numa1-1 [ID: 4]
5 4872876 KiB/s nodeID: stor1-numa1-2 [ID: 5]
6 4692435 KiB/s nodeID: stor1-numa0-2 [ID: 6]
7 4879054 KiB/s nodeID: stor2-numa1-2 [ID: 7]
8 4864737 KiB/s nodeID: stor2-numa1-1 [ID: 8]
9 4696152 KiB/s nodeID: stor2-numa0-1 [ID: 9]
10 4726202 KiB/s nodeID: stor2-numa0-2 [ID: 10]
RAID 0에 구성된 스토리지 타겟당 평균 처리량은 5.02GB/s입니다.
다음 예에서는 입출력 블록 크기가 512KB인 모든 BeeGFS 스토리지 서버의 모든 타겟에서 쓰기 벤치마크를 시작하고, 타겟당 16개의 스레드를 사용하여 각각 200Gb의 데이터를 자체 파일에 기록합니다.
[root@node001 ~]# beegfs-ctl --storagebench --alltargets --write --blockize=512K --size=200G --threads=16
Write storage benchmark가 시작되었습니다.
beegfs-ctl의 --status 인수로 상태를 쿼리할 수 있습니다.
서버 벤치마크 상태:
실행 중: 22
위의 명령에 세부 사항을 추가하면 모든 타겟의 목록과 해당 처리량이 표시됩니다.
[root@node001 ~]# beegfs-ctl --storagebench --alltargets --status --verbose
Server benchmark status:
finished: 22
쓰기 벤치마크 결과:
최소 처리량: 2705987 KiB/s nodeID: node006-numa0-1 [ID: 19], targetID: 최대 처리량 1
: 3364311 KiB/s nodeID: node001-numa1-1 [ID: 1], targetID: 평균 처리량 1
: 3212845 KiB/s
총 처리량: 70682603 KiB/s모든 타겟 목록:
1 3364311 KiB/s nodeID: node001-numa1-1 [ID: 1]
2 3361591 KiB/s nodeID: node001-numa1-2 [ID: 2]
3 3309530 KiB/s nodeID: node002-numa0-1 [ID: 3]
4 3312840 KiB/s nodeID: node002-numa0-2 [ID: 4]
5 3332095 KiB/s nodeID: node002-numa1-1 [ID: 5]
6 3323319 KiB/s nodeID: node002-numa1-2 [ID: 6]
7 3313000 KiB/s nodeID: node003-numa0-1 [ID: 7]
8 3321214 KiB/s nodeID: node003-numa0-2 [ID: 8]
9 3335072 KiB/s nodeID: node003-numa1-1 [ID: 9]
10 3339743 KiB/s nodeID: node003-numa1-2 [ID: 10]
11 3302175 KiB/s nodeID: node004-numa0-1 [ID: 11]
12 3309474 KiB/s nodeID: node004-numa0-2 [ID: 12]
13 3329879 KiB/s nodeID: node004-numa1-1 [ID: 13]
14 3328291 KiB/s nodeID: node004-numa1-2 [ID: 14]
15 3306132 KiB/s nodeID: node005-numa0-1 [ID: 15]
16 3307096 KiB/s nodeID: node005-numa0-2 [ID: 16]
17 3318436 KiB/s nodeID: node005-numa1-1 [ID: 17]
18 3329684 KiB/s nodeID: node005-numa1-2 [ID: 18]
19 2705987 KiB/s nodeID: node006-numa0-1 [ID: 19]
20 2716438 KiB/s nodeID: node006-numa0-2 [ID: 20]
21 2707970 KiB/s nodeID: node006-numa1-1 [ID: 21]
22 2708326 KiB/s nodeID: node006-numa1-2 [ID: 22]
스토리지 타겟당 평균 처리량은 3.29GB/s입니다.
두 개의 서로 다른 BeeGFS 설정에서 수행된 StorageBench 벤치마크 테스트 결과, 하나는 RAID 0에 구성된 스토리지 타겟, 다른 하나는 RAID 10에 구성된 스토리지 타겟을 사용한 결과에서 RAID 10이 아닌 RAID 0에 구성된 스토리지 타겟에서 쓰기 성능이 더 우수하다는 것을 알 수 있습니다. dd 명령을 사용하여 1M 블록 크기 및 "oflag=direct"가 있는 10G 파일을 쓸 때 RAID 0에 구성된 소규모 시스템의 평균 처리량은 약 5.1GB/s였고 RAID 10에 구성된 중간 시스템의 평균 처리량은 스토리지벤치 툴을 사용하여 얻은 결과와 유사합니다.
[root@node001 ~]# beegfs-ctl --storagebench --alltargets --status --verbose
Server benchmark status:
finished: 33
벤치마크 결과 읽기:
최소 처리량: 2830479 KiB/s nodeID: node003-numa1-2 [ID: 14], targetID: 최대 처리량 14
개: 3025500 KiB/s nodeID: node005-numa0-1 [ID: 22], targetID: 22
평균 처리량: 2917836 KiB/s
총 처리량: 96288596 KiB/s
list of all targets:
1 2950039 KiB/s nodeID: node001-numa1-1 [ID: 1]
2 2956121 KiB/s nodeID: node001-numa1-2 [ID: 2]
3 2954473 KiB/s nodeID: node001-numa1-3 [ID: 3]
4 2957658 KiB/s nodeID: node002-numa0-1 [ID: 4]
5 2947109 KiB/s nodeID: node002-numa0-2 [ID: 5]
6 2969886 KiB/s nodeID: node002-numa0-3 [ID: 6]
7 2892578 KiB/s nodeID: node002-numa1-1 [ID: 7]
8 2886899 KiB/s nodeID: node002-numa1-2 [ID: 8]
9 2888972 KiB/s nodeID: node002-numa1-3 [ID: 9]
10 2861995 KiB/s nodeID: node003-numa0-1 [ID: 10]
11 2874314 KiB/s nodeID: node003-numa0-2 [ID: 11]
12 2879096 KiB/s nodeID: node003-numa0-3 [ID: 12]
13 2832635 KiB/s nodeID: node003-numa1-1 [ID: 13]
14 2830479 KiB/s nodeID: node003-numa1-2 [ID: 14]
15 2830971 KiB/s nodeID: node003-numa1-3 [ID: 15]
16 2986890 KiB/s nodeID: node004-numa0-1 [ID: 16]
17 2979197 KiB/s nodeID: node004-numa0-2 [ID: 17]
18 2983958 KiB/s nodeID: node004-numa0-3 [ID: 18]
19 2897974 KiB/s nodeID: node004-numa1-1 [ID: 19]
20 2900880 KiB/s nodeID: node004-numa1-2 [ID: 20]
21 2904036 KiB/s nodeID: node004-numa1-3 [ID: 21]
22 3025500 KiB/s nodeID: node005-numa0-1 [ID: 22]
23 3021558 KiB/s nodeID: node005-numa0-2 [ID: 23]
24 3017387 KiB/s nodeID: node005-numa0-3 [ID: 24]
25 2921480 KiB/s nodeID: node005-numa1-1 [ID: 25]
26 2930226 KiB/s nodeID: node005-numa1-2 [ID: 26]
27 2930548 KiB/s nodeID: node005-numa1-3 [ID: 27]
28 2900018 KiB/s nodeID: node006-numa0-1 [ID: 28]
29 2898520 KiB/s nodeID: node006-numa0-2 [ID: 29]
30 2907113 KiB/s nodeID: node006-numa0-3 [ID: 30]
31 2855079 KiB/s nodeID: node006-numa1-1 [ID: 31]
32 2853527 KiB/s nodeID: node006-numa1-2 [ID: 32]
33 2861480 KiB/s nodeID: node006-numa1-3 [ID: 33]
위의 출력에서 모든 스토리지 타겟이 균일하게 수행되며 시스템에 결함이 있는 타겟이 없는 것이 분명합니다.