Computer >> Hướng Dẫn Máy Tính >  >> Hệ Thống >> Linux

Cách kiểm tra hiệu suất ổ cứng (IOPS và Latency) trên Linux

Trong bài viết này, chúng ta sẽ thảo luận về cách kiểm tra hiệu suất của ổ cứng hoặc mảng lưu trữ trên Linux. IOPS (input/output operations per second) là số lượng hoạt động đầu vào/đầu ra mà một hệ thống lưu trữ dữ liệu thực hiện mỗi giây (có thể là một ổ đĩa đơn lẻ, mảng RAID hoặc LUN trong thiết bị lưu trữ ngoài). Nói chung, IOPS đề cập đến số lượng block có thể đọc hoặc ghi lên phương tiện lưu trữ.

Hầu hết các nhà sản xuất ổ cứng chỉ định giá trị IOPS danh nghĩa, nhưng thực tế đây không phải là giá trị được đảm bảo. Để hiểu hiệu suất của hệ thống lưu trữ trước khi bắt đầu dự án, bạn nên lấy được giá trị IOPS tối đa mà hệ thống lưu trữ có thể xử lý.

Sử dụng công cụ FIO (Flexible I/O) để benchmark lưu trữ

Để đo hiệu suất IOPS ổ cứng trên Linux, bạn có thể dùng công cụ fio (có sẵn cho CentOS/RHEL trong kho EPEL). Vì vậy, để cài đặt fio trên RHEL hoặc CentOS, dùng trình quản lý gói yum (dnf):

# yum install epel-release -y
# yum install fio -y

Hoặc apt-get trên Debian hoặc Ubuntu:

# apt-get install fio

Cách kiểm tra hiệu suất ổ cứng (IOPS và Latency) trên Linux

Sau đó bạn cần xác định các ổ đĩa cần kiểm tra. Kiểm tra được thực hiện bằng cách thực hiện các thao tác đọc/ghi trong thư mục nơi ổ đĩa hoặc LUN được mount.

Hãy thực hiện một số loại kiểm tra hiệu suất IOPS ổ cứng trong các kịch bản tải đĩa khác nhau (chế độ kiểm tra bạn chọn tùy thuộc vào logic ứng dụng được lưu trữ và cơ sở hạ tầng chung của dự án).

Kiểm tra thao tác Đọc/Ghi ngẫu nhiên

Khi chạy kiểm tra, một file 8 GB sẽ được tạo. Sau đó fio sẽ đọc/ghi block 4KB (kích thước block tiêu chuẩn) với tỷ lệ 75/25% theo số lượng thao tác đọc và ghi và đo hiệu suất. Lệnh như sau:

# fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=fiotest --filename=testfio --bs=4k --iodepth=64 --size=8G --readwrite=randrw --rwmixread=75

Cách kiểm tra hiệu suất ổ cứng (IOPS và Latency) trên Linux

Tôi chạy bài kiểm tra đầu tiên trên mảng bao gồm hai SSD và nhận được kết quả tốt:

  • Read: 3280MiB/s, IOPS avg 83000
  • Write: 110MiB/s, IOPS avg 28000

Vì chúng ta chạy kiểm tra kết hợp đọc/ghi, giá trị cho các bài kiểm tra riêng biệt sẽ cao hơn.

Để so sánh, tôi đo hiệu suất trên ổ SATA:

Cách kiểm tra hiệu suất ổ cứng (IOPS và Latency) trên Linux

  • Read: IOPS=430, BW=1.7 MiB/s
  • Write: IOPS=143, BW=0.6 MiB/s

Tất nhiên, kết quả HDD kém hơn SSD.

Kiểm tra thao tác Đọc ngẫu nhiên

Để đo hiệu suất ổ cứng cho thao tác đọc ngẫu nhiên, chạy lệnh sau:

# fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=fiotest --filename=testfio --bs=4k --iodepth=64 --size=8G --readwrite=randread

Phần cuối của lệnh được thay đổi thành --readwrite=randread.

Cách kiểm tra hiệu suất ổ cứng (IOPS và Latency) trên Linux

Như tôi nói trước, hiệu suất đọc/ghi sẽ cao hơn nếu đo riêng biệt:

READ: IOPS=150k, BW=584MiB/s (612MB/s)

Kiểm tra thao tác Ghi ngẫu nhiên

Đo hiệu suất ổ cứng cho thao tác ghi ngẫu nhiên, chạy lệnh này:

# fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=fiotest --filename=fiotest --bs=4k --iodepth=64 --size=8G --readwrite=randwrite
WRITE: IOPS=84.7k, BW=331MiB/s (347MB/s)

Hiệu suất ghi trên SSD tốt cũng rất cao. Giống như bài kiểm tra đọc, sự khác biệt so với bài kiểm tra kết hợp đạt 200-250 MiB/s và 50000 IOPS.

Nếu tham khảo tài liệu chính thức của nhà sản xuất (đây là Intel SSD), có thể nói rằng các giá trị là chính xác.

Ví dụ file cấu hình Fio

Fio cho phép kiểm tra hiệu suất ổ cứng bằng lệnh tương tác và với file cấu hình chuẩn bị trước. Để dùng tùy chọn này, tạo một file:

# nano read.fio

Và thêm nội dung sau vào:

[global]
rw=randread
size=8G
filename=/tmp/testfio
ioengine=libaio
iodepth=4
invalidate=1
direct=1
[bgread]
rw=randread
iodepth=64

Sau đó bắt đầu kiểm tra:

# fio read.fio

Bài kiểm tra sẽ đo hiệu suất đọc của ổ cứng. Để kiểm tra hiệu suất ghi, dùng file cấu hình sau:

[global]
rw=randwrite
size=8G
filename=/tmp/testfio
ioengine=libaio
iodepth=4
invalidate=1
direct=1
[bgwrite]
rw=randwrite
iodepth=64

Đo độ trễ ổ cứng bằng Ioping

Ngoài IOPS, còn có một tham số quan trọng khác đặc trưng cho chất lượng lưu trữ của bạn: đó là độ trễ (latency). Latency là độ trễ yêu cầu đầu vào/đầu ra xác định thời gian truy cập vào bộ nhớ (đo bằng milliseconds). Càng độ trễ cao, ứng dụng của bạn càng phải chờ lâu để lấy dữ liệu từ đĩa. Giá trị độ trễ trên 20 ms cho các hệ thống lưu trữ dữ liệu điển hình được coi là kém.

Để kiểm tra độ trễ ổ cứng trên Linux, công cụ ioping được dùng:

# yum install ioping -y
# apt-get install ioping

Chạy kiểm tra độ trễ cho ổ đĩa của bạn (chạy 20 yêu cầu):

# ioping -c 20 /tmp/
4 KiB <<< /tmp/ (ext4 /dev/md126p5): request=1 time=1.55 ms (warmup)
......................
4 KiB <<< /tmp/ (ext4 /dev/md126p5): request=19 time=176.3 us (fast)
4 KiB <<< /tmp/ (ext4 /dev/md126p5): request=20 time=356.9 us
--- /tmp/ (ext4 /dev/md126p5) ioping statistics ---
19 requests completed in 5.67 ms, 76 KiB read, 3.35 k iops, 13.1 MiB/s
generated 20 requests in 19.0 s, 80 KiB, 1 iops, 4.21 KiB/s
min/avg/max/mdev = 176.3 us / 298.7 us / 368.9 us / 45.7 us

Giá trị trung bình là 298.7 us (microseconds), do đó độ trễ trung bình trong trường hợp của chúng ta là 0.3 ms, rất tốt.

Giá trị độ trễ có thể được chỉ định bằng us (microseconds) hoặc ms (milliseconds). Để lấy giá trị ms từ giá trị us, chia cho 1,000.

Vậy bạn có thể thực hiện bài kiểm tra tải lưu trữ trên máy chủ trước khi triển khai dự án và kiểm tra các giá trị hiệu suất cao nhất. Tuy nhiên, bài kiểm tra không đảm bảo mảng đĩa hoặc ổ cứng của bạn sẽ hiển thị cùng hiệu suất liên tục, nhưng đáng để thực hiện ở giai đoạn đầu của dự án. Tìm hiểu cách kiểm tra IOPS trên Windows trong bài viết này.