Kiểm tra khả năng đọc, ghi RAM của VPS bằng sysbench

Chúng ta tiếp tục chuỗi bài viết liên quan đến sysbench bằng bài kiểm tra liên quan đến khả năng đọc & ghi RAM của VPS.

Đây cũng là bài kiểm tra quan trọng trong đánh giá toàn diện hiệu năng của VPS. Ở các bài trước chúng ta đã dùng sysbench để kiểm tra sức mạnh tính toán thô của CPU & tốc độ đọc ghi database của VPS.

Môi trường test:

  • VPS VULTR HP, 1GB RAM, CPU 1 lõi, AMD64;
  • OS: Ubuntu LTS 24.04;
  • Location: Nhật Bản.

Lưu ý: Chỉ test trên môi trường demo, không test trên VPS đã có website chính thức của bạn.

Các bước làm.


1. Cài sysbench

Nếu chưa cài, ta lặp lại thao tác liên quan đến cập nhật danh sách gói cho Ubuntu, và cài sysbench trên VPS Ubuntu.

Cập nhật danh sách gói:

sudo apt-get update

Cài sysbench trên VPS Ubuntu:

sudo apt-get install sysbench -y

2. Kiểm tra tốc độ ghi

Câu lệnh:

sysbench memory --memory-block-size=1K --memory-total-size=100G run

Giải thích:

  • memory: chỉ định sysbench kiểm tra RAM.
  • Cờ --memory-block-size: dùng để chỉ định kích thước khối dữ liệu có giá trị bao nhiêu.
  • 1K: tham số cụ thể cho kích thước khối dữ liệu, ý là 1 KiB.
  • Cờ --memory-total-size: dùng để chỉ định tổng dữ liệu truyền tải qua RAM.
  • 100G: tham số cụ thể cho tổng dữ liệu truyền tải, ý là 100 GiB.
  • run: chạy lệnh trên cấu hình đã thiết lập.

Ý nghĩa của các tham số:

  • 1K: là khối dữ liệu phù hợp để kiểm tra độ trễ (latency) phản hồi, & tần số truy cập. Khi tăng khối dữ liệu lên, ví dụ 1M (1MiB) hoặc 4M (4MiB) nó thiên về kiểm tra băng thông tối đa, hay tốc độ truyền tải của RAM.
  • Kiểm tra ở khối nhỏ (1K – 4K) nó giống với web khi thao tác với database.
  • 100G: con số rất lớn, nhưng phù hợp với tốc độ truyền tải của RAM. Các RAM hiện nay có tốc độ xử lý rất cao, từ 3 – 10GB/s.

Kết quả của lệnh trên:

Tốc độ ghi RAM, block 1 KiB
Tốc độ ghi RAM, block 1 KiB

Giải thích kết quả:

  • MiB transferred: tốc độ truyền dữ liệu, lên tới 6222,36 MiB/sec (hơn 6,2 GB/giây). Chú ý đơn vị MiB, nó cao hơn MB một chút. 1MiB = 2^20 byte (1.048.576 Byte, cao hơn 1MB = 1.000.000 Byte khoảng 4,8%). Chúng ta quen với MB & GB (sử dụng lũy thừa cơ số 10), còn MiB & GiB sử dụng lũy thừa cơ số 2. Tuy nhiên nếu không cần quá chính xác thì có thể coi gần tương đương.
  • Latency: báo cáo độ trễ. Trong trường hợp cụ thể này cho thấy hầu như rất thấp ở tất cả các hạng mục (điều này là tốt, vì như vậy có nghĩa là RAM phản hồi nhanh), mức độ 95th cũng vẫn ghi nhận rất thấp. Độ trễ tối đa 0,31 ms (1 s = 1000 ms). Ý nghĩa: min (độ trễ thấp nhất), avg (độ trễ trung bình), max (độ trễ cao nhất).
  • Tổng thời gian (total time) kiểm tra là 10s, đây là con số mặc định của sysbench.
  • Tổng các sự kiện (total number of events): 63.721.446 (hơn 63 triệu sự kiện).

Nếu muốn tăng thời gian kiểm tra, ta dùng cờ --time, tăng thời gian được xem là cho kết quả ổn định, đáng tin cậy hơn.

sysbench memory --memory-block-size=1K --memory-total-size=100G --time=30 run

Kết quả:

Tốc độ ghi RAM, block 1 KiB, thời gian test 30s.
Tốc độ ghi RAM, block 1 KiB, thời gian test tối đa 30s.

