萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 作業系統 >  >> Linux 教學

Linux 內建模組查詢指南:列出模組、檢視參數與調優內核行為

現代 Linux 核心採模組化設計:核心功能編譯為內建模組(static built-in),隨核心啟動載入;硬體驅動、檔案系統等編譯為可載入模組(LKM),由 modprobe/insmod 動態管理。內建模組不受 lsmod/modinfo 控制,查詢方式截然不同。本文教你列出內建模組、檢視參數與當前值、調整參數,並說明為何要關心它們。

Linux 內建模組查詢

內建模組列表

模組參數值

一、列出所有內建模組

方法 1:核心安裝清單(最準確)

cat /lib/modules/$(uname -r)/modules.builtin

此檔案由核心編譯時產生,包含所有 CONFIG_*=y 的模組路徑(如 kernel/mm/slub.ko 實為內建)。

方法 2:/sys 檔系統(運行時可見)

ls /sys/module/ | while read mod; do
  [[ -d /sys/module/$mod ]] && echo "$mod"
done

/sys/module 下同時包含內建與已載入 LKM,無法直接區分,需搭配 modules.builtin 交叉比對。

二、檢視內建模組參數與當前值

modinfo 僅支援 LKM,對內建模組回報 ERROR: Module not found。正解:/sys/module/<模組名>/parameters/

步驟

  1. 確認模組目錄存在:ls /sys/module/tcp_cubic/
  2. 列出參數:ls /sys/module/tcp_cubic/parameters/
  3. 讀取單一參數值:cat /sys/module/tcp_cubic/parameters/tcp_friendliness
  4. 批次讀取:for f in /sys/module/tcp_cubic/parameters/*; do echo "$f: $(cat $f)"; done

常見可調參數範例

模組參數預設值說明
tcp_cubictcp_friendliness1CUBIC 對 TCP Reno 友善模式(0=關閉,激進搶佔頻寬)
ext4commit_interval5資料同步間隔(秒),調大提升效能但增加掉電遺失風險
scsi_modmax_luns512最大 LUN 數,大型存儲陣列需調大
usbcoreautosuspend2USB 自動暫停延遲(秒),筆電省電關鍵

三、修改內建模組參數(永久生效)

內建模組參數無法用 modprobe 參數=值 載入時指定,必須透過核心啟動參數或 sysfs 執行時修改。

方法 1:核心啟動參數(GRUB)

# /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="quiet tcp_cubic.tcp_friendliness=0"
# 更新 GRUB
grub-mkconfig -o /boot/grub/grub.cfg

格式:模組名.參數名=值,重啟生效。

方法 2:/etc/sysctl.d/(僅限核心子系統支援 sysctl 的參數)

網路子系統大多支援:

# /etc/sysctl.d/99-tcp-tuning.conf
net.ipv4.tcp_congestion_control = bbr
net.ipv4.tcp_fastopen = 3
net.core.default_qdisc = fq

套用:sysctl --system。

方法 3:臨時修改(重啟失效)

echo 0 > /sys/module/tcp_cubic/parameters/tcp_friendliness
# 需 root 權限,參數檔案需可寫(部分參數為只讀)

四、為什麼要關心內建模組?

  • 效能調優: TCP 擁塞控制(cubic/bbr)、I/O 排程器(mq-deadline/bfq)、檔案系統提交間隔。
  • 硬體相容: 強制啟用/禁用特定驅動功能(如 i915.enable_psr=0 修復螢幕閃爍)。
  • 安全強化: 禁用稀有檔案系統(cramfs、freevxfs)、限制 USB 載入、啟用核心頁面表隔離(KPTI)。
  • 除錯追蹤: 開啟動態除錯(dyndbg)、ftrace 事件。

五、腳本:一鍵生成「模組-參數-當前值」報表

#!/bin/bash
# list_builtin_params.sh
builtin_list="/lib/modules/$(uname -r)/modules.builtin"
[[ -f $builtin_list ]] || { echo "Not found: $builtin_list"; exit 1; }

while read -r modpath; do
  modname="${modpath##*/}"
  modname="${modname%.ko}"
  param_dir="/sys/module/$modname/parameters"
  [[ -d $param_dir ]] || continue
  echo "=== $modname ==="
  for p in "$param_dir"/*; do
    [[ -r $p ]] && printf "  %s = %s\n" "${p##*/}" "$(cat "$p" 2>/dev/null || echo '')"
  done
done < "$builtin_list"

結語

內建模組雖隱於核心內部,卻掌控著系統核心行為。善用 modules.builtin 列出清單、/sys/module/*/parameters/ 檢視參數、GRUB/sysctl.d 永久調優,能讓你在效能調校、硬體相容、安全強化上擁有核心級控制力。下次遇到「為什麼這參數改不生效?」時,請先確認它是內建還是可載入模組——這就是關鍵分水嶺。

copyright © 萬盛學電腦網 all rights reserved