Cách kiểm tra hiệu năng đĩa cứng


336

Cách kiểm tra hiệu năng của ổ cứng (Hoặc thông qua thiết bị đầu cuối hoặc GUI). Tốc độ viết. Tốc độ đọc. Kích thước và tốc độ bộ nhớ cache. Tốc độ ngẫu nhiên.


Câu trả lời:


425

Phương thức đầu cuối

hdparm là một nơi tốt để bắt đầu.

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 sẽ cung cấp thông tin là tốt.

dd sẽ cung cấp cho bạn thông tin về tốc độ ghi.

Nếu ổ đĩa không có hệ thống tệp (và chỉ sau đó ), hãy sử dụng of=/dev/sda.

Nếu không, gắn nó vào / tmp và viết sau đó xóa tệp đầu ra thử nghiệm.

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

Phương pháp đồ họa

  1. Chuyển đến Hệ thống -> Quản trị -> Tiện ích đĩa.
    • Hoặc, khởi chạy tiện ích đĩa Gnome từ dòng lệnh bằng cách chạy gnome-disks
  2. Chọn đĩa cứng của bạn ở khung bên trái.
  3. Bây giờ hãy nhấp vào Điểm chuẩn của điểm số - Nút Đo hiệu suất ổ đĩa trong khung bên phải.
  4. Một cửa sổ mới với các biểu đồ mở ra. Bạn sẽ tìm thấy và hai nút. Một cái là dành cho Bắt đầu Đọc Chỉ điểm chuẩn và một cái khác là Bắt đầu Đọc / Viết Điểm chuẩn. Khi bạn nhấp vào nút bất kỳ ai, nó sẽ bắt đầu đo điểm chuẩn của đĩa cứng.

kiểm tra

Làm thế nào để điểm chuẩn I / O đĩa

Bài báo

Có điều gì bạn muốn hơn không?


10
Tôi khuyên bạn nên kiểm tra /dev/urandomcũng như các /dev/zerođầu vào ddkhi kiểm tra SSD vì khả năng nén dữ liệu có thể ảnh hưởng lớn đến tốc độ ghi.
Ian Mackinnon

3
Không có "Hệ thống ->" nào trên Unity Ubuntu 12.04 của tôi. Hoặc ít nhất là tôi đã không tìm thấy nó. Và tôi không thấy công cụ đĩa đó trong Cài đặt hệ thống ... O_o Nhưng tôi đã quản lý tốt để chạy nó: / usr / bin / palimpsest
Fran Marzoa

6
Lưu ý rằng kể từ ngày 12.10, nó được gọi đơn giản là Đĩa và có thể được tìm thấy thông qua Unity.
Paul Lammertsma

1
Trên Gnome, điều này đã được chuyển sang Ứng dụng -> Công cụ hệ thống -> Tùy chọn -> Tiện ích đĩa. Đối với những người sử dụng ghét Unity.
Ken Sharp

2
Hệ /tmpthống tập tin thường sử dụng ramdisk những ngày này. Vì vậy, viết vào /tmpdường như sẽ kiểm tra bộ nhớ của bạn, không phải hệ thống con đĩa của bạn.
Zoredache

99

Suominen đã đúng, chúng ta nên sử dụng một số loại đồng bộ; nhưng có một phương thức đơn giản hơn, conv = fdatasync sẽ thực hiện công việc:

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
Đó là một câu trả lời bằng cách sử dụng một lệnh / tùy chọn khác với các lệnh khác. Tôi thấy đó là một câu trả lời xứng đáng cho một bài viết của riêng mình.
Alaa Ali

2
Tại sao bạn đã sử dụng 384k làm kích thước khối?
Diego F. Durán

1
@Diego Không có lý do. Đó chỉ là một ví dụ. Bạn có thể sử dụng bất cứ điều gì khác. (trong khoảng 4k ... 1M) Tất nhiên kích thước khối lớn hơn sẽ cho hiệu suất tốt hơn. Và tất nhiên giảm số lượng khi bạn sử dụng bs lớn, hoặc sẽ mất một năm để hoàn thành.
Tele

nó không đáng tin cậy bởi các công cụ đánh dấu băng ghế như iozone và số sysbench thấp hơn nhiều
MSS

1
Hãy cẩn thận với việc sử dụng số không cho dữ liệu ghi của bạn - một số hệ thống tệp và đĩa sẽ có đường dẫn trường hợp đặc biệt cho dữ liệu đó (và dữ liệu có thể nén khác) sẽ gây ra số điểm chuẩn cao giả tạo ...
Anon

50

