Hiển thị các bài đăng có nhãn latency. Hiển thị tất cả bài đăng
Hiển thị các bài đăng có nhãn latency. Hiển thị tất cả bài đăng

Thứ Hai, 20 tháng 3, 2017

IOPS và sự lựa chọn SAS, TRUESSD phù hợp ứng dụng của bạn

Data storage luôn là một trong những phần chậm nhất của bất cứ hệ thống nào. Để có một server hoạt động đảm bảo hiệu năng, bạn cần lựa chọn loại volume phù hợp nhất cho nhu cầu ứng dụng của mình. Ba thông số cơ bản đánh gía hiệu năng ổ cứng tôi hay quan tâm là: throughput , latency và IOPS. Chúng là gì? Dựa vào chúng để chọn lựa loại volume phù hợp như thế nào?
 

1. Throughput, Latency, IOPS là gì?

Để hiểu rõ về 3 thông số đáng quan tâm khi đánh giá một ổ cứng, chúng ta sẽ cùng trả lời 3 câu hỏi:
Bao nhiêu dữ liệu được truyền đi trong một giây?
Throughput là thông số được biết tới phổ biến nhất của ổ cứng, chỉ ra tốc độ transfer data (đơn vị thường là MB/s hoặc GB/s). Hay chính là thông số khi bạn check performace của ổ cứng bằng câu lệnh dd trong linux. Tuy nhiên, chỉ dựa vào thông số này để lựa chọn loại ổ cứng là phương án không khả thi bởi những loại ổ cứng trên thị trường hiện nay thông số này gần như luôn thừa cho ứng dụng của bạn. Bạn cần quan tâm tới hai thông số quan trọng hơn: latency và IOPS.
Mất bao lâu để bắt đầu thực hiện một data transfer?
Latency (đo bằng ms) là thời gian ổ cứng bắt đầu thực hiện một data transfer. Trong HDD vật lý truyền thống, latency bao gồm cả seek time (thời gian để đầu đọc tìm ra vị trí data) và rotational latency (độ trễ chuyển động quay của trục). Với throughput đều có thể đáp ứng nhu cầu, thông số latency sẽ quyết định hiệu năng của volume vì nó quyết định thời gian trễ khi bắt đầu thực hiện thao tác.
Còn điều gì còn quan trọng hơn thời gian trễ khi thao tác được thực hiện??? Đương nhiên là có, vấn đề là thao tác này có được phép thực hiện hay không? (^^)
Bao nhiêu thao tác có thể thực hiện trong cùng một thời gian?
Câu trả lời chính là thông số IOPS (Input/Output Operations Per Second hay Input/Output Per Second), hiểu đơn giản là số thao tác đọc/ghi trên ổ cứng trong một giây.
IOPS của SAS và SSD
Một ổ SAS 15.000rpm trung bình khoảng 200 IOPS trong khi ổ SSD có thể đạt từ vài nghìn IOPS cho tới vài triệu IOPS. Đều tạo nên khác biệt đáng kinh ngạc này đơn giản chỉ là do cấu tạo của hai loại ổ cứng, hay cấu trúc chip nhớ truy cập ngẫu nhiên của ổ SSD. Xem thêm thông số IOPS của một vài loại ổ cứng tại wiki.
IOPS quan trọng như thế nào?
Trên điện toán đám mây, nơi mà tài nguyên phần cứng được chia sẻ để dùng chung với nhiều người, IOPS quyết định độ nhanh và nhạy của volume do bản chất IOPS càng cao thì càng nhiều thao tác có thể thực hiện đồng thời một lúc, tốc độ xử lý càng nhanh. Điều đó trực tiếp dẫn tới tốc độ hoạt động ứng dụng của bạn.
Chúng tôi sẽ đưa ra một kết quả benchmark IOPS giữa hai loại volume trên hệ thống và gợi ý để giúp bạn có thể lựa chọn loại phù hợp cho server của mình. Nếu bạn muốn tự kiểm nghiệm hiệu năng của 2 loại volume, hãy đăng ký tài khoản tại manage.vccloud.vn và trải nghiệm 7 ngày miễn phí mọi tính năng trên hệ thống cloud server của chúng tôi. Chạy thật sự ứng dụng của bạn và phản hồi cho chúng tôi biết kết quả hoạt động của 2 loại volume với nhu cầu của bạn.
 

2. Lựa chọn SAS hay TRUESSD volume ?

Xét về tốc độ truy xuất, volume TRUESSD vượt trội hơn hẳn so với volume SAS. Tôi sẽ đưa ra 2 kết quả benchmark cho hai loại volume.
Kết qủa benchmark SAS volume và TRUESSD volume, cả hai cùng có dung lượng 40G và chưa có dữ liệu:
TRUESSD volume:
1
2
3
random-writers: (groupid=0, jobs=1): err= 0: pid=11266: Fri Mar 27 09:11:08 2015
read : io=25660KB, bw=25182KB/s, iops=6295, runt= 1019msec
write: io=25540KB, bw=25064KB/s, iops=6265, runt= 1019msec
SAS volume:
1
2
3
random-writers: (groupid=0, jobs=1): err= 0: pid=21341: Fri Mar 27 09:16:15 2015
read : io=25660KB, bw=2015.9KB/s, iops=503, runt= 12729msec
write: io=25540KB, bw=2006.5KB/s, iops=501, runt= 12729msec
Trên thực tế bài toán hiệu năng luôn đi kèm bài toán chi phí, hiện tại trên hệ thống Cloud Server giá thành của TRUESSD volume xấp xỉ 6 lần giá thành SAS volume. May mắn là cũng không phải bất cứ ứng dụng nào cũng cần dùng tới TRUESSD volume.
TRUESSD nên được dùng khi:
+ các dữ liệu truy xuất liên tục với tốc độ cao như dạng logging, swap, thumbs, caching…
+ dung lượng lưu trữ không tới vài TB
+ sẵn sàng chi trả chi phí cao cho hiệu suất cao, tuổi thọ dữ liệu cao hơn.
SAS nên được dùng khi:
+ cơ sở dữ liệu cần lưu trữ lớn vài TB
+ các dữ liệu có tính ổn định cao như ứng dụng web
+ cơ sở dữ liệu mức độ truy xuất ổn định (MySQL – Oracle – DB2 – SQL Server hay lưu trữ phim ảnh và MS Office)
+ không muốn chi trả quá nhiều chi phí

Thứ Bảy, 18 tháng 3, 2017

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

Cách kiểm tra tốc độ ổ cứng

