OpenShift Virtualization VM에서 I/O 워크로드를 실행하는 방법

Red Hat Blog를 보다가 관심 가는 글이 보여서 AI번역+약간 교정해 보았습니다.
출처: https://developers.redhat.com/articles/2025/10/22/how-run-io-workloads-openshift-virtualization-vms

대규모 I/O 성능 테스트에는 테스트 시작 및 종료 시간 추적, 모든 호스트에 대한 병렬 테스트 실행, 테스트 결과 분석 및 성능 향상을 위한 다양한 실행 비교 등의 과제가 있습니다. 이 문서에서는 일반적인  FIO 워크로드를 사용하여 Red Hat OpenShift Virtualization 에서 실행되는 호스트를 가상 머신으로 테스트할 때 대규모 I/O 워크로드를 실행하는 방법을 설명합니다.

테스트 과정 

특정 개수의 가상 머신에서 I/O 성능을 테스트하는 방법을 보여드리겠습니다. 이 프로세스는  Red Hat Enterprise Linux 기반 호스트에서 작동하며, Fedora 업스트림 이미지를 사용하여 테스트 호스트를 구축하여 패키지 관리를 간소화합니다. 

필수 조건:

  • 테스트를 위한 기능적 OpenShift 가상화 환경입니다.
  • OpenShift Virtualization 가상 머신에서 사용할 수 있는 작동 중인 스토리지 백엔드입니다. OpenShift Virtualization 환경에서 사용 가능한 모든 스토리지 클래스를 사용할 수 있습니다. OpenShift Data Foundation(ODF) 스토리지를 기반으로 구축된 스토리지 클래스를 사용할 것입니다.
  • 테스트는 명령/배스천 노드에서 오케스트레이션됩니다. 이는 ssh/oc를 통해 OpenShift Virtualization 클러스터에 접속할 수 있는 모든 머신이 될 수 있습니다.
  • 명령 노드에서 모든 테스트 가상 머신에 비밀번호 없이 SSH로 접속할 수 있습니다. 가상 머신 템플릿과 해당 비밀번호의 예를 보여드리겠습니다.
  • 가상 머신 이미지에 FIO 패키지를 미리 설치하거나 적절한 저장소를 설정하여 필요한 패키지를 설치합니다.

이 간단한 예제에서는 ODF 스토리지를 사용하여 OpenShift Virtualization 환경 내에 생성된 다섯 대의 가상 머신을 사용합니다. 다음은 이 경우에 사용된 가상 머신 템플릿의 예입니다. 

가상 머신 설정 중에 SSH 키를 삽입하려면 가상 머신에 대한 SSH 액세스 권한이 필요합니다. 가장 쉬운 방법은 비밀 키를 생성하여 머신 설정 중에 사용하는 것입니다. bastion/command 호스트에서 이 명령을 실행하여 비밀 키를 생성할 수 있습니다. (ssh 키가 이미 생성되어 있다고 가정합니다.) 그렇지 않은 경우 ssh-keygen로 생성합니다.

$ kubectl create secret generic vmkeyroot  --from-file=/root/.ssh/id_rsa.pub 

다음으로, 여기에서 찾을 수 있는 이 목적을 위해 만든 스크립트를 사용하여 테스트용 가상 머신 5개를 만듭니다.

다음 명령을 실행하면 가상 머신 5개가 생성됩니다. 가상 머신의 기본 이미지는 Fedora이고, 기본 스토리지 클래스는 ocs-storagecluster-ceph-rbd입니다. 가상 머신 생성 스크립트를 사용하면 다른 테스트 이미지와 스토리지 클래스를 지정할 수 있습니다. 

$./multivm.sh -p vm --cores 8 --sockets 2 --threads 1 --memory 16Gi -s 1 -e 5 

가상 머신이 실행될 때까지 기다리세요.

$ oc get vm 
vm-1    1h   Running   True
vm-2    1h   Running   True
vm-3    1h   Running   True
vm-4    1h   Running   True
vm-5    1h   Running   True

다음과 같이 ioscale 저장소를 복제하여 테스트 스크립트를 가져옵니다.

$ git clone https://github.com/ekuric/ioscale.git
$ cd ioscale/io-generic

ioscale 저장소 에는 fio 관련 매개변수를 지정하는 fio-config.yaml 파일이 있습니다. 다음은 이 fio-config.yaml 파일의 예시입니다. 

m:
  hosts: "vm1 vm2 vm3 vm-4 vm-5"                
  namespace: "default"           
storage:
  device: "vdc"                 
  mount_point: "/root/tests/data"  
  filesystem: "xfs"        
fio:
  test_size: "10GB"                
  runtime: 300                    
  block_sizes: "4k 8k 128k 1024k 4096k"  
  io_patterns: "randread randwrite read write"  
  numjobs: 4                   
  iodepth: 16                   
  direct_io: 1                    
output:
  directory: "/root/fio-results"
  format: "json+"

이 구성 예제에서는 테스트에 hosts "vm1 vm2 vm3 vm-4 vm-5"를 사용합니다. vdc 장치는 /root/tests/data로 xfs 포맷되고 마운트됩니다. fio 테스트 구성 섹션은 설명이 필요 없을 정도로 간단합니다. 

이제 테스트를 시작할 수 있습니다.

$ ./fio-tests.sh -c fio-config.yml 

테스트를 시작한 후, 테스트 컴퓨터에서 테스트 장치 vdc를 포맷할지 여부를 확인하라는 메시지가 표시됩니다 .

$ ./fio-tests.sh -c fio-config.yaml


[2025-09-26 15:01:09] INFO Starting FIO remote testing script
[2025-09-26 15:01:09] INFO Using auto-detection: virtctl for VMs, SSH for regular hosts
[2025-09-26 15:01:09] INFO Using host pattern: vm-{1..5}
[2025-09-26 15:01:09] INFO Expanded pattern to: 5 hosts
[2025-09-26 15:01:09] INFO Configuration loaded from: fio-config.yaml
[2025-09-26 15:01:09] INFO VMs: vm-1 vm-2 vm-3 vm-4 vm-5
[2025-09-26 15:01:09] INFO Namespace: default
[2025-09-26 15:01:09] INFO Host connection methods (auto-detection):
[2025-09-26 15:01:09] INFO   vm-1: virtctl (VM detected)
[2025-09-26 15:01:09] INFO   vm-2: virtctl (VM detected)
[2025-09-26 15:01:09] INFO   vm-3: virtctl (VM detected)
[2025-09-26 15:01:10] INFO   vm-4: virtctl (VM detected)
[2025-09-26 15:01:10] INFO   vm-5: virtctl (VM detected)
[2025-09-26 15:01:10] INFO Storage device configuration:
[2025-09-26 15:01:10] INFO   vm-1: /dev/vdc
[2025-09-26 15:01:10] INFO   vm-2: /dev/vdc
[2025-09-26 15:01:10] INFO   vm-3: /dev/vdc
[2025-09-26 15:01:10] INFO   vm-4: /dev/vdc
[2025-09-26 15:01:10] INFO   vm-5: /dev/vdc
[2025-09-26 15:01:10] INFO Mount point: /root/tests/data
[2025-09-26 15:01:10] INFO Filesystem: xfs
[2025-09-26 15:01:10] INFO Test size: 10G
[2025-09-26 15:01:10] INFO Runtime: 300s
[2025-09-26 15:01:10] INFO Block sizes: 4k 8k 128k 1024k 4096k
[2025-09-26 15:01:10] INFO I/O patterns: read write randread randwrite
[2025-09-26 15:01:10] INFO Number of jobs: 4
[2025-09-26 15:01:10] INFO I/O depth: 16
[2025-09-26 15:01:10] INFO Direct I/O: 1
[2025-09-26 15:01:10] INFO Output directory: /root/fio-results


[2025-09-26 15:01:11] WARN WARNING: This script will format storage devices on all hosts!
[2025-09-26 15:01:11] WARN Hosts: vm-1 vm-2 vm-3 vm-4 vm-5
[2025-09-26 15:01:11] WARN Devices to be formatted:
[2025-09-26 15:01:11] WARN   vm-1: /dev/vdc
[2025-09-26 15:01:11] WARN   vm-2: /dev/vdc
[2025-09-26 15:01:11] WARN   vm-3: /dev/vdc
[2025-09-26 15:01:11] WARN   vm-4: /dev/vdc
[2025-09-26 15:01:11] WARN   vm-5: /dev/vdc


Are you sure you want to continue? (yes/no): 

확인이 완료되면 테스트 준비와 데이터 세트 사전 로드가 진행되고, 그 후 실제 테스트가 진행됩니다. 

[2025-09-03 07:50:04] INFO Starting background task on vm-1: Writing test dataset
[2025-09-03 07:50:04] INFO Starting background task on vm-2: Writing test dataset
[2025-09-03 07:50:04] INFO Starting background task on vm-3: Writing test dataset
[2025-09-03 07:50:04] INFO Starting background task on vm-4: Writing test dataset
[2025-09-03 07:50:04] INFO Starting background task on vm-5: Writing test dataset
[2025-09-03 07:50:04] INFO Waiting for 500 background jobs to complete: test dataset writing

테스트 기간은 fio-config.yaml에서 사용되는 io 패턴과 런타임에 따라 달라집니다. 

테스트가 완료되면 결과가 fio-tests.sh 를 실행한 명령 호스트로 복사됩니다  . 

우리는 이 테스트 과정을 설명하는 aciinema 비디오 에 배포 단계를 기록했습니다  . 

테스트 결과는 디렉터리 형식으로 저장됩니다. 각 가상 머신은 자체 디렉터리를 가지며, FIO JSON 테스트 결과는 해당 디렉터리에 저장됩니다.

$ ls -l fio-results-20250908-132707 
total 0
drwxr-xr-x. 2 root root 68 Sep  8 13:27 vm-1
drwxr-xr-x. 2 root root 68 Sep  8 13:27 vm-2
drwxr-xr-x. 2 root root 68 Sep  8 13:27 vm-3
drwxr-xr-x. 2 root root 68 Sep  8 13:27 vm-4
drwxr-xr-x. 2 root root 68 Sep  8 13:27 vm-5

이러한 파일을 분석하려면 다음 스크립트를 사용할 수 있습니다. 

  • FIO IOPS 및 대역폭 분석기 : 이 스크립트는 fio-tests.sh 스크립트에서 생성된 FIO 결과가 있는 디렉터리를 입력받아 실행된 모든 FIO 작업에 대한 그래프 파일과 요약 그래프를 생성합니다. 요약 그래프는 곧 보여드리겠습니다.
  • FIO 비교  도구 : FIO 비교 도구를 사용하면 두 개 이상의 FIO 테스트 결과를 비교할 수 있습니다. FIO JSON 결과 파일이 포함된 FIO 디렉터리를 인식하고 모든 FIO 작업에 대한 그래프와 실행에 대한 요약 그래프를 생성합니다.

자세한 내용은 해당 스크립트의 README.md 파일을 확인하세요. 명령 호스트에 필요한 Python 패키지가 설치되어 있지 않으면 다음을 실행하세요. 

$ pip install pandas matplotlib numpy seaborn

예를 들어, analyze_bw_mean_with_graphs.py를 실행하면 테스트된 작업과 블록 크기에 대한 요약이 생성됩니다. 그림 1-4의 그래프에서 randread와 randwrite의 예를 확인할 수 있습니다. 

$ python3 analyze_bw_mean_with_graphs.py --input-dir fio-results-20250908-132707 --output-dir single-bw --graph-type line  --operation-summary --summary-only --iops –bw 

이 명령은 input-dir의 테스트 중에 수집된 테스트 결과에 대한 요약을 생성합니다. 그림 1에서 볼 수 있듯이 IOPS 및 BW 그래프 요약도 생성됩니다.  

IOPS 성능을 보여주는 선형 차트 그래프입니다.
그림 1: 이 그래프는 IOPS 성능을 보여줍니다.

예를 들어, randwrite에 대한 그래프만 보여드리겠지만, 테스트된 모든 FIO 작업에 대해서도 비슷한 그래프가 outpt-dir에 생성됩니다.

VM별 대역폭 성능을 비교한 선형 그래프입니다.
그림 2: 이 그래프는 VM 대역폭 성능을 비교한 것입니다.

또 다른 흥미로운 사례는 여러 번의 실행이 있고, 각 실행을 비교해야 하는 경우입니다.  test_comparison_analyzer.py 스크립트는 이 작업을 수행하고 그래프를 생성합니다. 

$ python3  test_comparison_analyzer.py fio-results-default/ fio-results-rate_iops_100/ --graphs bar  --output-dir test1vstest2 --iops

또는 다음과 같이 두 개 이상의 fio 실행 간의 대역폭(bw_mean)을 비교하는 그래프를 생성할 수 있습니다(그림 3-4).

$ python  test_comparison_analyzer.py fio-results-default/ fio-results-rate_iops_100/ --graphs bar  --output-dir test1vstest2 --bw 
두 개의 FIO 실행 간의 IOPS 비교를 보여주는 막대 그래프입니다.
그림 3: 두 개의 FIO 실행 간의 IOPS 비교를 보여주는 막대 그래프.

두 개 이상의 실행을 비교하려는 경우에도 FIO 비교  도구가 작동합니다.

두 개의 FIO 실행 간의 대역폭 비교를 보여주는 막대 그래프입니다.
그림 4: 두 가지 FIO 실행 간의 대역폭 비교.

테스트 호스트 관리

이전 예제에서는 소수의 테스트 호스트가 있었고, hosts: directive를 사용하여  테스트 머신을 지정했습니다. 하지만 테스트 호스트 수가 많을 경우 모든 호스트를 나열하는 것은 문제가 될 수 있습니다. 이러한 이유로 테스트 호스트를 더욱 효율적으로 지정할 수 있는 다른 옵션을 만들었습니다. 

다음 예는 현재 fio-tests.sh 스크립트에서 지원됩니다. 

  1. 호스트 목록: 이전 예제에서 사용했던 것입니다. 이 경우에는 공백으로 구분된 호스트 이름 목록을 추가하는데, 이는 호스트 수가 적을 때 사용하기 가장 쉽습니다.
hosts: "vm1 vm2 vm3 vm4 vm5"

2. 호스트 패턴 범위: 특정 이름 패턴에 따라 가상 머신의 이름을 지정하면 이를 사용하여 테스트에 사용할 호스트를 지정할 수 있습니다.

host_pattern: "vm{1..200}"

3. 외부 호스트 파일: fio-config.yaml 파일을 간결하고 읽기 쉽게 유지하고 싶을 때 테스트 파일에 테스트 호스트를 지정할 수도 있습니다. 이 경우, fio-config.yaml 파일에 한 줄에 호스트 이름을 하나씩 추가하고 해당 파일의 경로를 제공합니다.

host_file: /path/to/hosts.txt

    다음은 hosts.txt의 예입니다.  

    $ cat hosts.txt
    vm1
    vm2
    vm3
    vm4
    vm5 

    마무리하다

    이 글을 읽으신 후 OpenShift Virtualization 가상 머신에서 대규모 FIO I/O 테스트를 실행하는 방법을 더 잘 이해하셨기를 바랍니다. 또한 수집된 결과를 빠르게 분석하여 OpenShift Virtualization 가상 머신에 가장 적합한 성능을 제공하는 스토리지 백엔드를 파악하는 방법도 설명했습니다. 

    OpenShift Virtualization 가상 머신에서 I/O 워크로드 테스트 결과를 소개하는 다음 기사를 기대해 주세요. Red Hat 성능 및 확장 팀, 특히 Jenifer Abrams,  Shekhar Berry,  Abhishek Bose에게 특별히 감사드립니다. 

    답글 남기기

    이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

    You May Also Like