본문 바로가기
운영체제 (LNX,WIN)

IOMeter를 이용한 디스크 Performance 측정 (ext3 vs ext4)

by 날으는물고기 2009. 4. 14.

IOMeter를 이용한 디스크 Performance 측정 (ext3 vs ext4)

IOMeter는 OpenSource 용 디스크 성능 측정 도구입니다.
서버의 경우에 어떤 파일 시스템 또는 장비자체의 성능 비교를 하고자 할때 기준자료를 제시하기위해 사용하곤 합니다.
플랫폼으로는 Linux/Window 전부 제공하고 있지만 실제 성능 측정을 시작하고 정보를 모으는 Manager는 윈도우만 가능합니다.
(성능 측정을 하기 위한 Agent-dynamo는 Linux/Window 전부 존재하며, ioMeter.exe는 Manager역할로 테스트 Suite작성과 테스트 실행, 테스트 결과 수집등을 담당합니다.)

Project Page : http://www.iometer.org/
Download : http://www.iometer.org/doc/downloads.html
Document : http://www.iometer.org/doc/documents.html 

32비트 환경의 경우에는 binary가 제공되지만 64비트 환경은 binary가 제공되지 않는 관계로 Linux Ext3 vs Ext4의 성능 측정을 위해서 Source를 컴파일 하였습니다.

 

( 환경 구성 )

Manager Computer (192.168.0.10): Windows XP sp3,
성능 측정용 Computer (192.168.0.11): OpenSUSE 11.1 64bit(kernel 2.6.27.7-9)
RAM : 4G
Disk : W/D 250G SATA2 : sdb(ext3), Samsung 250G SATA2 : sda(ext4),
CPU : Intel Core2 Duo E6300(1.86G)

 

( 테스트 방법 )

1. IOMeter를 설치한다(Windows)

2. Linux 에 IOMeter Source를 컴파일 한다.

/iometer-2006_07_27.common-src/src> make -f Makefile-Linux.x86_64 all
/usr/bin/g++ -O -Wall -D_GNU_SOURCE -DIOMTR_OSFAMILY_UNIX -DIOMTR_OS_LINUX -DIOMTR_CPU_X86_64 -DIOMTR_SETTING_GCC_M64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFF                                    SET_BITS=64 -D_REENTRANT -DNOMINMAX -c IOGlobals.cpp
/usr/bin/g++ -O -Wall -D_GNU_SOURCE -DIOMTR_OSFAMILY_UNIX -DIOMTR_OS_LINUX -DIOMTR_CPU_X86_64 -DIOMTR_SETTING_GCC_M64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFF                                    SET_BITS=64 -D_REENTRANT -DNOMINMAX -c Pulsar.cpp
/usr/bin/g++ -O -Wall -D_GNU_SOURCE -DIOMTR_OSFAMILY_UNIX -DIOMTR_OS_LINUX -DIOMTR_CPU_X86_64 -DIOMTR_SETTING_GCC_M64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFF                                    SET_BITS=64 -D_REENTRANT -DNOMINMAX -c IOManager.cpp
/usr/bin/g++ -O -Wall -D_GNU_SOURCE -DIOMTR_OSFAMILY_UNIX -DIOMTR_OS_LINUX -DIOMTR_CPU_X86_64 -DIOMTR_SETTING_GCC_M64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFF                                    SET_BITS=64 -D_REENTRANT -DNOMINMAX -c IOManagerLinux.cpp
IOManagerLinux.cpp: In member function 'int Manager::Report_Disks(Target_Spec*)':
IOManagerLinux.cpp:167: warning: deprecated conversion from string constant to 'char*'
/usr/bin/g++ -O -Wall -D_GNU_SOURCE -DIOMTR_OSFAMILY_UNIX -DIOMTR_OS_LINUX -DIOMTR_CPU_X86_64 -DIOMTR_SETTING_GCC_M64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFF                                    SET_BITS=64 -D_REENTRANT -DNOMINMAX -c IOGrunt.cpp
/usr/bin/g++ -O -Wall -D_GNU_SOURCE -DIOMTR_OSFAMILY_UNIX -DIOMTR_OS_LINUX -DIOMTR_CPU_X86_64 -DIOMTR_SETTING_GCC_M64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFF                                    SET_BITS=64 -D_REENTRANT -DNOMINMAX -c IOTarget.cpp
/usr/bin/g++ -O -Wall -D_GNU_SOURCE -DIOMTR_OSFAMILY_UNIX -DIOMTR_OS_LINUX -DIOMTR_CPU_X86_64 -DIOMTR_SETTING_GCC_M64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFF                                    SET_BITS=64 -D_REENTRANT -DNOMINMAX -c IOTargetDisk.cpp
/usr/bin/g++ -O -Wall -D_GNU_SOURCE -DIOMTR_OSFAMILY_UNIX -DIOMTR_OS_LINUX -DIOMTR_CPU_X86_64 -DIOMTR_SETTING_GCC_M64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFF                                    SET_BITS=64 -D_REENTRANT -DNOMINMAX -c IOTargetTCP.cpp
/usr/bin/g++ -O -Wall -D_GNU_SOURCE -DIOMTR_OSFAMILY_UNIX -DIOMTR_OS_LINUX -DIOMTR_CPU_X86_64 -DIOMTR_SETTING_GCC_M64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFF                                    SET_BITS=64 -D_REENTRANT -DNOMINMAX -c IOPort.cpp
/usr/bin/g++ -O -Wall -D_GNU_SOURCE -DIOMTR_OSFAMILY_UNIX -DIOMTR_OS_LINUX -DIOMTR_CPU_X86_64 -DIOMTR_SETTING_GCC_M64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFF                                    SET_BITS=64 -D_REENTRANT -DNOMINMAX -c IOPortTCP.cpp
IOPortTCP.cpp: In destructor 'virtual PortTCP::~PortTCP()':
IOPortTCP.cpp:182: warning: deprecated conversion from string constant to 'char*'
IOPortTCP.cpp:183: warning: deprecated conversion from string constant to 'char*'
IOPortTCP.cpp: In member function 'virtual BOOL PortTCP::Disconnect()':
IOPortTCP.cpp:576: warning: deprecated conversion from string constant to 'char*'
IOPortTCP.cpp: In member function 'virtual BOOL PortTCP::Close()':
IOPortTCP.cpp:613: warning: deprecated conversion from string constant to 'char*'
IOPortTCP.cpp:614: warning: deprecated conversion from string constant to 'char*'
/usr/bin/g++ -O -Wall -D_GNU_SOURCE -DIOMTR_OSFAMILY_UNIX -DIOMTR_OS_LINUX -DIOMTR_CPU_X86_64 -DIOMTR_SETTING_GCC_M64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFF                                    SET_BITS=64 -D_REENTRANT -DNOMINMAX -c Network.cpp
/usr/bin/g++ -O -Wall -D_GNU_SOURCE -DIOMTR_OSFAMILY_UNIX -DIOMTR_OS_LINUX -DIOMTR_CPU_X86_64 -DIOMTR_SETTING_GCC_M64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFF                                    SET_BITS=64 -D_REENTRANT -DNOMINMAX -c NetTCP.cpp
/usr/bin/g++ -O -Wall -D_GNU_SOURCE -DIOMTR_OSFAMILY_UNIX -DIOMTR_OS_LINUX -DIOMTR_CPU_X86_64 -DIOMTR_SETTING_GCC_M64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFF                                    SET_BITS=64 -D_REENTRANT -DNOMINMAX -c ByteOrder.cpp
/usr/bin/g++ -O -Wall -D_GNU_SOURCE -DIOMTR_OSFAMILY_UNIX -DIOMTR_OS_LINUX -DIOMTR_CPU_X86_64 -DIOMTR_SETTING_GCC_M64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFF                                    SET_BITS=64 -D_REENTRANT -DNOMINMAX -c IOPerformanceLinux.cpp
/usr/bin/g++ -O -Wall -D_GNU_SOURCE -DIOMTR_OSFAMILY_UNIX -DIOMTR_OS_LINUX -DIOMTR_CPU_X86_64 -DIOMTR_SETTING_GCC_M64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFF                                    SET_BITS=64 -D_REENTRANT -DNOMINMAX -c IOTime.cpp
/usr/bin/g++ -O -Wall -D_GNU_SOURCE -DIOMTR_OSFAMILY_UNIX -DIOMTR_OS_LINUX -DIOMTR_CPU_X86_64 -DIOMTR_SETTING_GCC_M64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFF                                    SET_BITS=64 -D_REENTRANT -DNOMINMAX -c IOCQAIO.cpp
/usr/bin/g++ -O -Wall -D_GNU_SOURCE -DIOMTR_OSFAMILY_UNIX -DIOMTR_OS_LINUX -DIOMTR_CPU_X86_64 -DIOMTR_SETTING_GCC_M64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_REENTRANT -DNOMINMAX -c IOCompletionQ.cpp
/usr/bin/g++ -O -Wall -D_GNU_SOURCE -DIOMTR_OSFAMILY_UNIX -DIOMTR_OS_LINUX -DIOMTR_CPU_X86_64 -DIOMTR_SETTING_GCC_M64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_REENTRANT -DNOMINMAX -c IOAccess.cpp
/usr/bin/g++ -O -Wall -D_GNU_SOURCE -DIOMTR_OSFAMILY_UNIX -DIOMTR_OS_LINUX -DIOMTR_CPU_X86_64 -DIOMTR_SETTING_GCC_M64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_REENTRANT -DNOMINMAX -o dynamo IOGlobals.o Pulsar.o IOManager.o IOManagerLinux.o IOGrunt.o IOTarget.o IOTargetDisk.o IOTargetTCP.o IOPort.o IOPortTCP.o Network.o NetTCP.o ByteOrder.o IOPerformanceLinux.o IOTime.o IOCQAIO.o IOCompletionQ.o IOAccess.o  -lrt -lpthread -g
/iometer-2006_07_27.common-src/src> ls -l dynamo
-rwxr-xr-x 1 xxxx users 147752 Jan 15 17:22 dynamo

 3. Linux의 dynamo Agent를 실행한다.(만일 원격에 있는 윈도우 테스트를 한다면 같은 명령어를 원격 윈도우에서 입력해주면 된다.)

./dynamo -i <io meter 실행할 컴퓨터 이름 또는 주소> -m <Manager 를 실행할 컴퓨터 이름 또는 주소>

./dynamo -i 192.168.0.10 -m 192.168.0.11

Fail to open kstat device file. You can ignore this warning
unless you are running dynamo on XSCALE CPU.

Command line parameter(s):
   Looking for Iometer on "192.168.0.10"

Sending login request...
   linux
   192.168.0.11 (port 40391)

4. Windows에서 Iometer.exe를 실행한다.

실행하면 Linux 콘솔창에는 접속이 되었다는 메시지가 뜬다.


Sending login request...
   linux
   192.168.0.11 (port 39722)
Successful PortTCP::Connect
  - port name: 192.168.0.10

*** If dynamo and iometer hangs here, please make sure
*** you use a correct -m <manager_computer_name> that
*** can ping from iometer machine. use IP if need.
   Login accepted.
Reporting drive information...
Set_Sizes: Open on "/sys/iobw.tst" failed (error No such file or directory).
Set_Sizes: Open on "/sys/kernel/debug/iobw.tst" failed (error Permission denied).
Set_Sizes: Open on "/dev/iobw.tst" failed (error Invalid argument).
Set_Sizes: Open on "/sys/fs/fuse/connections/iobw.tst" failed (error Permission denied).
Set_Sizes: Open on "/sys/kernel/security/iobw.tst" failed (error Permission denied).
Set_Sizes: Open on "/proc/sys/fs/binfmt_misc/iobw.tst" failed (error Permission denied).
  Physical drives (raw devices)...
Reporting TCP network information...
   done.

   윈도우에는 테스트 할수 있는 GUI창이 뜬다.


 

(테스트요소 구성)

1. 테스트 할 타겟드라이브를 설정한다.

2. 테스트 요소를 추가한다.

3. 테스트 요소를 설정한다.

4. 테스트 시간을 설정한다.

5. 테스트를 수행한다.

 

(테스트 결과)

아래의 결과를 보면 Ext4가 Ext3보다 성능상으로는 훨씬 앞서는것으로 나옵니다.

(Total I/O 는 46.71 vs 86.35, Response Time 은 83.58 vs 28.128)

안정성 및 복구 능력이 탁월한지는 더 지켜봐야겠지만, I/O가 많이 일어나는쪽에 도입을 해서 테스트해볼 필요가 있어보입니다.

새로운 커널이 나오면 적용을 하고 Ext4의 버그나 리포트도 꾸준히 봐야할것 같습니다.

 

Ext3

 

Ext4


OpenSUSE 11.1에 새로 도입된 요소중에 Ext4 파일 시스템이 지원이 있습니다.

마침 이 performance를 비교한 자료가 있는데 상당히 의미가 있네요.

하지만 SSD 를 기준으로 해서 비교한 자료라 SATA/IDE와 같은 디스크에서는 어떤 performance를 보여줄지는 모르겠지만, Ext4의 시스템 디자인 자체가 Ext3보다 더 나은 성능과 안정성을 증가시켰다고 하니(Ext4 is designed to provide better performance and increase reliability) 한번 적용해볼만 한듯 보입니다.

대용량의 Database 시스템에서는 항상 I/O의 성능 문제가 걸리는데 이 결과처럼 대용량에서 Ext3의 2배정도의 성능을 보여준다면 Ext4를 사용했을때 큰 이익을 얻을것으로 보입니다.
SATA Disk에서의 Ext3와 Ext4에서의 I/O Benchmark 해보려고 합니다.

원문 : http://arstechnica.com/journals/linux.ars/2009/01/12/super-fast-ext4-filesystem-arrives-in-ubuntu-9-04

차세대 리눅스의 Ext3 파일시스템은 Ext4가 최신 우분투 9.04 인스톨러 이미지에 포함되어 사용할수 있게 되었다. 지난달에 릴리즈된 Linux 2.6.28 커널에 포함된 Ext4는 공식적으로 안정되었다.

Ext4는 더 나은 성능(performance)와 신뢰성이 증가되도록 설계되어 1 엑사바이트(exabyte: 1,000,000,000,000,000,000)까지 최대 파일 시스템 크기가 증가되었고 fsck 동작을 수행할때 필요한 시간이 감소되었다.

 

리눅스 하드웨어 사이트는 Phoronix는 SSD(Solid-State Drive)를 이용하여 수행된 광범위한 Ext4의 성능 테스팅한 벤치마크 결과를 발표하였다. 대용량 파일에 대한 write 성능을 측정한 IOZone 테스트에서 꽤나 인상적인 결과들을 볼수 있다. 이 결과에서 Ext4의 완승을 볼수 있으며, XFS,JFX,ReiserFS, Ext3와 비교하여 매우 뛰어난 성능을 보여주고 있다. 새로운 파일 시스템은  the Intel IOMeter File Server Access Pattern Test 에서 또한 다른 시스템에 비하여 능가하는 성능을 보여준다.


Benchmark graph by Phoronix

만일 이러한 벤치마크를 직접 하고 싶다면, 최신의 우분투 9.04 일일 빌드 이미지와 Phoronix Test Suite를 설치하면된다.

 

추가) OpenSUSE 11.1의 경우에 커널 버젼이 2.6.27.7-9 이라서 정식으로 Ext4를 지원하지 않습니다.

우분투가 첫번째 지원 OS가 되는것인지도 모르겠군요.

그렇다고 OpenSUSE 11.1에서 Ext4를 사용하지 못하는 것이 아니라 사용하는 방법이 있습니다.

(http://www.ngohq.com/operating-systems/15197-opensuse-11-1-ext4.html)


출처 : http://blog.naver.com/kimbeast

728x90

댓글