Tôi không khuyên bạn nên sử dụng /dev/urandomvì nó dựa trên phần mềm và chậm như heo. Tốt hơn để lấy một đoạn dữ liệu ngẫu nhiên trên ramdisk. Trên kiểm tra đĩa cứng ngẫu nhiên không thành vấn đề, bởi vì mỗi byte được ghi là (cũng trên ssd với dd). Nhưng nếu chúng tôi kiểm tra nhóm zfs đã khấu trừ với dữ liệu không hoặc ngẫu nhiên thuần túy, có sự khác biệt lớn về hiệu suất.

Một quan điểm khác phải là sự bao gồm thời gian đồng bộ; tất cả các hệ thống tập tin hiện đại sử dụng bộ nhớ đệm trên các hoạt động tập tin.

Để thực sự đo tốc độ đĩa và không phải bộ nhớ, chúng ta phải đồng bộ hóa hệ thống tập tin để loại bỏ hiệu ứng bộ đệm. Điều đó có thể dễ dàng thực hiện bằng cách:

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

với phương pháp đó bạn nhận được đầu ra:

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

vì vậy datarate đĩa chỉ là 104857600 / 0.441 = 237772335 B / s -> 237MB / s

Đó là thấp hơn 100MB / s so với bộ nhớ đệm.

Điểm chuẩn hạnh phúc,


3
Hãy cẩn thận với việc sử dụng số không cho dữ liệu ghi của bạn - một số đĩa (như SSD) và một số hệ thống tệp sẽ có đường dẫn trường hợp đặc biệt cho nó. Điều này dẫn đến số điểm chuẩn cao giả tạo khi sử dụng bộ đệm bằng không. Các mẫu dữ liệu có khả năng nén cao khác cũng có thể làm sai lệch kết quả ...
Anon

36

Nếu bạn muốn theo dõi tốc độ đọc và ghi đĩa theo thời gian thực, bạn có thể sử dụng công cụ iotop .

Điều này rất hữu ích để có được thông tin chính xác về cách thức hoạt động của một đĩa cho một ứng dụng hoặc tác vụ cụ thể. Đầu ra sẽ hiển thị cho bạn tốc độ đọc / ghi trên mỗi quy trình và tổng tốc độ đọc / ghi cho máy chủ, tương tự như top.

Để cài đặt iotop:

sudo apt-get install iotop  

Để chạy nó:

sudo iotop

28

Nếu bạn muốn độ chính xác, bạn nên sử dụng fio. Nó yêu cầu đọc hướng dẫn ( man fio) nhưng nó sẽ cho bạn kết quả chính xác. Lưu ý rằng đối với bất kỳ độ chính xác, bạn cần xác định chính xác những gì bạn muốn đo. Vài ví dụ:

Tốc độ ĐỌC tuần tự với các khối lớn (giá trị này phải gần với số bạn thấy trong thông số kỹ thuật cho ổ đĩa của bạn):

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

Tốc độ VIẾT tuần tự với các khối lớn (giá trị này phải gần bằng số bạn thấy trong thông số kỹ thuật cho ổ đĩa của bạn):

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

Ngẫu nhiên 4K đọc QĐ1 (đây là con số thực sự quan trọng đối với hiệu suất trong thế giới thực trừ khi bạn biết rõ hơn):

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

Kết hợp ngẫu nhiên 4K đọc và ghi QĐ1 với đồng bộ hóa (đây là trường hợp xấu nhất bạn từng mong đợi từ ổ đĩa của mình, thường là ít hơn 1% số được liệt kê trong bảng thông số):

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

Tăng --sizeđối số để tăng kích thước tệp. Sử dụng các tệp lớn hơn có thể làm giảm số lượng bạn nhận được tùy thuộc vào công nghệ ổ đĩa và chương trình cơ sở. Các tệp nhỏ sẽ cho kết quả "quá tốt" cho phương tiện quay vì đầu đọc không cần phải di chuyển nhiều. Nếu thiết bị của bạn gần trống, sử dụng tệp đủ lớn để lấp đầy ổ đĩa sẽ giúp bạn xử lý trường hợp xấu nhất cho mỗi bài kiểm tra. Trong trường hợp SSD, kích thước tệp không quan trọng lắm.

