現代 Linux 內核採用模塊化設計:核心功能編譯為內置模塊(built-in,隨內核啟動加載),擴展功能編譯為可加載模塊(LKM,運行時動態加載)。本文詳細講解如何枚舉內置模塊、查看其參數與當前值、並進行運行時調優,助您精細掌控內核行為。
| 特性 | 內置模塊 | 可加載模塊 (LKM) |
|---|---|---|
| 加載時機 | 內核啟動階段,不可卸載 | 運行時按需加載/卸載 |
| 管理命令 | 無專用命令,通過 /sys、/proc 交互 | modprobe, insmod, rmmod, lsmod, modinfo |
| 參數傳遞 | 內核命令行 module.param=value 或 /sys/module/ | 模塊加載時 modprobe module param=value 或 /sys/module/ |
| 典型例子 | ext4, xfs, tcp_cubic, usbcore | nvidia, vboxdrv, 特定網卡/聲卡驅動 |
modules.builtin(推薦,標準、完整)cat /lib/modules/$(uname -r)/modules.builtin
# 輸出示例:
# kernel/fs/ext4/ext4.ko
# kernel/net/ipv4/tcp_cubic.ko
# kernel/drivers/usb/core/usbcore.ko
每行對應一個 .ko 文件相對路徑,模塊名為文件名去擴展名(如 tcp_cubic)。
/sys/module/ 目錄(直觀、含參數目錄)ls /sys/module/ | grep -v '^$'
# 顯示所有已加載模塊(含內置與 LKM)目錄名
# 內置模塊目錄下通常無 initstate 文件,或 initstate 為 "live"
dmesg -T | grep -i 'built-in'
# 或
journalctl -k | grep -i 'module.*built-in'
所有模塊(內置+LKM)在 /sys/module/ 暴露參數文件,每個文件對應一個參數,內容為當前值。
ls /sys/module/tcp_cubic/parameters/
# 輸出:tcp_friendliness tcp_window_scaling ...
cat /sys/module/tcp_cubic/parameters/tcp_friendliness
# 輸出:1 (默認啟用 TCP Friendliness)
for p in /sys/module/tcp_cubic/parameters/*; do
echo "$(basename $p): $(cat $p)"
done
# 關閉 TCP Cubic Friendliness(某些高延遲鏈路可能提升吞吐)
echo 0 > /sys/module/tcp_cubic/parameters/tcp_friendliness
# 驗證
cat /sys/module/tcp_cubic/parameters/tcp_friendliness
# 0
注意:並非所有參數均可寫入,只讀參數會報 Permission denied 或 Invalid argument。
# 編輯 /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="quiet tcp_cubic.tcp_friendliness=0"
# 更新 grub 並重啟
grub2-mkconfig -o /boot/grub2/grub.cfg # RHEL系
update-grub # Debian系
reboot
# /etc/modprobe.d/tcp_cubic.conf
options tcp_cubic tcp_friendliness=0
# 僅在模塊為 LKM 時生效
# /etc/rc.local 或 systemd 服務
echo 0 > /sys/module/tcp_cubic/parameters/tcp_friendliness
| 子系統/模塊 | 關鍵參數 | 推薦值/場景 | 說明 |
|---|---|---|---|
| TCP 拥塞控制 (tcp_cubic) | tcp_friendliness | 0 (高延遲/高帶寬長肥網絡) | 關閉後 Cubic 更激進佔用帶寬,可能不公平 |
| 虛擬內存 (vm) | swappiness | 10 (数据库/緩存服務器) / 60 (桌面默認) | 降低 swap 激進度,保護熱頁面 |
| 虛擬內存 (vm) | vfs_cache_pressure | 50 (文件服務器) / 100 (默認) | 降低對目錄項/索引節點緩存的回收傾向 |
| 網絡栈 (net.core) | net.core.somaxconn | 4096 (高併發 Web) | listen() 佇列長度,防連接丟包 |
| 網絡栈 (net.ipv4) | net.ipv4.tcp_tw_reuse | 1 (高併發短連接) | 安全復用 TIME_WAIT 端口 |
| 文件系統 (ext4) | ext4.fsync_mode | 0 (性能優先) / 1 (數據安全) | 控制 fsync() 行為 |
| CPU 調度 (kernel.sched) | sched_min_granularity_ns | 10000000 (低延遲互動) | 調度最小時間顆粒度 |
/etc/default/grub 或 /etc/sysctl.d/99-custom.conf。reboot 或 sysctl --system。cat /proc/cmdline 確認內核命令行參數cat /sys/module/tcp_cubic/parameters/tcp_friendliness 確認運行時值sysctl net.ipv4.tcp_tw_reuse 確認 sysctl 參數iperf3, wrk, fio 等工具量化效果。


cat /lib/modules/$(uname -r)/modules.builtin。/sys/module//parameters/ 。掌握內置模塊參數視窗,將內核從「黑盒」轉化為可觀測、可調優、可交付的基礎設施組件。
CentOS 6.5 安裝無線網卡驅動 (Realtek RTL8188CE) 完整編譯教學
Ubuntu 11.10 安装后卡在 Logo 画面:删除 xorg.conf 并更新 NVIDIA 驱动解决
Linux Crontab 定時任務實戰指南:從語法解析到生產級部署規範
Linux 檔案預設權限與隱藏權限深度解析:umask、ACL 與特殊位元完整指南
CentOS 5.4 新增/移除軟體報錯?製作本地 ISO YUM 源完美解決
C 語言指標操作導致 Segmentation fault?正確分配記憶體避免非法存取