Làm thế nào kiểm tra hiệu suất của ổ cứng

Kính chào Quý Khách,

Rất nhiều khách hàng khi đăng ký VPS hoặc dịch vụ Cloud Server (cho dù là đăng ký VPS tại vHost hay bất kì nhà cung cấp nào khác) xong đều có chung một câu hỏi: VPS của tôi nhanh như thế nào ? Và làm thế nào để kiểm tra được điều đó ?
Trong bài viết này chúng tôi chúng tôi sẽ liệt kê và phân tích các cách thức để kiểm tra hiệu suất ổ cứng của VPS của quý khách.

Những gì không nên làm – phương pháp đo lường sai?

Rất nhiều khách hàng thường xuyên sử dụng lênh sau đây để kiểm tra tốc độ ổ cứng, có thể ngay chính quý khách và chính các nhân viên kỹ thuật của vHost khi mới vào làm việc cũng từng sử dụng lệnh này để kiểm tra tốc độ đọc ghi ổ cứng VPS của mình.

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

Lệnh này sẽ thực hiện việc ghi 1 file 1GB xuống hệ thống với block size là 64K.

Lệnh dd rất phổ biến vì cơ bản phần mềm này đã được cài đặt mặc định trên tất cả các server sử dụng hệ điều hành Linux và Unix. Quý khách có thể nhìn vào kết quả test (ví dụ: 10MB/sec) và đánh giá VPS/Server mình chạy chậm nhưng thực sự con số này có nhiều vấn đề:

  • Đây là tiến trình độc lập và thực hiện việc ghi tuần tự. Nếu VPS của quý khách đang vận hành web server và database server thì con số này không có ý nghĩa gì. Bởi vì phần lớn các dịch vụ không sử dụng việc ghi tuần tự.
  • Việc ghi dữ liệu 1GB xuống hệ thống là rất nhỏ vì vậy kết quả này hoàn toàn có thể làm cho cao được. Các nhà cung cấp có thể qua mặt khách hàng thông qua việc xử lý phần caching trên server thông qua việc mở tính năng write-back trên card raid của server. Tất cả các dữ liệu quý khách thao tác thực tế chỉ được lưu tạm trên ram và thông báo thành công nhưng thực tế toàn bộ dữ liệu chưa được hoàn tất lưu xuống bất kì ổ cứng nào. Toàn bộ dữ liệu sẽ cần thời gian để truyền tải từ ram xuống ổ cứng. Nếu trong thời gian này server gặp sự cố phần cứng, toàn bộ dữ liệu sẽ bị mất vĩnh viễn và không phục hồi được. Tham số conv=fdatasync trong câu lệnh trên chỉ có tác dụng đối với VPS và không có tác dụng đối với server. Tuy nhiên VPS luôn được vận hành bởi server riêng chứa nhiều VPS trên cùng một server.
  • Câu lệnh này thực hiện trong một thời gian rất ngắn vì vậy không thể kết luận được nhiều thông tin dựa trên kết quả tại lúc đó.
  • Câu lệnh này chỉ kiểm tra tốc độ ghi của ổ cứng, chưa kiểm tra tốc độ đọc trong khi phần lớn các website số lượng đọc sẽ nhiều hơn ghi. Để giúp quý khách dễ hình dung chúng tôi đưa ra ví dụ sau.

Ví dụ: một tờ báo Vietnamnet có bài viết “vHost ‘Bắc tiến’, thị trường hosting sôi động” có số lượng lần ghi (biên tập viên thực hiện việc đăng bài lên hệ thống) là 1 lần hoặc có thể chỉnh sửa bài chỉ vài lần nhưng số lượng người đọc sẽ là rất nhiều, có thể từ vài trăm đến vài chục nghìn người đọc từ ngày này qua ngày khác.

Như vậy, để kiểm tra hiệu suất ổ cứng của VPS lệnh dd không phải là câu lệnh tốt nhất và bao quát được tất cả các thông tin.

Vậy nên làm thế nào thì đúng?

Để chính xác quý khách nên kiểm tra thông số IOPS và latency (độ trễ) của ổ cứng VPS của mình. Trong phần tiếp theo vHost sẽ hướng dẫn cách kiểm tra như thế nào thông qua công cụ FIO và IOPing.

Kiểm tra random IOPS với công cụ FIO

Khi quý khách vận hành hệ thống website hoặc các hệ thống khác thì cách tốt nhất kiểm tra hiệu suất của ổ cứng là con số IOPS. Vậy IOPS là gì ?

IOPS là từ viết tắt của cụm từ Input/Output Operations per Second. Đây là con số thể hiện tốc độ đọc ghi trong mỗi giây của ổ cứng. Con số này càng cao thì hệ thống hoạt động càng nhanh.