Rất nhiều khách hàng khi đăng ký VPS hoặc dịch vụ Cloud VPS hoặc SSD VPS tại vHost hay bất kì nhà cung cấp nào khác đều có chung một câu hỏi: VPS của tôi nhanh như thế nào? Làm thế nào để kiểm tra được điều đó?
Trong bài viết này 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.
Những gì không nên làm?
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à 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
Câu lệnh trên sẽ thực hiện ghi 16000 lần với mỗi lần là block size 64k để tạo ra 1 file có kích thước 1GB. Lệnh dd rất phổ biết vì đây là phần mềm được cài đặt mặc định trên các hệ điều hành Linux, Unix. Quý khách có thể nhìn vào kết quả test ( ví dụ: 10MB/s) và đánh giá VPS/Server chạy chậm, tuy nhiên thật sự con số này có một số vấn đề như sau:
- Đây là tính trình độc lập (single thread) 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 erver thì con số này không mang lại ý nghĩa gì bởi vì các dịch trên rất ít khi nào ghi tuần tự.
- Việc ghi dữ liệu 1GB xuống hệ thống là rất nhỏ và có thể tăng lên bằng cách sử dụng tính năng write-back có trên card raid của server. Lúc này dữ liệu sẽ được ghi vào NVRAM có trên card raid trước rồi mới ghi xuống ổ cứng sau. Tham số conv=fdatasync chỉ có tác dụng đối với VPS và không có tác dụng với server.
- Thời gian thực thi lệnh này 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 đó.
- Không thể kiểm tra việc đọc từ ổ cứng.
Vì vậy câu lệnh trên không phải là cách để kiểm tra tốc độ của ổ cứng mà nên sử dụng tool như sau:
Đo random IOPS bằng FIO
VPS của quý khách vận hành web server hoặc một dịch vụ nào đó tương tự, tham số để đo hiệu suất hoạt động của ổ cứng là IOPS (Input/Output Operations per Second) - số lần đọc ghi dữ liệu trong một giây. Để có kết quả chính xác nhất chúng ta sử dụng các thông số sau:
1. Đọc ngẫu nhiên, ghi ngẫu nhiên hoặc kết hợp cùng lúc cả hai. Database thường được lưu trữ ở khắp nơi trên ổ cứng vì vậy ta nên sử dụng các thông số ngẫu nhiên để kiểm tra.
2. Block size 4KB. Database và rất nhiều chương trình có dữ liệu rất nhỏ, vì vậy nên sử dụng block size 4KB để cho kết quả chính xác.
3. Đa tiến trình (Multiple threads). Vì website thường có nhiều người truy cập cùng lúc vì vậy phải sử dụng da tiến trình để kiểm tra tốc độ của ổ cứng.
FIO là một phần mềm phổ biến để kiểm tra IOPS trên hệ điều hành Linux để cài đặt ta làm theo hướng dẫn bên dưới:
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/Crowd9/Benchmark/raw/master/fio-2.0.9.tar.gz ; tar xf fio*
cd fio*
make
Sau khi FIO được cài đặt, ta sẽ tiến hành kiểm tra các thông số.
Đọc/ghi ngẫu nhiên
Đơn giản ta chỉ cần thực thi câu lệnh bên dưới:
./fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=test --filename=test --bs=4k --iodepth=64 --size=4G --readwrite=randrw --rwmixread=75
Phần mềm sẽ tạo ra file có kích thước 4GB với tỉ lệ (3 lần đọc cho mỗi 1 lần ghi), với tổng cộng 64 tiến trình tại cùng một thời điểm và trả về kết quả như sau:
Jobs: 1 (f=1): [m] [100.0% done] [53390K/18257K /s] [13.4K/4564  iops] [eta 00m:00s]
vhost: (groupid=0, jobs=1): err= 0: pid=3435: Thu Jul 28 03:06:39 2016
 read : io=3071.7MB, bw=55033KB/s, iops=13758 , runt= 57154msec
 write: io=1024.4MB, bw=18353KB/s, iops=4588 , runt= 57154msec
 cpu          : usr=8.07%, sys=49.43%, ctx=50898, majf=0, minf=25
 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=786333/w=262243/d=0, short=r=0/w=0/d=0

Run status group 0 (all jobs):
  READ: io=3071.7MB, aggrb=55032KB/s, minb=55032KB/s, maxb=55032KB/s, mint=57154msec, maxt=57154msec
 WRITE: io=1024.4MB, aggrb=18353KB/s, minb=18353KB/s, maxb=18353KB/s, mint=57154msec, maxt=57154msec

Disk stats (read/write):
 vda: ios=783910/261556, merge=0/171, ticks=877965/935373, in_queue=1812023, util=94.71%
Với kết quả trên ta có thể thấy VPS của vHost là read io: 13758 và write io: 4588
Ngoài ra, ta có thể kiểm tra chỉ riêng random read hoặc random write như sau:
./fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=test --filename=test --bs=4k --iodepth=64 --size=4G --readwrite=randread
./fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=test --filename=test --bs=4k --iodepth=64 --size=4G --readwrite=randwrite
Kiểm tra latency với IOPing:
Để kiểm tra độ trễ của việc đọc ghi dữ liệu, ta có thể sử dụng tool IOPing, tool này có thể cài đặt như sau:
cd /root
yum install -y make gcc libaio-devel || ( apt-get update && apt-get install -y make gcc libaio-dev  </dev/null )
wget https://ioping.googlecode.com/files/ioping-0.6.tar.gz ; tar xf ioping*
cd ioping*
make
Kiểm tra độ trễ bằng cách:
./ioping -c 10
Một VPS có hiệu suất tốt cần đảm bảo kết quả dưới 1.0 ms.

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

