1. Tổng quan.
Lệnh dd
trong Linux được sử dụng để sao chép và chuyển đổi dữ liệu. Nó có thể sao chép dữ liệu từ một nguồn (như một file hoặc một thiết bị phần cứng) đến một đích (cũng có thể là một file hoặc thiết bị phần cứng).
iostat
là một công cụ trong Linux được sử dụng để giám sát và thu thập thông tin về hiệu suất của CPU và I/O devices như ổ đĩa.
2. Hiểu về cách kiểm tra IOPS và Throughput để kiểm tra.
Trong thiết kế hệ thống lưu trữ như Ceph, thường có sự đánh đổi giữa IOPS (Input/Output Operations Per Second) và throughput.
Nếu hệ thống được tối ưu hóa cho IOPS, nó thường được cấu hình để xử lý một lượng lớn các operations nhỏ. Điều này thường đòi hỏi việc sử dụng các ổ đĩa SSD nhanh và có thể làm giảm throughput tổng thể do overhead của việc xử lý một lượng lớn các operations.
Nếu hệ thống được tối ưu hóa cho throughput, nó thường được cấu hình để xử lý một lượng nhỏ các operations lớn. Điều này thường đòi hỏi việc sử dụng các ổ đĩa HDD lớn và có thể làm giảm IOPS tổng thể do thời gian truy cập lớn hơn của các ổ đĩa này.
Tuy nhiên, lưu ý rằng sự đánh đổi này không phải lúc nào cũng rõ ràng và có thể phụ thuộc vào nhiều yếu tố khác nhau, bao gồm cấu hình của hệ thống, loại workload, và loại phần cứng được sử dụng.
Để kiểm tra throughput, bạn nên tạo một tập tin lớn bằng cách sử dụng một block size (bs) lớn. Điều này giả lập việc chép một tập tin lớn, trong đó throughput (tốc độ chuyển dữ liệu) là yếu tố quan trọng nhất.
Để kiểm tra IOPS, bạn nên tạo nhiều tập tin nhỏ bằng cách sử dụng một block size nhỏ. Điều này giả lập việc chép nhiều tập tin nhỏ, trong đó số lượng operations mỗi giây (IOPS) là yếu tố quan trọng nhất.
Lưu ý rằng dd
chỉ là một công cụ kiểm tra đơn giản và không thể mô phỏng tất cả các loại workload thực tế. Để kiểm tra hiệu suất ổ đĩa một cách chính xác hơn, bạn nên sử dụng một công cụ kiểm tra hiệu suất chuyên dụng như fio
(Flexible I/O Tester).
3. Kiểm tra IOPS.
Để kiểm tra IOPS (Input/Output Operations Per Second) của storage, bạn có thể sử dụng dd
để tạo một tập tin tạm thời trên storage và sau đó sử dụng iostat
để theo dõi hiệu suất. Dưới đây là cách bạn có thể làm điều đó:
Sử dụng dd
để tạo một tập tin tạm thời trên storage:
dd if=/dev/zero of=/root/testfile bs=4k count=10000000000000000000
Tiếp theo hãy cài đặt iostat trước nếu chưa có.
apt update
apt install sysstat -y
Mở một terminal mới và chạy iostat
với thời gian cập nhật là 1 giây. Lệnh iostat -dx 1
được sử dụng để hiển thị thông tin chi tiết về hiệu suất I/O của các thiết bị lưu trữ
iostat -dx 1 #sử dụng để kiểm tra tất cả các ổ đĩa hiện có
hoặc
iostat -dx 1 /dev/sda #sử dụng để chỉ kiểm tra ổ đĩa sda
Các tham số -dx 1
có ý nghĩa như sau:
-d
: Chỉ hiển thị thông tin về hiệu suất I/O của thiết bị (device), không bao gồm thông tin về CPU.-x
: Hiển thị thông tin mở rộng (extended), bao gồm các chỉ số như %util (phần trăm thời gian thiết bị bận), await (thời gian trung bình cho mỗi I/O operation, bao gồm cả thời gian hàng đợi và thời gian xử lý), và nhiều chỉ số khác.1
: Cập nhật thông tin mỗi 1 giây. Bạn có thể thay đổi số này để cập nhật thông tin mỗi n giây./dev/sda
: ổ đĩa cần kiểm tra iops.
Ví dụ, output của iostat -dx 1
có thể như sau:
shell> iostat -dx 1 /dev/sda
Linux 5.4.0-169-generic (ntj-k8s-master1) 03/24/24 _x86_64_ (8 CPU)
Device r/s rkB/s rrqm/s %rrqm r_await rareq-sz w/s wkB/s wrqm/s %wrqm w_await wareq-sz d/s dkB/s drqm/s %drqm d_await dareq-sz aqu-sz %util
sda 245.00 0.00 0.00 0.00 0.00 0.00 2836.00 3183080.00 76.00 2.61 4.45 1122.38 0.00 0.00 0.00 0.00 0.00 0.00 7.02 74.80
Trong đó:
Dưới đây là ý nghĩa của các tham số bạn đã liệt kê:
r/s
: Số lượng operations đọc mỗi giây.rkB/s
: Số lượng kilobytes được đọc mỗi giây.rrqm/s
: Số lượng operations đọc được gộp lại mỗi giây.%rrqm
: Phần trăm operations đọc được gộp lại.r_await
: Thời gian trung bình cho mỗi operations đọc, bao gồm cả thời gian hàng đợi và thời gian xử lý.rareq-sz
: Kích thước trung bình của các operations đọc.w/s
: Số lượng operations ghi mỗi giây.wkB/s
: Số lượng kilobytes được ghi mỗi giây.wrqm/s
: Số lượng operations ghi được gộp lại mỗi giây.%wrqm
: Phần trăm operations ghi được gộp lại.w_await
: Thời gian trung bình cho mỗi operations ghi, bao gồm cả thời gian hàng đợi và thời gian xử lý.wareq-sz
: Kích thước trung bình của các operations ghi.d/s
: Số lượng operations xóa mỗi giây.dkB/s
: Số lượng kilobytes được xóa mỗi giây.drqm/s
: Số lượng operations xóa được gộp lại mỗi giây.%drqm
: Phần trăm operations xóa được gộp lại.d_await
: Thời gian trung bình cho mỗi operations xóa, bao gồm cả thời gian hàng đợi và thời gian xử lý.dareq-sz
: Kích thước trung bình của các operations xóa.aqu-sz
: Độ dài trung bình của hàng đợi I/O.%util
: Phần trăm thời gian thiết bị bận.
Lưu ý: Các operations xóa (d/s
, dkB/s
, drqm/s
, %drqm
, d_await
, dareq-sz
) thường không được sử dụng trong các hệ thống file thông thường, nhưng có thể xuất hiện trong một số hệ thống file đặc biệt hoặc thiết bị lưu trữ.
Vậy với kết quả trên IOPS có thể được tính bằng cách cộng số lượng operations đọc mỗi giây (r/s
) và số lượng operations ghi mỗi giây (w/s
).
Trong trường hợp này của mình:
r/s
(read per second) = 245.00w/s
(write per second) = 2836.00
IOPS = r/s + w/s = 245.00 + 2836.00 = 3081 IOPS
Như vậy theo cách tính IOPS (Input/Output Operations Per Second) là tổng số lượng operations đọc (r/s
) và ghi (w/s
) mỗi giây, kết quả 3081 IOPS cho thấy ổ đĩa (storage) của bạn đang thực hiện được 3081 operations đọc/ghi mỗi giây. Đây là một chỉ số đo lường hiệu suất của ổ đĩa dựa trên khả năng xử lý operations đọc/ghi.
Dưới đây là bảng IOPS tham khảo của một số loại ổ đĩa.
HDD và SAS.
IOPS (Input/Output Operations Per Second) của một ổ đĩa HDD (Hard Disk Drive) thường thấp hơn nhiều so với SSD (Solid State Drive) do giới hạn về tốc độ quay và thời gian truy cập của đầu đọc/ghi cơ học.
Dưới đây là một số chỉ số tham khảo cho các loại ổ đĩa cứng phổ biến:
- HDD 5400 RPM:
- SATA: Khoảng 50 – 100 IOPS
- SAS: Không phổ biến, nhưng nếu có thì IOPS sẽ tương tự SATA
- HDD 7200 RPM:
- SATA: Khoảng 80 – 120 IOPS
- SAS: Không phổ biến, nhưng nếu có thì IOPS sẽ tương tự SATA
- HDD 10,000 RPM:
- SATA: Không phổ biến, nhưng nếu có thì IOPS sẽ tương tự SAS
- SAS: Khoảng 130 – 160 IOPS
- HDD 15,000 RPM:
- SATA: Không phổ biến
- SAS: Khoảng 175 – 210 IOPS
SSD.
IOPS (Input/Output Operations Per Second) của một ổ đĩa SSD (Solid State Drive) có thể rất khác nhau tùy thuộc vào mô hình và nhà sản xuất.
Tuy nhiên, dưới đây là một số chỉ số tham khảo:
- SSD SATA thông thường: Khoảng 5,000 – 10,000 IOPS
- SSD Enterprise-grade (dành cho doanh nghiệp): Có thể lên tới 200,000 – 1,000,000 IOPS
NVMe.
Ổ đĩa SSD NVMe (Non-Volatile Memory Express) thường có hiệu suất cao hơn nhiều so với SSD SATA và HDD. Dưới đây là một số chỉ số tham khảo cho các loại ổ đĩa SSD NVMe phổ biến:
- SSD NVMe thông thường: Khoảng 10,000 – 50,000 IOPS
- SSD NVMe cao cấp: Có thể lên tới 200,000 – 1,000,000 IOPS
3. Kiểm tra Throughput.
Bạn hoàn toàn có thể kết hợp dd
và iostat
để kiểm tra throughput của ổ đĩa.
Ví dụ, bạn có thể mở một terrmina thứ nhất chạy dd
như sau:
dd if=/dev/zero of=/root/testfile bs=1G count=30 oflag=direct
Kết quả của dd.
shell> dd if=/dev/zero of=/root/testfile bs=1G count=30 oflag=direct
30+0 records in
30+0 records out
32212254720 bytes (32 GB, 30 GiB) copied, 9.22423 s, 3.5 GB/s
Kết quả của iostat.
shell> iostat -dx 1 /dev/sda
Linux 5.4.0-169-generic (ntj-k8s-master1) 03/24/24 _x86_64_ (8 CPU)
Device r/s rkB/s rrqm/s %rrqm r_await rareq-sz w/s wkB/s wrqm/s %wrqm w_await wareq-sz d/s dkB/s drqm/s %drqm d_await dareq-sz aqu-sz %util
sda 1.00 128.00 0.00 0.00 90.00 128.00 7421.00 3871768.00 0.00 0.00 40.01 521.73 0.00 0.00 0.00 0.00 0.00 0.00 281.74 63.20
Dựa vào kết quả của lệnh dd
, throughput của hệ thống lưu trữ của bạn là 3.5 GB/s. Đây là tốc độ mà hệ thống của bạn có thể ghi dữ liệu vào ổ đĩa.
Kết quả của lệnh iostat
cung cấp thông tin chi tiết hơn về hoạt động của ổ đĩa. Trong trường hợp này, bạn có thể tính toán throughput bằng cách cộng tổng số dữ liệu đọc (rkB/s
) và ghi (wkB/s
) mỗi giây. Tuy nhiên, lưu ý rằng iostat
cung cấp thông tin này dưới dạng kilobytes mỗi giây, nên bạn cần chuyển đổi nó thành gigabytes mỗi giây để so sánh với kết quả từ dd
.
Trong trường hợp này, throughput từ iostat
là (128 kB/s + 3871768 kB/s) / (1024 * 1024) = 3.69 GB/s. Điều này khá gần với kết quả từ dd
, cho thấy hệ thống của bạn có hiệu suất ghi dữ liệu rất cao.
4. Kết luận.
Cả dd
và iostat
đều không cung cấp thông tin trực tiếp về latency (độ trễ) của các operations I/O. Tuy nhiên, bạn có thể sử dụng các thông số khác từ iostat
để ước lượng latency.
Trong iostat
, r_await
và w_await
cho biết thời gian trung bình (tính bằng mili giây) mà hệ thống phải chờ đợi cho mỗi operation đọc và ghi. Đây có thể được coi là một dạng của latency. Tuy nhiên, lưu ý rằng đây chỉ là thời gian chờ đợi trung bình, và không phản ánh độ trễ tối đa hoặc biến động độ trễ.
Đối với dd
, nó chỉ cung cấp tổng thời gian để thực hiện tất cả các operations, nên không thể sử dụng để đo lường latency.
Nếu bạn muốn đo lường latency một cách chính xác hơn, bạn nên sử dụng một công cụ kiểm tra hiệu suất chuyên dụng như fio
(Flexible I/O Tester), có thể cung cấp thông tin chi tiết về latency, IOPS, và throughput.