Cụ thể hơn trong kết quả test chúng ta sẽ kiểm tra các thông số sau:

  • Random write, random read hoặc kết hợp cả hai. Ví dụ như đối với database khi truy cập hệ thống sẽ đọc data từ ổ cứng, được hiểu là random read (access).
  • Block size 4KB, đây là con số lý tưởng nhất. Cụ thể như đối với các hệ thống database và source code cũng như phần lớn các hệ thống khác sẽ truy xuất lượng dữ liệu là rất nhỏ nhưng số lần yêu cầu truy xuất (read) rất là nhiều. Để có thể hình dung quý khách có thể tham khảo ví dụ sau:

Ví dụ: khi quý khách truy cập vào bài viết này thì code PHP sẽ xử lý và thực hiện query trong database chỉ để lấy ra tiêu đề “Làm thế nào kiểm tra hiệu suất của ổ cứng” cũng như nội dung bài viết với dung lượng rất nhỏ và nhanh. Quý khách có thể hình dung đây là 1 lần yêu cầu truy cập vào hệ thống và gọi lên lượng dữ liệu rất nhỏ và số lần gọi tương tự như vậy trên các hệ thống thực tế ngày nay là rất nhiều. Và 4KB là block size thấp nhất của tất cả các hệ thống.

Xử lý đa nhiệm. Khác với câu lệnh dd là việc xử lý diễn ra chỉ là 1 tiến trình duy nhất tuy nhiên đối với công cụ FIO sẽ kiểm tra được tốc độ khi xử lý luân phiên đồng thời. Nếu website của quý khách có nhiều người truy cập đồng thời thì hệ thống của quý khách sẽ phải phục vụ tương đương với số lần truy đồng thời như vậy. Chúng tôi sẽ giả lập và đo lường tương đương như nhiều người đang truy cập vào hệ thống tại cùng một thời điểm.

FIO là công cụ đo lường IOPS phổ biến trên tất cả các hệ thống Linux. Để cài đặt chúng ta cần download và compile phần mềm này thông qua các lệnh sau đây:

cd /root
yum install -y make gcc libaio-devel || ( apt-get update && apt-get install -y make gcc libaio-dev </dev/null )
wget https://github.com/axboe/fio/archive/fio-3.13.tar.gz ; tar xf fio-3*
cd fio-fio-3.13/
make

Sau khi hoàn thành chúng ta có thể tiến hành test.

1. Kiểm tra random read/write đồng thời
./fio --randrepeat=0 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=vhost --filename=vhost --bs=4k --iodepth=64 --size=4G --readwrite=randrw --rwmixread=75

Đây là câu lệnh dùng để test IOPS của ổ cứng. Câu lệnh này sẽ tạo ra file 4GB và test theo cơ chế read và write file 4KB đồng thời với tỉ lệ 75%/25% (cứ 3 requests read thì sẽ có 1 request write) với 64 lần thực hiện đồng thời tại một thời điểm. Tỉ lệ 3:1 rất phổ biến với các dạng database ngày nay.

Trong quá trình chạy hệ thống sẽ hiện thông tin tổng quát theo định dạng sau

Jobs: 1 (f=1): [m] [35.1% done] [59616K/19632K /s] [14.1K/4908 iops] [eta 00m:37s]

Và đây là kết quả sau khi hệ thống chạy hoàn tất

fio-3.13 Starting 1 process Jobs: 1 (f=1): [m] [100.0% done] [85226K/28011K /s] [21.4K/7002 iops] [eta 00m:00s]
vhost: (groupid=0, jobs=1): err= 0: pid=1067: Tue Aug 2 15:32:09 2016
 read : io=3072.3MB, bw=80700KB/s, iops=20174 , runt= 38984msec
 write: io=1023.8MB, bw=26891KB/s, iops=6722 , runt= 38984msec
 cpu : usr=6.09%, sys=50.18%, ctx=14687, majf=0, minf=24
 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=786500/w=262076/d=0, short=r=0/w=0/d=0

Run status group 0 (all jobs):
   READ: io=3072.3MB, aggrb=80699KB/s, minb=80699KB/s, maxb=80699KB/s, mint=38984msec, maxt=38984msec
  WRITE: io=1023.8MB, aggrb=26890KB/s, minb=26890KB/s, maxb=26890KB/s, mint=38984msec, maxt=38984msec

Disk stats (read/write): sda: ios=784318/261442, merge=65/139, ticks=1374820/291110, in_queue=1665268, util=99.85%

disk-read-write

Tại đây chúng ta sẽ quan tâm tới 2 con số trong phần tô đỏ bên trên. Chúng ta có một số nhận xét như sau:

  • VPS có hiệu suất có thể thể thực hiện 20174 đọc và 6722 ghi đồng thời trên mỗi giây.
  • VPS sử dụng ổ cứng local SSD với ổ Enterprise hoặc raid nhiều ổ SSD nhưng dành cho máy tính thường có thể thực hiện với con số khoảng 40,000 read và 10,000 write nếu hệ thống không có tải tại thời điểm đang test.
  • VPS sử dụng ổ cứng SAS với cơ chế raid 10 có thể đạt được khoảng tầm 500 read và 200 write.
2. Kiểm tra random read
./fio --randrepeat=0 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=vhost --filename=vhost --bs=4k --iodepth=64 --size=4G --readwrite=randread