Tuy nhiên, lưu ý rằng đối với một số phương tiện lưu trữ, kích thước của tệp không quan trọng bằng tổng số byte được ghi trong khoảng thời gian ngắn. Ví dụ: một số ổ SSD có thể có hiệu suất nhanh hơn đáng kể với các khối bị xóa trước hoặc nó có thể có vùng flash SLC nhỏ được sử dụng làm bộ đệm ghi và hiệu suất thay đổi khi bộ đệm SLC đầy. Một ví dụ khác, ổ cứng Seagate SMR có khoảng 20 GB bộ nhớ cache PMR có hiệu năng khá cao nhưng một khi nó đã đầy, việc ghi trực tiếp vào khu vực SMR có thể giảm hiệu suất xuống 10% so với ban đầu. Và cách duy nhất để thấy sự suy giảm hiệu suất này là trước tiên hãy viết 20+ GB càng nhanh càng tốt. Tất nhiên, tất cả phụ thuộc vào khối lượng công việc của bạn: nếu quyền truy cập ghi của bạn bị gián đoạn với độ trễ kéo dài cho phép thiết bị xóa bộ nhớ cache bên trong, trình tự kiểm tra ngắn hơn sẽ phản ánh hiệu suất thế giới thực của bạn tốt hơn. Nếu bạn cần làm nhiều IO, bạn cần tăng cả hai--io_size--runtimecác tham số. Lưu ý rằng một số phương tiện (ví dụ: hầu hết các thiết bị flash) sẽ bị hao mòn thêm từ thử nghiệm đó. Theo tôi, nếu bất kỳ thiết bị nào đủ kém để không xử lý loại thử nghiệm này, thì không nên sử dụng nó để giữ bất kỳ dữ liệu có giá trị nào trong mọi trường hợp.

Ngoài ra, một số thiết bị SSD chất lượng cao thậm chí có thể có thuật toán cân bằng hao mòn thông minh hơn trong đó bộ đệm SLC bên trong có đủ thông minh để thay thế dữ liệu được ghi lại trong quá trình kiểm tra nếu nó chạm vào cùng một không gian địa chỉ (đó là tệp thử nghiệm nhỏ hơn tổng bộ đệm SLC). Đối với các thiết bị như vậy, kích thước tệp bắt đầu quan trọng trở lại. Nếu bạn cần khối lượng công việc thực tế của mình, tốt nhất bạn nên kiểm tra kích thước tệp mà bạn thực sự sẽ thấy trong cuộc sống thực. Nếu không, số của bạn có thể trông quá tốt.

Lưu ý rằng fiosẽ tạo tệp tạm thời cần thiết trong lần chạy đầu tiên. Nó sẽ được lấp đầy với dữ liệu ngẫu nhiên để tránh nhận được số lượng quá tốt từ các thiết bị gian lận bằng cách nén dữ liệu trước khi ghi vào bộ nhớ vĩnh viễn. Các tập tin tạm thời sẽ được gọi fio-tempfile.dattrong các ví dụ trên và được lưu trữ trong thư mục làm việc hiện tại. Vì vậy, trước tiên bạn nên thay đổi thư mục được gắn trên thiết bị bạn muốn kiểm tra.

Nếu bạn có một ổ SSD tốt và muốn xem số lượng cao hơn nữa, hãy tăng --numjobsở trên. Điều đó xác định sự tương tranh cho việc đọc và viết. Tất cả các ví dụ trên đều được numjobsthiết lập để 1kiểm tra là về quá trình đọc và viết đơn luồng (có thể với một hàng đợi được đặt với iodepth). SSD cao cấp (ví dụ Intel Optane) sẽ có được số lượng cao ngay cả khi không tăng numjobsnhiều (ví dụ: 4đủ để có số thông số kỹ thuật cao nhất) nhưng một số SSD "Enterprise" yêu cầu phải có 32- 128để lấy số spec vì độ trễ bên trong của số đó thiết bị cao hơn nhưng thông lượng tổng thể là điên rồ.


1
Tôi chỉ kiểm tra lại một số thiết bị. Sử dụng thử nghiệm đọc tuần tự ở trên (kích thước khối 2 MB) tôi đã nhận được 280 MB / giây từ Samsung SSD 850 EVO và 1070 MB / giây từ SSD Intel 910. Với kích thước khối 64k và dòng lệnh giống hệt nhau, tôi đã nhận được 268 MB / s từ 850 EVO và 1055 MB / s từ 910 SSD. Ít nhất là đối với loại thiết bị này, sử dụng kích thước khối 2 MB dường như cải thiện kết quả khoảng 1-5% mặc dù nó khiến kernel phân chia yêu cầu thành phần cứng. Tôi đoán ngay cả với tối ưu hóa kernel, chi phí gửi nhiều tòa nhà cao tầng còn tệ hơn cả việc chia tách bên trong kernel.
Mikko Rantalainen

