English
Kiểm tra tốc độ ổ ssd

Hướng dẫn kiểm tra tốc độ ổ cứng SSD

15/12/2016

Gần đây VNSO nhận được rất nhiều phản hồi từ khách hàng phàn nàn về việc ổ cứng không đúng ổ SSD. Tuy nhiên cách  kiểm tra chưa đúng.

Đa số khách hàng sẽ sử dụng lệnh dd để kiểm tra tốc độ ổ cứng, câu lệnh phổ biến như sau:

dd if=/dev/zero of=test bs=64k count=16k conv=fdatasync

Đây là câu lệnh có sẵn trên hầu hết các hệ điều hành linux. Câu lệnh sẽ ghi 16000 lần với block size 64k để tạo ra file 1GB. Kết quả có thể rất thấp, ví dụ 30MB/s. Hãy cùng phân tích cách hoạt động của câu lệnh trên:

  • Đây là 1 tính trình độc lập(single-threaded), thực hiện ghi tuần tự(sequential-write). Đối với các dịch vụ webserver: nginx, apache… database:  Mysql, MongoDB, MSSQL server … dữ liệu ít khi nào được ghi tuần tự trong 1 thời gian dài. Kết quả phía trên là vô nghĩa.
  • Dữ liệu được ghi khá nhỏ 1GB. Tốc độ ghi file dữ liệu có thể tăng lên bằng cách sử dụng tính năng write-back trên RAID server. Khi ghi xuống lệnh sẽ ghi trực tiếp lên NVRAM(cache) của card RAID trước, sau đó thông báo cho VPS quá trình ghi hoàn tất. Thực tế, dữ liệu vẫn còn nằm trên NVRAM chưa ghi xuống ổ cứng hoàn toàn.
  • Thời gian thực thi quá ngắn, không đủ để đưa ra kết quả chính xác nhất.
  • Chưa kiểm tra kết quả ghi.

1. Kiểm tra tốc độ IOPS ổ cứng

Để kiểm tra kết quả chính xác nhất, sát với thực tế khi VPS/server chịu tải website database, chúng tôi đề xuất sử dụng công cụ fio kiểm tra tốc độ IOPS(Input/output per second) – Tốc độ đọc ghi dữ liệu trong 1 giây, cách kiểm tra như sau:

  • Kiểm tra đọc ngẫu nhiên(random reads), ghi ngẫu nhiên(random writes) hoặc kết hợp cả 2. Dữ liệu database thường ghi ngẫu nhiên lên ổ cứng.
  • Test với block size 4k. Database và những chương trình thông thường đọc những gói tin nhỏ 4kb.
  • Các website thường có nhiều người truy cập cùng 1 lúc  vì vậy nên đo lường tốc độ ổ cứng với đa tiến trình(multiple threads) cùng 1 thời điểm.

2. Cài đặt FIO

Cài đặt FIO trên Centos/Debian/Ubuntu Server theo câu lệnh bên dưới (hiện tại FIO chưa hỗ trợ cài đặt trên hệ điều hành windows):

[bash]

yum install -y make gcc libaio-devel wget unzip || ( apt-get update && apt-get install -y make gcc libaio-dev wget unzip </dev/null )
wget https://github.com/axboe/fio/archive/master.zip

tar xf fio*
cd fio*
make && make install

[/bash]

3. Kiểm tra tốc độ đọc/ghi

Cấu hình VPS kiểm tra:

[bash]

RAM:2GB

CPU:2 core

ổ cứng: 10GB SSD

[/bash]

Thực thi câu lệnh bên dưới:

[bash]

cd /root

fio –randrepeat=1 –ioengine=libaio –direct=1 –gtod_reduce=1 –name=vnsotest –filename=vnsotest –bs=4k –iodepth=64 –size=4G –readwrite=randrw –rwmixread=75

[/bash]

Câu lệnh sẽ tạo ra file 4GB, mỗi mẫu tin 4KB sẽ đọc ghi với tỉ lệ 75%/25%(3 lần đọc, 1 lần ghi) với 64 tiến trình cùng 1 lúc. Tỉ lệ 3:1 như trên gần giống như cách đọc ghi của các phần mềm database hiện tại.

Kết quả sau khi kiểm tra xong:

vnsotest: (g=0): rw=randrw, bs=4K-4K/4K-4K/4K-4K, ioengine=libaio, iodepth=64
fio-2.15
Starting 1 process
vnsotest: Laying out IO file(s) (1 file(s) / 4096MB)
Jobs: 1 (f=1): [m(1)] [100.0% done] [62506KB/21105KB/0KB /s] [15.7K/5276/0 iops] [eta 00m:00s]
vnsotest: (groupid=0, jobs=1): err= 0: pid=12219: Tue Dec 13 11:07:08 2016
read : io=3070.4MB, bw=74548KB/s, iops=18636, runt= 42174msec
write: io=1025.8MB, bw=24904KB/s, iops=6226, runt= 42174msec
cpu : usr=14.97%, sys=54.08%, ctx=201990, majf=0, minf=30
IO depths : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=0.1%, 32=0.1%, >=64=100.0%
submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.1%, >=64=0.0%
issued : total=r=785996/w=262580/d=0, short=r=0/w=0/d=0, drop=r=0/w=0/d=0
latency : target=0, window=0, percentile=100.00%, depth=64

Run status group 0 (all jobs):
READ: io=3070.4MB, aggrb=74547KB/s, minb=74547KB/s, maxb=74547KB/s, mint=42174msec, maxt=42174msec
WRITE: io=1025.8MB, aggrb=24904KB/s, minb=24904KB/s, maxb=24904KB/s, mint=42174msec, maxt=42174msec

Disk stats (read/write):
vda: ios=785123/262319, merge=1/3, ticks=1571425/929520, in_queue=2500488, util=99.95%

screenshot_5

(Click vào hình để phóng to.)

Theo như kết quả kiểm tra VPS VNSO sẽ là:

  • 18636 IOPS read
  •  6226 IOPS write

Thông thường ổ cứng non-SSD có tốc độ IOPS đọc/ghi ngẫu nhiên lần lượt là 500/200.

Ngoài ra bạn có thể chỉ kiểm tra riêng tốc độ đọc ghi ngẫu nhiên với các câu lệnh bên dưới:

Đọc ngẫu nhiên:

[bash]

fio –randrepeat=1 –ioengine=libaio –direct=1 –gtod_reduce=1 –name=vnsotest –filename=vnsotest –bs=4k –iodepth=64 –size=4G –readwrite=randread

[/bash]

Ghi ngẫu nhiên:

[bash]

fio –randrepeat=1 –ioengine=libaio –direct=1 –gtod_reduce=1 –name=vnsotest –filename=vnsotest –bs=4k –iodepth=64 –size=4G –readwrite=randwrite

[/bash]

Kết quả kiểm tra trên VPS VNSO:

screenshot_7

(Click vào hình để phóng to.)

screenshot_6

(Click vào hình để phóng to.)

IOPS read: 26550

IOPS write: 7626

Lưu ý: Thông số RAM và CPU có ảnh hưởng tới tốc độ IOPS đọc ghi. CPU và RAM cao sẽ cho kết quả IOPS tốt hơn.