Cấu hình tối ưu I/O cho Ubuntu 24.04 và chuẩn bị phần cứng
Điều chỉnh Kernel cho hiệu năng NVMe
Seastar yêu cầu quyền truy cập trực tiếp vào thiết bị disk để đạt hiệu năng I/O cực cao, tránh overhead của kernel I/O scheduler. Chúng ta cần tắt I/O scheduler và giảm thiểu buffer cache không cần thiết.
Chạy lệnh sau để áp dụng cấu hình cho thiết bị NVMe (thay thế nvme0n1 bằng tên thiết bị thực tế của bạn):
echo none | sudo tee /sys/block/nvme0n1/queue/scheduler
Kết quả mong đợi: Dòng chữ "none" xuất hiện, nghĩa là scheduler đã bị tắt, kernel sẽ chuyển sang chế độ "none" (direct submission).
Tiếp theo, giảm bộ nhớ dành cho page cache để ưu tiên RAM cho data của Seastar, tránh tình trạng OOM Killer can thiệp khi load dữ liệu lớn.
sudo sysctl -w vm.vfs_cache_pressure=50
Kết quả mong đợi: Thông báo "vm.vfs_cache_pressure = 50".
Để cấu hình này tồn tại sau khi reboot, ta cần tạo file config trong thư mục sysctl.d.
Đường dẫn file: /etc/sysctl.d/99-seastar-optimization.conf
cat > /etc/sysctl.d/99-seastar-optimization.conf
Kết quả mong đợi: File được tạo thành công, không có lỗi gì.
Áp dụng ngay các thay đổi trong file config vừa tạo:
sudo sysctl --system
Kết quả mong đợi: Thông báo "Success" hoặc danh sách các tham số đã được cập nhật.
Kiểm tra phiên bản Kernel và Driver NVMe
Seastar hoạt động tốt nhất trên kernel Linux mới (>= 5.15) để hỗ trợ đầy đủ các tính năng của NVMe 2.0 và IO_uring.
uname -r && modinfo nvme | grep version
Kết quả mong đợi: Phiên bản kernel (ví dụ: 6.8.0-generic) và phiên bản driver nvme (ví dụ: version: 1.7.0). Nếu kernel quá cũ, cần upgrade ngay.
Kiểm tra xem driver nvme có được load đúng hay không:
lsmod | grep nvme
Kết quả mong đợi: Dòng chữ "nvme" hoặc "nvme_core" xuất hiện với kích thước module lớn hơn 0.
Cài đặt công cụ xây dựng và môi trường phát triển
Cài đặt các gói phụ thuộc (Dependencies)
Seastar yêu cầu bộ công cụ build hiện đại: CMake 3.22+, Ninja build system, và trình biên dịch C++ hỗ trợ chuẩn C++20 (GCC 12+ hoặc Clang 14+).
Trước tiên, cập nhật nguồn gói và cài đặt các công cụ cơ bản:
sudo apt update && sudo apt install -y build-essential git curl wget ninja-build cmake pkg-config libboost-all-dev
Kết quả mong đợi: Quá trình cài đặt hoàn tất, không có lỗi dependency.
Cài đặt trình biên dịch GCC 12 (bản mặc định của Ubuntu 24.04 thường là GCC 13, nhưng cần kiểm tra để chắc chắn hỗ trợ C++20):
sudo apt install -y g++-12
Kết quả mong đợi: Gói g++-12 được cài đặt thành công.
Cài đặt các thư viện cần thiết cho Seastar: fmt, abseil, và các thư viện hệ thống khác:
sudo apt install -y libfmt-dev libabsl-dev libssl-dev libnuma-dev libibverbs-dev rdma-core
Kết quả mong đợi: Các thư viện fmt, abseil, openssl, numa và rdma được cài đặt.
Cấu hình biến môi trường cho Build System
Để đảm bảo hệ thống luôn sử dụng trình biên dịch và công cụ đúng phiên bản, ta cần thiết lập biến môi trường trong shell profile.
Đường dẫn file: ~/.bashrc (hoặc ~/.zshrc nếu dùng zsh)
Sửa file ~/.bashrc và thêm các dòng sau vào cuối file:
cat >> ~/.bashrc
Kết quả mong đợi: Nội dung được ghi vào file ~/.bashrc.
Áp dụng ngay các biến môi trường vừa tạo:
source ~/.bashrc
Kết quả mong đợi: Shell reload, không có lỗi.
Verify kết quả cài đặt
Chạy các lệnh kiểm tra phiên bản để đảm bảo mọi thứ đã sẵn sàng cho bước build source code:
g++-12 --version | head -n 1 && cmake --version | head -n 1 && ninja --version
Kết quả mong đợi: Xuất hiện phiên bản GCC (12.x.x), CMake (3.x.x) và Ninja (1.x.x).
Kiểm tra biến môi trường đã được set đúng chưa:
echo $CXX && echo $CXXFLAGS
Kết quả mong đợi: Dòng đầu là "g++-12", dòng hai là "-std=c++20 -O3 -march=native".
Điều hướng series:
Mục lục: Series: Triển khai Database Log-Structured với Seastar trên Ubuntu 24.04
Phần 2: Xây dựng và cài đặt framework Seastar từ source code »