1
Sau khi thử nghiệm thêm, có vẻ như tôi nhận được thông lượng tuần tự cao nhất bằng cách sử dụng sức mạnh của 2 giá trị nhỏ hơn max_sectors_kb. Tôi đã thay đổi các lệnh ví dụ trên để sử dụng kích thước khối 1 MB vì ​​dường như nó hoạt động với phần cứng trong thế giới thực. Và tôi cũng đã kiểm tra điều đó fsynckhông quan trọng để đọc.
Mikko Rantalainen

1
Tùy thuộc vào cách ổ đĩa được kết nối, bạn có thể thấy rằng iodepth của bạn quá thấp. Bạn sẽ phải xem Linux thực sự đang gửi xuống thiết bị gì và độ sâu của nó đang làm gì vào lúc ...
Anon

1
Tôi thiết lập iodepthđể 1cho truy cập ngẫu nhiên chính xác bởi vì các chương trình thế giới thực thường chạy các thuật toán / logic mà không làm việc với bất kỳ độ sâu cao hơn 1. Kết quả là, nếu chiều sâu như vậy là "quá thấp" I / O thiết bị của bạn là xấu. Đúng là một số thiết bị SSD sẽ được hưởng lợi từ độ sâu cao hơn 32. Tuy nhiên, bạn có thể chỉ ra bất kỳ khối lượng công việc trong thế giới thực nào yêu cầu quyền truy cập đọc có thể theo kịp iepth cao hơn 32 không? TL; DR: nếu bạn muốn sao chép một số điểm chuẩn đọc cực kỳ cao với thiết bị có độ trễ cao, hãy sử dụng iodepth=256 --numjobs=4nhưng không bao giờ mong đợi để xem những con số như vậy là thật.
Mikko Rantalainen

1
Hầu hết các chương trình "thế giới thực" không thực sự gửi I / O (o_) trực tiếp một mình không đồng bộ để tất cả các ví dụ của chúng tôi có khối lượng công việc bất thường để đẩy lãnh thổ điểm chuẩn giới hạn (như họ nói, điểm chuẩn tốt nhất là khối lượng công việc thực sự của bạn). Phải nói rằng làm những việc như chạy nhiều máy ảo bận rộn có thể dễ dàng tạo ra khối lượng công việc với độ sâu cao điên rồ nhưng trong đó I / O thường trông ngẫu nhiên từ góc độ đĩa và là một ví dụ đơn giản về việc bạn có thể thấy tốc độ rất lớn từ những thứ như NVMe. PS: cài đặt số quá cao sẽ làm giảm thông lượng vì vậy có một điểm ngọt ngào ...
Anon

25

bonnie ++ là tiện ích điểm chuẩn cuối cùng mà tôi biết cho linux.

(Tôi hiện đang chuẩn bị một chương trình truyền hình trực tuyến linux đang hoạt động với bonnie ++ để thử nghiệm máy dựa trên windows của chúng tôi với nó!)

Nó đảm nhiệm việc lưu trữ, đồng bộ hóa, dữ liệu ngẫu nhiên, vị trí ngẫu nhiên trên đĩa, cập nhật kích thước nhỏ, cập nhật lớn, đọc, ghi, v.v ... So sánh một usbkey, ổ cứng (quay), ổ cứng thể rắn và dựa trên ram hệ thống tập tin có thể rất nhiều thông tin cho người mới.

Tôi không biết nếu nó được bao gồm trong Ubuntu, nhưng bạn có thể biên dịch nó từ nguồn dễ dàng.

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


Bonnie rất thiếu sót trong việc đo điểm chuẩn đĩa và có thể dễ dàng tạo ra các con số thực sự phản ánh các khía cạnh không phải đĩa của hệ thống của bạn, vì vậy cần phải có mức độ cẩn thận cao nếu bạn chọn sử dụng nó. Xem Điểm chuẩn hoạt động của Brendan Gregg: Bonnie ++ để biết chi tiết.
Anon

22

Tốc độ ghi

$ 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

Kích thước khối thực sự khá lớn. Bạn có thể thử với kích thước nhỏ hơn như 64k hoặc thậm chí 4k.


Tốc độ đọc

Chạy lệnh sau để xóa bộ nhớ cache

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

Bây giờ hãy đọc tệp được tạo trong bài kiểm tra ghi:

$ 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

Hãy cẩn thận với việc sử dụng số không cho dữ liệu ghi của bạn - một số hệ thống tệp và đĩa sẽ có đường dẫn trường hợp đặc biệt cho nó (và dữ liệu có thể nén khác) sẽ gây ra số điểm chuẩn cao giả tạo ...
Anon

14

Một số gợi ý về cách sử dụng bonnie ++

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

Một chút nữa tại: SIMPLE BONNIE ++ VÍ DỤ .


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.