Kết quả cho thấy tốc độ nhỉnh hơn một chút: 6,3 GB/s. Vì tốc độ cao như vậy nên 100 GiB truyền tải chỉ hơn 16s là hết. Ở đây với các tham số được nhập vào như vậy, bất cứ điều kiện nào đến trước sẽ kết thúc lệnh (khi thời gian hoặc tổng khối lượng dữ liệu truyền tải đạt ngưỡng).

Kiểm tra với block cao hơn (1 MiB):

sysbench memory --memory-block-size=1M --memory-total-size=1000G run

Vì khối data block (–memory-block-size) tăng lên nhiều nên lượng dữ liệu truyền tải (–memory-total-size) được tăng thành 1000 GiB để bài test không kết thúc quá sớm.

Kết quả:

Tốc độ ghi RAM, block 1 MiB
Tốc độ ghi RAM, block 1 MiB

Tốc độ ghi khoảng 28 GB/s.


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

Mặc định sysbench kiểm tra tốc độ ghi RAM, nếu muốn kiểm tra tốc độ đọc, cần bổ sung thêm cờ --memory-oper với tham số read.

Câu lệnh:

sysbench memory --memory-block-size=1K --memory-total-size=100G --memory-oper=read run

Kết quả:

Tốc độ đọc RAM, block 1 KiB
Tốc độ đọc RAM, block 1 KiB

Tốc độ đọc khoảng 7,2 GB/s. Thường tốc độ đọc sẽ cao hơn ghi, vì nhiệm vụ đọc đơn giản hơn.

Thử tăng thời gian test (lên tối đa 30s) & tổng lưu lượng truyền tải (lên tối đa 200 GiB) để xem kết quả thế nào:

sysbench memory --memory-block-size=1K --memory-total-size=200G --memory-oper=read --time=30 run

Kết quả:

Tốc độ đọc RAM, block 1 KiB, thời gian test tối đa 30s.
Tốc độ đọc RAM, block 1 KiB, thời gian test tối đa 30s.

Tốc độ khoảng 7,34 GB/s, cao hơn trước một chút.

Kiểm tra với block 1 MiB:

Tốc độ đọc RAM, block 1 MiB
Tốc độ đọc RAM, block 1 MiB

Tốc độ đọc với khối 1 MiB lên tới 48 GB/s.


4. Kiểm tra tốc độ truy xuất ngẫu nhiên

Mặc định là sysbench kiểm tra tốc độ đọc ghi theo các khối dữ liệu tuần tự (sequential) trên RAM. Nó nhanh hơn nhưng phản ánh điều kiện lý tưởng.

Ngược lại, với test truy xuất ngẫu nhiên (random access), thì dữ liệu đọc ghi sẽ thực hiện thao tác này ngẫu nhiên (các địa chỉ đọc ghi phân tán) trên RAM. Điều kiện này phản ảnh tốc độ thực tế của ứng dụng trên VPS nhiều hơn điều kiện lý tưởng đọc ghi tuần tự.

Câu lệnh:

sysbench memory --memory-block-size=1K --memory-total-size=100G --memory-access-mode=rnd run

Kết quả:

Ghi ngẫu nhiên, 1 KiB, 10s
Ghi ngẫu nhiên, 1 KiB, 10s

Tốc độ vào khoảng 2,8 GB/s.

Tăng thời gian ghi ngẫu nhiên lên tối đa 30s:

sysbench memory --memory-block-size=1K --memory-total-size=100G --memory-access-mode=rnd --time=30 run

Kết quả:

Ghi ngẫu nhiên, 1 KiB, 30s
Ghi ngẫu nhiên, 1 KiB, 30s

Có vẻ ổn định khi vẫn duy trì tốc độ ghi 2,8 GB/s (chỉ tăng khoảng 20 MB).

Kiểm tra với đọc truy xuất ngẫu nhiên:

sysbench memory --memory-block-size=1K --memory-total-size=100G --memory-oper=read --memory-access-mode=rnd run
Đọc ngẫu nhiên, 1 KiB, 10s
Đọc ngẫu nhiên, 1 KiB, 10s

Tốc độ đọc ngẫu nhiên khoảng 2,8 GB/s (không cao hơn ghi).

Tăng lên 30s kiểm tra:

sysbench memory --memory-block-size=1K --memory-total-size=100G --memory-oper=read --memory-access-mode=rnd --time=30 run

Kết quả:

Đọc ngẫu nhiên, 1 KiB, 30s
Đọc ngẫu nhiên, 1 KiB, 30s

Nhận xét chung: Với truy xuất ngẫu nhiên, ở VPS này chúng ta thấy tốc độ đọc ghi giảm xuống đáng kể (50 – 60%). Độ trễ min, avg, 95th vấn rất tốt. Tuy nhiên max ghi nhận nhiều sự kiện cần hơn 100 ms để xử lý.


