Tối ưu Kernel Linux: Cách tự ‘may đo’ và đóng gói .deb cho Ubuntu và Debian

Linux tutorial - IT technology blog
Linux tutorial - IT technology blog

Kernel mặc định: Khi sự đa năng trở thành gánh nặng

Bạn có bao giờ thắc mắc tại sao một con VPS cấu hình khiêm tốn (1 vCPU, 2GB RAM) chạy Ubuntu 22.04 lại ì ạch dù chưa cài gì nhiều? Mình từng gặp tình trạng này khi triển khai ứng dụng yêu cầu độ trễ cực thấp (low-latency). Kernel mặc định của Ubuntu rất tốt vì nó “nhận” mọi phần cứng, từ máy in cổ lỗ sĩ đến card đồ họa đời mới nhất. Tuy nhiên, chính sự bao quát này lại tạo ra độ trễ không đáng có.

Mỗi lần khởi động, hệ thống phải nạp hàng tá module thừa thãi. Bạn có thực sự cần driver webcam, card wifi lạ hoắc hay hỗ trợ file system ReiserFS trên một con server chạy web? Chắc chắn là không. Những module này không chỉ chiếm dụng RAM mà còn khiến CPU tốn tài nguyên xử lý các ngắt (interrupt) không cần thiết.

Tại sao bạn nên tự build Kernel thay vì dùng bản Generic?

Các bản phân phối như Debian hay Ubuntu ưu tiên tính tương thích “cài là chạy”. Do đó, Kernel của họ luôn ở dạng Generic.

Hãy tưởng tượng bạn quản lý server production chỉ chạy Nginx và MySQL. Việc giữ lại driver tay cầm Xbox hay Bluetooth là một sự lãng phí tài nguyên rõ rệt. Loại bỏ chúng không chỉ giúp hệ thống nhẹ hơn mà còn thu hẹp diện tấn công (attack surface), hạn chế lỗ hổng bảo mật từ các module cũ ít người dùng.

Ngoài ra, tự biên dịch cho phép bạn tối ưu hóa riêng cho dòng CPU đang dùng, như AMD EPYC hoặc Intel Xeon thế hệ mới. Điều này giúp tận dụng các tập lệnh đặc thù mà Kernel chung thường bỏ qua.

3 lựa chọn phổ biến khi muốn nâng cấp Kernel

Khi cần tối ưu hiệu suất, anh em kỹ thuật thường cân nhắc ba hướng đi sau:

  • Kernel bên thứ ba (XanMod, Liquorix): Cài đặt nhanh, hiệu suất cải thiện rõ rệt nhưng bạn phải phụ thuộc vào cấu hình của người khác.
  • Kernel mainline từ PPA: Bản build sẵn từ kernel.org cho Ubuntu. Ưu điểm là mới, nhưng vẫn còn quá nhiều module thừa.
  • Tự biên dịch từ mã nguồn: Con đường này tốn thời gian nhất nhưng mang lại kết quả mỹ mãn nhất. Bạn toàn quyền quyết định hệ thống sẽ giữ lại những gì.

Quy trình “may đo” Kernel và đóng gói .deb chuyên nghiệp

Trong một dự án thực tế, mình đã thử tinh chỉnh Kernel cho server 4GB RAM. Kết quả là giảm được khoảng 180MB RAM chạy ngầm và thời gian boot rút ngắn 5 giây. Dưới đây là cách mình thực hiện để tạo ra file .deb, giúp việc triển khai lên nhiều server cùng cấu hình trở nên cực kỳ đơn giản.

Bước 1: Chuẩn bị bộ công cụ biên dịch

Đầu tiên, hãy cài đặt các thư viện hỗ trợ. Quá trình này sẽ chiếm khoảng 500MB dung lượng đĩa.

sudo apt update
sudo apt install build-essential libncurses-dev bison flex libssl-dev libelf-dev -y
sudo apt install xz-utils wget curl bc -y

Bước 2: Tải mã nguồn Kernel chính chủ

Truy cập kernel.org để lấy link bản Stable mới nhất. Ở đây mình chọn bản 6.6.x.

mkdir ~/kernel-build && cd ~/kernel-build
wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.6.15.tar.xz
tar -xvf linux-6.6.15.tar.xz
cd linux-6.6.15

Bước 3: Tinh chỉnh cấu hình – Loại bỏ “mỡ thừa”

Đừng dại dột chọn từng tính năng từ đầu vì Kernel có hàng ngàn tùy chọn. Cách thông minh nhất là kế thừa cấu hình hiện tại của Ubuntu rồi mới gọt giũa.

cp /boot/config-$(uname -r) .config
make menuconfig

Trong giao diện menuconfig, hãy tập trung vào các mục sau:

  • Processor type and features: Chọn đúng dòng CPU của bạn (ví dụ: Core i7, AMD Zen 3) thay vì để Generic.
  • Device Drivers: Tắt sạch Wireless, Sound card, hay Multimedia support nếu đây là server đặt tại datacenter.
  • File systems: Nếu chỉ dùng ext4, hãy tắt Btrfs, XFS hoặc NTFS để Kernel tinh gọn hơn.

Mẹo nhỏ: Với Ubuntu, hãy tìm mục CONFIG_SYSTEM_TRUSTED_KEYS và để trống giá trị của nó. Nếu không, quá trình build sẽ thất bại do lỗi chứng chỉ số.

Bước 4: Biên dịch và đóng gói tự động

Thay vì dùng lệnh make install thủ công, mình khuyên dùng bindeb-pkg. Lệnh này sẽ tạo ra các file .deb giúp bạn quản lý, gỡ cài đặt hoặc copy sang máy khác cực kỳ sạch sẽ.

Để tiết kiệm thời gian, hãy tận dụng toàn bộ sức mạnh của CPU:

make -j$(nproc) bindeb-pkg

Thời gian chờ đợi thường mất từ 20 đến 60 phút. Đây là lúc thích hợp để bạn nghỉ ngơi hoặc xử lý việc khác.

Bước 5: Cài đặt và kiểm tra thành quả

Sau khi hoàn tất, các file cài đặt sẽ xuất hiện ở thư mục ~/kernel-build. Bạn chỉ cần cài hai file quan trọng nhất:

cd ..
sudo dpkg -i linux-image-6.6.15*.deb linux-headers-6.6.15*.deb
sudo update-grub
sudo reboot

Sau khi khởi động lại, hãy gõ uname -a. Nếu phiên bản mới hiện ra, bạn đã chính thức làm chủ “trái tim” của hệ thống.

Bài học rút ra sau nhiều lần “ăn hành”

Biên dịch Kernel không phải việc làm hàng ngày, nhưng nó giúp bạn hiểu sâu về cách Linux vận hành. Một hệ thống được tối ưu tốt sẽ hoạt động ổn định và phản hồi nhanh hơn hẳn cấu hình mặc định.

Lưu ý cuối cùng: Luôn giữ lại một bản Kernel cũ trong menu Grub. Nếu bản mới bị lỗi Kernel Panic, bạn vẫn có đường lui để vào hệ thống sửa lỗi. Đừng vội xóa Kernel mặc định cho đến khi bản mới chạy ổn định ít nhất một tuần.

Share: