<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<atom:link href="http://gentoo-zh.org/extern.php?action=feed&amp;tid=8&amp;type=rss" rel="self" type="application/rss+xml" />
		<title><![CDATA[Gentoo中文社区 / Processor type and features]]></title>
		<link>http://www.gentoo-zh.org/viewtopic.php?id=8</link>
		<description><![CDATA[Processor type and features 最近发表的帖子。]]></description>
		<lastBuildDate>Wed, 03 Aug 2022 14:31:10 +0000</lastBuildDate>
		<generator>FluxBB</generator>
		<item>
			<title><![CDATA[Processor type and features]]></title>
			<link>http://www.gentoo-zh.org/viewtopic.php?pid=8#p8</link>
			<description><![CDATA[<p>Processor type and features<br />中央处理器(CPU)类型及特性</p><p>DMA memory allocation support<br />CONFIG_ZONE_DMA<br />&#160; &#160; 允许为寻址宽度不足32位的设备(也就是ISA和LPC总线设备)在物理内存的前16MB范围内<br />&#160; &#160; (也就是传统上x86_32架构的ZONE_DMA区域)分配内存.不确定的选&quot;Y&quot;.<br />&#160; &#160; [提示]LPC总线通常和主板上的南桥物理相连,通常连接了一系列的传统设备:BIOS,<br />&#160; &#160; PS/2键盘,PS/2鼠标,软盘,并口设备,串口设备,某些集成声卡,TPM(可信平台模块),<br />&#160; &#160; 等等.[题外话]x86_64已经没有ZONE_HIGHMEM了<br />&#160; &#160;<br />Symmetric multi-processing support<br />CONFIG_SMP<br />&#160; &#160; SMP(对称多处理器)支持,如果你有多个CPU或者使用的是多核CPU就选上.<br />&#160; &#160;<br />Support x2apic<br />CONFIG_X86_X2APIC<br />&#160; &#160; x2apic支持.具有这个特性的CPU可以使用32位的APIC ID(可以支持海量的CPU),<br />&#160; &#160; 并且可以使用MSR而不是mmio去访问 local APIC (更加高效).<br />&#160; &#160; 可以通过&quot;grep x2apic /proc/cpuinfo&quot;命令检查你的CPU是否支持这个特性.<br />&#160; &#160; 注意:有时候还需要在BIOS中也开启此特性才真正生效.[提示]在虚拟机中,还需要VMM的支持(例如qemu-kvm).<br />&#160; &#160;<br />Enable MPS table<br />CONFIG_X86_MPPARSE<br />&#160; &#160; 如果是不支持acpi特性的古董级SMP系统就选上.但现今的64位系统早都已经支持acpi了,所以可以安全的关闭.<br />&#160; &#160;<br />Avoid speculative indirect branches in kernel<br />&#160; &#160; 避免在内核中使用推测性间接分支<br />Intel Resource Director Technology support<br />&#160; &#160; 英特尔资源总监技术支持<br />&#160; &#160;<br />Support for extended (non-PC) x86 platforms<br />CONFIG_X86_EXTENDED_PLATFORM<br />&#160; &#160; 支持非标准的PC平台: Numascale NumaChip, ScaleMP vSMP, SGI Ultraviolet. 绝大多数人都遇不见这些平台.<br />&#160; &#160;<br />Numascale NumaChip<br />CONFIG_X86_NUMACHIP<br />&#160; &#160; Numascale NumaChip 平台支持<br />&#160; &#160;<br />ScaleMP vSMP<br />CONFIG_X86_VSMP<br />&#160; &#160; ScaleMP vSMP 平台支持<br />&#160; &#160;<br />SGI Ultraviolet<br />CONFIG_X86_UV<br />&#160; &#160; SGI Ultraviolet 平台支持</p><p>Goldfish (Virtual Platform)<br />&#160; &#160; 金鱼(虚拟平台)<br />&#160; &#160;<br />Intel Low Power Subsystem Support<br />CONFIG_X86_INTEL_LPSS<br />&#160; &#160; 为 Intel Lynx Point PCH 中的 Intel Low Power Subsystem 技术提供支持.<br />&#160; &#160; 这个芯片组主要是为采用LGA1150的Haswell处理器提供支持.</p><p>AMD ACPI2Platform devices support<br />&#160; &#160; AMD ACPI2Platform设备支持<br />&#160; &#160;<br />Intel SoC IOSF Sideband support for SoC platforms<br />&#160; &#160; 英特尔SoC IOSF边带支持SoC平台</p><p>Enable IOSF sideband access through debugfs<br />&#160; &#160; 通过debugfs启用IOSF边带访问</p><p>Single-depth WCHAN output<br />CONFIG_SCHED_OMIT_FRAME_POINTER<br />&#160; &#160; 使用简化的 /proc/&lt;PID&gt;/wchan 值,禁用此选项会使用更加精确的wchan值(可以在&quot;ps -l&quot;结果的WCHAN域看到),<br />&#160; &#160; 但会轻微增加调度器消耗.<br />&#160; &#160;<br />Linux guest support<br />CONFIG_HYPERVISOR_GUEST<br />&#160; &#160; 如果这个内核将在虚拟机里面运行就开启,否则就关闭.</p><p>&#160; &#160; Enable paravirtualization code<br />&#160; &#160; CONFIG_PARAVIRT<br />&#160; &#160; &#160; &#160; 半虚拟化(paravirtualization)支持.<br />&#160; &#160; &#160; &#160; paravirt-ops debugging<br />&#160; &#160; &#160; &#160; CONFIG_PARAVIRT_DEBUG<br />&#160; &#160; &#160; &#160; &#160; &#160; 仅供调试.paravirt-ops是内核通用的半虚拟化接口.<br />&#160; &#160; &#160; &#160; Paravirtualization layer for spinlocks<br />&#160; &#160; &#160; &#160; CONFIG_PARAVIRT_SPINLOCKS<br />&#160; &#160; &#160; &#160; &#160; &#160; 半虚拟化的自旋锁支持.开启之后运行在虚拟机里的内核速度会加快,<br />&#160; &#160; &#160; &#160; &#160; &#160; 但是运行在物理CPU上的宿主内核运行效率会降低(最多可能会降低5%).请根据实际情况选择.<br />&#160; &#160; &#160; &#160; Xen guest support<br />&#160; &#160; &#160; &#160; CONFIG_XEN<br />&#160; &#160; &#160; &#160; &#160; &#160; Xen半虚拟化技术支持<br />&#160; &#160; Enable Xen debug and tuning parameters in debugfs<br />&#160; &#160; CONFIG_XEN_DEBUG_FS<br />&#160; &#160; &#160; &#160; 为Xen在debugfs中输出各种统计信息和调整选项.对性能有严重影响.仅供调试.<br />&#160; &#160; KVM Guest support (including kvmclock)<br />&#160; &#160; CONFIG_KVM_GUEST<br />&#160; &#160; &#160; &#160; KVM客户机支持(包括kvmclock).<br />&#160; &#160; Paravirtual steal time accounting<br />&#160; &#160; CONFIG_PARAVIRT_TIME_ACCOUNTING<br />&#160; &#160; &#160; &#160; 允许进行更细粒度的 task steal time 统计.会造成性能的略微降低.仅在你确实需要的时候才开启.</p><p>Memtest<br />CONFIG_MEMTEST<br />&#160; &#160; 为内核添加内存测试功能,也就是添加&quot;memtest&quot;内核引导参数以支持对内存进行&quot;体检&quot;.<br />&#160; &#160; 仅在你确实知道这是什么东西并且确实需要的时候再开启.否则请关闭.<br />&#160; &#160;<br />Processor family<br />&#160; &#160; 处理器系列,请按照你实际使用的CPU选择.&quot;Generic-x86-64&quot;表示通用于所有x86-64平台,不针对特定类型的CPU进行优化.<br />&#160; &#160; Opteron/Athlon64/Hammer/K8<br />&#160; &#160; Intel P4 / older Netburst based Xeon<br />&#160; &#160; Core 2/newer Xeon<br />&#160; &#160; Intel Atom<br />&#160; &#160; Generic-x86-64</p><p>Supported processor vendors<br />CONFIG_PROCESSOR_SELECT<br />&#160; &#160; 支持的CPU厂商,按实际情况选择.<br />&#160; &#160;<br />Enable DMI scanning<br />CONFIG_DMI<br />&#160; &#160; 允许扫描DMI(Desktop Management Interface)/SMBIOS(System Management BIOS)以获得机器的硬件配置,<br />&#160; &#160; 从而对已知的bug bios进行规避.具体涉及到哪些机器可参见&quot;drivers/acpi/blacklist.c&quot;文件.<br />&#160; &#160; 除非确定你的机器没有bug,否则请开启此项.</p><p>Old AMD GART IOMMU support</p><p>GART IOMMU support<br />CONFIG_GART_IOMMU<br />&#160; &#160; GART IOMMU 支持. 图形地址重映射表(Graphics Address Remapping Table)<br />&#160; &#160; 可以将物理地址不连续的系统内存映射成看上去连续的图形内存交给GPU使用,<br />&#160; &#160; 是一种挖CPU内存补GPU内存机制,这种机制也可以被认为是一种<br />&#160; &#160; &quot;伪IOMMU&quot;(缺乏地址空间隔离和访问控制).<br />&#160; &#160; 开启此选项以后,在内存大于3G的系统上,<br />&#160; &#160; 传统的32位总线(PCI/AGP)的设备将可以使用完全DMA的方式直接访问原本超出<br />&#160; &#160; 32位寻址范围之外的系统内存区域.具体方法是:<br />&#160; &#160; 通过编程让设备在受GART控制的显存区域工作,<br />&#160; &#160; 然后使用GART将这个地址映射为真实的物理地址(4GB以上)来实现的.<br />&#160; &#160; USB/声卡/IDE/SATA之类的设备常常需要它.开启此选项之后,<br />&#160; &#160; 除非同时开启了CONFIG_IOMMU_DEBUG选项或者使用了&quot;iommu=force&quot;内核引导参数,<br />&#160; &#160; 否则此特性仅在条件满足的情况下(内存足够大且确有支持GART的设备)激活.建议内存大于3G的系统上选&quot;Y&quot;.<br />&#160; &#160;<br />IBM Calgary IOMMU support<br />CONFIG_CALGARY_IOMMU<br />&#160; &#160; IBM xSeries/pSeries 系列服务器的 Calgary IOMMU 支持.</p><p>&#160; &#160; Should Calgary be enabled by default<br />&#160; &#160; CONFIG_CALGARY_IOMMU_ENABLED_BY_DEFAULT<br />&#160; &#160; &#160; &#160; 开启此选项表示默认启用Calgary特性,关闭此选项表示默认禁用Calgary特性<br />&#160; &#160; &#160; &#160; (可以使用&quot;iommu=calgary&quot;内核引导参数开启).</p><p>Enable Maximum number of SMP Processors and NUMA Nodes<br />CONFIG_MAXSMP<br />&#160; &#160; 让内核支持x86_64平台所能支持的最大SMP处理器数量和最大NUMA节点数量.主要用于调试目的.<br />&#160; &#160;<br />Maximum number of CPUs<br />CONFIG_NR_CPUS<br />&#160; &#160; 支持的最大CPU数量,每个CPU要占8KB的内核镜像,最小有效值是&quot;2&quot;,最<br />&#160; &#160; 大有效值是&quot;512&quot;.注意:对于多核CPU而言,每个核算一个.<br />&#160; &#160;<br />SMT (Hyperthreading) scheduler support<br />CONFIG_SCHED_SMT<br />&#160; &#160; Intel超线程技术(HyperThreading)支持.<br />&#160; &#160;<br />Multi-core scheduler support<br />CONFIG_SCHED_MC<br />&#160; &#160; 针对多核CPU进行调度策略优化</p><p>CPU core priorities scheduler support<br />&#160; &#160; CPU核心优先级调度程序支持</p><p>Preemption Model<br />&#160; &#160; 内核抢占模式</p><p>&#160; &#160; No Forced Preemption (Server)<br />&#160; &#160; CONFIG_PREEMPT_NONE<br />&#160; &#160; &#160; &#160; 禁止内核抢占,这是Linux的传统模式,可以得到最大的吞吐量,适合服务器和科学计算环境<br />&#160; &#160; &#160; &#160;<br />&#160; &#160; Voluntary Kernel Preemption (Desktop)<br />&#160; &#160; CONFIG_PREEMPT_VOLUNTARY<br />&#160; &#160; &#160; &#160; 自愿内核抢占,通过在内核中设置明确的抢占点以允许明确的内核抢占,<br />&#160; &#160; &#160; &#160; 可以提高响应速度,但是对吞吐量有不利影响.适合普通桌面环境的<br />&#160; &#160; &#160; &#160;<br />&#160; &#160; Preemptible Kernel (Low-Latency Desktop)<br />&#160; &#160; CONFIG_PREEMPT<br />&#160; &#160; &#160; &#160; 主动内核抢占,允许抢占所有内核代码,对吞吐量有更大影响,<br />&#160; &#160; &#160; &#160; 适合需要运行实时程序的场合或者追求最快响应速度的桌面环境.</p><p>Reroute for broken boot IRQs<br />CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS<br />&#160; &#160; 这是一个对某些芯片组bug(在某些情况下会发送多余的&quot;boot IRQ&quot;)的修复功能.<br />&#160; &#160; 开启此选项之后,仅对有此bug的芯片组生效.<br />&#160; &#160; 要检查哪些芯片组有此bug可以查看&quot;drivers/pci/quirks.c&quot;文件中的&quot;quirk_reroute_to_boot_interrupts_intel&quot;函数.<br />&#160; &#160;<br />Machine Check / overheating reporting<br />CONFIG_X86_MCE<br />&#160; &#160; MCE(Machine Check Exception)支持.让CPU检测到硬件故障(过热/数据错误)时通知内核,<br />&#160; &#160; 以便内核采取相应的措施(如显示一条提示信息或关机等).更多信息可以&quot;man mcelog&quot;看看.<br />&#160; &#160; 可以通过&quot;grep mce /proc/cpuinfo&quot;检查CPU是否支持此特性,若支持建议选中,否则请关闭.<br />&#160; &#160; 当然,如果你对自己的硬件质量很放心,又是桌面系统的话,不选也无所谓.</p><p>&#160; &#160; Support for deprecated /dev/mcelog character device<br />&#160; &#160; &#160; &#160; 支持已弃用的/dev/mcelog字符设备<br />&#160; &#160; Intel MCE features<br />&#160; &#160; CONFIG_X86_MCE_INTEL<br />&#160; &#160; &#160; &#160; Intel CPU 支持&#160; &#160;<br />&#160; &#160; AMD MCE features<br />&#160; &#160; CONFIG_X86_MCE_AMD<br />&#160; &#160; &#160; &#160; AMD CPU 支持</p><p>Machine check injector support<br />CONFIG_X86_MCE_INJECT<br />&#160; &#160; MCE注入支持,仅用于调试<br />&#160; &#160;<br />Performance monitoring<br />&#160; &#160; 性能监控<br />&#160; &#160; &#160;Intel uncore performance events<br />&#160; &#160; &#160; &#160; 英特尔uncore性能事件<br />&#160; &#160; &#160;Intel rapl performance events<br />&#160; &#160; &#160; &#160; 英特尔rapl表演活动<br />&#160; &#160; &#160;Intel cstate performance events<br />&#160; &#160; &#160; &#160; 英特尔cstate性能事件<br />&#160; &#160; &#160;AMD Processor Power Reporting Mechanism<br />&#160; &#160; &#160; &#160; AMD处理器电源报告机制<br />&#160; &#160;<br />Enable support for 16-bit segments<br />&#160; &#160; 启用对16位段的支持<br />Enable vsyscall emulation<br />&#160; &#160; 启用vsyscall仿真<br />&#160; &#160;<br />Dell laptop support<br />CONFIG_I8K<br />&#160; &#160; Dell Inspiron 8000 笔记本的 System Management Mode 驱动(i8k).该驱动可以读取CPU温度和风扇转速,<br />&#160; &#160; 进而帮助上层工具控制风扇转速.<br />&#160; &#160; 该驱动仅针对 Dell Inspiron 8000 笔记本进行过测试,所以不保证一定能适用于其他型号的Dell笔记本.<br />&#160; &#160;<br />CPU microcode loading support<br />CONFIG_MICROCODE<br />&#160; &#160; CPU的微代码更新支持,建议选中.CPU的微代码更新就像是给CPU打补丁.比如在Gentoo下,<br />&#160; &#160; 可以使用&quot;emerge microcode-ctl&quot;安装microcode-ctl服务,<br />&#160; &#160; 再把这个服务加入boot运行级即可在每次开机时自动更新CPU微代码.其他Linux系统可以参考这个帖子.</p><p>&#160; &#160; Intel microcode loading support<br />&#160; &#160; CONFIG_MICROCODE_INTEL<br />&#160; &#160; &#160; &#160; Intel CPU 微代码支持<br />&#160; &#160; AMD microcode loading support<br />&#160; &#160; CONFIG_MICROCODE_AMD<br />&#160; &#160; &#160; &#160; AMD CPU 微代码支持</p><p>Early load microcode<br />CONFIG_MICROCODE_INTEL_EARLY<br />&#160; &#160; 支持从initrd镜像首部加载微代码,以便尽可能早的更新CPU微代码.<br />&#160; &#160; 即使在initrd首部并未嵌入微代码也不会造成问题,所以&quot;Y&quot;是安全的.不过你真的需要吗?<br />&#160; &#160; 笔者认为你一般并不需要:)<br />&#160; &#160;<br />/dev/cpu/*/msr - Model-specific register support<br />CONFIG_X86_MSR<br />&#160; &#160; /dev/cpu/*/msr 设备支持.也就是允许用户空间的特权进程(使用rdmsr与wrmsr指令)访问x86的MSR寄存器<br />&#160; &#160; (Model-Specific Register).MSR的作用主要用于调试,程序执行跟踪,性能及状态监控,<br />&#160; &#160; 以及触发特定的CPU特性(依CPU的不同而不同).msrtool工具可以转储出MSR的内容.不确定的可以选&quot;N&quot;.<br />&#160; &#160;<br />/dev/cpu/*/cpuid - CPU information support<br />CONFIG_X86_CPUID<br />&#160; &#160; /dev/cpu/*/cpuid 设备支持.可以通过cpuid命令获得详细的CPU信息(CPUID).不确定的可以选&quot;N&quot;.</p><p>Enable 5-level page tables support<br />&#160; &#160; 启用5级页表支持<br />AMD Secure Memory Encryption (SME) support<br />&#160; &#160; AMD安全内存加密（SME）支持</p><p>Enable 1GB pages for kernel pagetables<br />CONFIG_DIRECT_GBPAGES<br />&#160; &#160; 允许内核页表使用大小为1GB的Hugepages并进行直线映射(linear mapping),<br />&#160; &#160; 需要高端CPU的支持(可以用&quot;grep pdpe1gb /proc/cpuinfo&quot;命令检查).<br />&#160; &#160; 这可以减小页表缓存(Translation Lookaside Buffer)的压力,<br />&#160; &#160; 从而提升系统的性能,这对于拥有海量内存并且运行某些特定应用<br />&#160; &#160; (PosgreSQL,MySQL,Java,Memcached,KVM,Xen...)的系统来说比较有意义.如果你的CPU支持,可以选&quot;Y&quot;.<br />&#160; &#160;<br />Numa Memory Allocation and Scheduler Support<br />CONFIG_NUMA<br />&#160; &#160; 开启 NUMA(Non Uniform Memory Access) 支持.虽然说集成了内存控制器的CPU都属于NUMA架构.但事实上,对于大多数只有一颗物理CPU的个人电脑而言,即使支持NUMA架构,也没必要开启此特性.可以参考SMP/NUMA/MPP体系结构对比.此外,对于不支持&quot;虚拟NUMA&quot;,或&quot;虚拟NUMA&quot;被禁用的虚拟机(即使所在的物理机是NUMA系统),也应该关闭此项.</p><p>Enable sysfs memory/probe interface<br />&#160; &#160; 启用sysfs内存/探针接口</p><p>Old style AMD Opteron NUMA detection<br />CONFIG_AMD_NUMA<br />&#160; &#160; 因为AMD使用一种旧式的方法读取NUMA配置信息(新式方法是CONFIG_X86_64_ACPI_NUMA),<br />&#160; &#160; 所以如果你使用的是AMD多核CPU,建议开启.不过,即使开启此选项,<br />&#160; &#160; 内核也会优先尝试CONFIG_X86_64_ACPI_NUMA方法,仅在失败后才会使用此方法,<br />&#160; &#160; 所以即使你不能确定CPU的类型也可以安全的选中此项.<br />&#160; &#160;<br />ACPI NUMA detection<br />CONFIG_X86_64_ACPI_NUMA<br />&#160; &#160; 使用基于 ACPI SRAT(System Resource Affinity Table) 技术的NUMA节点探测方法.<br />&#160; &#160; 这也是检测NUMA节点信息的首选方法,建议选中.<br />&#160; &#160;<br />NUMA emulation<br />CONFIG_NUMA_EMU<br />&#160; &#160; 仅供开发调试使用<br />&#160; &#160;<br />Maximum NUMA Nodes (as a power of 2)<br />CONFIG_NODES_SHIFT<br />&#160; &#160; 允许的最大NUMA节点数.需要注意其计算方法:最大允许节点数=2CONFIG_NODES_SHIFT.<br />&#160; &#160; 也就是说这里设置的值会被当做2的指数使用.取值范围是[1,10],也就最多允许1024个节点.<br />&#160; &#160;<br />Memory model<br />&#160; &#160; 内存模式.&quot;Sparse Memory&quot;主要用来支持内存热插拔,相比其他两个旧有的内存模式,<br />&#160; &#160; 代码复杂性也比较低,而且还拥有一些性能上的优势,对某些架构而言是唯一的可选项.<br />&#160; &#160; 其他两个旧有的内存模式是:&quot;Discontiguous Memory&quot;和&quot;Flat Memory&quot;.<br />&#160; &#160;<br />Sparse Memory virtual memmap<br />CONFIG_SPARSEMEM_VMEMMAP<br />&#160; &#160; 对于64位CPU而言,开启此选项可以简化pfn_to_page/page_to_pfn的操作,<br />&#160; &#160; 从而提高内核的运行效率.但是在32位平台则建议关闭.更多细节可以参考这个帖子.<br />&#160; &#160;<br />Enable to assign a node which has only movable memory<br />CONFIG_MOVABLE_NODE<br />&#160; &#160; 允许对一个完整的NUMA节点(CPU和对应的内存)进行热插拔.一般的服务器和个人电脑不需要这么高级的特性.<br />&#160; &#160;<br />Allow for memory hot-add<br />CONFIG_MEMORY_HOTPLUG<br />&#160; &#160; 支持向运行中的系统添加内存.也就是内存热插支持.<br />&#160; &#160; Online the newly added memory blocks by default<br />&#160; &#160; &#160; &#160; 默认情况下，在线添加新添加的内存块<br />&#160; &#160; Allow for memory hot remove<br />&#160; &#160; CONFIG_MEMORY_HOTREMOVE<br />&#160; &#160; &#160; &#160; 支持从运行中的系统移除内存.也就是内存热拔支持.</p><p>Allow for balloon memory compaction/migration<br />CONFIG_BALLOON_COMPACTION<br />&#160; &#160; 允许 balloon memory 压缩/迁移.内存的Ballooning技术是指虚拟机在运行时动态地调整它所占用的宿主机内存资源,<br />&#160; &#160; 该技术在节约内存和灵活分配内存方面有明显的优势,<br />&#160; &#160; 目前所有主流虚拟化方案都支持这项技术(前提是客户机操作系统中必须安装有相应的balloon驱动).<br />&#160; &#160; 由于内存的动态增加和减少会导致内存过度碎片化,特别是对于2M尺寸的连续大内存页来说更加严重,<br />&#160; &#160; 从而严重降低内存性能.允许balloon内存压缩和迁移可以很好的解决在客户机中使用大内存页时内存过度碎片化问题.<br />&#160; &#160; 如果你打算在虚拟机中使用大内存页(huge page),那么建议开启,否则建议关闭.<br />&#160; &#160;<br />Allow for memory compaction<br />CONFIG_COMPACTION<br />&#160; &#160; 允许对大内存页(huge pages)进行压缩.主要是为了解决大内存页的碎片问题.<br />&#160; &#160; 建议在使用大内存页的情况下开启此项,否则建议关闭.<br />&#160; &#160;<br />Page migration<br />CONFIG_MIGRATION<br />&#160; &#160; 允许在保持虚拟内存页地址不变的情况下移动其所对应的物理内存页的位置.<br />&#160; &#160; 这主要是为了解决两个问题:(1)在NUMA系统上,将物理内存转移到相应的节点上,<br />&#160; &#160; 以加快CPU与内存之间的访问速度.(2)在分配大内存页的时候,可以避免碎片问题.<br />&#160; &#160;<br />Enable bounce buffers<br />CONFIG_BOUNCE<br />&#160; &#160; 为那些不能直接访问所有内存范围的驱动程序开启bounce buffer支持.当CONFIG_ZONE_DMA被开启后,<br />&#160; &#160; 这个选项会被默认开启(当然,你也可以在这里手动关闭).<br />&#160; &#160; 这主要是为了那些不具备IOMMU功能的PCI/ISA设备而设,<br />&#160; &#160; 但它对性能有些不利影响.在支持IOMMU的设备上,应该关闭它而是用IOMMU来代替.<br />&#160; &#160;<br />Enable KSM for page merging<br />CONFIG_KSM<br />&#160; &#160; KSM(Kernel Samepage Merging)支持:周期性的扫描那些被应用程序标记为&quot;可合并&quot;的地址空间,<br />&#160; &#160; 一旦发现有内容完全相同的页面,<br />&#160; &#160; 就将它们合并为同一个页面,这样就可以节约内存的使用,<br />&#160; &#160; 但对性能有不利影响.推荐和内核虚拟机KVM(Documentation/vm/ksm.txt)<br />&#160; &#160; 或者其他支持&quot;MADV_MERGEABLE&quot;特性的应用程序一起使用.KSM并不默认开启,<br />&#160; &#160; 仅在应用程序设置了&quot;MADV_MERGEABLE&quot;标记,并且 /sys/kernel/mm/ksm/run 被设为&quot;1&quot;的情况下才会生效.<br />&#160; &#160;<br />Low address space to protect from user allocation<br />CONFIG_DEFAULT_MMAP_MIN_ADDR<br />&#160; &#160; 2009年,内核曾经爆过一个严重的NULL指针漏洞,由于其根源是将NULL指针映射到地址&quot;0&quot;所致,<br />&#160; &#160; 所以从2.6.32版本以后,为了防止此类漏洞再次造成严重后果,特别设置了此选项,<br />&#160; &#160; 用于指定受保护的内存低端地址范围(可以在系统运行时通过 /proc/sys/vm/mmap_min_addr进行调整),<br />&#160; &#160; 这个范围内的地址禁止任何用户态程序的写入,<br />&#160; &#160; 以从根本上堵死此类漏洞可能对系统造成的损害.<br />&#160; &#160; 但内核这种强加的限制,对于需要使用vm86系统调用(用于在保护模式的进程中模拟8086的实模式)<br />&#160; &#160; 或者需要映射此低端地址空间的程序(bitbake,dosemu,qemu,wine,...)来说,<br />&#160; &#160; 则会造成不兼容,不过目前这些程序的新版本都进行了改进,以适应内核的这种保护.<br />&#160; &#160; 一般情况下,&quot;4096&quot;是个明智的选择,或者你也可以保持默认值.<br />&#160; &#160;<br />Enable recovery from hardware memory errors<br />CONFIG_MEMORY_FAILURE<br />&#160; &#160; 在具备MCA(Machine Check Architecture)恢复机制的系统上,允许内核在物理内存中的发生数据错误的情况下,<br />&#160; &#160; 依然坚强的纠正错误并恢复正常运行.这需要有相应的硬件(通常是ECC内存)支持.有ECC内存的选,没有的就别选了.</p><p>&#160; &#160; HWPoison pages injector<br />&#160; &#160; CONFIG_HWPOISON_INJECT<br />&#160; &#160; &#160; &#160; 仅用于调试.</p><p>Transparent Hugepage Support<br />CONFIG_TRANSPARENT_HUGEPAGE<br />&#160; &#160; 大多数现代计算机体系结构都支持多种不同的内存页面大小(比如x86_64支持4K和2M以及1G<br />&#160; &#160; [需要cpu-flags中含有&quot;pdpe1gb&quot;]).大于4K的内存页被称为&quot;大页&quot;(Hugepage).<br />&#160; &#160; TLB(页表缓存)是位于CPU内部的分页表(虚拟地址到物理地址的映射表)缓冲区,<br />&#160; &#160; 既高速又很宝贵(尺寸很小).如果系统内存很大(大于4G)又使用4K的内存页,<br />&#160; &#160; 那么分页表将会变得很大而难以在CPU内缓存,从而导致较高的TLB不命中概率,<br />&#160; &#160; 进而降低系统的运行效率.开启大内存页支持之后,就可以使用大页(2M或1G),<br />&#160; &#160; 从而大大缩小分页表的尺寸以大幅提高TLB的命中率,进而优化系统性能.<br />&#160; &#160; 传统上使用大内存页的方法是通过Hugetlbfs虚拟文件系统(CONFIG_HUGETLBFS),<br />&#160; &#160; 但是hugetlbfs需要专门进行配置以及应用程序的特别支持.<br />&#160; &#160; 所以从2.6.38版本开始引入了THP(Transparent Hugepages),<br />&#160; &#160; 目标是替代先前的Hugetlbfs虚拟文件系统(CONFIG_HUGETLBFS).<br />&#160; &#160; THP允许内核在可能的条件下,透明的(对应用程序来说)使用大页(huge pages)与HugeTLB,<br />&#160; &#160; THP不像hugetlbfs那样需要专门进行配置以及应用程序的特别支持.<br />&#160; &#160; THP将这一切都交给操作系统来完成,也不再需要额外的配置,对于应用程序完全透明,<br />&#160; &#160; 因而可用于更广泛的应用程序.这对于数据库/KVM等需要使用大量内存的应用来说,<br />&#160; &#160; 可以提升其效能,但对于内存较小(4G或更少)的个人PC来说就没啥必要了.详见&quot;Documentation/vm/transhuge.txt&quot;文档.</p><p>&#160; &#160; Transparent Hugepage Support sysfs defaults<br />&#160; &#160; &#160; &#160; 设置 /sys/kernel/mm/transparent_hugepage/enabled 文件的默认值.<br />&#160; &#160; &#160; &#160; &quot;always&quot;表示总是对所有应用程序启用透明大内存页支持,<br />&#160; &#160; &#160; &#160; &quot;madvise&quot;表示仅对明确要求该特性的程序启用.建议选&quot;always&quot;.</p><p>Cross Memory Support<br />CONFIG_CROSS_MEMORY_ATTACH<br />&#160; &#160; 交叉内存支持,也就是process_vm_readv()和process_vm_writev()系统调用支持.<br />&#160; &#160; 从而允许有权限的进程直接读取/写入另外一个进程的地址空间.<br />&#160; &#160; 现在它们只用于openMPI快速进程通信,也可以用于调试程序.未来也许还会有其他用途.<br />&#160; &#160;<br />Enable cleancache driver to cache clean pages if tmem is present<br />CONFIG_CLEANCACHE<br />&#160; &#160; Cleancache可以被看作是内存页的&quot;Victim Cache&quot;(受害者缓存),当回收内存页时,先不把它清空,<br />&#160; &#160; 而是把其加入到内核不能直接访问的&quot;transcendent memory&quot;中,<br />&#160; &#160; 这样支持Cleancache的文件系统再次访问这个页时可以直接从&quot;transcendent memory&quot;加载它,<br />&#160; &#160; 从而减少磁盘IO的损耗.目前只有zcache和XEN支持&quot;transcendent memory&quot;,不过将来会有越来越多的应用支持.<br />&#160; &#160; 开启此项后即使此特性不能得到利用,也仅对性能有微小的影响,<br />&#160; &#160; 所以建议开启.更多细节请参考&quot;Documentation/vm/cleancache.txt&quot;文件.<br />&#160; &#160;<br />Enable frontswap to cache swap pages if tmem is present<br />CONFIG_FRONTSWAP<br />&#160; &#160; Frontswap是和Cleancache非常类似的东西,在传统的swap前加一道内存缓冲<br />&#160; &#160; (同样位于&quot;transcendent memory&quot;中).目的也是减少swap时的磁盘读写.建议开启.</p><p>Contiguous Memory Allocator<br />&#160; &#160; 连续内存分配器<br />Track memory changes<br />&#160; &#160; 跟踪记忆变化<br />Compressed cache for swap pages<br />&#160; &#160; 交换页面的压缩缓存<br />Common API for compressed memory storage<br />&#160; &#160; 压缩内存存储的通用API<br />Low (Up to 2x) density storage for compressed pages<br />&#160; &#160; 压缩页面的密度低(最多2倍)<br />Up to 3x density storage for compressed pages<br />压缩页面的密度高达3倍<br />Memory allocator for compressed pages<br />&#160; &#160; 压缩页面的内存分配器<br />Defer initialisation of struct pages to kthreads<br />&#160; &#160; 将struct页面初始化为kthreads<br />Enable idle page tracking<br />&#160; &#160; 启用空闲页面跟踪<br />Collect percpu memory statistics<br />&#160; &#160; 收集percpu内存统计信息<br />Support non-standard NVDIMMs and ADR protected memory<br />&#160; &#160; 支持非标准NVDIMM和ADR保护的内存<br />&#160; &#160;<br />Check for low memory corruption<br />CONFIG_X86_CHECK_BIOS_CORRUPTION<br />&#160; &#160; 低位内存脏数据检查,即使开启此选项,默认也不会开启此功能<br />&#160; &#160; (需要明确使用&quot;memory_corruption_check=1&quot;内核引导选项).<br />&#160; &#160; 这些脏数据通常被认为是有bug的BIOS引起的,默认每60秒<br />&#160; &#160; (可以通过memory_corruption_check_period内核参数进行调整)扫描一次0-64k<br />&#160; &#160; (可以通过memory_corruption_check_size内核参数进行调整)之间的区域.<br />&#160; &#160; 这种检查所占用的开销非常小,基本可以忽略不计.如果始终检查到错误,<br />&#160; &#160; 则可以通过&quot;memmap=&quot;内核引导参数来避免使用这段内存.一般没必要选中,<br />&#160; &#160; 如果你对BIOS不放心,带着它试运行一段时间,确认没问题之后再去掉.</p><p>&#160; &#160; Set the default setting of memory_corruption_check<br />&#160; &#160; CONFIG_X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK<br />&#160; &#160; &#160; &#160; 设置memory_corruption_check的默认值,选中表示默认开启<br />&#160; &#160; &#160; &#160; (相当于使用&quot;memory_corruption_check=1&quot;内核引导选项),不选中表示默认关闭.</p><p>Amount of low memory, in kilobytes, to reserve for the BIOS<br />CONFIG_X86_RESERVE_LOW<br />&#160; &#160; 为BIOS设置保留的低端地址(默认是64K).内存的第一页(4K)存放的必定是BIOS数据,内核不能使用,<br />&#160; &#160; 所以必须要保留.但是有许多BIOS还会在suspend/resume/热插拔等事件发生的时候使用更多的页<br />&#160; &#160; (一般在0-64K范围),所以默认保留0-64K范围.如果你确定自己的BIOS不会越界使用内存的话,<br />&#160; &#160; 可以设为&quot;4&quot;,否则请保持默认值.但是也有一些很奇葩的BIOS会使用更多的低位内存,<br />&#160; &#160; 这种情况下可以考虑设为&quot;640&quot;以保留所有640K的低位内存区域.<br />&#160; &#160;<br />MTRR (Memory Type Range Register) support<br />CONFIG_MTRR<br />&#160; &#160; MTRR(Memory type range registers)是CPU内的一组MSR(Model-specific registers),<br />&#160; &#160; 其作用是告诉CPU以哪种模式(write-back/uncachable)存取各内存区段效率最高.<br />&#160; &#160; 这对于AGP/PCI显卡意义重大,因为write-combining技术可以将若干个总线写传输捆绑成一次较大的写传输操作,<br />&#160; &#160; 可以将图像写操作的性能提高2.5倍或者更多.这段代码有着通用的接口,<br />&#160; &#160; 其他CPU的寄存器同样能够使用该功能.简而言之,开启此选项是个明智的选择.</p><p>&#160; &#160; MTRR cleanup support<br />&#160; &#160; CONFIG_MTRR_SANITIZER<br />&#160; &#160; &#160; &#160; MTRR cleanup的意思是将MTRR的连续输出转为离散的输出,这样X驱动就可以在其中添加writeback项,<br />&#160; &#160; &#160; &#160; 算是一种优化措施.建议开启.可以使用&quot;mtrr_chunk_size&quot;来限制最大的连续块尺寸.</p><p>&#160; &#160; &#160; &#160; MTRR cleanup enable value (0-1)<br />&#160; &#160; &#160; &#160; CONFIG_MTRR_SANITIZER_ENABLE_DEFAULT<br />&#160; &#160; &#160; &#160; &#160; &#160; &quot;1&quot;表示默认开启CONFIG_MTRR_SANITIZER特性,相当于使用&quot;enable_mtrr_cleanup&quot;,<br />&#160; &#160; &#160; &#160; &#160; &#160; &quot;0&quot;表示默认关闭CONFIG_MTRR_SANITIZER特性,相当于使用&quot;disable_mtrr_cleanup&quot;.建议设为&quot;1&quot;.<br />&#160; &#160; &#160; &#160; &#160; &#160;<br />&#160; &#160; &#160; &#160; MTRR cleanup spare reg num (0-7)<br />&#160; &#160; &#160; &#160; CONFIG_MTRR_SANITIZER_SPARE_REG_NR_DEFAULT<br />&#160; &#160; &#160; &#160; &#160; &#160; 这里设定的值等价于使用内核引导参数&quot;mtrr_spare_reg_nr=N&quot;中的&quot;N&quot;.<br />&#160; &#160; &#160; &#160; &#160; &#160; 也就是告诉内核reg0N可以被清理或改写(参见&quot;/proc/mtrr&quot;文件).<br />&#160; &#160; &#160; &#160; &#160; &#160; 在多数情况下默认值是&quot;1&quot;,其含义是 /proc/mtrr 中的 reg01 将会被映射.一般保持其默认值即可.<br />&#160; &#160; &#160; &#160; &#160; &#160; 修改此项的值通常是为了解决某些MTRR故障.</p><p>&#160; &#160; x86 PAT support<br />&#160; &#160; CONFIG_X86_PAT<br />&#160; &#160; &#160; &#160; PAT(Page Attribute Table)是对MTRR的补充,且比MTRR更灵活.<br />&#160; &#160; &#160; &#160; 如果你的CPU支持PAT(grep pat /proc/cpuinfo),那么建议开启.<br />&#160; &#160; &#160; &#160; 仅在开启后导致无法正常启动或者显卡驱动不能正常工作的情况下才需要关闭.</p><p>x86 architectural random number generator<br />CONFIG_ARCH_RANDOM<br />&#160; &#160; Intel 从 Ivy Bridge 微架构开始(对于Atom来说是从Silvermont开始),<br />&#160; &#160; 在CPU中集成了一个高效的硬件随机数生成器(称为&quot;Bull Mountain&quot;技术),并引入了一个新的x86指令&quot;RDRAND&quot;,<br />&#160; &#160; 可以非常高效的产生随机数.此选项就是对此特性的支持.<br />&#160; &#160;<br />Supervisor Mode Access Prevention<br />CONFIG_X86_SMAP<br />&#160; &#160; SMAP(Supervisor Mode Access Prevention)是Intel从Haswell微架构开始引入的一种新特征,它在CR4寄存器上引入一个新标志位SMAP,<br />&#160; &#160; 如果这个标志为1,内核访问用户进程的地址空间时就会触发一个页错误,<br />&#160; &#160; 目的是为了防止内核因为自身错误意外访问用户空间,这样就可以避免一些内核漏洞所导致的安全问题.<br />&#160; &#160; 但是由于内核在有些时候仍然需要访问用户空间,因此intel提供了两条指令STAC和CLAC用于临时打开/关闭这个功能,<br />&#160; &#160; 反复使用STAC和CLAC会带来一些轻微的性能损失,但考虑到增加的安全性,还是建议开启.</p><p>Intel MPX (Memory Protection Extensions)<br />&#160; &#160; 英特尔MPX(内存保护扩展)<br />Intel Memory Protection Keys<br />&#160; &#160; 英特尔内存保护密钥</p><p>EFI runtime service support<br />CONFIG_EFI<br />&#160; &#160; EFI/UEFI支持.如果你打算在UEFI/EFI平台上安装Linux(2009年之后的机器基本都已经是UEFI规格了),<br />&#160; &#160; 那么就必须开启此项(开启后也依然可以在传统的BIOS机器上启动).<br />&#160; &#160; UEFI启动流程与传统的BIOS相差很大.虽然Linux受到了所谓&quot;安全启动&quot;问题的阻挠(已经解决),<br />&#160; &#160; 但是UEFI依然将迅速一统江湖.[提示]在UEFI平台上安装Linux的关键之一是首先要用<br />&#160; &#160; 一个支持UEFI启动的LiveCD以UEFI模式启动机器.</p><p>&#160; &#160; EFI stub support<br />&#160; &#160; CONFIG_EFI_STUB<br />&#160; &#160; &#160; &#160; EFI stub 支持.如果开启此项,就可以不通过GRUB2之类的引导程序来加载内核,而直接由EFI固件进行加载,<br />&#160; &#160; &#160; &#160; 这样就可以不必安装引导程序了.不过这是一个看上去很美的特性,由于EFI固件只是简单的加载内核并运行,<br />&#160; &#160; &#160; &#160; 所以缺点有三:(1)不能在传统的BIOS机器上启动.(2)不能给内核传递引导参数.<br />&#160; &#160; &#160; &#160; (3)不能使用intrd.不过,针对后两点的解决办法是:使用CONFIG_CMDLINE和CONFIG_INITRAMFS_SOURCE.<br />&#160; &#160; &#160; &#160; 更多细节可参考&quot;Documentation/x86/efi-stub.txt&quot;文档.<br />&#160; &#160; &#160; &#160; &#160;<br />&#160; &#160; &#160; &#160; EFI mixed-mode support<br />&#160; &#160; &#160; &#160;<br />&#160; &#160; &#160; &#160;<br />Enable seccomp to safely compute untrusted bytecode<br />CONFIG_SECCOMP<br />&#160; &#160; 允许使用SECCOMP技术安全地运算非信任代码.通过使用管道或其他进程可用的通信方式作为文件描述符(支持读/写调用),<br />&#160; &#160; 就可以利用SECCOMP把这些应用程序隔离在它们自己的地址空间.<br />&#160; &#160; 这是一种有效的安全沙盒技术.除非你是嵌入式系统,否则不要关闭.<br />&#160; &#160;<br />Enable -fstack-protector buffer overflow detection<br />CONFIG_CC_STACKPROTECTOR<br />&#160; &#160; 开启GCC的&quot;-fstack-protector&quot;命令行选项,以使用GCC中的编译器堆栈保护技术.<br />&#160; &#160; 这样可以有效的防御以堆栈溢出为代表的缓冲区溢出攻击,不过系统的运行速度也会受到一些影响.<br />&#160; &#160; 服务器之类强调安全的场合建议开启,个人PC之类的就不是很有必要了.<br />&#160; &#160;<br />Timer frequency<br />&#160; &#160; 内核时钟频率.对于要求快速响应的场合,比如桌面环境,建议使用1000Hz,<br />&#160; &#160; 而对于不需要快速响应的SMP/NUMA服务器,建议使用250Hz或100Hz或300Hz(主要处理多媒体数据).<br />&#160; &#160;<br />kexec system call<br />CONFIG_KEXEC<br />&#160; &#160; 提供kexec系统调用,可以不必重启而切换到另一个内核(不一定必须是Linux内核),<br />&#160; &#160; 不过这个特性并不总是那么可靠.如果你不确定是否需要它,那么就是不需要.<br />&#160; &#160;<br />kernel crash dumps<br />CONFIG_CRASH_DUMP<br />&#160; &#160; 当内核崩溃时自动导出运行时信息的功能,主要用于调试目的.更多信息请参考&quot;Documentation/kdump/kdump.txt&quot;文件.<br />&#160; &#160;<br />kexec jump<br />CONFIG_KEXEC_JUMP<br />&#160; &#160; kexec jump 支持.这是对CONFIG_KEXEC的增强功能,仅在你确实明白这是干啥的情况下再开启,否则请关闭.<br />&#160; &#160;<br />Physical address where the kernel is loaded<br />CONFIG_PHYSICAL_START<br />&#160; &#160; 加载内核的物理地址.如果内核不是可重定位的(CONFIG_RELOCATABLE=n),<br />&#160; &#160; 那么bzImage会将自己解压到该物理地址并从此地址开始运行,否则,bzImage将忽略此处设置的值,<br />&#160; &#160; 而从引导装载程序将其装入的物理地址开始运行.仅在你确实知道自己是在干什么的情况下才可以改变该值,<br />&#160; &#160; 否则请保持默认.<br />&#160; &#160;<br />Build a relocatable kernel<br />CONFIG_RELOCATABLE<br />&#160; &#160; 使内核可以在浮动的物理内存位置加载,主要用于调试目的.仅在你确实知道为什么需要的时候再开启,否则请关闭.<br />&#160; &#160; Randomize the address of the kernel image<br />&#160; &#160; &#160; &#160;随机化内核映像的地址<br />&#160; &#160; &#160; &#160;lignment value to which kernel should be aligned<br />&#160; &#160; &#160; &#160; &#160; &#160;内核应该对齐的lignment值</p><p>Randomize the kernel memory sections<br />&#160; &#160; 随机化内核内存部分<br />&#160; &#160; Physical memory mapping padding<br />&#160; &#160; &#160; &#160; 物理内存映射填充<br />&#160; &#160;<br />Support for hot-pluggable CPUs<br />CONFIG_HOTPLUG_CPU<br />&#160; &#160; 热插拔CPU支持(通过 /sys/devices/system/cpu 进行控制).</p><p>&#160; &#160; Set default setting of cpu0_hotpluggable<br />&#160; &#160; CONFIG_BOOTPARAM_HOTPLUG_CPU0<br />&#160; &#160; &#160; &#160; 开启/关闭此项的意思是设置&quot;cpu0_hotpluggable&quot;的默认值为&quot;on/off&quot;.开启此项表示默认将CPU0设置为允许热插拔.<br />&#160; &#160; &#160; &#160;<br />&#160; &#160; Debug CPU0 hotplug<br />&#160; &#160; CONFIG_DEBUG_HOTPLUG_CPU0<br />&#160; &#160; &#160; &#160; 仅用于调试目的.</p><p>Compat VDSO support<br />CONFIG_COMPAT_VDSO<br />&#160; &#160; 是否将VDSO(Virtual Dynamic Shared Object)映射到旧式的确定性地址.<br />&#160; &#160; 如果Glibc版本大于等于2.3.3选&quot;N&quot;,否则就选&quot;Y&quot;.</p><p>Disable the 32-bit vDSO (needed for glibc 2.3.3)<br />&#160; &#160; 禁用32位vDSO（glibc 2.3.3所需）<br />&#160; &#160; vsyscall table for legacy applications<br />&#160; &#160; &#160; &#160; 遗留应用程序的vsyscall表</p><p>Built-in kernel command line<br />CONFIG_CMDLINE_BOOL<br />&#160; &#160; 将内核引导参数直接编进来.在无法向内核传递引导参数的情况下<br />&#160; &#160; (比如在嵌入式系统上,或者想使用 EFI stub kernel),这就是唯一的救命稻草了.<br />&#160; &#160; 如果你使用grub之类的引导管理器,那么就可以不需要此特性.</p><p>&#160; &#160; Built-in kernel command string<br />&#160; &#160; CONFIG_CMDLINE<br />&#160; &#160; &#160; &#160; 将要编译进内核的引导参数字符串.<br />&#160; &#160; &#160; &#160;<br />&#160; &#160; Built-in command line overrides boot loader arguments<br />&#160; &#160; CONFIG_CMDLINE_OVERRIDE<br />&#160; &#160; &#160; &#160; 开启此项表示完全忽略引导加载器传递过来的参数,并仅仅只使用CONFIG_CMDLINE所指定的参数.<br />&#160; &#160; &#160; &#160; 通常情况下建议关闭此项,除非你确定引导加载器在传递内核引导参数的时候不能正常工作.</p><p>Enable the LDT (local descriptor table)<br />&#160; &#160; &#160;启用LDT（本地描述符表）</p>]]></description>
			<author><![CDATA[dummy@example.com (batsom)]]></author>
			<pubDate>Wed, 03 Aug 2022 14:31:10 +0000</pubDate>
			<guid>http://www.gentoo-zh.org/viewtopic.php?pid=8#p8</guid>
		</item>
	</channel>
</rss>
