빅데이터 클러스터에서 각 호스트 장비의 입출력 성능은 매우 중요하다. 장비의 스펙이 바뀌거나 HDD에서 SSD로 구성을 변경할 때 서버의 입출력 성능을 측정해보고 싶을 때가 있다.
디스크 확인 (df -h)
우선 테스트해볼 디스크 장비를 확인해봐야한다. 시스템에 마운트되어 있는 파일 시스템 정보는 df
명령을 이용해 확인할 수 있다.
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 63G 2.2G 58G 4% /data1
df 명령의 -h 옵션을 이용하면 사람이 읽을 수 있는 (Human Readable) 형태로 정보를 출력해준다. /dev/sda1 디스크에 대한 입출력 성능 측정을 진행하겠다.
1. dd 명령 - 쓰기 성능 테스트
가장 간단하게 실행해볼 수 있는건 dd
명령을 이용한 방법이다. dd 명령은 유닉스 계열 운영체제에서 사용하는 명령으로 파일을 복사하고 변환하는데 사용하는 커맨드라인 유틸리티다. dd 명령을 이용하면 입출력(I/O)에 대한 성능 측정을 할 수 있다.
다음 명령을 실행해보자
$ dd if=/dev/zero bs=1024 count=100 of=/data1/test_file oflag=direct
dd 명령의 if
옵션과 of
옵션은 각가 입력파일(InputFile)과 출력파일(OutputFile)을 의미한다. dd 명령의 입력파일로 준 /dev/zero
파일은 리눅스에서 제공하는 특수파일로 사용자가 원하는 만큼 0x00
바이트를 채워준다. 즉 0x00
으로 가득찬 파일을 읽어서 /data1/test_file
에 쓰라는 의미의 명령이다. 명령 수행이 종료된 다음 /data1/test_file
을 열어보면 0x00으로 가득찬 파일을 볼 수 있다.
dd 명령의 bs
는 한번에 읽고 쓰기 위한 사이즈를 의미한다. 즉, Block Size를 의미한다.
dd 명령의 count
는 몇 번의 입출력을 수행할지를 의미한다. 결국 생성되는 파일의 크기는 bs * count
가 된다.
dd 명령의 oflag
는 test_file을 쓸 때 사용할 file flag를 의미한다. oflag=direct
는 O_DIRECT 플래그를 켜고 write() 호출을 하게 된다. O_DIRECT 플래그를 이용하면 파일시스템의 캐시 영역을 사용하지 않고 바로 디스크로 쓰게 된다. 따라서 디스크 입출력 성능을 측정할 때 반드시 필요하다.
$ dd if=/dev/zero bs=1024 count=100 of=test_file oflag=direct
100+0 records in
100+0 records out
102400 bytes (102kB) copies, 0.000315133 s, 325 MB/s
dd 명령이 종료되면 디스크 쓰기 성능을 알 수 있다.
2. dd 명령 - 읽기 성능 테스트
읽기 성능은 if와 of를 살짝 변경해서 측정할 수 있다.
$ dd if=/data1/test_file of=/dev/null bs=1024
dd 명령의 if, of 옵션의 의미는 동일하다. of 옵션에 사용한 /dev/null
파일은 리눅스에서 제공하는 특수 파일이다. 이 파일을 of 옵션으로 주면 읽은 데이터를 그냥 버리겠다는 의미다. (순수 읽기 성능만 수행할 것이기 때문에 읽은다음에는 아무것도 할 필요가 없다)
dd 명령의 bs는 한번에 읽을 Block Size를 의미하며 count 옵션을 주지않았기 때문에 파일 전체를 읽어들인다.
$ dd if=test_file of=/dev/null bs=1024
100+0 records in
100+0 records out
102400 bytes (102kB) copies, 9.4785e-05 s, 1.1 GB/s
dd 명령이 종료되면 디스크 읽기 성능을 확인할 수 있다.
3. hdparam 명령
hdparam
명령은 SATA, ATA 장치들의 파라미터 설정을 확인하고, 설정을 세팅하는데 사용되는 명령이다. 하지만 실무에서는 디스크 Access 속도를 측정할 때 많이 사용된다.
$ hdparm -Tt /dev/sda1
hdparam
명령을 이용해서 /dev/sda1
디스크의 성능을 측정하는 명령어다.
-T
옵션은 디스크 드라이브에 대한 캐시 데이터를 읽는 속도를 의미하며 빠르다. -t
옵션은 디스크 드라이브를 읽는 속도를 의미한다.
/dev/sda1:
Timing cached reads: 15942 MB in 2.00 seconds = 7983 MB/sec
Timing buffered disk reads: 950 MB in 3.00 seconds = 316.15 MB/sec
두 가지 옵션으로 준 항목에 대한 읽기 성능 결과다. 캐시를 이용한 결과가 훨씬 빠른 것을 알 수 있다.
댓글