Kiểm tra tốc độ đọc ghi ổ cứng

Quý khách vừa mua VPS/Server (dù là vHost hay là bất kì nhà cung cấp nào khác) thì đều có câu hỏi là VPS/Server của mình sẽ nhanh như thế nào. Làm thế nào để kiểm tra hiệu suất của VPS/server của mình? Trong bài viết này chúng tôi sẽ giải thích về tầm quan trọng của tốc độ đọc ghi của ổ cứng cũng như một số phương thức kiểm tra.

Vậy tại sao không phải là CPU, RAM hay tốc độ đường truyền mà là tốc độ đọc ghi của ổ cứng lại quan trọng nhất, để hiểu rõ được vấn đề này chúng ta cần tìm hiểu một số khái niệm bên dưới:

I. Random access và Sequential access:


Sequential access: là thuật ngữ dùng để miêu tả việc đọc hoặc ghi các bit dữ liệu liên tiếp nhau. Đối với ổ cứng thông thường, các bit dữ liệu được lưu trữ trên các sector, nếu dữ liệu được lưu trữ trên các sector liên tiếp, việc đọc dữ liệu sẽ nhanh hơn vì thời gian tìm kiếm (seek time) sẽ giảm đi. Tương tự, nếu dữ liệu được ghi liên tiếp thì sẽ nhanh hơn vì chỉ tốn một vòng quay để ghi các sector liên tiếp.
Random access: là thuật ngữ dùng để miêu tả việc đọc hoặc ghi các bit dữ liệu ngẫu nhiên lộn xộn trên các sector phân bố ngẫu nhiên trên ổ cứng. Vì dữ liệu nằm rời rạc nên phải tốn thời gian tìm kiếm, nên vấn đề đọc/ghi dữ liệu random thường khá tốn thời gian. Hãy tưởng tượng bạn cần đọc một file hình ảnh có kích thước 400KB, tuy nhiên hình ảnh này được lưu tại 100 sector nằm rời rạc thì việc hiển thị hình ảnh này mất rất nhiều thời gian. Hiện tượng trên được gọi là phân mảnh ổ cứng và thường chúng ta sử dụng tool Disk Defragmenter để sắp xếp lại.



II. Throughput:

Để kiểm tra tốc độ đọc ghi ổ cứng, rất nhiều khách hàng thường sử dụng câu lệnh dd như sau:
dd if=/dev/zero of=test bs=64k count=16k conv=fdatasync
Tuy nhiên đây chỉ là câu lệnh để kiểm tra việc ghi tuần tự từng block file (64k) xuống ổ cứng, các loại ổ cứng trên thị trường thường có thông số này rất cao: 250MB/s đối với HDD và 500MB/s đối với SSD. Thực tế, không phải VPS/Server lúc nào cũng đọc ghi tuần tự (sequential read/write) mà đa số là các tác vụ đọc ghi ngẫu nhiên (random read/write) như query database, đọc các file nằm rời rạc,.. vì vậy lúc này tham số random IOPS, latency mới cần cho hoạt động của VPS/Server.

III. Latency:

Latency là thời gian ổ cứng bắt đầu thực hiện một data transfer (chuyển dữ liệu), chỉ số này càng thấp càng tốt. Latency bao gồm seek time (thời gian tìm vị trí dữ liệu) và rotational latency (độ trễ chuyển động quay của trục - SSD không bị tính thời gian này). Đối với HDD thông thường mất khoảng 10 phút seek time cho 100,000 IO, tuy nhiên với SSD, thời gian này rất nhỏ và được tính bằng microsecond (1 microcosecond = 0.000001 giây). Đây chính là lý do mà SSD có tốc độ phản hồi nhanh hơn rất nhiều lần so với HDD. Latency chính là độ trễ của việc đọc/ghi dữ liệu, vì vậy latency cũng không kém phần quan trọng trong hiệu suất của một ổ cứng.