5. Kiểm tra với đa luồng

Bổ sung thêm cờ --threads và số luồng mong muốn.

Câu lệnh (với số luồng là 2):

sysbench memory --memory-block-size=1K --threads=2 --memory-total-size=100G run

Kết quả:

Kiểm tra lệnh ghi khối 1KiB đa luồng
Kiểm tra lệnh ghi khối 1 KiB, đa luồng

Nhận xét: Trên core một lõi, bổ sung thêm luồng không có cải thiện đáng kể nào.


6. Kiểm tra trên VPS có CPU 2 lõi

Lần này tôi thử với VPS VULTR HP, 2GB RAM & CPU 2 core xem thông số thay đổi ra sao. Về giá nó đắt gấp 3 lần VPS 1GB RAM, CPU 1 lõi.

sysbench memory --memory-block-size=1K --threads=2 --memory-total-size=100G run
Đa luồng, 1 KiB, 2 GB RAM, 2 Core
Đa luồng, 1 KiB, 2 GB RAM, 2 Core

Điểm kỳ lạ ở đây là tốc độ tụt xuống chứ không tăng, chỉ còn khoảng 4,5 GB/giây.

Tăng thời gian thêm lên tối đa 30s xem kết quả có ổn định hơn không.

sysbench memory --memory-block-size=1K --threads=2 --memory-total-size=100G --time=30 run

Kết quả:

Tăng thời gian kiểm tra đa luồng lên 30s

Có cải thiện, lên khoảng 5,2 GB/s.

Lần test khác thì lần đầu nó lên đến khoảng 9,6 GB/s:

Kiểm tra lại

Tăng memory-total-size để có thể dùng hết 30s test.

sysbench memory --memory-block-size=1K --threads=2 --memory-total-size=300G --time=30 run

Kết quả:

Tăng thêm thời gian test

Khoảng 8,7 GB/s.

Nhận xét: Đa luồng trên VPS 2 core có vẻ tốc độ ghi trên RAM không ổn định lắm, với việc tăng giảm thất thường, kéo dài thời gian đo cho kết quả ổn định hơn, và có giá trị cao như kỳ vọng.

Đa luồng với block 1M:

sysbench memory --memory-block-size=1M --threads=2 --memory-total-size=1000G --time=30 run

Kết quả:

block 1MiB, đa luồng, CPU đa lõi

Hơn 30 GB/s. Tương đương với đơn luồng.

Đa luồng, block 1 KiB, ghi ngẫu nhiên:

sysbench memory --memory-block-size=1K --threads=2 --memory-total-size=100G --memory-access-mode=rnd run

Giao động từ 700 MB/s đến 900 MB/s. Thấp so với kỳ vọng, và thấp so với 1 core.

Tăng thời gian lên tối đa 30s:

sysbench memory --memory-block-size=1K --threads=2 --memory-total-size=100G --memory-access-mode=rnd --time=30 run

Cải thiện đáng kể, hơn 1 GB/s, nhưng cũng không cao như kỳ vọng & vẫn thấp hơn 1 core.


7. Ngoài lề

Câu lệnh này:

sysbench memory --memory-block-size=1K --memory-total-size=100G run

là tương đương với câu lệnh bên dưới:

sysbench memory run

Vì mặc định sysbench sử dụng --memory-block-size=1K & --memory-total-size=100G, nếu bạn không chỉ định nó trong lệnh.

Tuy nhiên về mặt cá nhân, tôi vẫn thích việc chỉ rõ nó trong lệnh hơn.

Có một điểm tôi không khoái lắm về sysbench (và nhiều mã nguồn trên github) là nó dường như có tài liệu hướng dẫn rất sơ sài! (dường như nhóm chuyên ngành có vẻ không gặp vấn đề, còn người mới tìm hiểu sẽ cảm thấy rất vất vả).

Để xem hướng dẫn về các cờ của memory bạn dùng lệnh sau:

sysbench memory help

Hướng dẫn chung cho sysbench thì dùng lệnh:

man sysbench

Ở tại trang đó, nhấn phím e để cuộn dần xuống, phím y để đi lên, phím q để thoát (thoát trang hướng dẫn, quay về terminal của VPS). Để xem hướng dẫn cách sử dụng các phím để đọc (e, y, q,…) thì nhấn phím h.

Khi xem hướng dẫn, tốt nhất là dùng PuTTY để đăng nhập VPS, mục đích là dễ đọc và có thể copy đoạn nào khó hiểu quá không tự dịch được.

Viết một bình luận