Kết quả:

fio-3.13
Starting 1 process
Jobs: 1 (f=1): [r] [100.0% done] [202.6M/0K /s] [51.9K/0 iops] [eta 00m:00s]
vhost: (groupid=0, jobs=1): err= 0: pid=1142: Tue Aug 2 15:34:35 2016
  read : io=4096.0MB, bw=197249KB/s, iops=49312 , runt= 21264msec
  cpu : usr=9.52%, sys=88.86%, ctx=1678, majf=0, minf=88
  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=1048576/w=0/d=0, short=r=0/w=0/d=0

Run status group 0 (all jobs):
  READ: io=4096.0MB, aggrb=197249KB/s, minb=197249KB/s, maxb=197249KB/s, mint=21264msec, maxt=21264msec

Disk stats (read/write):
  sda: ios=1043610/29, merge=4/34, ticks=396303/2, in_queue=395613, util=99.65%

disk-read

Với kết quả này cho thấy VPS có thể thể thực hiện 49312 lần đọc đồng thời trong 1 giây.

3. Kiểm tra random write
./fio --randrepeat=0 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=vhost --filename=vhost --bs=4k --iodepth=64 --size=4G --readwrite=randwrite

Kết quả:

fio-3.13
Starting 1 process
Jobs: 1 (f=1): [w] [98.8% done] [0K/44207K /s] [0 /11.6K iops] [eta 00m:01s]
vhost: (groupid=0, jobs=1): err= 0: pid=1172: Tue Aug 2 15:36:31 2016
  write: io=4096.0MB, bw=52593KB/s, iops=13148 , runt= 79750msec
  cpu : usr=3.94%, sys=25.07%, ctx=21434, majf=0, minf=23
  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=0/w=1048576/d=0, short=r=0/w=0/d=0

Run status group 0 (all jobs):
  WRITE: io=4096.0MB, aggrb=52593KB/s, minb=52593KB/s, maxb=52593KB/s, mint=79750msec, maxt=79750msec

Disk stats (read/write):
  sda: ios=2/1048270, merge=0/165, ticks=98/4303677, in_queue=4303185, util=99.78%

disk-write

Kết quả này cho thấy VPS có thể thực hiện khoảng số lần 13148 write trong mỗi giây.

Đo độ trễ (latency) với IOPing

Cuối cùng chúng ta sẽ tiến hành kiểm tra hiệu suất của ổ cứng thông qua việc kiểm tra độ trễ của từng request. Để kiểm tra chúng ta sẽ dùng công cụ IOPing để đo lường.

Để cài đặt quý khách sử dụng các lệnh sau đây

cd /root
yum install -y make gcc libaio-devel || ( apt-get update && apt-get install -y make gcc libaio-dev)
wget https://github.com/koct9i/ioping/archive/v1.1.tar.gz
tar xf v1.1.tar.gz
cd ioping*
make

Sau khi cài đặt quý khách sử dụng lệnh sau đây để kiểm tra

./ioping -c 10 .

Và đây là kết quả trả về

4096 bytes from . (ext4 /dev/sda3): request=1 time=0.3 ms
4096 bytes from . (ext4 /dev/sda3): request=2 time=0.5 ms
4096 bytes from . (ext4 /dev/sda3): request=3 time=0.5 ms
4096 bytes from . (ext4 /dev/sda3): request=4 time=0.5 ms
4096 bytes from . (ext4 /dev/sda3): request=5 time=0.4 ms
4096 bytes from . (ext4 /dev/sda3): request=6 time=0.4 ms
4096 bytes from . (ext4 /dev/sda3): request=7 time=0.4 ms
4096 bytes from . (ext4 /dev/sda3): request=8 time=0.4 ms
4096 bytes from . (ext4 /dev/sda3): request=9 time=2.8 ms
4096 bytes from . (ext4 /dev/sda3): request=10 time=0.4 ms
--- . (ext4 /dev/sda3) ioping statistics ---
10 requests completed in 9009.0 ms, 1495 iops, 5.8 mb/s
min/avg/max/mdev = 0.3/0.7/2.8/0.7 ms

disk-latency

Trong kết quả này quý khách sẽ thấy điểm trung bình độ trễ của các request trong phần tô đỏ ở bên trên là 0.7ms. Đối với các hệ thống hoạt động ổn định con số này sẽ dao động dưới 1.0ms

Kết luận

Để kiểm tra hiệu suất ổ cứng của VPS nhanh hay chậm chúng ta cần kiểm tra 2 thông số:

  • IOPS: càng cao càng tốt
  • I/O latency: càng thấp càng tốt

Thông qua bài viết này chúng tôi hy vọng có thể giúp quý khách có một góc nhìn khác về việc kiểm tra và đo lường hiệu suất của ổ cứng trên VPS của mình. Nếu quý khách cần hỗ trợ hoặc góp ý thêm về bài viết vui lòng gửi thông tin góp ý cho chúng tôi tại đây.

Scroll to Top