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