Linux kernel parameter command line設置


現在CPU2核以上比較普遍了,平時用linux上上網可能用不着雙核甚至4核,大部分發行版內核都啟用了CPU_HOTPLUG,到/sys/devices/system/cpu下可以看到文件夾cpu0、cpu1,除cpu0(這個不能關)每個文件夾下都有一個online文件,往里面寫0就可以關閉核心,比如我的T7300,echo '0' >/sys/devices/system/cpu/cpu1/online 就可以關閉第二個核,不影響小型應用。要開啟,往里面echo 1就行。這個操作好像要root完成,光有root權限還不夠,必須先su而不能sudo,我這里是這樣。然后你的主辦支持甚至可以把關掉的CPU拆下來!當然一般桌面用戶不會在幾台機器間動態遷移CPU玩……
在啟動grub參數kernel(grub1)或linux(2)后面加上maxcpus=N,就會啟動前N個核心。
這樣子就有幾個用處:1、關閉至1個或2個核,可以節約用電。 2、關閉所有奇數核,相當於禁用超線程

但還有幾個問題求解:1、關閉核心后,耗電是下來了,為什么電腦溫度沒什么變化呢? 2、如果是關閉后再開啟核心,cpufreq就會失效,/sys/devices/system/cpu/cpuN/cpufreq/ 這個目錄也會消失,只能以最高頻率跑,卸載再重載acpi-cpufreq也沒有用,求解如何調節CPU頻率,謝謝!

-----------------------------------------------------------------------------------------------------------------------------

在Linux中,給kernel傳遞參數以控制其行為總共有三種方法:

1.build kernel之時的各個configuration選項。

2.當kernel啟動之時,可以參數在kernel被GRUB或LILO等啟動程序調用之時傳遞給kernel。

3.在kernel運行時,修改/proc或/sys目錄下的文件。

這里我簡單講的就是第二種方式了,kernel在grub中配置的啟動參數。

首先,kernel有哪些參數呢? 在linux的源代碼中,有這樣的一個文檔Documentation/kernel-parameters.txt,它介紹了kernel的各個參數及其意義。

其次,kernel啟動參數以空格分隔,而且是嚴格區分大小寫的(如:mem和MEM是不一樣的)。

再次,對於module特有的kernel參數寫法是這樣的,[module name].[parameter=XX],例如,igb.max_vfs=7這個kernel啟動參數的效果就是相當於這樣來動態加載module: modprobe igb max_vfs=7

另外,kernel是怎樣處理這些啟動參數的呢? 啟動參數通常是這樣的形式: name[=value_1][,value_2]…[,value_10]

“name”是關鍵字,內核用它來識別應該把”關鍵字”后面的值傳遞給誰,也就是如何處理這個值,是傳遞給處理進程還是作為環境變量或者拋給”init”。值的個數限制為10,你可以通過再次使用該關鍵字使用超過10個的參數。 首先,kernel檢查關鍵字是不是 ‘root=’, ‘nfsroot=’, ‘nfsaddrs=’, ‘ro’, ‘rw’, ‘debug’或’init’,然后內核在bootsetups數組里搜索於該關鍵字相關聯的已注冊的處理函數,如果找到相關的已注冊的處理函數,則調用這些函數並把關鍵字后面的值作為參數傳遞給這些函數。比如,你在啟動時設置參數name=a,b,c,d,內核搜索bootsetups數組,如果發現”name”已注冊,則調用”name”的設置函數如name_setup(),並把a,b,c,d傳遞給name_setup()執行。 所有型如”name=value”參數,如果沒有被上面所述的設置函數接收,將被解釋為系統啟動后的環境變量,比如”TERM=vt100″啟動參數就會被作為一個啟動后的環境變量。所有沒有被內核設置函數接收也沒又被設置成環境變量的參數都將留給init進程處理,比如”single”。

下面簡單總結一下我在工作中常用到的一些kernel啟動參數吧。

根磁盤相關啟動參數:

root #指出啟動的根文件系統 如:root=/dev/sda1

ro #指定根設備在啟動過程中為read-only,默認情況下一般都是這樣配的

rw #和ro類似,它是規定為read-write,可寫

rootfstype #根文件系統類型,如:rootfstype=ext4

Console和kernel log相關啟動參數:

console #console的設備和選項,如:console=tty0 console=ttyS0

debug #enable kernel debugging 啟動中的所有debug信息都會打印到console上

quiet #disable all log messages 將kernel log level設置為KERN_WARNING,在啟動中只非常嚴重的信息

loglevel #設置默認的console日志級別,如:loglevel=7 (0~7的數字分別為:KERN_EMERG,..,KERN_DEBUG)

time #設置在每條kernel log信息前加一個時間戳

內存相關的啟動參數:

mem #指定kernel使用的內存量,mem=n[KMG]

hugepages #設置大頁表頁(4MB大小)的最多個數,hugepages=n

CPU相關的啟動參數:

mce # Enable the machine check exception feature.

nosmp #Run as a single-processor machine. 不使用SMP(多處理器)

max_cpus #max_cpus=n, SMP系統最多能使用的CPU個數(即使系統中有大於n個的CPU)

Ramdisk相關的啟動參數:

initrd #指定初始化ramdisk的位置,initrd=filename

noinitrd #不使用initrd的配置,即使配置了initrd參數

初始化相關啟動參數:

init #在啟動時去執行的程序,init=filename,默認值為/sbin/init

PCI相關的啟動參數:

pci #pci相關的選項,我常使用pci=assign_buses,也使用過pci=nomsi

SELinux相關啟動參數:

enforcing #SELinux enforcing狀態的開關,enforcing=0表示僅僅是記錄危險而不是阻止訪問,enforcing=1完全enable,默認值是0

selinux #在啟動時關閉或開啟SELinux,selinux=0表示關閉,selinux=1表示開啟selinux

另外,還是用max_loop來指定最多可使用的回路設備。

在Redhat的系統中,還有個經常看到的kernel啟動參數——rhgb,rhgb表示redhat graphics boot,就是會看到圖片來代替啟動過程中顯示的文本信息,這些信息在啟動后用dmesg也可以看到
rhgb = redhat graphical boot – This is a GUI mode booting screen with most of the information hidden while the user sees a rotating activity icon spining and brief information as to what the computer is doing.

quiet = hides the majority of boot messages before rhgb starts. These are supposed to make the common user more comfortable. They get alarmed about seeing the kernel and initializing messages, so they hide them for their comfort.

參考資料:

linux kernel documents

《Linux kernel in a nutshell》

-------------------------------------------------------------------------------------------------------------------------------

kernel /vmlinuz-2.6.18-164.el5 ro root=/dev/VolGroup00/LogVol00 rhgb quiet maxcpus=4 mem=1024M initrd /initrd-2.6.18-164.el5.img

 

則reboot后啟動的核數為4 (

nosmp 和 maxcpus=N

僅當定義了 __SMP__,該選項才可用。可以用來禁用多CPU或者指明最多支持的CPU個數。

),mem為1024M

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM