dd는 duplication of disk, 즉, 디스크를 복제하는 명령입니다.
이 명령을 사용해 파일 시스템 성능을 측정해보겠습니다.
우선 다음과 같이 1 기가 바이트의 파일을 생성하고, 그 시간을
timex 명령을 이용해 측정해 봅시다.
$ timex dd if=/dev/zero of=1gig bs=32k count=32000
32000+0 레코드 입력
32000+0 레코드 출력real 13.28
user 0.04
sys 3.21
32kb 블럭을 32000번 써서 1024000kb(약 1기가) 파일을 만들고, 그 시간을
측정한 결과 13.28초가 소요되었습니다.
그래서 쓰기 성능은 1024000kb/13.28초 = 75.3MB/초 입니다.
이번엔 읽기 성능을 측정해봅시다.
첫 번째 시험을 완료하면 1gig란 파일이 생기는데, 이번엔 이 파일을 한 번
읽어봅시다.
$ ll 1gig
-rw-rw-r-- 1 koym777 users 1048576000 9월 25일 14:28 1gig$ timex dd if=1gig of=/dev/zero bs=32k
32000+0 레코드 입력
32000+0 레코드 출력real 5.28
user 0.04
sys 2.01
읽기 성능은 1024000kb/5.28초 = 189.4MB/초 입니다.
동일한 시험을 한 번 더 해봅시다.
$ timex dd if=1gig of=/dev/zero bs=32k
32000+0 레코드 입력
32000+0 레코드 출력real 1.03
user 0.04
sys 0.98
앗, 동일한 시험인데 시간이 급격히 줄어들었네요.
여기서의 읽기성능은 무려 970.8MB/초에 달하는군요.
왜 그럴까요? 아시는 분은 다 아시겠지만, OS 자체에서 파일시스템에
대한 버퍼캐시를 메모리에 유지하고 있기 때문에, 최근에 액세스한
디스크블럭은 처음 읽을 때 보다 훨씬 빨리 읽게됩니다.
그래서 파일 시스템 성능 측정시에는 이 캐시에 대한 효과를 항상
염두에 두어야 합니다.
[출처] dd명령을 이용한 파일시스템 성능 측정|작성자 즐거운맨
아래는 dd의 bs 옵션에 따른 성능 테스트에 관련된 글
- dd의 bs value는 반드시 sector size의 배수가 되어야 한다.
어떤 row device의 sector size가 512 라면, bs 값은 512, 1024, 2048 등의 값이어야 error가 발생하지 않는다.
- sector size는 blockdev 를 이용해서 확인할 수 있다. (SSZ column 값)
# blockdev --report
RO RA SSZ BSZ StartSec Size Device
rw 256 512 4096 0 16777216 /dev/hda
rw 256 512 1024 63 256977 /dev/hda1
rw 256 512 4096 257040 11261565 /dev/hda2
rw 256 512 4096 11518605 2104515 /dev/hda3
rw 256 512 1024 13623120 2 /dev/hda4
rw 256 512 1024 13623183 208782 /dev/hda5
rw 256 512 1024 13832028 208782 /dev/hda6
< Test 환경 >
IBM x3650 서버
SAS 15000 prm 146GB Disk * 2EA
< Test 결과 >
Test 1) no bs option
# dd if=/dev/sda of= /dev/sda
result : 14400 sec = 240분, 10.2 MB/s
정상 부팅 및 서비스 정상 작동
Test 2) bs=4096
# dd if=/dev/sda of= /dev/sda bs= 4096
result : 50분, 46.8 MB/s
정상 부팅 및 서비스 정상 작동
Test 3) bs=16384
# dd if= /dev/sda of= /dev/sda bs= 16384
result : 22분, 109 MB/s
정상 부팅 및 서비스 정상 작동
[출처] dd 백업의 bs 옵션 테스트|작성자 시릴로