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á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:
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
gnome-disks
Có điều gì bạn muốn hơn không?
/dev/urandom
cũng như các /dev/zero
đầu vào dd
khi kiểm tra SSD vì khả năng nén dữ liệu có thể ảnh hưởng lớn đến tốc độ ghi.
/tmp
thống tập tin thường sử dụng ramdisk những ngày này. Vì vậy, viết vào /tmp
dườ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.
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
Tôi không khuyên bạn nên sử dụng /dev/urandom
vì 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,
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
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
và --runtime
cá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 fio
sẽ 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.dat
trong 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 numjobs
thiết lập để 1
kiể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 numjobs
nhiề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ồ.
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 đó fsync
không quan trọng để đọc.
iodepth
để 1
cho 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 và 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=4
nhưng không bao giờ mong đợi để xem những con số như vậy là thật.
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.
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
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Ụ .
Kiểm tra tính toàn vẹn, phát hiện các ổ đĩa flash giả và kiểm tra hiệu suất, cả ba trong một lần chụp.
Thêm về câu trả lời này .