IV. IOPS:

IOPS (Input/Output Per Second) số thao tác đọc ghi trong một giây của ổ cứng. Vậy tại sao IOPS lại quan trọng? Bạn hãy hình dung bạn copy khoảng 100.000 file có dung lượng mỗi file khoảng 4k sang một thư mục khác, nếu bạn sử dụng ổ cứng SATA bình thường, bạn chỉ có thể copy khoảng 100 file/s, tuy nhiên nếu bạn dùng SSD thì thời gian có thể rút ngắn xuống 100 lần hoặc hơn vì SSD có chỉ số IOPS rất cao.

Đối với các ổ cứng, IOPS lần lượt như sau:
7,200 rpm SATA: 75~100 IOPS
10,000 rpm SATA: 125-150 IOPS
10,000 rpm SAS: 140 IOPS
15,000 rpm SAS: 175-210 IOPS
SSD: 30k~90k IOPS

Vậy tại sao tốc độ đọc ghi của ổ cứng lại quan trọng đến như vậy? Hãy hình dung bạn có môt web server chứa một website, khi người dùng truy cập vào website của bạn web server sẽ gọi các tiến trình xử lý các request, lúc này các tiến trình sẽ bắt đầu tìm kiếm tổng hợp các dữ liệu có trên ổ cứng để xử lý và trả kết quả về cho người dùng. Nếu tốc độ ổ cứng quá chậm, sẽ làm cho việc xử lý lâu hơn, tài nguyên CPU, RAM sẽ bị giữ ở đó và phải chờ cho đến khi việc tìm kiếm (read) từ ổ cứng kết thúc để tiếp tục xử lý và trả kết quả lại cho người dùng. Điều này đồng nghĩa với việc khi thời gian tìm kiếm dữ liệu giảm đi, tài nguyên RAM và CPU sẽ giải phóng nhanh hơn và lượng người có thể truy cập cùng lúc vào website có thể tăng lên tương ứng.

Trên thực tế khi VPS/Server hoạt động, dữ liệu rất rời rạc vì vậy cần phải kết hợp với latency thấp và IOPS mới tránh bị bottleneck (thắt cổ chai), làm ảnh hưởng đến hiệu suất của VPS/Server. Để biết điều đó, chúng ta cần phải đo các thông số random read/write IOPS, latency bằng một trong hai tool dưới đây:

1. FIO

Cài đặt và kiểm tra

yum -y --enablerepo=extras install epel-release

yum -y --enablerepo=epel install fio

yum -y install perl-core

wget -O fio-tests-1.0.tar.gz https://storpool.zendesk.com/attachments/token/XMmtKR4m6rOA5oDhoLoIe70DK/?name=fio-tests-1.0.tar.gz

unxz fio-tests.tar.xz

tar -xf fio-tests.tar

cd fio-tests

./run_quick /dev/sdX (với /dev/sdX là ổ cứng muốn kiểm tra)

Lưu ý: không test trên ổ cứng chứa OS vì tool sẽ xóa toàn bộ dữ liệu trên ổ cứng đó

2. Odin tool

Cài đặt và kiểm tra

wget http://upload.vhost.vn/upload/at_io_iops

chmod +x at_io_iops

mkdir /root/benchmark

Kiểm tra random read IOPS: ./at_io_iops --read --rand -s 4K --iops -p 16 -t 30 -u 8G -S --uncached -f /root/benchmark

Kiểm tra random write IOPS: ./at_io_iops --write --rand -s 4K --iops -p 16 -t 30 -u 8G -S --uncached -f /root/benchmark