본문 바로가기
임베디드SW/Embedded SW 상식

FIO - Flexible I/O Tester

by 진뚱 2020. 10. 30.
728x90

FIO란?

FIO는 Flexible I/O Tester의 약자로 읽기, 쓰기, IOPS, Bandwidth등의 결과를 나타내주어 성능을 측정하기 위한 Tool로 사용된다.

FIO를 사용하는 이유

FIO는 특정 워크로드를 테스트하고 싶을 때 그것을 위한 테스트 프로그램을 만들기 힘들어 작성되었다고 한다. 특히 비슷한 테스트를 자주 수행해야하는 경우 그때마다 테스트 프로그램을 만들게 되면 번거롭게 되므로 맞춤형 테스트 워크로드를 반복해서 수행할 수 있도록 시뮬레이션 할 수 있는 도구가 필요했다.

특정 워크로드를 정의하는 것은 매우 어려운 일이다. 관련된 process 또는 thread 수에 제한이 없고 각각 고유한 IO생성 방식을 사용할 수 있다. 또한 memory mapping 파일에서 많은 양의 메모리를 점유할수도 있고 async I/O를 사용해서 read하는 여러 thread를 만들수도 있다. 이러한 다양한 경우에 대비하여 fio는 유연하게 테스트를 수행할 수 있어야 했다.

따라서 현재 fio는 사용자가 지정한대로 특정 유형의 I/O작업을 수행하는 여러 thread, process를 생성할 수 있다. 사용자가 job file을 통해 특정 워크로드를 만들어서 fio를 수행하게 되면 유연하게 원하는 환경에서 테스트를 수행할 수 있는 것이다.

FIO 기본 정보

FIO는 kb_base=1024가 기본 옵션값으로 지정되어있다. 일반적인 2의 배수 단위이다. 여기서 잠깐 단위에 대해 잠시 살펴보자.

kb? kib?

우리는 기본적으로 단위를 사용할때 3kb/s 이런식으로 사용한다. 하지만 kib와 직접적으로 구분하는 경우는 많지 않다. 하지만 사실상 두가지가 의미하는 숫자는 엄밀히 다르다.

kib라고 하는 것은 키비바이트라고 한다. kibibyte라고 하는데 Kilo Binary Byte이다.
따라서 1kib = 1024 byte를 의미한다.
kb라고 하는 것은 킬로바이트로 kilo byte를 의미하기 때문에 1kb = 1000 byte를 의미한다.

하지만 대부분은 엄밀히 구분하기보다는 일반적으로 kb를 사용하게 되면 kib를 의미하는 경우가 더 많다.
하지만 FIO를 사용하면서 성능을 분석하는 경우에는 두가지가 차이를 유발할 수 있기 때문에 구분해서 쓰는것이 좋다.

따라서 4k read라고 하는 것은 사실 4kib read가 정확한 표현이다.

FIO를 사용하는 두가지 방법

FIO를 수행하는 것은 두가지 방법이 있다.
첫번째 방법은 jobfile을 만들어서 사용하는 것이고, 두번째 방법은 command line으로 option을 부여해서 사용하는 것이다. 만약 command line을 사용하는 경우에는 --cmdhelp를 하게 되면 전체 option을 확인할 수 있다.

job file

FIO로 원하는 워크로드를 수행하기 위해서 job file을 생성하여 수행할 수 있다. 이때 job file이 가지고 있는 기본적인 조건들이 있다.

==========
I/O type

  • 파일에 들어오는 I/O 패턴 ( Read/Write, Seq/Random, Mix or random ) 등 을 정의하게 된다.

Block size

  • Block Size를 지정하여 IO당 크기를 결정한다. 여기에 들어오는 값은 특정 사이즈를 의미하는 숫자일수도 있고 Block Size 영역이 들어올수도 있다.

I/O size

  • 얼마나 많은 data를 read/write 할건지 정의한다.

I/O Engine

  • I/O를 어떻게 issue할 것인지 정한다. file을 memory mapping할수도 있고, regular read/write를 할 수도, splice를 할수도 있고 async I/O 등을 사용할 수도 있어서 어떤 방식을 사용할 것인지를 정하는 것이다.

I/O depth

  • I/O engine이 async로 설정되었다면 queue depth 는 얼마나 크게 할지를 결정하는 부분이다.

Target file/device

  • 워크로드를 얼마나 많은 file들에 spread 할 것인지를 결정한다.

Threads,processes and job synchronization

  • 워크로드를 얼마나 많은 thread혹은 process로 실행할 지 정의한다.

==========

command line

Reference

kb, 킬로바이트 : https://ko.wikipedia.org/wiki/%ED%82%AC%EB%A1%9C%EB%B0%94%EC%9D%B4%ED%8A%B8
kib, 키비바이트 : https://ko.wikipedia.org/wiki/%ED%82%A4%EB%B9%84%EB%B0%94%EC%9D%B4%ED%8A%B8

728x90

댓글