Cách benchmark disk trên linux

Kiểm tra tốc độ đọc ghi I/O

Tốc độ đọc, ghi I/O của hard disk ảnh hưởng lớn đến hiệu năng của máy chủ. Tốc độ đọc và ghi dữ liệu càng cao, máy chủ của bạn sẽ hoạt động càng mượt mà. Giống như máy tính của bạn nếu thay ổ SSD đọc ghi tốt hơn thì sẽ khởi động nhanh hơn.

Để kiểm tra tốc độ ổ cứng hard Disk trên Linux VPS/Server chúng ta sử dụng lệnh dd:

dd if=/dev/zero of=test bs=64k count=16k conv=fdatasync && rm -f test

Kết quả trên 1 máy chủ sử dụng ổ cứng của một VPS:

16384+0 records in
16384+0 records out
1073741824 bytes (1.1 GB) copied, 2.23 s, 481 MB/s
You have new mail in /var/spool/mail/root

Thông thường:

  • Dưới 50MB/s tốc độ rất chậm, không nên sử dụng để chạy các websever. Nhưng có thể sử dụng để test performance được, vì nếu chạy mượt ở VPS yếu thì đó là 1 sản phẩm tốt.
  • Từ 50MB/s đến 100MB/s thì có thể chấp nhận được. Đây cũng là tốc độ trung bình của ổ cứng HDD truyền thống
  • Trên 100MB/s tốc độ này bạn có thể yên tâm sử dụng.
  • Trên 200MB/s tốc độ này lý tưởng khi sử dụng cho VPS chạy web.
  • Trên 1GB/s thì quá tuyệt với, nó có thể đang sử dụng ổ cứng NVME SSD

Chú ý: Nếu là Dedicated Server thì khi kiểm tốc độ ổ cứng thì tốc độ là tốc độ thực tế của ổ cứng đó. Còn nếu là VPS thì tốc độ ổ cứng khi kiểm tra có thể khác nhau ở một số thời điểm, vì vps được chia ra từ 1 máy chủ nên sẽ có nhiều người sử dụng chung nên tốc độ I/O sẽ có lúc nhanh lúc chậm. Tuy nhiên nếu bạn là một người thuê VPS, không nên dùng VPS có tốc độ I/O dưới 200MB/s.

Đo lường IOPS bằng Fio

Để kiểm tra tốc độ IOPS ( Input/Output operation per Second) trên linux ta có thể sử dụng công cụ Fio.
Trên centos bạn có thể cài đặt bằng lệnh sau:

yum install -y epel-release && yum install -y fio || ( apt-get update && apt-get install -y fio )

Quá trình test IOPS trên VPS sẽ kiểm tra với các thông số cụ thể sau:

  • Tác vụ ngẫu nhiên: Random write, random read và kết hợp cả hai. Ví dụ, đối với database, khi truy cập hệ thống sẽ đọc dữ liệu từ mọi nơi thuộc ổ cứng, được hiểu là truy cập ngẫu nhiên(random read).
  • Block size 4KB là con số lý tưởng nhất đồng thời là blocksize thấp nhất của hệ thống. Cụ thể, đối với các hệ thống database, source code hay phần lớn các hệ thống khác, lượng dữ liệu truy xuất là rất nhỏ nhưng số lần yêu cầu truy xuất lại rất nhiều. Để có thể hình dung, mỗi lần user đọc 1 bài viết trên website của bạn là 1 lần truy xuất (read) database với 1 lượng dữ liệu rất nhỏ, tuy vậy số lần đọc (gọi) dữ liệu lại là rất nhiều.
  • Đa nhiệm: Nếu website của bạn có lượng truy cập cao thì có thể sẽ phải phục vụ tất cả cùng một lúc. Chúng ta sẽ đo lường bằng cách mô phỏng nhiều truy cập vào ổ đĩa cùng lúc.

Lệnh kiểm tra:

Tạo 1 file 4GB, thực hiện việc đọc/ghi đồng thời với blocksize 4KB theo tỉ lệ 75% – 25% (tức 3 đọc/1 ghi) và thực hiện đồng thời 64 tác vụ một lúc. Tỉ lệ 3:1 rất phổ biến và xấp xỉ với các dạng database hiện nay.

fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=tinohost --filename=tinohost --bs=4k --iodepth=64 --size=1G --readwrite=randrw --rwmixread=75 && rm -f tinohost

Kết quả.

fio-3.1
Starting 1 process
tinohost: Laying out IO file (1 file / 4096MiB)
Jobs: 1 (f=1): [m(1)][100.0%][r=141MiB/s,w=46.4MiB/s][r=35.0k,w=11.9k IOPS][eta 00m:00s]
tinohost: (groupid=0, jobs=1): err= 0: pid=13372: Tue Sep 24 08:31:00 2019
  read: IOPS=32.3k, BW=126MiB/s (132MB/s)(3070MiB/24340msec)
   bw (  KiB/s): min=27296, max=166352, per=99.69%, avg=128751.04, stdev=28448.39, samples=48
   iops        : min= 6824, max=41588, avg=32187.71, stdev=7112.13, samples=48
  write: IOPS=10.8k, BW=42.2MiB/s (44.2MB/s)(1026MiB/24340msec)
   bw (  KiB/s): min= 9216, max=56336, per=99.70%, avg=43032.50, stdev=9596.56, samples=48
   iops        : min= 2304, max=14084, avg=10758.06, stdev=2399.16, samples=48
  cpu          : usr=10.86%, sys=20.68%, ctx=36849, majf=0, minf=22
  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 rwt: total=785920,262656,0, short=0,0,0, dropped=0,0,0
     latency   : target=0, window=0, percentile=100.00%, depth=64

Run status group 0 (all jobs):
  READ: bw=126MiB/s (132MB/s), 126MiB/s-126MiB/s (132MB/s-132MB/s), io=3070MiB (3219MB), run=24340-24340msec
  WRITE: bw=42.2MiB/s (44.2MB/s), 42.2MiB/s-42.2MiB/s (44.2MB/s-44.2MB/s), io=1026MiB (1076MB), run=24340-24340msec

Disk stats (read/write):
  vda: ios=786432/261676, merge=111/444, ticks=966183/278465, in_queue=1241796, util=91.72%

Như vậy thì trong một giây thì VPS đọc được trung bình 32.300 tác vụ và ghi được trung bình 10.800 tác vụ.

 

Kiểm tra bằng tool tocdo.netz

Đơn giản bạn cũng có thể sử dụng tool tại trang tocdo.net bằng cách sử dụng lệnh sau:

 

curl -Lso- tocdo.net | bash

Kết quả:

System Info
———————————————————————-
CPU model : Virtual CPU 82d9ed4018dd
Number of cores : 1
CPU frequency : 2600.000 MHz
Total size of Disk : 55.0 GB (18.0 GB Used)
Total amount of Mem : 1838 MB (1055 MB Used)
Total amount of Swap : 4095 MB (339 MB Used)
System uptime : 24 days, 1 hour 28 min
Load average : 1.42, 1.11, 0.64
OS : CentOS 7.6.1810
Arch : x86_64 (64 Bit)
Kernel : 3.10.0-957.21.3.el7.x86_64
Virt : kvm
Date : Tue Sep 24 08:49:52 UTC 2019

Disk Speed
———————————————————————-
dd Test
I/O (1st run) : 479 MB/s
I/O (2nd run) : 468 MB/s
I/O (3rd run) : 439 MB/s
Average : 462.0 MB/s
———————————–
Fio Test
Read performance : 75.5MB/s
Read IOPS : 18.4k
Write performance : 25.3MB/s
Write IOPS : 6172

 

 

Related Articles