Tổng quan
Trong lưu trữ (storage), I/O, thông lượng (throughput) và độ trễ (latency) là các khái niệm quan trọng cần được hiểu rõ để đánh giá hiệu suất và tối ưu hóa các giải pháp lưu trữ.
Input/Output (I/O) là gì?
Input/Output (I/O) là quá trình trao đổi dữ liệu giữa các thiết bị và máy tính.
Input trong I/O đề cập đến dữ liệu di chuyển vào máy tính từ các thiết bị ngoại vi như bàn phím, chuột, ổ đĩa, card mạng, và các cảm biến khác.
Output trong I/O đề cập đến dữ liệu di chuyển ra khỏi máy tính đến các thiết bị ngoại vi như màn hình, loa, máy in, và các thiết bị khác.
Ví dụ, khi bạn gõ phím trên bàn phím, dữ liệu đó sẽ được gửi vào máy tính thông qua input I/O, sau đó máy tính xử lý và hiển thị kết quả trên màn hình thông qua output I/O.
Một yêu cầu I/O đại diện cho việc truy cập đến một khối dữ liệu (block) nào đó trên thiết bị lưu trữ. Thông thường, các yêu cầu I/O sẽ được thực hiện thông qua các giao thức truyền thông như iSCSI, FC, NFS, SMB…
Trong trường hợp đo IO, Throughput có thể hiểu là tốc độ đọc ghi của ổ đĩa đó. Nó cho biết khả năng truyền tải dữ liệu của ổ đĩa trong một khoảng thời gian nhất định. Nếu ổ đĩa có Throughput cao, tức là nó có thể đọc và ghi dữ liệu nhanh hơn so với ổ đĩa có Throughput thấp.
Ví dụ khi bạn copy một tập tin từ một thư mục đến thư mục khác trên cùng một ổ đĩa, input/output (I/O) sẽ được tính toán dựa trên hoạt động của đĩa cứng. Khi bạn sao chép tập tin, hệ thống sẽ đọc nội dung của tập tin gốc từ đĩa cứng (input), sau đó ghi nội dung đó vào vị trí mới trên đĩa cứng (output). Do đó, I/O sẽ bao gồm cả việc đọc và ghi dữ liệu trên đĩa cứng.
Thông lượng (throughput) là gì?
Thông lượng (throughput) là số lượng dữ liệu có thể truyền qua hệ thống lưu trữ trong một khoảng thời gian nhất định. Thông lượng thường được đo bằng đơn vị MB/s hoặc GB/s. Thông lượng càng cao thì hệ thống có khả năng xử lý lượng dữ liệu lớn càng tốt.
Để đo throughput trong mạng, chúng ta có thể sử dụng các công cụ đo lường hiệu suất mạng như Iperf hoặc ttcp. Cả hai công cụ đều hoạt động bằng cách tạo ra các luồng dữ liệu giả và truyền chúng qua mạng từ một thiết bị đến thiết bị khác, đo lường thời gian và số lượng dữ liệu được truyền. Kết quả được tính bằng cách chia tổng số dữ liệu được truyền cho thời gian truyền và đưa ra dưới dạng đơn vị đo lường băng thông như Mbps hoặc Gbps.
Ví dụ, để đo throughput giữa hai máy tính trong một mạng LAN, chúng ta có thể cài đặt Iperf trên cả hai máy tính và thực hiện lệnh để bắt đầu truyền dữ liệu giữa chúng. Kết quả sẽ hiển thị tỷ lệ băng thông giữa hai máy tính dưới dạng số liệu đo lường throughput.
Độ trễ (latency) là gì?
Độ trễ (latency) là thời gian giữa khi yêu cầu I/O được gửi đi và khi kết quả trả về. Độ trễ thường được đo bằng đơn vị thời gian như millisecond (ms) hoặc microsecond (µs). Độ trễ càng thấp thì hệ thống đáp ứng yêu cầu truy cập dữ liệu nhanh hơn và tăng tính sẵn sàng của hệ thống.
Kết luận
Từ những đặc điểm trên của (storage), I/O, thông lượng (throughput) và độ trễ (latency) chúng ta có thể đưa ra nhận định nếu một hệ thống lưu trữ tốt sẽ có độ trễ thấp, thông lượng cao và khả năng xử lý I/O đồng thời tốt. Tuy nhiên, đối với từng giải pháp lưu trữ, cách thức đo lường và ảnh hưởng của các đặc tính trên sẽ có sự khác nhau.
Ví dụ, trong Block storage, thông lượng được đo bằng số lượng I/Os trên mỗi giây (IOPS), trong khi độ trễ thường được đo bằng microsecond. Trong khi đó, trong Object storage, thông lượng thường được đo bằng số lượng dữ liệu truyền tải trên mỗi giây (MB/s hoặc GB/s), và độ trễ được đo bằng millisecond.
Độ trễ và thông lượng trong storage không chỉ phụ thuộc vào kết nối mạng và giao thức truyền tải dữ liệu mà còn phụ thuộc vào nhiều yếu tố khác như kiểu ổ đĩa, số lượng ổ đĩa, bộ vi xử lý, bộ nhớ và hệ điều hành của hệ thống.
Kiểu ổ đĩa là yếu tố quan trọng nhất ảnh hưởng đến độ trễ và thông lượng của storage. Các loại ổ đĩa phổ biến nhất hiện nay bao gồm ổ đĩa cứng (HDD) và ổ đĩa rắn (SSD). SSD thường có tốc độ truy cập nhanh hơn và độ trễ thấp hơn so với HDD. Ngoài ra, các ổ đĩa có tốc độ quay cao hơn sẽ có độ trễ thấp hơn và thông lượng lớn hơn.
Số lượng ổ đĩa cũng ảnh hưởng đến độ trễ và thông lượng của hệ thống. Nếu sử dụng nhiều ổ đĩa cùng lúc, dữ liệu có thể được phân tán trên các ổ đĩa khác nhau, giúp tăng cường hiệu suất và đảm bảo tính khả dụng của dữ liệu. Tuy nhiên, việc sử dụng quá nhiều ổ đĩa cũng có thể dẫn đến độ trễ và tình trạng truy cập vào dữ liệu chậm hơn do tốn thời gian để tìm kiếm và phân tán dữ liệu.
Bộ vi xử lý (CPU), bộ nhớ (RAM) và hệ điều hành (OS) của hệ thống cũng có ảnh hưởng đáng kể đến hiệu suất và tốc độ truy xuất dữ liệu. CPU và RAM đóng vai trò quan trọng trong việc xử lý dữ liệu và đảm bảo hệ thống hoạt động mượt mà. Hệ điều hành cũng cần được cấu hình và tối ưu hóa để tối đa hóa hiệu suất và đảm bảo tính ổn định của hệ thống.
Vì vậy, việc cân nhắc các yếu tố này khi lựa chọn và triển khai giải pháp lưu trữ là rất quan trọng để đảm bảo độ trễ và thông lượng tối ưu của hệ thống lưu trữ.
Công thức tính I/O, throughput và latency trong storage như sau:
- I/O (Input/Output): đơn vị đo lường số lần truy cập vào và ra khỏi bộ nhớ hoặc thiết bị lưu trữ trong một khoảng thời gian nhất định.I/O = (số lần truy cập vào + số lần truy cập ra)
- Throughput (tốc độ truyền dữ liệu): đơn vị đo lường khả năng truyền dữ liệu qua storage trong một khoảng thời gian nhất định.Throughput = (dung lượng truyền đi) / (thời gian truyền)
- Latency (độ trễ): thời gian phản hồi của hệ thống lưu trữ, đo lường thời gian giữa khi yêu cầu được gửi đi và khi phản hồi được nhận lại.Latency = (tổng thời gian chờ đợi) / (số yêu cầu)
Các công thức này có thể được áp dụng cho một loạt các thiết bị lưu trữ khác nhau, bao gồm ổ đĩa cứng (HDD), ổ đĩa rắn (SSD), bộ nhớ đệm (cache), mạng lưu trữ (SAN/NAS) và các giải pháp lưu trữ đám mây (cloud storage).
Dưới đây là bảng so sánh giữa các nền tảng lưu trữ bằng số liệu, dựa trên các thông số về storage, I/O, throughput và latency, và đánh giá bằng số sao ★ (tối đa 5 sao) trong điều kiện tốt nhất.
Loại ổ cứng/ Hệ thống lưu trữ | I/O (IOPS) | Thông lượng (throughput MB/s) | Độ trễ (Latency) | Đánh giá ★ |
---|---|---|---|---|
HDD 5.400 vòng | 60 – 80 | 80 – 160 | 5 – 8ms | ★☆☆☆☆☆☆☆☆☆ |
SAS 7.200 vòng | 120 – 180 | 200 – 250 | 3 – 5ms | ★★☆☆☆☆☆☆☆☆ |
SAS 10.000 vòng | 140 – 200 | 200 – 320 | 2 – 4ms | ★★★☆☆☆☆☆☆☆ |
SAS 15.000 vòng | 175 – 250 | 300 – 400 | 2 – 3ms | ★★★★☆☆☆☆☆☆ |
SSD SATA2 | 4.000 – 10.000 | 150 – 250 | 0.1 – 0.5ms | ★★★★☆☆☆☆☆☆ |
SSD SATA3 | 4.000 – 10.000 | 400 – 550 | 0.05 – 0.1ms | ★★★★★☆☆☆☆☆ |
NVMe Gen1 | 30.000 – 40.000 | 1.500 – 1.900 | 0.02 – 0.05ms | ★★★★★★☆☆☆☆ |
NVMe Gen2 | 50.000 – 70.000 | 2.500 – 3.500 | 0.02 – 0.03ms | ★★★★★★★☆☆☆ |
NVMe Gen3 | 70.000 – 80.000 | 3.500 – 5.000 | 0.02 – 0.03ms | ★★★★★★★★☆☆ |
NVMe Gen4 | 750.000+ | 7.000+ | < 0.02ms | ★★★★★★★★★☆ |
NVMe Gen5 | 1.000.000+ | 14.000+ | < 0.01ms | ★★★★★★★★★★ |
NVMe Gen6 | 1.500.000+ | 22.000+ | < 0.01ms | ★★★★★★★★★★ |
Ceph | 100.000+ | 5.000+ | 0.1 – 2ms | ★★★★★★★☆☆☆ |
S2D | 50.000+ | 2.000+ | 1 – 10ms | ★★★★★★☆☆☆☆ |
Virtuozzo | 100.000+ | 2.000+ | 0.2 – 0.5ms | ★★★★★★★★☆☆ |
SAN | 100.000+ | 5.000+ | 0.1 – 1ms | ★★★★★★★☆☆☆ |
3D XPoint | 500.000+ | 2.500+ | < 0.01ms | ★★★★★★★★★★ |
OpenZFS | 100.000+ | 2.000+ | 0.1 – 1ms | ★★★★★★★★☆☆ |
FreeNAS | 100,000+ | 2,000+ | 0.1 – 1ms | ★★★★★★★★☆☆ |
Unraid | 50,000+ | 1,500+ | 0.2 – 1ms | ★★★★★★★☆☆☆ |
Proxmox VE Storage | 200,000+ | 4,000+ | 0.05 – 0.5ms | ★★★★★★★★★☆ |
Lưu ý rằng bảng này chỉ mang tính chất tham khảo và các số liệu có thể thay đổi tùy thuộc vào nhiều yếu tố khác nhau, bao gồm cấu hình phần cứng, phần mềm, tải động, và cách thức đo lường.
Các công cụ đo I/O, throughput và latency
Trong Linux, có nhiều công cụ hỗ trợ đo lường và giám sát hiệu suất hệ thống lưu trữ. Dưới đây là một số công cụ phổ biến:
- iostat: là một công cụ dòng lệnh để theo dõi hoạt động I/O trên các thiết bị lưu trữ. Công cụ này cung cấp thông tin về tốc độ đọc/ghi, số lượng I/O trên giây, độ trễ và số lượng I/O thất bại.
- sar: là một công cụ theo dõi hiệu suất hệ thống trên Linux. Công cụ này cung cấp thông tin về CPU, bộ nhớ, I/O và các thông số mạng. Nó có thể được cấu hình để lưu dữ liệu vào tệp log hoặc xuất ra định dạng báo cáo.
- blktrace: là một công cụ theo dõi hoạt động I/O trên các thiết bị lưu trữ và cung cấp thông tin chi tiết về quá trình I/O trên hệ thống.
- hdparm: là một công cụ để cấu hình và kiểm tra hiệu suất của ổ đĩa. Nó có thể được sử dụng để đo tốc độ đọc/ghi trên một ổ đĩa cụ thể.
- fio: là một công cụ để đo lường hiệu suất I/O trên các thiết bị lưu trữ khác nhau. Nó cho phép tùy chỉnh các tham số như kích thước tệp, kiểu I/O và độ sâu hàng đợi để kiểm tra hiệu suất của hệ thống.
- sysstat: là một bộ công cụ phục vụ cho việc giám sát hệ thống và thu thập các thông số hiệu suất. Công cụ này bao gồm iostat, sar và các công cụ khác để giám sát hiệu suất của hệ thống.
Đối với Windows, có một số công cụ phổ biến để đo lường hiệu năng lưu trữ như sau:
- CrystalDiskMark: Là một công cụ đo hiệu năng ổ đĩa đơn giản và dễ sử dụng cho hệ điều hành Windows. CrystalDiskMark sử dụng một loạt các tập lệnh đọc và ghi để đo lường tốc độ đọc/ghi của ổ đĩa. Công cụ này có khả năng kiểm tra hiệu suất của ổ đĩa cứng, SSD và USB.
- ATTO Disk Benchmark: Là một công cụ đo hiệu năng ổ đĩa miễn phí và mạnh mẽ cho Windows. ATTO Disk Benchmark hỗ trợ nhiều loại kết nối lưu trữ như SAS, SATA, NVMe và SCSI. Công cụ này sử dụng các tập lệnh đọc/ghi với kích thước khác nhau để đo tốc độ đọc/ghi.
- HD Tune: Là một công cụ đo hiệu năng ổ đĩa, kiểm tra lỗi và giám sát sức khỏe ổ đĩa. HD Tune có khả năng kiểm tra tốc độ đọc/ghi, độ trễ, và thông tin về sức khỏe ổ đĩa.
- AS SSD Benchmark: Là một công cụ đo hiệu năng ổ đĩa SSD miễn phí và dễ sử dụng. AS SSD Benchmark đo tốc độ đọc/ghi ngẫu nhiên và tuần tự của ổ đĩa SSD, độ trễ và điểm số tổng thể.
- Iometer: Là một công cụ đo hiệu năng đa nền tảng, hỗ trợ cả Windows và Linux. Iometer là một công cụ chuyên nghiệp được sử dụng để đo hiệu năng lưu trữ trong các môi trường doanh nghiệp.
Tất cả các công cụ trên đều cho phép người dùng đo lường tốc độ đọc/ghi, độ trễ, thông lượng và một số thông tin khác về hiệu năng ổ đĩa lưu trữ.