Devyn的Linux內(nèi)核專題:配置PCI和ACPI
歡迎來(lái)到下一篇關(guān)于內(nèi)核配置文章!還有大量的選項(xiàng)需要配置。這篇文章將主要討論P(yáng)CI和ACPI。
這里我們可以啟用由ACPI控制的擴(kuò)展塢和可移動(dòng)驅(qū)動(dòng)器槽的支持(Dock)。記住,ACPI(Advanced Configuration and Power Management Interface)是一個(gè)電源管理系統(tǒng)。擴(kuò)展塢是一種其他的設(shè)備通過(guò)額外的接口插入的設(shè)備。擴(kuò)展塢可以容納許多不同的端口和連接器。一個(gè)ACPI控制的擴(kuò)展塢是指其電源管理是通過(guò)ACPI進(jìn)行的。驅(qū)動(dòng)器槽是一套可以增加硬盤的設(shè)備,這也可以由ACPI管理。
下面,我們?cè)试SACPI用來(lái)管理空閑的CPU(Processor)。這會(huì)讓處理器在空閑時(shí)進(jìn)入ACPI C2或者C3狀態(tài)。這可以節(jié)省電源并降低CPU芯片的溫度。處理器只在100%沒有占用時(shí)才進(jìn)入空閑狀態(tài)。沒有程序必須請(qǐng)求一個(gè)特定時(shí)間的CPU資源。
CPU電源有四個(gè)狀態(tài) - C0、C1、C2和C3。C0是操作激活狀態(tài)。C1(Halt)是一個(gè)不執(zhí)行指令激活狀態(tài),但是可以立刻執(zhí)行指令。C2(Stop-Clock)是一種斷電狀態(tài)。C3(Sleep)是一種比C2更徹底的斷電狀態(tài)。在C3狀態(tài)中,現(xiàn)在緩存不再被同步或者管理,直到CPU離開這個(gè)狀態(tài)。第五個(gè)狀態(tài)稱作C1E(Enhanced Halt State),他擁有低功耗。
如果啟用了IPMI驅(qū)動(dòng),那么ACPI可以訪問BMC控制器(IPMI)。基板管理控制器(BMC)是一種管理軟件和硬件間連接的微控制器。智能平臺(tái)管理接口(IPMI)是一種框架,通過(guò)直接的硬件層面而不是登錄shell或者操作系統(tǒng)層面來(lái)管理計(jì)算機(jī)。
ACPI v4.0進(jìn)程聚合器允許內(nèi)核應(yīng)用一個(gè)CPU配置到所有系統(tǒng)中的處理器中(Processor Aggregator)。截止到ACPI v4.0,只有idle狀態(tài)可以用這個(gè)方式配置。
接下來(lái),可以啟用ACPI熱區(qū)(Thermal Zone)。多數(shù)硬件支持這個(gè)特性。這允許風(fēng)扇的電源由ACPI管理。
如果啟用這個(gè)選項(xiàng),自定義DSDT可以鏈接到內(nèi)核。在這個(gè)設(shè)置中,開發(fā)者必須在文件中包含完整的路徑名。系統(tǒng)差異表(DSDT)是一個(gè)包含了系統(tǒng)支持的電源事件信息的文件。它不需要輸入路徑名,這些表存在于固件中。內(nèi)核會(huì)幫你處理這些。這個(gè)主要的目的是用于如果開發(fā)者需要使用不同于設(shè)備內(nèi)置的表時(shí)用到。
任意ACPI表都可以通過(guò)initrd來(lái)覆蓋(ACPI tables override via initrd)。ACPI表是指示如何控制并與硬件交互的基礎(chǔ)規(guī)則和指令。
像內(nèi)核的其他部分一樣,ACPI系統(tǒng)也可以生成調(diào)試信息(Debug Statements)。像其他調(diào)試特性一樣,你或許希望禁用它并省下50KB。
啟用下面的特性會(huì)為系統(tǒng)檢測(cè)到的每個(gè)PCI插槽(PCI slot detection driver)創(chuàng)建文件(/sys/bus/pci/slots/)。一個(gè)PCI插槽是在PCI主板上的一個(gè)端口,它允許用戶接上其他的PC設(shè)備。PCI是主板的一種類型。PCI是指組件互相通信的方式。有些應(yīng)用程序可能需要這些文件。
電源管理定時(shí)器是另外一種電源管理系統(tǒng)(Power Management Timer Support)。這是許多系統(tǒng)追蹤時(shí)間的方式。這個(gè)只需要很少的能源。處理器的空閑、電壓/頻率調(diào)節(jié)和節(jié)流都不會(huì)影響這個(gè)定時(shí)器。大量的系統(tǒng)需要使用這個(gè)特性。
下面,可以啟用ACPI模塊和容器設(shè)備驅(qū)動(dòng)(Container and Module Devices)。這會(huì)啟用處理器、內(nèi)存和節(jié)點(diǎn)的熱插拔支持。它需要NUMA系統(tǒng)。
下面的驅(qū)動(dòng)提供對(duì)ACPI內(nèi)存的熱插拔支持(Memory Hotplug)。有些設(shè)備甚至啟用這個(gè)驅(qū)動(dòng)也不支持熱插拔。如果驅(qū)動(dòng)以模塊形式加入,那么模塊將會(huì)被acpi_memhotplug調(diào)用。
注意:對(duì)于內(nèi)核某個(gè)特定的功能,硬件、BIOS和固件在必須支持時(shí)會(huì)有問題。有些系統(tǒng)的BIOS是不控制硬件的。這種類型的BIOS通常不會(huì)限制特性。如果內(nèi)核確實(shí)有一個(gè)特定的功能,硬件必須有能力完成這樣的任務(wù)。
智能電源管理驅(qū)動(dòng)提供訪問電池的狀態(tài)和信息(Smart Battery System)。
下面,我們有一個(gè)"Hardware Error Device"驅(qū)動(dòng)。設(shè)備通過(guò)SCI報(bào)告硬件錯(cuò)誤。通常上,大多數(shù)的錯(cuò)誤會(huì)是已糾正的錯(cuò)誤。
下面的是ACPI調(diào)試特性(Allow ACPI methods to be inserted/replaced at run time)。這允許ACPI AML方式不通過(guò)重啟系統(tǒng)管理。 AML代表的是ACPI機(jī)器語(yǔ)言(ACPI Machine Language)。AML代碼可以通過(guò)請(qǐng)求重啟來(lái)改變和測(cè)試。
APEI是ACPI的錯(cuò)誤接口(ACPI Platform Error Interface (APEI))。APEI從芯片給操作系統(tǒng)報(bào)告錯(cuò)誤。這個(gè)錯(cuò)誤接口同樣提供錯(cuò)誤注射的能力。
當(dāng)"SFI (Simple Firmware Interface) Support" 啟用后,硬件固件可以發(fā)送消息給操作系統(tǒng)。固件與操作系統(tǒng)間的通信通過(guò)內(nèi)存中的靜態(tài)表。SFI-only的計(jì)算機(jī)的內(nèi)核工作需要這個(gè)特性。
想要改變處理器的時(shí)鐘速度和運(yùn)行時(shí),就啟用這個(gè)特性(CPU Frequency scaling)。CPU頻率調(diào)整意味著改變處理器的時(shí)鐘速度。這個(gè)驅(qū)動(dòng)可以用于降低時(shí)鐘頻率以節(jié)能。
下面是另外一個(gè)電源管理子系統(tǒng)(CPU idle PM support)。當(dāng)處理器不在活躍狀態(tài)時(shí),它***處在有效的空閑方式來(lái)減少電源消耗和減少CPU損耗。減少電源消耗同樣可以降低內(nèi)部元件的發(fā)熱。
Linux內(nèi)核提供了很多CPU空閑驅(qū)動(dòng)。在多處理器系統(tǒng)上,一些用戶可能有一個(gè)理由在每個(gè)CPU上使用不同的驅(qū)動(dòng)(Support multiple cpuidle drivers)。啟用這個(gè)驅(qū)動(dòng)可以允許用戶給每個(gè)處理器設(shè)置不同的驅(qū)動(dòng)。
對(duì)于Intel處理器,內(nèi)核有一個(gè)特別為管理這類CPU芯片空閑的驅(qū)動(dòng)(Cpuidle Driver for Intel Processors)。
當(dāng)內(nèi)存芯片空閑時(shí),這些同樣可以處于低功耗狀態(tài)(Intel chipset idle memory power saving driver)。這個(gè)驅(qū)動(dòng)是特別支持IO AT的Intel設(shè)備的。
不同的計(jì)算機(jī)使用不同類型的主板(PCI support)。其中一種類型是PCI。這個(gè)驅(qū)動(dòng)允許內(nèi)核運(yùn)行在PCI主板上。
下面,我們可以啟用/禁用 "Support mmconfig PCI config space access"。
接下來(lái),我們有一個(gè)選擇啟用/禁用主橋窗口驅(qū)動(dòng)(Support mmconfig PCI config space access)。警告:這個(gè)驅(qū)動(dòng)還沒有完成(至少在3.9.4中是這樣)。
像上面提到的主板,還有另一種類型的主板。寫一個(gè)選項(xiàng)是提供"PCI Express (PCIe) support"的驅(qū)動(dòng)。PCIe是一種改進(jìn)并且更快速的PCI。
在這之后,下面的驅(qū)動(dòng)應(yīng)該被啟用以支持PCIe主板上的熱插拔(PCI Express Hotplug driver)。
接著,我們可以啟用/禁用PCIe主板報(bào)錯(cuò)(Root Port Advanced Error Reporting)。這就是PCIe AER驅(qū)動(dòng)。
下一個(gè)特性允許用戶使用PCIe EREC(PCI Express ECRC settings control)覆蓋BIOS和固件設(shè)置。下一個(gè)選項(xiàng),這是對(duì)PCIe的錯(cuò)誤注射(PCIe AER error injector support)。
下面的設(shè)置提供了操作系統(tǒng)控制PCI的活躍狀態(tài)和時(shí)鐘電源管理(PCI Express ASPM control)。通常上,固件會(huì)控制ASPM,但是這個(gè)特性允許操作系統(tǒng)采取控制。
如前面一樣,像內(nèi)核的許多組件一樣,這里提供了ASPM的調(diào)試支持(Debug PCI Express ASPM)。
下面,在這個(gè)菜單選擇"Default ASPM policy"。
在這選項(xiàng)之后,下一個(gè)是關(guān)于允許設(shè)備驅(qū)動(dòng)啟消息信號(hào)中斷(Message Signaled Interrupts (MSI))。通常上***允許設(shè)備給CPU發(fā)送中斷。
為了在系統(tǒng)日志中加入大量的調(diào)試信息,啟用"PCI Debugging"。
下一個(gè)選項(xiàng)允許PCI核心檢測(cè)是否有必要啟用PCI資源重分配(Enable PCI resource re-allocation detection)。
當(dāng)在Linux上托管一個(gè)虛擬操作系統(tǒng)時(shí),它有時(shí)可以用于為虛擬系統(tǒng)保留PCI設(shè)備(PCI Stub driver)。在系統(tǒng)虛擬化下,一個(gè)操作系統(tǒng)可能在另一個(gè)系統(tǒng)的內(nèi)部或者并行。有時(shí)它們會(huì)競(jìng)爭(zhēng)資源。可以為客戶機(jī)保留設(shè)備可以減小競(jìng)爭(zhēng)和增加性能。
下面的驅(qū)動(dòng)允許超傳輸設(shè)備(hypertransport devices)使用中斷(Interrupts on hypertransport devices)。HyperTransport是一種系統(tǒng)/協(xié)議總線用于處理器之間的高速通信。
下一個(gè)驅(qū)動(dòng)用于PCI虛擬化,它允許虛擬設(shè)備間共享它們的物理資源(PCI IOV support)。
PCI頁(yè)面請(qǐng)求接口(PRI)使在IOMMU(輸入/輸出內(nèi)存管理單元)之后的PCI設(shè)備能夠從頁(yè)錯(cuò)誤中恢復(fù)(PCI PRI support)。頁(yè)錯(cuò)誤不是一種錯(cuò)誤;它指的是軟件嘗試訪問不在物理內(nèi)存上的數(shù)據(jù)的事件。
再次說(shuō)明,你會(huì)在之后的文章中看到更多的需要配置Linux內(nèi)核特性。
via: http://www.linux.org/threads/the-linux-kernel-configuring-the-kernel-part-6.4457/

















