하드 디스크 성능을 확인하는 방법


답변:


425

터미널 방법

hdparm 시작하기 좋은 곳입니다.

sudo hdparm -Tt /dev/sda

/dev/sda:
Timing cached reads:   12540 MB in  2.00 seconds = 6277.67 MB/sec
Timing buffered disk reads: 234 MB in  3.00 seconds =  77.98 MB/sec

sudo hdparm -v /dev/sda 정보도 제공합니다.

dd 쓰기 속도에 대한 정보를 제공합니다.

드라이브에 파일 시스템이 없으면 ( )을 사용하십시오 of=/dev/sda.

그렇지 않으면 / tmp에 마운트 한 후 테스트 출력 파일을 삭제하십시오.

dd if=/dev/zero of=/tmp/output bs=8k count=10k; rm -f /tmp/output

10240+0 records in
10240+0 records out
83886080 bytes (84 MB) copied, 1.08009 s, 77.7 MB/s

그래픽 방법

  1. 시스템-> 관리-> 디스크 유틸리티로 이동하십시오.
    • 또는 명령 줄에서 Gnome 디스크 유틸리티를 실행하여 gnome-disks
  2. 왼쪽 창에서 하드 디스크를 선택하십시오.
  3. 이제 오른쪽 창에서“벤치 마크 – 드라이브 성능 측정”버튼을 클릭하십시오.
  4. 차트가있는 새 창이 열리고 버튼이 두 개 있습니다. 하나는 "읽기 전용 벤치 마크 시작"이고 다른 하나는 "읽기 / 쓰기 벤치 마크 시작"입니다. 아무 버튼이나 클릭하면 하드 디스크 벤치마킹이 시작됩니다.

테스트

디스크 I / O를 벤치마킹하는 방법

더 원하는 것이 있습니까?


10
데이터를 압축하면 쓰기 속도에 큰 영향을 줄 수 있으므로 SSD를 테스트 할 때 입력 /dev/urandom뿐만 아니라 테스트 도 권장 합니다. /dev/zerodd
Ian Mackinnon

3
내 Ubuntu 12.04 Unity에는 그러한 "시스템->"이 없습니다. 또는 적어도 나는 그것을 찾지 못했습니다. 그리고 시스템 설정에서 해당 디스크 도구도 표시되지 않습니다 ... O_O하지만 finallly 실행 관리 :는 / usr / 빈 / 씌어 있던 글자 를 지우고 그 위에
프랜 Marzoa

6
12.10 부터는 간단히 디스크라고 하며 Unity를 통해 찾을 수 있습니다.
Paul Lammertsma 2019

1
Gnome에서는 응용 프로그램-> 시스템 도구-> 기본 설정-> 디스크 유틸리티로 이동했습니다. Unity를 싫어하는 사람들을 위해.
Ken Sharp

2
/tmp파일 시스템은 종종 요즘 램 디스크를 사용하고 있습니다. 따라서 쓰기 /tmp는 디스크 하위 시스템이 아닌 메모리를 테스트 하는 것 같습니다.
Zoredache

99

Suominen이 맞습니다. 일종의 동기화를 사용해야합니다. 그러나 더 간단한 방법이 있습니다. conv = fdatasync가 작업을 수행합니다.

dd if=/dev/zero of=/tmp/output conv=fdatasync bs=384k count=1k; rm -f /tmp/output
1024+0records in
1024+0 records out
402653184 bytes (403 MB) copied, 3.19232 s, 126 MB/s

28
다른 명령 / 옵션을 사용하는 답변입니다. 나는 그것이 그 자신의 게시물에 합당한 답이라고 생각합니다.
Alaa Ali

2
384k를 블록 크기로 사용한 이유는 무엇입니까?
Diego F. Durán

1
@Diego 이유가 없습니다. 단지 예일뿐입니다. 다른 것을 사용할 수 있습니다. (약 4k ~ 1M 사이) 물론 더 큰 블록 크기는 더 나은 성능을 제공합니다. 큰 bs를 사용할 때는 물론 카운트 수를 줄이거 나 완료하는 데 1 년이 걸립니다.
Tele

IOzone에와 sysbench 숫자는 훨씬 낮은처럼 벤치 마크 툴에 의해 신뢰할 수 없습니다입니다
MSS

1
쓰기 데이터에 0을 사용하는 것에주의하십시오. 일부 파일 시스템 및 디스크에는 인위적으로 높은 벤치 마크 번호를 유발할 수있는 특별한 경우 (및 기타 압축 가능한 데이터) 경로가 있습니다.
Anon

50

/dev/urandom소프트웨어 기반이며 돼지만큼 느리기 때문에 사용하지 않는 것이 좋습니다 . 램 디스크에서 임의의 데이터를 청크하는 것이 좋습니다. 하드 디스크 테스트에서는 모든 바이트가 그대로 기록되므로 (dd와 함께 ssd에서도) 무작위로 중요하지 않습니다. 그러나 순수한 0 또는 임의의 데이터로 중복 제거 된 zfs 풀을 테스트하면 성능 차이가 큽니다.

다른 관점은 동기화 시간 포함이어야합니다. 모든 최신 파일 시스템은 파일 작업에서 캐싱을 사용합니다.

메모리가 아닌 디스크 속도를 실제로 측정하려면 캐싱 효과를 제거하기 위해 파일 시스템을 동기화해야합니다. 다음과 같이 쉽게 수행 할 수 있습니다.

time sh -c "dd if=/dev/zero of=testfile bs=100k count=1k && sync"

그 방법으로 출력을 얻습니다.

sync ; time sh -c "dd if=/dev/zero of=testfile bs=100k count=1k  && sync" ; rm testfile 
1024+0 records in
1024+0 records out
104857600 bytes (105 MB) copied, 0.270684 s, 387 MB/s

real    0m0.441s
user    0m0.004s
sys 0m0.124s

디스크 데이터 전송률은 104857600 / 0.441 = 237772335 B / s-> 237MB / s입니다.

캐싱보다 100MB / s 이상 낮습니다.

행복한 벤치마킹


3
쓰기 데이터에 0을 사용하는 데주의하십시오. 일부 디스크 (예 : SSD) 및 일부 파일 시스템에는 특별한 경우 경로가 있습니다. 따라서 버퍼 0을 사용하는 경우 인위적으로 벤치 마크 수가 높아집니다. 압축률이 높은 다른 데이터 패턴도 결과를 왜곡 할 수 있습니다.
Anon

36

디스크 읽기 및 쓰기 속도를 실시간으로 모니터링하려면 iotop 도구를 사용할 수 있습니다 .

이는 특정 응용 프로그램이나 작업에서 디스크가 어떻게 수행되는지에 대한 정확한 정보를 얻는 데 유용합니다. 출력은 프로세스 당 읽기 / 쓰기 속도와 서버의 총 읽기 / 쓰기 속도를 보여줍니다 top.

iotop을 설치하려면

sudo apt-get install iotop  

그것을 실행하려면 :

sudo iotop

28

정확성을 원하면을 사용해야합니다 fio. 설명서 ( man fio)를 읽어야 하지만 정확한 결과를 얻을 수 있습니다. 정확성을 위해서는 측정하려는 대상을 정확하게 지정해야합니다. 몇 가지 예 :

큰 블록있는 순차 읽기 속도 (드라이브 사양에서 볼 수있는 숫자에 가까워 야 함) :

fio --name TEST --eta-newline=5s --filename=fio-tempfile.dat --rw=read --size=500m --io_size=10g --blocksize=1024k --ioengine=libaio --fsync=10000 --iodepth=32 --direct=1 --numjobs=1 --runtime=60 --group_reporting

큰 블록을 사용한 순차적 쓰기 속도 (드라이브 사양에서 볼 수있는 숫자에 가까워 야 함) :

fio --name TEST --eta-newline=5s --filename=fio-tempfile.dat --rw=write --size=500m --io_size=10g --blocksize=1024k --ioengine=libaio --fsync=10000 --iodepth=32 --direct=1 --numjobs=1 --runtime=60 --group_reporting

랜덤 4K는 QD1을 읽습니다 (확실히 알지 않는 한 실제 성능에 중요한 숫자 임)

fio --name TEST --eta-newline=5s --filename=fio-tempfile.dat --rw=randread --size=500m --io_size=10g --blocksize=4k --ioengine=libaio --fsync=1 --iodepth=1 --direct=1 --numjobs=1 --runtime=60 --group_reporting

동기화 된 랜덤 4K 읽기 및 쓰기 QD1 ( 동기화 에서 예상 할 수있는 최악의 경우, 일반적으로 사양서에 나열된 숫자의 1 % 미만) :

fio --name TEST --eta-newline=5s --filename=fio-tempfile.dat --rw=randrw --size=500m --io_size=10g --blocksize=4k --ioengine=libaio --fsync=1 --iodepth=1 --direct=1 --numjobs=1 --runtime=60 --group_reporting

--size파일 크기를 늘리려면 인수를 늘리십시오. 더 큰 파일을 사용하면 드라이브 기술과 펌웨어에 따라 숫자가 줄어들 수 있습니다. 판독 헤드가 그렇게 많이 이동할 필요가 없기 때문에 작은 파일은 회전 미디어에 대해 "너무 좋은"결과를 제공합니다. 장치가 거의 비어있는 경우 드라이브를 거의 채울만큼 큰 파일을 사용하면 각 테스트에서 최악의 동작이 발생합니다. SSD의 경우 파일 크기는 그다지 중요하지 않습니다.

그러나 일부 저장 매체의 경우 파일 크기는 짧은 시간 동안 작성된 총 바이트 수만큼 중요하지 않습니다. 예를 들어, 일부 SSD는 사전 소거 된 블록의 성능이 훨씬 빠르거나 쓰기 캐시로 사용되는 작은 SLC 플래시 영역을 가지고 있으며 SLC 캐시가 가득 차면 성능이 변경 될 수 있습니다. 다른 예로, Seagate SMR HDD의 성능은 약 20GB PMR 캐시 영역을 갖지만 일단 가득 차면 SMR 영역에 직접 쓰면 원래 성능에서 10 %로 성능이 저하 될 수 있습니다. 이 성능 저하를 확인하는 유일한 방법은 먼저 20GB 이상을 가능한 빨리 쓰는 것입니다. 물론 이것은 모두 워크로드에 달려 있습니다. 쓰기 액세스가 장치에 내부 캐시를 정리할 수 있도록 지연 시간이 길어지면 테스트 시퀀스가 ​​짧을수록 실제 성능이 더 잘 반영됩니다. 많은 IO를 수행해야하는 경우 두 가지 모두를 증가시켜야합니다.--io_size그리고 --runtime매개 변수. 일부 미디어 (예 : 대부분의 플래시 장치)는 이러한 테스트를 통해 추가 마모가 발생합니다. 제 생각에는 이러한 종류의 테스트를 처리 할만큼 장치가 부족한 경우 어떤 경우에도 가치있는 데이터를 보유하는 데 사용해서는 안됩니다.

또한 일부 고품질 SSD 장치에는 내부 SLC 캐시에 동일한 주소 공간 (예 : 테스트 파일)에 도달 할 경우 테스트 중에 다시 작성되는 데이터를 대체 할 수있는 스마트가 충분한 지능형웨어 레벨링 알고리즘이있을 수 있습니다. 총 SLC 캐시보다 작습니다). 이러한 장치의 경우 파일 크기가 다시 중요해지기 시작합니다. 실제 워크로드가 필요한 경우 실제로 실제로 볼 수있는 파일 크기로 테스트하는 것이 가장 좋습니다. 그렇지 않으면 숫자가 너무 좋아 보일 수 있습니다.

참고 fio첫 번째 실행에 필요한 임시 파일을 생성합니다. 영구 저장 장치에 데이터를 기록하기 전에 데이터를 압축하여 치트를 쓰는 장치에서 너무 많은 숫자를 얻지 않도록 임의의 데이터로 채워집니다. 임시 파일은 fio-tempfile.dat위의 예제에서 호출 되어 현재 작업 디렉토리에 저장됩니다. 따라서 먼저 테스트하려는 장치에 마운트 된 디렉토리로 변경해야합니다.

SSD가 양호하고 더 높은 숫자를 보려면 --numjobs위의 값을 늘리십시오 . 이는 읽기 및 쓰기의 동시성을 정의합니다. 위의 예제는 모두 단일 스레드 프로세스 읽기 및 쓰기에 관한 테스트로 numjobs설정되었습니다 1(아마도 대기열 세트로 가능 iodepth). 하이 엔드 SSD를 (예를 들어 인텔 Optane)도 증가없이 높은 번호를 받아야 numjobs많은 (예 : 4최고 사양 번호를 얻을 충분해야한다)하지만 일부 "기업"SSD는 갈 필요 32- 128사양 번호를 얻을 수 있기 때문에 이들의 내부 지연 시간 장치는 더 높지만 전체 처리량은 제정신입니다.


1
방금 일부 장치를 다시 테스트했습니다. 위의 순차적 읽기 테스트 (2MB 블록 크기)를 사용하여 Samsung SSD 850 EVO에서 280MB / s, Intel 910 SSD에서 1070MB / s를 얻었습니다. 64k 블록 크기와 동일한 명령 줄로 850 EVO에서 268MB / s, 910 SSD에서 1055MB / s를 얻었습니다. 적어도 이런 종류의 장치의 경우 2MB 블록 크기를 사용하면 커널이 요청을 하드웨어로 분할하더라도 결과가 약 1-5 % 향상되는 것으로 보입니다. 커널 최적화를 사용하더라도 더 많은 syscall을 제출하는 오버 헤드는 커널 내부에서 분할하는 것보다 나쁩니다.
Mikko Rantalainen 2016 년

1
추가 테스트를 수행하면보다 작은 2 값을 사용하여 가장 높은 순차 처리량을 얻는 것 같습니다 max_sectors_kb. 실제 하드웨어에서 작동하는 것처럼 보이기 때문에 1MB 블록 크기를 사용하도록 위의 예제 명령을 변경했습니다. 또한 fsync읽기에 중요하지 않은 것으로 테스트했습니다 .
Mikko Rantalainen 2016 년

1
드라이브 연결 방법에 따라 iodepth가 너무 낮을 수 있습니다. 리눅스가 실제로 장치로 전송하는 것과 그 깊이가 무엇인지 지켜봐야한다.
Anon

1
실제 프로그램은 종종 1보다 큰 깊이에서는 작동하지 않는 알고리즘 / 논리를 실행하기 때문에 임의 액세스로 설정 iodepth했습니다 1. 결과적으로, 깊이가 너무 낮 으면 I / O 장치가 나쁩니다. 일부 SSD 장치는 32보다 높은 깊이의 이점을 얻는 것이 사실입니다. 그러나 읽기 액세스가 필요 하고 32보다 높은 iodepth를 유지할 수 있는 실제 워크로드를 가리킬 수 있습니까? TL; DR : 대기 시간이 긴 장치를 사용하여 엄청나게 높은 읽기 벤치 마크 숫자를 재현하려면 사용 iodepth=256 --numjobs=4하지만 실제 숫자는 볼 수는 없습니다.
Mikko Rantalainen

1
대부분의 "실제"프로그램은 실제로 비동기 적으로 직접 I / O (o_)를 제출하지 않으므로 모든 예제는 예외적 인 작업 영역에 있으며 한계 벤치 마크 영역을 확장합니다 (최상의 벤치 마크는 실제 작업량 임). 바쁜 가상 머신을 여러 개 실행하는 등의 작업을 수행하면 심도가 높은 워크로드를 쉽게 생성 할 수 있지만 I / O가 종종 디스크 관점에서 무작위로 보이는 위치는 다음과 같은 것에서 큰 속도를 볼 수있는 간단한 예입니다 NVMe. 추신 : 숫자를 너무 높게 설정하면 처리량이 줄어 달콤한 지점이 있습니다 ...
Anon

25

보니 ++는 내가 리눅스에서 알고있는 최고의 벤치 마크 유틸리티이다.

(현재 Windows 기반 머신을 테스트하기 위해 bonnie ++와 함께 작업 할 때 Linux livecd를 준비 중입니다!)

캐싱, 동기화, 임의 데이터, 디스크의 임의 위치, 작은 크기의 업데이트, 큰 업데이트, 읽기, 쓰기 등을 관리합니다. usbkey, 하드 디스크 (로터리), 솔리드 스테이트 드라이브 및 램 기반 비교 파일 시스템은 초보자에게 매우 유익 할 수 있습니다.

우분투에 포함되어 있는지는 모르겠지만 소스에서 쉽게 컴파일 할 수 있습니다.

http://www.coker.com.au/bonnie++/


Bonnie는 디스크 벤치마킹에 결함이 있으며 실제로 시스템의 디스크 이외의 측면을 반영하는 숫자를 쉽게 생성 할 수 있으므로 사용하기로 선택한 경우 상당한주의가 필요합니다. 자세한 내용은 Brendan Gregg의 활성 벤치마킹 : Bonnie ++ 를 참조하십시오.
Anon

22

쓰기 속도

$ dd if=/dev/zero of=./largefile bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 4.82364 s, 223 MB/s

블록 크기는 실제로 상당히 큽니다. 64k 또는 4k와 같은 작은 크기로 시도 할 수 있습니다.


읽기 속도

다음 명령을 실행하여 메모리 캐시를 지우십시오.

$ sudo sh -c "sync && echo 3 > /proc/sys/vm/drop_caches"

이제 쓰기 테스트에서 작성된 파일을 읽으십시오.

$ dd if=./largefile of=/dev/null bs=4k
165118+0 records in
165118+0 records out
676323328 bytes (676 MB) copied, 3.0114 s, 225 MB/s

쓰기 데이터에 0을 사용하는 것에주의하십시오. 일부 파일 시스템 및 디스크에는 인위적으로 높은 벤치 마크 번호를 유발할 수있는 특별한 경우 (및 기타 압축 가능한 데이터) 경로가 있습니다.
Anon

14

보니 ++ 사용법에 대한 힌트

bonnie++ -d [TEST_LOCATION] -s [TEST_SIZE] -n 0 -m [TEST_NAME] -f -b -u [TEST_USER] 
bonnie++ -d /tmp -s 4G -n 0 -m TEST -f -b -u james

조금 더 : SIMPLE BONNIE ++ EXAMPLE .


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.