Disk Access Latency
💾 Disk Latency – Giảm độ trễ truy cập đĩa
Disk I/O là một trong những thao tác chậm nhất trong toàn bộ hệ thống.
Mặc dù CPU có thể xử lý trong nanoseconds, RAM trong tens of nanoseconds, nhưng SSD/HDD cần microseconds đến milliseconds — chậm hơn hàng nghìn đến hàng triệu lần.
Do đó, mỗi lần ứng dụng phải đọc hoặc ghi xuống đĩa đều có thể trở thành bottleneck.
Diagram tổng quan
Disk Latency
│
┌────────────────┼────────────────┐
│ │ │
▼ ▼ ▼
Logging Web Application Database
│ │ │
▼ ▼ ▼
Log Files JS / CSS / Images Read / Write Data
│ │ │
└────────────────┼────────────────┘
▼
Disk Read / Write
│
▼
High I/O Latency
│
▼
Slower Overall System
1) Disk I/O là một trong những I/O chậm nhất
CPU Register
│
▼
L1 Cache
│
▼
L2/L3 Cache
│
▼
RAM
│
▼
SSD / HDD
Tốc độ ước lượng:
| Storage | Độ trễ |
|---|---|
| CPU Register | ~0.3 ns |
| L1 Cache | ~1 ns |
| L2 Cache | ~4 ns |
| RAM | ~50–100 ns |
| SSD (NVMe) | ~50–100 µs |
| HDD | ~5–10 ms |
Mỗi lần truy cập Disk:
- CPU phải chờ dữ liệu
- Thread bị block
- Request bị kéo dài
Disk Access luôn được cố gắng giảm xuống mức thấp nhất.
2) Logging cũng sử dụng Disk
Application
│
▼
Generate Log
│
▼
Write Log File
│
▼
Disk
Hầu hết mọi hệ thống đều ghi log: Error Log, Access Log, Audit Log, Transaction Log.
logger.info("User login");
// → cuối cùng cũng ghi xuống file hoặc storage
Tuy nhiên, logging thường không phải bottleneck lớn vì nhiều framework ghi log bất đồng bộ (asynchronous) hoặc sử dụng buffer trước khi flush xuống đĩa.
3) Web Application chịu ảnh hưởng bởi Disk Latency
Browser
│
▼
HTTP Request
│
▼
Web Application
│
Read Static Files
│
┌─────┼─────┐
▼ ▼ ▼
JS CSS Images
│
▼
Disk
Một web application thường phải đọc: JavaScript, CSS, HTML, Images, Fonts, Video.
Nếu các file chưa nằm trong cache, server sẽ phải đọc từ disk:
Request → index.html → main.js → style.css → logo.png
Mỗi file là một lần Disk I/O. Website có hàng trăm static files thì tổng latency tăng đáng kể.
4) Database chịu ảnh hưởng nhiều nhất
SQL Query
│
▼
Database Engine
│
┌──────┴───────┐
│ │
▼ ▼
Buffer Cache Disk Storage
│ │
│ Cache Miss │
└──────► Read Disk
Database luôn phải thực hiện: Read Data, Write Data, Update Index, Transaction Log, WAL (Write Ahead Log).
Nếu dữ liệu không có trong Buffer Cache:
SELECT *
↓
Không có trong RAM
↓
Đọc SSD
↓
Trả kết quả
Đây là lý do database thường là thành phần nhạy cảm nhất với Disk Latency.
5) Tại sao Database bị ảnh hưởng nhiều hơn Web Server?
| Web Server | Database |
|---|---|
| Chủ yếu đọc static files | Đọc và ghi dữ liệu liên tục |
| Có thể dùng CDN/cache | Phải đảm bảo tính nhất quán dữ liệu |
| Dễ cache | Nhiều truy vấn động |
| Ít ghi | Ghi transaction thường xuyên |
Luồng hoạt động của một Request
User Request
│
▼
Web Application
│
┌───────────┴────────────┐
│ │
▼ ▼
Read JS/CSS/Image Query Database
│ │
▼ ▼
Disk Buffer Cache?
│
┌─────────────┴─────────────┐
│ │
Hit Miss
│ │
▼ ▼
Return Data Read Disk
│ │
└─────────────┬─────────────┘
▼
Send Response
Tổng kết
| Nội dung | Ý nghĩa |
|---|---|
| Disk I/O rất chậm | Chậm hơn RAM hàng nghìn đến hàng triệu lần, dễ trở thành nút thắt hiệu năng |
| Logging cũng dùng Disk | Có Disk I/O nhưng thường ít ảnh hưởng vì nhiều framework dùng buffer hoặc ghi bất đồng bộ |
| Web Application | Phải đọc JS, CSS, HTML, ảnh và các tài nguyên tĩnh từ disk nếu chưa có cache |
| Database | Thành phần chịu ảnh hưởng lớn nhất vì mọi thao tác đọc/ghi dữ liệu cuối cùng đều liên quan đến disk |
| Mục tiêu | Giảm số lần truy cập disk và tận dụng cache/buffer để giảm Disk Latency |
Kết luận: Disk Latency là một trong những nguyên nhân phổ biến gây chậm hệ thống. Hai thành phần chịu tác động mạnh nhất là Web Application (đọc static assets) và Database (đọc/ghi dữ liệu). Vì vậy, các kỹ thuật tối ưu tiếp theo sẽ tập trung vào giảm Disk I/O và tăng tỷ lệ cache hit để cải thiện hiệu năng tổng thể.