Khi hệ thống “rùa bò” dù tài nguyên vẫn dư
Bạn kiểm tra top, thấy CPU rảnh rang, RAM còn trống cả GB nhưng ứng dụng vẫn phản hồi cực chậm. Lúc này, hãy nhìn vào chỉ số %iowait. Nếu con số này thường xuyên vượt ngưỡng 10-15%, hệ thống của bạn đang bị nghẽn cổ chai I/O. Ổ cứng không thể xử lý kịp các yêu cầu đọc/ghi, khiến CPU phải ngồi chờ trong vô vọng.
Trên một dự án cũ chạy database MariaDB với lưu lượng 500GB dữ liệu, mình từng đau đầu vì tình trạng đứng máy liên tục. Sau khi tinh chỉnh kernel và file system, hiệu suất đã cải thiện thấy rõ. Có hai kỹ thuật đơn giản nhưng cực kỳ hiệu quả: cấu hình noatime và sử dụng tuned.
Tại sao atime lại là kẻ thù của hiệu suất?
Mặc định, Linux sẽ cập nhật thời gian truy cập cuối cùng (access time – atime) mỗi khi bạn đọc một file. Điều này đồng nghĩa với việc cứ mỗi thao tác Read, hệ thống lại phải thực hiện thêm một thao tác Write vào metadata.
Hãy tưởng tượng một Web Server phục vụ 1.000 ảnh mỗi giây. Ổ cứng phải tốn thêm 1.000 lượt ghi chỉ để lưu lại việc ai đó vừa xem ảnh. Việc này vừa gây trễ, vừa làm giảm tuổi thọ SSD do số lần ghi (TBW) tăng vô tội vạ.
Ba loại timestamp bạn cần phân biệt:
- atime: Cập nhật khi file được đọc.
- mtime: Cập nhật khi nội dung file thay đổi.
- ctime: Cập nhật khi metadata (như quyền sở hữu) thay đổi.
Hầu hết ứng dụng hiện đại như Nginx, MySQL hay Docker đều không cần atime. Tắt nó đi là cách nhanh nhất để “ăn gian” thêm băng thông cho ổ đĩa.
Thực hành tối ưu mount option noatime
Để biết các phân vùng đang chạy option gì, bạn hãy gõ lệnh:
mount | grep " / "
Nếu kết quả hiển thị relatime, hệ thống chỉ cập nhật atime nếu nó cũ hơn mtime. Dù đã cải tiến, nhưng chuyển hẳn sang noatime vẫn mang lại hiệu suất tốt hơn cho các hệ thống ghi dữ liệu liên tục.
Bước 1: Chỉnh sửa file /etc/fstab
Dùng quyền root để mở file cấu hình:
sudo vi /etc/fstab
Tại dòng mount phân vùng root (/) hoặc phân vùng chứa data, hãy thêm noatime vào cột tùy chọn:
# Cấu hình cũ:
UUID=xxx-yyy / ext4 defaults 1 1
# Cấu hình đã tối ưu:
UUID=xxx-yyy / ext4 defaults,noatime 1 1
Bước 2: Áp dụng thay đổi
Thay vì reboot, bạn có thể remount ngay lập tức để thấy kết quả:
sudo mount -o remount /
Xác nhận lại bằng lệnh mount | grep noatime. Nếu thấy từ khóa xuất hiện, bạn đã thành công.
Tối ưu toàn diện với công cụ tuned
Nếu noatime xử lý tầng file system, thì tuned sẽ can thiệp sâu hơn vào kernel. Đây là một daemon giúp tự động điều chỉnh thông số hệ thống dựa trên mục đích sử dụng cụ thể.
Cài đặt nhanh
Với các dòng RHEL (CentOS, Rocky, AlmaLinux):
sudo yum install tuned -y
sudo systemctl enable --now tuned
Với Ubuntu hoặc Debian:
sudo apt update && sudo apt install tuned -y
sudo systemctl enable --now tuned
Chọn Profile tối ưu nhất
Bạn có thể liệt kê các kịch bản cấu hình có sẵn bằng lệnh tuned-adm list. Dưới đây là những lựa chọn thực tế nhất:
- throughput-performance: Ưu tiên băng thông lớn, cực tốt cho các server xử lý file nặng.
- latency-performance: Giảm độ trễ phản hồi, lựa chọn số 1 cho Database hoặc Web Server.
- virtual-guest: Cấu hình chuẩn cho các máy ảo chạy trên KVM hoặc VMware.
Để kích hoạt profile cho Database, hãy chạy:
sudo tuned-adm profile latency-performance
Đo lường kết quả thực tế
Đừng chỉ tin vào lý thuyết, hãy dùng iostat để kiểm chứng. Trong dự án mình từng làm, việc kết hợp cả hai cách trên đã giúp giảm %iowait từ mức 25% xuống còn dưới 4% trong giờ cao điểm.
# Cài đặt sysstat để dùng iostat
sudo apt install sysstat -y
iostat -x 1 5
Bạn sẽ thấy hàng đợi ghi (avgqu-sz) giảm đáng kể, giúp ứng dụng xử lý mượt mà hơn hẳn.
Lưu ý nhỏ
Một số ít ứng dụng như Mail Server (Mutt) hoặc công cụ backup cũ có thể dựa vào atime để lọc file. Tuy nhiên, với 95% workload thông thường hiện nay, noatime hoàn toàn an toàn và không gây lỗi.
Với tuned, hãy thử nghiệm trên môi trường Staging trước. Profile throughput-performance đôi khi làm tăng mức tiêu thụ điện năng, vì vậy hãy cân nhắc nếu bạn đang tối ưu cho các thiết bị chạy pin hoặc server cần tiết kiệm điện.
Kết luận
Tối ưu I/O không nhất thiết phải nâng cấp ổ cứng SSD đắt tiền ngay lập tức. Chỉ cần 5 phút cấu hình noatime và tuned, bạn đã có thể giải phóng đáng kể năng lực xử lý cho server. Đây là những kỹ năng nền tảng mà mọi SysAdmin hay Developer đều nên nằm lòng để xử lý các sự cố về hiệu năng trong thực tế.

