這篇文章將為大家詳細(xì)講解有關(guān)如何配置Devyn的Linux內(nèi)核,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。
我們提供的服務(wù)有:成都做網(wǎng)站、成都網(wǎng)站建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)、微信公眾號(hào)開(kāi)發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、寶坻ssl等。為數(shù)千家企事業(yè)單位解決了網(wǎng)站和推廣的問(wèn)題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的寶坻網(wǎng)站制作公司
這里我們被問(wèn)及關(guān)于"IBM Calgary IOMMU support (CALGARY_IOMMU)"。這個(gè)選項(xiàng)將會(huì)提供對(duì)IBM xSeries x366和x460的IOMMU的支持。這也將讓那些32位PCI的設(shè)備工作正常——在這些系統(tǒng)上不支持雙地址周期(DAC : Double Address Cycle)——因?yàn)樵撓到y(tǒng)設(shè)置在訪問(wèn)超過(guò)3GB內(nèi)存的時(shí)候會(huì)有問(wèn)題。如果需要這些IOMMU設(shè)備可以用"iommu=off"在啟動(dòng)時(shí)關(guān)閉。(這些內(nèi)核/模塊參數(shù)會(huì)在以后的文章中討論)
IOMMU(input/output memory management unit)是一個(gè)內(nèi)存管理單元(MMU),它連接具有DMA功能的I/O總線到主內(nèi)存上。DMA(Direct Memory Access)是許多計(jì)算機(jī)支持的一種允許特定設(shè)備不借助CPU直接訪問(wèn)內(nèi)存的特性。雙地址周期(Double Address Cycle, DAC)是64位DMA;而通常的DMA使用32位。
下面,我們被問(wèn)及是否默認(rèn)啟用Calgary(Should Calgary be enabled by default? (CALGARY_IOMMU_ENABLED_BY_DEFAULT))。Calgary與上面提到的IOMMU是同一個(gè)概念。這兩者之間的不同是IOMMU可以支持許多設(shè)備而Calgary只能支持IBM IOMMU設(shè)備。如果禁用了它,但是以后需要使用到它,可以使用內(nèi)核參數(shù)(iommu=calgary)。
這里有個(gè)問(wèn)題需要小心處理(Enable Maximum number of SMP Processors and NUMA Nodes (MAXSMP))。只有在內(nèi)核運(yùn)行在擁有很多SMP處理器和NUMA節(jié)點(diǎn)的情況下才啟用它,如Core i7和許多AMD CPU芯片。如果系統(tǒng)缺乏或者只有少量的SMP處理器和NUMA節(jié)點(diǎn),內(nèi)核就會(huì)變得低效。這個(gè)***選擇"No"。
非一致性內(nèi)存訪問(wèn)(Non-Uniform Memory Access (NUMA))是一個(gè)每塊內(nèi)存都需要花費(fèi)更長(zhǎng)時(shí)間訪問(wèn)其他部分內(nèi)存的系統(tǒng)。一個(gè)節(jié)點(diǎn)就是一組內(nèi)存。例如,一個(gè)NUMA系統(tǒng)可能有三塊內(nèi)存芯片。每塊芯片是一個(gè)節(jié)點(diǎn),在帶CPU的主板上有一個(gè)節(jié)點(diǎn)/芯片(這是最快的節(jié)點(diǎn)),另外兩個(gè)在不同的總線上。這兩個(gè)節(jié)點(diǎn)需要比***個(gè)節(jié)點(diǎn)花費(fèi)更長(zhǎng)的時(shí)間去訪問(wèn)。
注意:ccNUMA和NUMA目前是一樣的,至少是非常相似的。
對(duì)稱(chēng)多處理器(Symmetric Multi-Processing (SMP))是NUMA的替代品。它的內(nèi)存在同一根總線上。只有限定數(shù)量的CPU可以訪問(wèn)總線,所以這限制了SMP系統(tǒng)上處理器的數(shù)量。然而它內(nèi)存的訪問(wèn)速度一樣塊。
注意:我是在為AMD64系統(tǒng)在編譯內(nèi)核,所以我會(huì)告訴你我的選擇,來(lái)幫助讀者理解過(guò)程和選擇。如果我沒(méi)有指出我的選擇,那么我用的就是默認(rèn)選擇。如果你在為不同的系統(tǒng)編譯或者你有不同的需求,你需要在你的情況下做出替代的選擇。
接下來(lái),除非配置工具已經(jīng)為你做了選擇,選擇一個(gè)內(nèi)核需要支持的最多CPU的數(shù)量。這個(gè)配置根據(jù)你給的數(shù)量?jī)?yōu)化內(nèi)核。
接著啟用或禁用"SMT (Hyperthreading) scheduler support (SCHED_SMT)"(超線程調(diào)度器支持)。SMT調(diào)度器提升了在使用了超線程技術(shù)的Pentium 4處理器上的CPU決策能力。然而,這會(huì)帶來(lái)額外的功耗,在一些系統(tǒng)上***像我一樣選擇"no"。
超線程一種專(zhuān)有的SMT并行微處理器(Intel 實(shí)現(xiàn)了它)。這是多任務(wù)/多線程(同時(shí)做許多任務(wù))的一種特殊形式,并行多線程(Simultaneous multithreading (SMT))提升了多線程執(zhí)行的效率。
在這之后,啟用或者禁用"Multi-core scheduler support (SCHED_MC)"。這樣也是一種提升多核CPU決策的特性。然而這回帶來(lái)額外功耗,我選擇了"No"。
在下一個(gè)選項(xiàng)中可以選擇搶占模式。
Preemption Model(搶占模式)
1. No Forced Preemption (Server) (PREEMPT_NONE) (非強(qiáng)制搶占)
> 2. Voluntary Kernel Preemption (Desktop) (PREEMPT_VOLUNTARY) (自愿內(nèi)核搶占)
3. Preemptible Kernel (Low-Latency Desktop) (PREEMPT) (可搶占內(nèi)核)
choice[1-3]: 2
搶占就是暫停一個(gè)意圖讓它之后繼續(xù)執(zhí)行的中斷任務(wù)的過(guò)程。搶占強(qiáng)制一個(gè)進(jìn)程暫停,執(zhí)行中的任務(wù)無(wú)法忽視搶占。
接著,我們被詢問(wèn)關(guān)于"Reroute for broken boot IRQs (X86_REROUTE_FOR_BROKEN_BOOT_IRQS)"。這是一個(gè)對(duì)于假中斷的簡(jiǎn)單修復(fù)。假中斷是一種無(wú)用的硬件中斷,這些通常是有電子干擾或者錯(cuò)誤連接的電子產(chǎn)品觸發(fā)。記住,中斷是發(fā)送給處理器需要馬上注意的信號(hào)。
這個(gè)選項(xiàng)對(duì)任何機(jī)器都很重要;我懷疑任何人可能都會(huì)有禁用這個(gè)特性的理由(Machine Check / overheating reporting (X86_MCE))。內(nèi)核必須意識(shí)到過(guò)熱和數(shù)據(jù)損壞,不然,系統(tǒng)將會(huì)繼續(xù)操作,這樣只會(huì)導(dǎo)致進(jìn)一步的破壞。
下面,用戶可以啟用/禁用"Intel MCE features (X86_MCE_INTEL)",這是一種額外的對(duì)像熱度監(jiān)控的Intel MCE特性的支持。因?yàn)槲沂菫锳MD64處理器編譯內(nèi)核所以我選擇了"no"。機(jī)器檢測(cè)異常(MCE)是一種當(dāng)處理器發(fā)現(xiàn)硬件問(wèn)題時(shí)的錯(cuò)誤輸出。MCE通常會(huì)導(dǎo)致內(nèi)核嚴(yán)重錯(cuò)誤(kernel panic)(相當(dāng)于Windows中的"藍(lán)屏")。
這個(gè)除了是AMD設(shè)備外是同一個(gè)問(wèn)題Intel MCE features (X86_MCE_INTEL)。
下一個(gè)是我會(huì)禁用的調(diào)試特性(Machine check injector support (X86_MCE_INJECT))。這個(gè)會(huì)允許注射檢查。如果你偶爾執(zhí)行機(jī)器注射,那***編譯成模塊而不是編譯進(jìn)內(nèi)核。機(jī)器注射可以使設(shè)備即使實(shí)際沒(méi)有錯(cuò)誤也可以發(fā)送一個(gè)偽造的錯(cuò)誤信息。這個(gè)用來(lái)確認(rèn)內(nèi)核和其他進(jìn)程可以正常處理錯(cuò)誤。比如,如果CPU過(guò)熱,接著應(yīng)該關(guān)機(jī),但是開(kāi)發(fā)者如何在不損壞CPU的情況下測(cè)試代碼。注射錯(cuò)誤是一種***的方法,因?yàn)樗皇且环N告訴硬件發(fā)送錯(cuò)誤信號(hào)的軟件。
注:模塊是對(duì)可能被使用或者很少執(zhí)行的特性/驅(qū)動(dòng)而言的。只加入在許多使用該內(nèi)核的系統(tǒng)中用到的特性/驅(qū)動(dòng)到內(nèi)核中。
如果內(nèi)核很可能用在Dell筆記本上,那么啟用這個(gè)特性(Dell laptop support (I8K))。否則,如果一些用戶可能在戴爾筆記本電腦上用到這個(gè)內(nèi)核,將其作為一個(gè)模塊加入。如果這個(gè)內(nèi)核不打算支持Dell筆記本,那就像我一樣忽略掉它。特別地,這個(gè)支持是一個(gè)允許Dell Inspiron 8000系列筆記本訪問(wèn)處理器的系統(tǒng)管理模式的驅(qū)動(dòng)。系統(tǒng)管理模式的目的是得到處理器的溫度和風(fēng)扇狀態(tài),這對(duì)一些需要控制風(fēng)扇的系統(tǒng)有用。
下面,用戶可以選擇微碼加載支持(CPU microcode loading support (MICROCODE))。這可以允許用戶在支持這個(gè)特性的AMD或者Intel芯片上更新微碼。
注意:為了加載微碼,你必須擁有一個(gè)為你的處理器設(shè)計(jì)的合法的二進(jìn)制微代碼拷貝。
如果要加載微碼補(bǔ)丁(修復(fù)bug或加入次要的特性)到intel芯片上(Intel microcode loading support (MICROCODE_INTEL)),這個(gè)就必須啟用。這里我禁用了它。
然后是AMD芯片的類(lèi)似選項(xiàng)(AMD microcode loading support (MICROCODE_AMD))。
啟用這個(gè)支持(/dev/cpu/*/msr - Model-specific register support (X86_MSR))可以允許某個(gè)處理器有權(quán)限使用x86特殊模塊寄存器(Model-Specific Registers (MSRs))。這些寄存器是一些字符設(shè)備,包括major 202下minor 0到31的設(shè)備((/dev/cpu/0/msr to /dev/cpu/31/msr))。這個(gè)特性用在多處理器系統(tǒng)上。每個(gè)虛擬字符設(shè)備都連接到一個(gè)特定的CPU。
注意:MSRs被用來(lái)改變CPU設(shè)備、調(diào)試、性能監(jiān)控和執(zhí)行追蹤。MSRs使用x86指令集。
在這之后,我們有一個(gè)選項(xiàng)"CPU information support (X86_CPUID)",啟用這個(gè)特性允許處理器訪問(wèn)x86 CPUID指令,這需要通過(guò)字符設(shè)備在一個(gè)特定的CPU上執(zhí)行。這些字符設(shè)備包括major 202下minor 0到31的設(shè)備(/dev/cpu/0/msr to /dev/cpu/31/msr),就像上面x86_MSR支持的這些。
如果處理器支持,啟用內(nèi)核線性映射來(lái)使用1GB的內(nèi)存頁(yè)(Enable 1GB pages for kernel pagetables (DIRECT_GBPAGES))。啟用這個(gè)可以幫助減輕TLB的壓力。
頁(yè)是內(nèi)存本身的基本單位(位是數(shù)據(jù)的基本單位)。頁(yè)的大小是由硬件自身決定的。頁(yè)碼表是虛擬和物理內(nèi)存間的映射。物理內(nèi)存是設(shè)備上的內(nèi)存。虛擬內(nèi)存是到內(nèi)存的地址。依賴(lài)于系統(tǒng)架構(gòu),硬件可以訪問(wèn)大于實(shí)際內(nèi)存地址的地址。舉例來(lái)說(shuō),一個(gè)64位系統(tǒng)擁有6GB內(nèi)存,管理員在需要時(shí)可以加上更多的內(nèi)存。這是因?yàn)檫€有很多虛擬內(nèi)存地址。然而,在很多32位系統(tǒng)上,系統(tǒng)管理員可以增加一條8GB的內(nèi)存,但是系統(tǒng)無(wú)法完全使用它,因?yàn)橄到y(tǒng)中沒(méi)有足夠的虛擬內(nèi)存地址去訪問(wèn)大容量的內(nèi)存。轉(zhuǎn)換后援緩沖器(Translation Lookaside Buffer (TLB))是一種提升虛擬內(nèi)存轉(zhuǎn)換速度的緩存系統(tǒng)。
下面,我們看到了NUMA選項(xiàng)(Numa Memory Allocation and Scheduler Support (NUMA))。這可以允許內(nèi)核在CPU本地內(nèi)存分配器上分配CPU可使用的內(nèi)存。這個(gè)支持同樣可使內(nèi)核更好感知到NUMA。很少的32位系統(tǒng)需要這個(gè)特性,但是一些通用的645位處理器使用這個(gè)特性。我選擇了"no"。
為了系統(tǒng)使用舊方式來(lái)檢測(cè)AMD NUMA節(jié)點(diǎn)拓?fù)?,啟用這個(gè)特性(Old style AMD Opteron NUMA detection (AMD_NUMA))。下一個(gè)選項(xiàng)是一種更新的檢測(cè)方式(ACPI NUMA detection (X86_64_ACPI_NUMA))。如果兩個(gè)都啟用,新的方式將會(huì)占支配作用。一些硬件在使用其中一種方式而不是另外一個(gè)時(shí)工作得更好。
如果為了調(diào)試目的的NUMA仿真,可以啟用下一個(gè)特性(NUMA emulation (NUMA_EMU))。
注意:如果你不打算進(jìn)行調(diào)試并且你需要一個(gè)快速、輕量級(jí)系統(tǒng),那么禁用盡可能多的調(diào)試特性。
下一個(gè)選項(xiàng)中,選擇你的內(nèi)核打算如何處理NUMA節(jié)點(diǎn)的***數(shù)量。接下來(lái)選擇內(nèi)存模型,這里可能只有一個(gè)內(nèi)存模型選擇。內(nèi)存模型指定了內(nèi)存如何存儲(chǔ)。
Maximum NUMA Nodes (as a power of 2) (NODES_SHIFT) [6]
Memory model
> 1. Sparse Memory (SPARSEMEM_MANUAL)
choice[1]: 1
為了提升性能,這里有一個(gè)選項(xiàng)用通過(guò)虛擬內(nèi)存映射(Sparse Memory virtual memmap (SPARSEMEM_VMEMMAP))來(lái)優(yōu)化pfn_to_page和page_to_pfn操作。頁(yè)幀號(hào)是每頁(yè)被給定的號(hào)碼。這兩個(gè)操作用來(lái)從號(hào)碼得到頁(yè)或者從頁(yè)得到號(hào)碼。
下一個(gè)選項(xiàng)是允許一個(gè)節(jié)點(diǎn)可以移除內(nèi)存(Enable to assign a node which has only movable memory (MOVABLE_NODE))。內(nèi)核頁(yè)通常無(wú)法移除。當(dāng)啟用后,用戶可以熱插拔內(nèi)存節(jié)點(diǎn),同樣可移除內(nèi)存允許內(nèi)存整理。作為出入內(nèi)存的數(shù)據(jù),只要有可用空間一組數(shù)據(jù)可能被劃分到不同內(nèi)存。
接著前面的內(nèi)存問(wèn)題,我們還有更多的問(wèn)題。這些可能已被配置工具預(yù)配置了。第三個(gè)選項(xiàng)(BALLOON_COMPACTION),當(dāng)啟用時(shí)可以幫助減少內(nèi)存碎片。碎片內(nèi)存會(huì)減慢系統(tǒng)速度。第四個(gè)選項(xiàng)(COMPACTION)允許內(nèi)存壓縮。下面列到的第五個(gè)選項(xiàng)(MIGRATION)允許頁(yè)面被移動(dòng)。
Allow for memory hot-add (MEMORY_HOTPLUG) (允許內(nèi)存熱添加)
Allow for memory hot remove (MEMORY_HOTREMOVE) (允許內(nèi)存熱移除)
Allow for balloon memory compaction/migration (BALLOON_COMPACTION) (允許泡狀內(nèi)存規(guī)整和合并)
Allow for memory compaction (允許內(nèi)存規(guī)整)
Page migration (MIGRATION) (頁(yè)合并)
注意:啟用可移動(dòng)內(nèi)存會(huì)啟用以上5個(gè)特性。
下一步,我們可以"Enable KSM for page merging (KSM)"。內(nèi)核同頁(yè)合并(Kernel Samepage Merging (KSM))會(huì)查看程序認(rèn)為可以合并的內(nèi)核。如果兩頁(yè)內(nèi)存完全相同這可以節(jié)約內(nèi)存。一塊內(nèi)存可以被刪除或者被合并,并且只有一塊可以使用。
配置工具可能會(huì)自動(dòng)選擇保存多少內(nèi)存用于用戶分配(Low address space to protect from user allocation (DEFAULT_MMAP_MIN_ADDR) [65536])。
下一個(gè)選項(xiàng)很重要(Enable recovery from hardware memory errors (MEMORY_FAILURE))。如果內(nèi)存故障并且系統(tǒng)有MCA恢復(fù)或者ECC內(nèi)存,系統(tǒng)就可以繼續(xù)運(yùn)行并且恢復(fù)。要使用這個(gè)特性,硬件自身和內(nèi)核都必須支持。
機(jī)器檢測(cè)架構(gòu)(Machine Check Architecture (MCA))是一個(gè)一些CPU上可以發(fā)送硬件錯(cuò)誤信息給操作系統(tǒng)的特性。錯(cuò)誤更正碼內(nèi)存(Error-correcting code memory (ECC memory))是一種內(nèi)存設(shè)備檢測(cè)和糾正錯(cuò)誤的形式。
下面,配置工具會(huì)自動(dòng)啟用"HWPoison pages injector (HWPOISON_INJECT)"。這個(gè)特性允許內(nèi)核標(biāo)記一塊壞頁(yè)為"poisoned",接著內(nèi)核會(huì)殺死創(chuàng)建壞頁(yè)的程序。這有助于停止并糾正錯(cuò)誤。
為了允許內(nèi)核使用大頁(yè)(Transparent Hugepage Support (TRANSPARENT_HUGEPAGE)),啟用這個(gè)特性。這可以加速系統(tǒng)但是需要更多內(nèi)存。嵌入式系統(tǒng)不必使用這個(gè)特性。嵌入式系統(tǒng)通常只有非常小的內(nèi)存。
如果啟用了上面的,那么必須配置大頁(yè)的sysfs支持。
Transparent Hugepage Support sysfs defaults
1. always (TRANSPARENT_HUGEPAGE_ALWAYS)
> 2. madvise (TRANSPARENT_HUGEPAGE_MADVISE)
choice[1-2?]: 2
下面的選項(xiàng)是增加process_vm_readv和process_vm_writev這兩個(gè)系統(tǒng)調(diào)用(Cross Memory Support (CROSS_MEMORY_ATTACH))。這允許特權(quán)進(jìn)程訪問(wèn)另外一個(gè)程序的地址空間。
如果有tmem,啟用緩存清理(cleancache)通常是一個(gè)好主意 (Enable cleancache driver to cache clean pages if Transcendent Memory (tmem) is present (CLEANCACHE))。當(dāng)一些內(nèi)存頁(yè)需要從內(nèi)存中移除時(shí),cleancache會(huì)將頁(yè)面放在cleancache-enabled的文件系統(tǒng)上。當(dāng)需要該頁(yè)時(shí),頁(yè)會(huì)被重新放回內(nèi)存中。超內(nèi)存(tmem)沒(méi)有一組已知大小的內(nèi)存,內(nèi)核對(duì)此內(nèi)存使用間接尋址。
下一個(gè)選項(xiàng)允許在tmen激活后緩存交換頁(yè)(Enable frontswap to cache swap pages if tmem is present (FRONTSWAP))。frontswap在交換分區(qū)放置數(shù)據(jù)。交換特性的支持需要這個(gè)。
***啟用下一個(gè)特性(Check for low memory corruption (X86_CHECK_BIOS_CORRUPTION))。這會(huì)檢測(cè)低位內(nèi)存的內(nèi)存損壞情況。這個(gè)特性在執(zhí)行期被禁止。為了啟用這個(gè)特性,在內(nèi)核命令行內(nèi)加入 "memory_corruption_check=1"(這會(huì)在以后的文章中討論;這不同于任何命令行)。即使經(jīng)常執(zhí)行這個(gè)特性,也只使用非常小的開(kāi)銷(xiāo)(接近沒(méi)有)。
接下來(lái)我門(mén)可以設(shè)置內(nèi)存損壞檢測(cè)的默認(rèn)設(shè)置(“Set the default setting of memory_corruption_check (X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK))。這可以選擇是否開(kāi)啟或關(guān)閉memory_corruption_check。***啟用內(nèi)存損壞檢測(cè)不然如果一部分重要內(nèi)存損壞后可能會(huì)導(dǎo)致數(shù)據(jù)丟失和系統(tǒng)崩潰。
這個(gè)選項(xiàng)關(guān)注的是BIOS(Amount of low memory, in kilobytes, to reserve for the BIOS (X86_RESERVE_LOW) [64])。配置工具通常知道給BIOS預(yù)留內(nèi)存的***大小。
對(duì)于Intel P6處理器,開(kāi)發(fā)者可以啟用存儲(chǔ)區(qū)域類(lèi)型寄存器(MTRR (Memory Type Range Register) support (MTRR))。這用于連接著VGA卡的AGP和PCI卡。啟用這個(gè)特性內(nèi)核會(huì)創(chuàng)建/proc/mtrr。
如果X驅(qū)動(dòng)需要加入回寫(xiě)入口,那么啟用下面的選項(xiàng)(MTRR cleanup support (MTRR_SANITIZER))。這會(huì)將MTRR的布局從連續(xù)轉(zhuǎn)換到離散。存儲(chǔ)區(qū)域類(lèi)型寄存器(Memory type range registers (MTRRs))提供了一種軟件訪問(wèn)CPU緩存的方法。
下面,配置工具已經(jīng)設(shè)置了一些MTRR選項(xiàng)
MTRR cleanup enable value (0-1) (MTRR_SANITIZER_ENABLE_DEFAULT) [1]
MTRR cleanup spare reg num (0-7) (MTRR_SANITIZER_SPARE_REG_NR_DEFAULT) [1]
為了設(shè)置頁(yè)級(jí)緩沖控制,那就啟用PAT屬性(x86 PAT support (X86_PAT))。頁(yè)屬性表(Page Attribute Table (PATs))是現(xiàn)在版的MTRRs并比它更靈活。如果你經(jīng)歷過(guò)因啟用它而引發(fā)的啟動(dòng)問(wèn)題,那么禁用這個(gè)特性后重新編譯內(nèi)核。我選擇了"no"。
關(guān)于如何配置Devyn的Linux內(nèi)核就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。