본문 바로가기
카테고리 없음

리눅스(Linux) 디스크 입출력 성능 측정하기 - dd, hdparm

by 왕 달팽이 2019. 4. 4.
반응형

빅데이터 클러스터를 구축하면서 특정 장비의 입출력(I/O) 성능을 측정하고 싶을 때가 있다. 장비 자체의 성능 문제인지 설정 값을 튜닝할 여지가 있는지 구분하기 위해서 입출력 성능을 측정하는게 중요한 바로미터가 되기 때문이다.

df -h 명령

'df -h' 명령을 이용하면 현 시스템에 마운트 되어 있는 파일 시스템 정보를 알 수 있다. (-h 옵션을 이용하면 파일 시스템 용량을 사람이 읽기 쉬운 형태로 출력해준다)

Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1        63G  2.2G   58G   4% /etc/hosts

'/dev/sda1' 장비에 대해서 입출력 성능 측정을 해보겠다.

dd 명령을 이용한 테스트

dd 명령은 유닉스 및 유닉스 계열 운영체제에서 사용하는 명령으로 파일을 복사하고 변환하는데 사용하는 커맨드라인 유틸리티다. dd 명령을 이용하면 입출력(I/O)에 대한 성능 벤치마크를 진행할 수 있다.

 

다음 명령을 이용해서 쓰기 성능을 측정할 수 있다.

$ dd if=/dev/zero bs=1024 count=100 of=test_file oflag=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 명령의 입력 인자들을 하나씩 살펴보자.

 

if 인자와 of 인자는 각각 입력 파일(InputFile)과 출력 파일(OutputFile)을 의미한다. 입력 파일에 전달한 '/dev/zero' 파일은 리눅스에서 제공하는 특수 파일로 사용자가 원하는 만큼 0x00 바이트를 채워준다. 즉 0x00으로 가득찬 파일을 읽어서 test_file 이라는 이름의 파일에 쓰겠다는 뜻이다. 테스트가 끝나고 현재 작업 디렉토리를 보면 test_file이라는 0x00으로 가득찬 파일을 볼 수 있다.

 

bs는 한번에 읽고 쓸 사이즈를 명시한다. count는 몇 번 입출력을 수행할지를 명시하며, 결국 bs * count 만큼의 파일이 생성된다.

 

oflag는 test_file을 쓸 때, O_DIRECT 플래그를 주고 열라는 의미다. O_DIRECT 플래그를 이용해서 파일을 열면 파일 시스템의 캐시 영역에 버퍼링하지 않고 바로 디스크로 쓰게 된다. 따라서 디스크 입출력 성능을 측정할 때 반드시 필요하다.

 

읽기 성능은 다음 명령을 이용해서 측정할 수 있다.

$ dd if=test_file of=/dev/null bs=1024

읽기 성능 측정의 결과는 다음과 같이 출력된다.

$ 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

읽기 성능 측정에서 if와 of가 의미하는 바는 동일하다. 다만 '/dev/null'이라는 특수 파일이 등장하는데, 이 파일을 of에 명시하면 파일을 읽어서 버리겠다는 의미다. 읽어들인 데이터를 그냥 버리겠다는 의미로 /dev/null 파일로 수행된 쓰기 연산은 아무일도 일어나지 않고 쓰기 성공한 것으로 간주된다.

 

bs는 마찬가지로 한번에 1024 만큼 읽겠다는 의미이며 count가 없기 때문에 파일의 전체를 다 읽어 들이게 된다.

 

각 장비들이 마운트되어 있는 디렉토리에 가서 dd로 입출력 테스트를 하면 된다. 예를 들어 '/dev/sdb' 장비가 '/data1' 디렉토리에 마운트되어 있으면 '/data1/test_file'을 경로에 주고 입출력 테스트를 하면 된다.

 

hdparm

hdparm은 SATA, ATA 장치들의 파라미터 설정을 확인하고, 세팅하는데 사용되는 명령어다. 하지만 실무에서는 디스크의 Access 속도를 측정할 때 많이 사용된다.

 

다음 명령을 이용해 특정 장비의 접근 속도를 측정할 수 있다.

$ hdparm -Tt /dev/sda1

출력 결과는 다음과 같다.

/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

hdparm의 -T 옵션은 디스크 드라이브에 대한 캐쉬 데이터를 읽는 속도를 의미하며 빠르다. -t 옵션은 디스크 드라이브를 읽는 속도를 체크한다.

반응형

댓글