IO500
개요
IO500은 대역폭 중심 워크로드와 메타데이터 중심 워크로드를 함께 평가하는 HPC 스토리지 벤치마크 스위트입니다. IOR, mdtest, find 워크로드를 표준화된 12단계 실행 및 점수 모델로 묶습니다. 한 번의 실행으로 데이터 전송과 메타데이터 동작을 모두 확인할 수 있어 MASS 인수 테스트, 비교 측정, 반복 가능한 회귀 점검에 유용합니다.
이 스위트는 스토리지 성능의 서로 다른 영역을 평가하는 세 가지 벤치마크 도구를 사용합니다.
- IOR는 여러 프로세스가 파일을 병렬로 읽고 쓰면서 데이터 대역폭을 측정합니다. IO500은 대용량
순차 전송에는
ior-easy, 더 작고 까다로운 접근 패턴에는ior-hard를 사용합니다. - mdtest는 많은 파일과 디렉터리를 생성하고 검색한 뒤 삭제하면서 메타데이터 작업 처리율을 측정합니다. easy와 hard 단계는 서로 다른 디렉터리 배치와 경합 수준에서 파일시스템의 처리 능력을 보여줍니다.
- find는 파일시스템 namespace를 병렬로 순회하는 성능을 측정합니다. IO500은 번들 pfind 도구를 사용해 여러 MPI rank에서 벤치마크 디렉터리 트리를 순회하고 항목을 찾습니다.
mass-client 패키지에는 전체 IO500 도구 체인과 MASS용 실행 스크립트가 포함됩니다. 번들
벤치마크를 실행하기 위해 upstream 소스 트리를 별도로 내려받거나 빌드할 필요가 없습니다.
사전 요구 사항
- 참여하는 모든 테스트 호스트에
mass-client패키지를 설치합니다. - 실행 스크립트를 시작할 호스트에 대상 MASS 볼륨을 마운트합니다. 실행 스크립트는
DFS_PATH로 지정한 마운트 경로를 사용해 벤치마크 대상을 식별하며, 원격 rank는 번들 클라이언트 런타임을 통해 같은 대상에 접근합니다. - 다중 호스트 실행에서는 실행 사용자가 모든 참여 호스트에 암호 없이 SSH로 접속하고 암호 없이
sudo를 실행할 수 있도록 구성합니다. 또는RSH_USER=root를 지정하고 암호 없는 root SSH를 구성합니다.
MASS에서 IO500 실행
MPI rank는 I/O request를 보내는 프로세스입니다. NPROCS는 각 호스트에서 실행할 rank 수를
지정합니다. 다중 호스트 테스트의 전체 rank 수는 NPROCS와 호스트 수를 곱한 값입니다.
예를 들어 HOSTS=client01,client02 NPROCS=16이면 각 호스트에서 16개씩, 총 32개의 rank를
실행합니다.
- 기본 stonewall 시간인 30초를 사용해 짧은 단일 호스트 검증 테스트를 실행합니다.
NPROCS=16 DFS_PATH=/mnt/poc-home \
/opt/boostx-sds/io500/scripts/io500.sh
- 여러 클라이언 트의 집계 성능을 측정하려면 쉼표로 구분한 호스트 목록을 지정합니다.
NPROCS는 각 호스트에서 실행할 rank 수입니다.
HOSTS=client01,client02,client03,client04 NPROCS=16 DFS_PATH=/mnt/poc-home \
/opt/boostx-sds/io500/scripts/io500.sh
- 검증 실행이 성공하면 IO500 유효성 조건을 충족하도록 stonewall 시간을 300초 이상으로 설정합니다.
HOSTS=client01,client02,client03,client04 NPROCS=16 \
DFS_PATH=/mnt/poc-home STONEWALL=300 \
/opt/boostx-sds/io500/scripts/io500.sh
root가 아닌 사용자가 스크립트를 시작하면 sudo -E로 스크립트를 다시 실행합니다. 기본적으로 원격
프로세스는 실행 사용자의 암호 없는 SSH 연결과 암호 없는 sudo를 사용합니다.
설정
실행 스크립트는 환경 변수로 설정합니다. 필수 환경 변수는 NPROCS 하나이며, 지정하지 않으면
스크립트가 오류와 함께 종료됩니다. 나머지는 선택 환경 변수이며, 생략하면 아래의 기본값을
사용합니다.
필수 환경 변수
| 변수 | 설명 | 기본값 |
|---|---|---|
NPROCS | 각 호스트에서 실행할 MPI rank 수입니다. 전체 rank 수는 NPROCS와 HOSTS에 지정한 호스트 수를 곱한 값입니다. | 없음 |
선택 환경 변수
| 변수 | 설명 | 기본값 |
|---|---|---|
HOSTS | 다중 호스트 실행에 사용할 호스트를 쉼표로 구분해 지정합니다. 모든 호스트에 같은 MASS 클라이언트가 설치되어 있고 원격 접속 요구 사항을 충족해야 합니다. | localhost |
DFS_PATH | 벤치마크할 볼륨을 식별하는 데 사용하는 MASS 마운트 경로입니다. | /mnt/poc-home |
RSH_USER | 원격 프로세스를 실행할 SSH 사용자입니다. 모든 호스트에 암호 없는 SSH와 암호 없는 sudo 권한이 필요합니다. 암호 없는 root SSH를 사용하려면 root로 설정합니다. | 스크립트를 호출한 사용자 또는 처음부터 root로 실행한 경우 root |
STONEWALL | 쓰기 단계의 stonewall 시간(초)입니다. 300초 미만은 검증용으로 사용할 수 있지만 IO500 규칙에 따라 유효하지 않은 실행으로 표시됩니다. | 30 |
IOR_EASY_BLOCK | ior-easy 단계에서 각 rank에 할당하는 데이터 크기입니다. | 64g |
IOR_HARD_SEGS | ior-hard 단계에서 각 rank에 할당하는 segment 수입니다. | 2000000 |
MDTEST_EASY_N | mdtest-easy 단계에서 각 rank에 할당하는 파일 수입니다. | 100000 |
MDTEST_HARD_N | mdtest-hard 단계에서 각 rank에 할당하는 파일 수입니다. | 50000 |
FIND_NPROC | find 단계에서 사용할 병렬 실행 수입니다. | 전체 MPI rank 수 |
RESULTDIR | IO500 결과를 기록할 디렉터리입니다. rank 0 호스트에서 접근할 수 있는 로컬 경로여야 합니다. | /tmp/io500-results |
CONFIG | IO500 설정 템플릿입니다. 워크로드를 변경하려면 번들 템플릿을 복사하고 실행 스크립트가 채워야 할 placeholder를 유지합니다. 파일을 읽을 수 없으면 실행이 실패합니다. | 실행 스크립트 옆의 config.io500.ini |
예를 들어 다음 명령은 워크로드 크기와 결과 경로를 변경합니다.
NPROCS=32 STONEWALL=300 IOR_EASY_BLOCK=128g IOR_HARD_SEGS=4000000 \
MDTEST_EASY_N=200000 MDTEST_HARD_N=100000 \
RESULTDIR=/tmp/io500-production \
/opt/boostx-sds/io500/scripts/io500.sh
참고
- 기본값
STONEWALL=30은 빠른 검증 실행을 위한 설정입니다. IO500은 stonewall 시간이 300초보다 짧은 실행을 유효하지 않은 것으로 표시하지만, 측정된 단계별 값은 문제 해결과 튜닝에 사용할 수 있습니다. - 이후 결과를 의미 있게 비교할 수 있도록 각 결과와 함께 MASS 클라이언트 버전, 워크로드 환경 변수, 참여 호스트, 클라이언트 토폴로지를 기록하세요.
- OpenMPI 4.1.x에서는
[SCORE ]줄이 출력된 직후 종료 과정에서MPI_ERR_COMM오류가 발생할 수 있습니다. 이 경우 모든 단계 결과와 점수는 이미 출력되었지만RESULTDIR에result.txt가 없을 수 있습니다.