文章目錄
- 什么是內核參數
- 參數種類
- 配置方式
- 1. 編譯內核時配置
- 2. 內核啟動時配置
- 3. 內核運行時配置
- 4. 加載內核模塊時配置
- 總結
什么是內核參數
內核參數是 Linux 系統中用于控制和調整內核行為的可配置選項。這些參數影響系統的性能、安全性和各種功能特性。
參數種類
大部分參數和某個子系統相關,需要在編譯或加載時加入子系統,而且相關硬件需要存在。
目錄 | 主要作用 | 典型參數示例 |
---|---|---|
abi/ | 應用程序二進制接口相關 | 較少直接調整,通常由系統自動管理 |
debug/ | 內核調試參數 | kernel.debug.exception-trace (控制是否記錄異常跟蹤信息) |
dev/ | 設備驅動相關 | dev.cdrom.autoeject (CDROM自動彈出控制,1=啟用,0=禁用) |
fs/ | 文件系統參數 | fs.file-max (系統最大文件句柄數) |
kernel/ | 通用內核行為 | kernel.shmmax (共享內存段最大尺寸,單位字節) |
net/ | 網絡協議棧參數 | net.ipv4.tcp_fin_timeout (TCP連接FIN_WAIT狀態超時時間) |
sunrpc/ | NFS/RPC 相關 | sunrpc.rpc_timeout (指定 RPC 請求的超時時間) |
user/ | 用戶空間限制 | user.max_user_namespaces (允許創建的最大用戶命名空間數量) |
vm/ | 虛擬內存管理 | vm.dirty_ratio (內存臟頁占比閾值,超過則同步寫入磁盤) |
配置方式
有下面幾種辦法向內核傳遞參數以控制其行為:
- 編譯內核時:修改內核 .config 文件,或直接修改內核源碼。
- 內核啟動時:通過命令行參數。
- 內核運行時:通過 /proc/sys/ 和 /sys/ 中的文件。
- 加載內核模塊時:通過 /etc/modprobe.d/ 中的 .conf 文件,或通過 insmod/modprobe 傳遞參數。
下面針對不同的內核參數配置方式,分別給出示例說明:
1. 編譯內核時配置
在編譯內核期間,可以借助內核配置文件或者直接修改內核源代碼來設置參數。
示例:設置 CONFIG_RCU_CPU_STALL_TIMEOUT 參數,該參數是內核的 RCU(Read-Copy Update)機制的超時參數,單位為秒。
操作步驟:
- 進入內核源碼目錄,
- 打開配置界面,可使用 make menuconfig 命令。
- 找到選項對應路徑:Kernel hacking >
RCU Debugging > (21) RCU CPU stall timeout in seconds - 對參數進行設置
- 保存配置后,執行編譯和安裝操作,即 make && make install
特點:這種配置方式會使參數成為內核的固定設置,一旦內核編譯完成,參數就無法再改變,除非重新編譯內核。
2. 內核啟動時配置
在內核啟動階段,可以通過修改引導加載程序(如 GRUB)的命令行參數來傳遞參數。
示例:調整 swappiness 參數,該參數用于控制內存與交換空間的使用傾向。
操作步驟:
- 打開 GRUB 配置文件,路徑為:/etc/default/grub
- 找到 GRUB_CMDLINE_LINUX 行,并添加參數,示例如下:GRUB_CMDLINE_LINUX=“swappiness=10”
- 更新 GRUB 配置,執行命令:update-grub
- 重啟系統使配置生效
特點:此方式設置的參數會在每次系統啟動時生效,不過若要修改參數,就需要重新編輯 GRUB 配置文件。
3. 內核運行時配置
在內核運行過程中,可以通過 /proc/sys/ 或 /sys/ 目錄下的文件來動態調整參數。
示例:修改 net.ipv4.tcp_tw_recycle 參數,該參數用于控制 TCP TIME_WAIT 狀態的處理。
臨時修改(重啟后失效):
- 直接執行命令:echo 1 > /proc/sys/net/ipv4/tcp_tw_recycle
永久修改:
- 編輯 sysctl 配置文件,路徑為:/etc/sysctl.conf
- 添加或修改相應行:net.ipv4.tcp_tw_recycle = 1
- 使配置立即生效,執行命令:sysctl -p
特點:這種配置方式靈活方便,無需重啟系統即可生效,但臨時修改的參數在系統重啟后會恢復默認值。
4. 加載內核模塊時配置
在加載內核模塊時,可以通過配置文件或命令行參數來傳遞參數。
示例:設置 loop 模塊的最大設備數。
通過配置文件設置:
- 創建或編輯模塊配置文件,路徑為:/etc/modprobe.d/loop.conf
- 添加內容:options loop max_loop=64
- 重新加載模塊,執行命令:modprobe -r loop && modprobe loop
通過命令行設置:
- 執行命令:modprobe loop max_loop=64
特點:這種配置方式只對特定的內核模塊有效,并且需要確保模塊加載時參數能夠正確傳遞。
總結
配置方式 | 生效時間 | 持久性 | 適用場景 |
---|---|---|---|
編譯內核 | 內核編譯時 | 永久(除非重新編譯) | 需要深度定制內核功能的場景 |
啟動參數 | 系統啟動時 | 永久(需修改 GRUB 配置) | 系統啟動相關參數的設置 |
/proc/sys | 即時生效 | 臨時(可通過 sysctl.conf 永久化) | 需要動態調整參數的場景 |
模塊配置 | 模塊加載時 | 永久(通過配置文件) | 特定內核模塊參數的設置 |