[VM] FIO로 디스크과 가상머신의 퍼포먼스 체크해보자 Azure with Fio High Performance Test

VM
작성자
Roronoa
작성일
2019-06-06 10:48
조회
5924
FIO의 글을 쓰기 위해서 테스트를 약 2000회 이상 수년에 걸쳐서 테스트한 결과를 쓴 글입니다 추후에도 계속 테스트 결과는 지속적으로 업데이트 할 예정입니다.

단순한  FIO에 대한 글이 아니며 수천번 테스트를 클라우드 상에서 해서 결과 값으로 좋은 퍼포먼스 조합과 변수를 끊임없이 찾아 내기 위한 무식한 방법이 적혀져있습니다. 한번의 테스트를 위해 모든 리소스는 새로 생성했으며 최대한 영향을 덜 받도록 테스트를 최대한 더 많이 할 예정입니다. 윈도우로 테스트하는 법은 스킵했습니다.

테스트 변수

  1. 시간대

  2. 데이터센터의 위치

  3. 계절

  4. 데이터센터의 포화도

  5. 대규모 업데이트

  6. 로컬디스크 

  7. LVM

  8. 데이터 디스크의 수

  9. IOPS를 위한 데이터디스크 용량 변화

  10. Accelerated Network

  11. L 씨리즈 가상머신 NVMe 

  12. Disk Bursting 기능


FIO 툴이란? 

퍼포먼스를 위해 수십개의 툴이 있지만 들쑥날쑥하며 매번 다릅니다. 자 클라우드에서라면 더더욱 매번 다른 결과와 여러가지

다른 변수들이 존재하며 대부분 이결과를 몇번 돌려보고 판단하는것은 잘못된 방법이며 FIO 이외에도 다른 툴을 사용하는것이 좋습니다.

Fio가 널리 쓰이긴 하지만 갑중의 갑은 아니지만 쓸만 합니다. 자 디스크의 읽기 쓰기 IOPS 네트워크 bandwidth 등등 읽기 쓰기도 다양하게

골고루 입맛대로 테스트 할 수 있으나 설정을 잘못한다면 또한 잘나오지 않으며 이 설정이 조금만 달라진다고 해도 다른 결과로 나올 수 있습니다.

자 우선 설치를 알아보죠

리눅스에 기본배포판에 설치되어 있지 않습니다. 그러므로 클라우드에서 부팅되자 마자. 우분투의 경우 apt update로 업데이트를 진행한 후

apt-get install fio 로 Fio를 설치 할수 있습니다.

fio -v 명령어로 버전을 확인 해보거나 잘 설치가 되었는지를 확인 할 수 있습니다.

잘 설치되었다면 퍼포먼스를 체크할 위치로 갑니다 예를들어 OS 영역이 아닌 LVM이나 데이터 영역에서 테스트를 해야합니다.

물론 OS영역도 퍼포먼스 체크는 가능하며 일반적으로 클라우드에서는 디스크가 용량이 큰 디스크를 쓰면 IOPS가 올라가며 비싼

가상머신을 사용할 수록 IOPS와 네트워크 처리량이 늘어납니다. (자본주의의 논리)

디스크의IOPS와 Bandwidth 는 고려사항이 큰 용량 디스크와 비싼 가상머신이며 당연하게 LVM으로 병렬 처리한다면 더많은 IOPS를

확보할수 있습니다. 자 그러나 한가지 큰 팁이 있습니다. 일반적으로 클라우드는 IOPS를 보장하지 않고 MAX 수치를 보여줍니다.

실제 테스트를 계속해보면 IOPS가 들쑥날쑥하지만 어느정도까지는 확보가 되며 많은 테스트를 한다면 MAX에 가까운 숫자도 나오며 잘

세팅을 해야만 IOPS가 확보됩니다.

FIO 설치

리눅스 우분투 18.04 LTS로 진행하도록 하겠습니다. 윈도우 기반은 MS 공식문서에 많기 때문에 언급하지 않겠습니다.

1번 : 기본 루트 폴더로 이동한다 

2번 : sudo su 로 루트 권한을 가진다

sudo su

3번 : apt update 로 업데이트 한다

apt update

4번 : FIO를 설치 합니다.

apt-get install fio

Azure NIC Flow

5번 : FIO의 버전을 확인합니다.

fio -v

6번 : FIO를 테스트할 리렉토리를 만듭니다.  일반적으로 데이터디스크가 있는 부분에 만들어야 됩니다.

mkdir xxx

cd xxx

스크립트방법

mkdir write

sudo nano fiowrite.ini 파일을 만듬

fio --runtime 30 fiowrite.ini

size=30g ----->파일의 크기
direct=1 ------> 방향
iodepth=256 -----> input output의 깊이
bs=8k -----> 파일단위 8K

4개의 잡이 동시에 쓰기를 진행합니다.

[writer1]
rw=randwrite -----> 랜덤 쓰기
directory=/datalvm/xxx/write -----> 쓰기 이므로 저장되는 장소
[writer2]
rw=randwrite
directory=/datalvm/xxx/write
[writer3]
rw=randwrite
directory=/datalvm/xxx/write
[writer4]
rw=randwrite
directory=/datalvm/xxx/write

 

Azure NIC Flow

 

명령어 사용방법 

fio --name=raid0 --filename=/datalvm/xxx/fio1 --rw=randwrite --bs=4k --iodepth=64 --numjobs=1 --direct=1 --ioengine=libaio --group_reporting --time_based --runtime=10 --size=4G

렌덤쓰기를 4k 파일 단위로 1번의 잡만 실행하며 파일 크기는 4기가 이며 io깊이는 64로 실행하는 명령어 입니다

 

결과 보는 방법 

bw 결과는 테스트에 의해 달성 된 평균 대역폭을 보여줍니다.

clat 및 bw 행은 각각 완료 대기 시간 및 대역폭에 대한 정보를 보여줍니다.

완료 대기 시간은 요청 제출과 완료 사이의 시간입니다. 대기 시간과 대역폭에 대한 최소, 최대, 평균 및 표준 편차가 표시됩니다.

CPU 라인은 IO로드가 CPU에 미치는 영향을 보여 주므로 머신의 프로세서가 수행하려는 IO에 비해 너무 느린 지 알 수 있습니다.

IO 깊이 섹션은 어느 시점에서나 여러 IO 요청을 처리 할 수있는 IO 워크로드를 테스트 합니다

 

결과 값을 분석

밑에 결과는 랜덤쓰기 이며 명령어로 로컬디스크에서 테스트 한 결과 이며 낮은 IOPS를 보여줍니다

동시 잡도 1번이며 가장 낮은 E씨리즈 VM이므로 아주 극단적 낮은 IOPs를 보여줍니다

Azure NIC Flow

밑에 결과는 랜덤쓰기 이며 명령어로 로컬디스크에서 테스트 한 결과 이며 낮은 IOPS를 보여줍니다 동시 잡도 1번이며 한단계 높은 E4s_V3 VM이므로 낮은 IOPs를 보여줍니다
Azure NIC Flow

동시 잡도 1번이며 한단계 높은 E4s_V3 VM이나 LVM 4TB이나 VM의 성능치 제안으로 6000IOPS정도만 나옴

Azure NIC Flow

동시 잡도 1번이며 은 E16s_V3 VM이며  LVM 4TB이며 VM의 성능치 제안으로 14000IOPS정도 나옴
Azure NIC Flow

밑에 결과는 랜덤쓰기 이며 명령어로 로컬디스크에서 테스트 한 결과 이며 낮은 IOPS를 보여줍니다 동시 잡도 1번이며 가장 낮은 E씨리즈 VM이므로 아주 극단적 낮은 IOPs를 보여줍니다
Azure NIC Flow

밑에 결과는 랜덤쓰기 이며 명령어로 로컬디스크에서 테스트 한 결과 이며 낮은 IOPS를 보여줍니다 동시 잡도 1번이며 가장 낮은 E씨리즈 VM이므로 아주 극단적 낮은 IOPs를 보여줍니다
Azure NIC Flow

001-1pre512-2300-150HostR-W

Azure NIC Flow

001-2pre512-2300-150HostR-W.

Azure NIC Flow

002-1pre512-2300-150HostR-W.

Azure NIC Flow

002-2pre512-2300-150HostR-W.
Azure NIC Flow

003 e4slvm20000
Azure NIC Flow

003 e4slvm20000-
Azure NIC Flow

004 e16slvm20000
Azure NIC Flow

004 e16slvm20000-
Azure NIC Flow

004 e16slvm20000-
Azure NIC Flow

 

005.d13sv2lvm-.PNG
Azure NIC Flow

005.d13sv2lvm.PNG