Linux310内核编译选项.docx

上传人:b****3 文档编号:4143922 上传时间:2022-11-28 格式:DOCX 页数:30 大小:42.01KB
下载 相关 举报
Linux310内核编译选项.docx_第1页
第1页 / 共30页
Linux310内核编译选项.docx_第2页
第2页 / 共30页
Linux310内核编译选项.docx_第3页
第3页 / 共30页
Linux310内核编译选项.docx_第4页
第4页 / 共30页
Linux310内核编译选项.docx_第5页
第5页 / 共30页
点击查看更多>>
下载资源
资源描述

Linux310内核编译选项.docx

《Linux310内核编译选项.docx》由会员分享,可在线阅读,更多相关《Linux310内核编译选项.docx(30页珍藏版)》请在冰豆网上搜索。

Linux310内核编译选项.docx

Linux310内核编译选项

Linux-3.10-x86_64内核配置选项简介

64-bitkernel

CONFIG_64BIT

编译64位内核.本文仅讲述x86_64(AMD64)平台的内核编译,所以这个是必选项.

Generalsetup

常规设置

Cross-compilertoolprefix

CONFIG_CROSS_COMPILE

交叉编译工具前缀(比如"arm-linux-"相当于使用"makeCROSS_COMPILE=arm-linux-"进行编译).除非你想配置后默认自动进行交叉编译,否则不要使用此选项.

Localversion-appendtokernelrelease

CONFIG_LOCALVERSION

在内核版本后面加上自定义的版本字符串(最大64字符),可以用"uname-a"命令看到

Automaticallyappendversioninformationtotheversionstring

CONFIG_LOCALVERSION_AUTO

自动在版本字符串(CONFIG_LOCALVERSION)后面添加版本信息(类似"-gxxxxxxxx"格式),需要有perl以及git仓库支持

Kernelcompressionmode

内核镜像的压缩格式,可选Gzip/Bzip2/LZMA/XZ/LZO格式之一,推荐使用XZ格式.你的系统中需要有相应的压缩工具.

Defaulthostname

CONFIG_DEFAULT_HOSTNAME

设置默认主机名,默认值是"(none)".用户可以随后使用系统调用sethostname()来修改主机名.

Supportforpagingofanonymousmemory(swap)

CONFIG_SWAP

使用交换分区或者交换文件来做为虚拟内存

SystemVIPC

CONFIG_SYSVIPC

SystemV 进程间通信(IPC)支持,用于进程间同步和交换数据,许多程序需要这个功能.选"Y",除非你确实知道自己在做什么

POSIXMessageQueues

CONFIG_POSIX_MQUEUE

POSIX消息队列是POSIXIPC的一部分,如果你想编译和运行那些使用"mq_*"系统调用的程序(比如为Solaris开发的程序),就必须开启此选项.POSIX消息队列可以作为"mqueue"文件系统挂载以方便用户对队列进行操作.不确定的选"Y".

openbyfhandlesyscalls

CONFIG_FHANDLE

用户程序可以使用句柄(而非文件名)来追踪文件(使用open_by_handle_at

(2)/name_to_handle_at

(2)系统调用),即使某文件被重命名,用户程序依然可定位那个文件.此特性有助于实现用户空间文件服务器(userspace).建议选"Y",因为systemd和udev依赖于它.

Auditingsupport

CONFIG_AUDIT

内核审计(跟踪每个进程的活动情况)支持,某些安全相关的内核子系统(例如SELinux)需要它.但是它会与systemd冲突,所以在使用systemd的系统上必须关闭.

Enablesystem-callauditingsupport

CONFIG_AUDITSYSCALL

对系统调用进行审计.既可独立使用,也可被其他内核子系统(例如SELinux)使用.

Makeauditloginuidimmutable

CONFIG_AUDIT_LOGINUID_IMMUTABLE

审计时使用固定的loginuid.在使用systemd之类的系统上应该开启(login服务由init进程负责重启),在使用SysVinit或Upstart之类的系统上应该关闭(login服务由系统管理员手动重启).OpenRC就是一个基于SysVinit的系统.

IRQsubsystem

IRQ(中断请求)子系统

Exposehardware/virtualIRQmappingviadebugfs

CONFIG_IRQ_DOMAIN_DEBUG

通过debugfs中的irq_domain_mapping文件向用户显示硬件IRQ号/LinuxIRQ号之间的对应关系.仅用于开发调试.

Supportsparseirqnumbering

CONFIG_SPARSE_IRQ

稀疏IRQ号支持.它允许在小型设备上(例如嵌入式设备)定义一个很高的CONFIG_NR_CPUS值,但仍然不希望占用太多内核"memoryfootprint"(一段可以被操作或被管理的内存区域)的场合.稀疏IRQ也更适合NUMA平台,因为它以一种对NUMA更友好的方式分发中断描述符.不确定的选"N".

Timerssubsystem

Linux内核时钟子系统

Timertickhandling

内核时钟滴答处理程序,更多信息可以参考内核源码树下的"Documentation/timers/NO_HZ.txt"文件

Periodictimerticks(constantrate,nodynticks)

CONFIG_HZ_PERIODIC

无论CPU是否需要,都强制按照固定频率不断触发时钟中断.这是最耗电的方式,不推荐使用

Idledyntickssystem(ticklessidle)

CONFIG_NO_HZ_IDLE

CPU在空闲状态时不产生不必要的时钟中断,以使处理器能够在较低能耗状态下运行以节约电力,适合于大多数场合

Fulldyntickssystem(tickless)

CONFIG_NO_HZ_FULL

完全无滴嗒:

即使CPU在忙碌状态也尽可能关闭所有时钟中断,适用于CPU在同一时间仅运行一个任务,或者用户空间程序极少与内核交互的场合.即使开启此选项,也需要额外设置"nohz_full=?

"内核命令行参数才能真正生效.

FulldyntickssystemonallCPUsbydefault

CONFIG_NO_HZ_FULL_ALL

即使没有设置"nohz_full"引导参数,也默认对所有CPU(bootCPU除外)开启完全无滴答特性.

OldIdledynticksconfig

CONFIG_NO_HZ

等价于CONFIG_NO_HZ_IDLE,临时用来兼容老版本内核选项,未来会被删除.

HighResolutionTimerSupport

CONFIG_HIGH_RES_TIMERS

高精度定时器(hrtimer)是从2.6.16开始引入,用于取代传统timerwheel(基于jiffies定时器)的时钟子系统.可以降低与内核其他模块的耦合性,还可以提供比1毫秒更高的精度(因为它可以读取HPET/TSC等新型硬件时钟源),可以更好的支持音视频等对时间精度要求较高的应用.建议选"Y".[提示]这里说的"定时器"是指"软件定时器",而不是主板或CPU上集成的硬件时钟发生器(ACPIPMTimer/HPETTimer/TSCTimer).

CPU/Tasktimeandstatsaccounting

CPU/进程的时间及状态统计

Cputimeaccounting

CPU时间统计方式

Simpletickbasedcputimeaccounting

CONFIG_TICK_CPU_ACCOUNTING

简单的基于滴答的统计,适用于大多数场合

DeterministictaskandCPUtimeaccounting

CONFIG_VIRT_CPU_ACCOUNTING_NATIVE

通过读取CPU计数器进行统计,可以提供更精确的统计,但是对性能有一些不利影响.

FulldynticksCPUtimeaccounting

CONFIG_VIRT_CPU_ACCOUNTING_GEN

利用上下文跟踪子系统,通过观察每一个内核与用户空间的边界进行统计.该选项对性能有显著的不良影响,目前仅用于完全无滴答子系统(CONFIG_NO_HZ_FULL)的调试

FinegranularitytasklevelIRQtimeaccounting

CONFIG_IRQ_TIME_ACCOUNTING

通过读取TSC时间戳进行统计,这是统计进程IRQ时间的更细粒度的统计方式,但对性能有些不良影响(特别是在RDTSC指令速度较慢的CPU上).

BSDProcessAccounting

CONFIG_BSD_PROCESS_ACCT

用户空间程序可以要求内核将进程的统计信息写入一个指定的文件,主要包括进程的创建时间/创建者/内存占用等信息.

BSDProcessAccountingversion3

CONFIG_BSD_PROCESS_ACCT_V3

使用新的v3版文件格式,可以包含每个进程的PID和其父进程的PID,但是不兼容老版本的文件格式.比如 GNUAccountingUtilities 这样的工具可以识别v3格式

Exporttask/processstatisticsthroughnetlink

CONFIG_TASKSTATS

通过netlink接口向用户空间导出进程的统计信息,与BSDProcessAccounting的不同之处在于这些统计信息在整个进程生存期都是可用的.

Enableper-taskdelayaccounting

CONFIG_TASK_DELAY_ACCT

在统计信息中包含进程等候系统资源(cpu,IO同步,内存交换等)所花费的时间

Enableextendedaccountingovertaskstats

CONFIG_TASK_XACCT

在统计信息中包含进程的更多扩展信息.

Enableper-taskstorageI/Oaccounting

CONFIG_TASK_IO_ACCOUNTING

在统计信息中包含进程在存储设备上的I/O字节数.

RCUSubsystem

RCU(Read-CopyUpdate)子系统.在读多写少的情况下,这是一个高性能的锁机制,对于被RCU保护的共享数据结构,读者不需要获得任何锁就可以访问它(速度非常快),但写者在访问它时首先拷贝一个副本,然后对副本进行修改,最后使用一个回调机制在适当的时机把指向原来数据的指针重新指向新的被修改的数据,速度非常慢.RCU只适用于读多写少的情况:

如网络路由表的查询更新,设备状态表的维护,数据结构的延迟释放以及多径I/O设备的维护等.

RCUImplementation

RCU的实现方式

Tree-basedhierarchicalRCU

CONFIG_TREE_RCU

基于树型分层结构的实现.最适用于多CPU的非实时系统.

Preemptibletree-basedhierarchicalRCU

CONFIG_TREE_PREEMPT_RCU

抢占式基于树型分层结构的实现.最适用于那些要求快速响应的多CPU实时系统.

UP-onlysmall-memory-footprintRCU

CONFIG_TINY_RCU

最简单的实现,能够大幅降低RCU系统的内存占用.最适用于单CPU的非实时系统.

PreemptibleUP-onlysmall-memory-footprintRCU

CONFIG_TINY_PREEMPT_RCU

抢占式简单实现,能够大幅降低RCU系统的内存占用.最适用于那些要求快速响应的单CPU实时系统.

ConsideruserspaceasinRCUextendedquiescentstate

CONFIG_RCU_USER_QS

在内核和用户边界设置钩子函数,将运行在用户态的CPU从全局RCU状态机制中移除,这样就不会在RCU系统中维护此CPU的时钟滴答.除非你想要帮助开发CONFIG_NO_HZ_FULL模块,否则不要打开此选项,而且它还会对性能有不利影响.

Forcecontexttracking

CONFIG_CONTEXT_TRACKING_FORCE

默认在内核和用户边界进行探测(上下文跟踪),以便测试依赖于此特性的各种功能(比如用户空间的RCUextendedquiescentstate),这个特性目前仅用于调试目的,未来也许会用于为CONFIG_NO_HZ_FULL模块提供支持

Tree-basedhierarchicalRCUfanoutvalue

CONFIG_RCU_FANOUT

这个选项控制着树形RCU层次结构的端点数(fanout),以允许RCU子系统在拥有海量CPU的系统上高效工作.这个值必须至少等于CONFIG_NR_CPUS的1/4次方(4次根号).生产系统上应该使用默认值(64).仅在你想调试RCU子系统时才需要减小此值.

Tree-basedhierarchicalRCUleaf-levelfanoutvalue

CONFIG_RCU_FANOUT_LEAF

这个选项控制着树形RCU层次结构的叶子层的端点数(leaf-levelfanout).对于期望拥有更高能耗比(更节能)的系统,请保持其默认值(16).对于拥有成千上万个CPU的系统来说,应该考虑将其设为最大值(CONFIG_RCU_FANOUT).

Disabletree-basedhierarchicalRCUauto-balancing

CONFIG_RCU_FANOUT_EXACT

强制按照CONFIG_RCU_FANOUT_LEAF的值,而不是使用自动平衡树结构来实现RCU子系统.目前仅用于调试目的.未来也许会用于增强NUMA系统的性能.

Acceleratelastnon-dyntick-idleCPU'sgraceperiods

CONFIG_RCU_FAST_NO_HZ

即使CPU还在忙碌,也允许进入dynticks-idle状态,并且阻止RCU每4个滴答就唤醒一次该CPU,这样能够更有效的使用电力,同时也拉长了RCUgraceperiod的时间,造成性能降低.如果能耗比对你而言非常重要(你想节省每一分电力),并且你不在乎系统性能的降低(CPU唤醒时间增加),可以开启此选项.台式机和服务器建议关闭此选项.

EnableRCUpriorityboosting

CONFIG_RCU_BOOST

允许提升RCU子系统的实时优先级(包括读操作与写操作),以避免RCU操作被阻塞太长时间.如果系统的CPU负载经常很重,或者你需要快速的实时响应系统,那么就选"Y",否则应该选"N".

Real-timeprioritytoboostRCUreadersto

CONFIG_RCU_BOOST_PRIO

允许提升被长时间抢占(阻塞)的RCU读操作的实时优先级到什么程度.取值范围是[1,99].默认值"1"适用于实时应用程序中不包含CPU密集型(CPU-bound)线程的常规场合(例如大多数桌面系统).但是如果你的实时应用程序拥有一个或多个CPU密集型线程,那么可能需要增加这个值,具体可以参考内核帮助的说明.仅在你确实理解了的情况下再改变默认值.

MillisecondstodelayboostingafterRCUgrace-periodstart

CONFIG_RCU_BOOST_DELAY

在提升RCU读操作的优先级之前,允许有多长时间潜伏期(阻塞),取值范围是[0,3000],单位是毫秒,默认值是"500".不确定的请使用默认值.

OffloadRCUcallbackprocessingfromboot-selectedCPUs

CONFIG_RCU_NOCB_CPU

如果你想帮助调试内核可以开启,否则请关闭.

Build-forcedno-CBsCPUs

在开启CONFIG_RCU_NOCB_CPU选项的情况下,指定哪些CPU是No-CBCPU,相当于预先设置"rcu_nocbs="内核引导参数.

Kernel.configsupport

CONFIG_IKCONFIG

把内核的配置信息编译进内核中,以后可以通过scripts/extract-ikconfig脚本从内核镜像中提取这些信息

Enableaccessto.configthrough/proc/config.gz

CONFIG_IKCONFIG_PROC

允许通过/proc/config.gz文件访问内核的配置信息

Kernellogbuffersize

CONFIG_LOG_BUF_SHIFT

设置内核日志缓冲区的大小:

12(最小值)=4KB,...,16=64KB,17=128KB,18=256KB,...,21(最大值)=2048KB

AutomaticallyenableNUMAawarememory/taskplacement

CONFIG_NUMA_BALANCING_DEFAULT_ENABLED

在NUMA(Non-UniformMemoryAccessArchitecture)系统上自动启用进程/内存均衡,也就是自动开启CONFIG_NUMA_BALANCING特性.

MemoryplacementawareNUMAscheduler

CONFIG_NUMA_BALANCING

允许自动根据NUMA系统的节点分布状况进行进程/内存均衡(方法很原始,就是简单的内存移动).这个选项对UMA系统无效.[提示]UMA系统的例子:

(1)只有一颗物理CPU(即使是多核)的电脑,

(2)不支持"虚拟NUMA",或"虚拟NUMA"被禁用的虚拟机(即使所在的物理机是NUMA系统)

ControlGroupsupport

CONFIG_CGROUPS

Cgroup(ControlGroup)是一种进程管理机制,可以针对一组进程进行系统资源的分配和管理,可用于Cpusets,CFS(完全公平调度器),内存管理等子系统.此外,systemd也依赖于它.更多细节可以参考内核的"Documentation/cgroups/cgroups.txt"文件

Exampledebugcgroupsubsystem

CONFIG_CGROUP_DEBUG

导出cgroups框架的调试信息,仅用于调试目的.

Freezercgroupsubsystem

CONFIG_CGROUP_FREEZER

允许冻结/解冻cgroup内所有进程

Devicecontrollerforcgroups

CONFIG_CGROUP_DEVICE

允许为cgroup建立设备白名单,这样cgroup内的进程将仅允许对白名单中的设备进行mknod/open操作

Cpusetsupport

CONFIG_CPUSETS

CPUSET支持:

允许将CPU和内存进行分组,并指定某些进程只能运行于特定的分组.这里有一篇CPUSET的用法

Includelegacy/proc//cpuset

提供过时的/proc//cpuset文件接口

SimpleCPUaccountingcgroupsubsystem

CONFIG_CGROUP_CPUACCT

提供一个简单的资源控制器(ResourceController,用于实现一组任务间的资源共享),以监控cgroup内所有进程的总CPU使用量.

Resourcecounters

CONFIG_RESOURCE_COUNTERS

为cgroup提供独立于controller资源计数器

MemoryResourceControllerforControlGroups

CONFIG_MEMCG

为cgroup添加内存资源控制器,包含匿名内存和页面缓存(Documentation/cgroups/memory.txt).开启此选项后,将会增加关联到每个内存页fixedmemory大小,具体在64位系统上是40bytes/PAGE_SIZE.仅在你确实明白什么是 memoryresourcecontroller 并且确实需要的情况下才开启此选项.此功能可以通过命令行选项"cgroup_disable=memory"进行关闭.

MemoryResourceControllerS

CONFIG_MEMCG_SWAP

给 MemoryResourceController 添加对swap的管理功能.这样就可以针对每个cgroup限定其使用的mem+swap总量.如果关闭此选项,memoryresourcecontroller将仅能限制mem的使用量,而无法对swap进行控制(进程有可能耗尽swap).开启此功能会对性能有不利影响,并且为了追踪swap的使用也会消耗更多的内存(如果swap的页面大小是4KB,那么每1GB的swap需要额外消耗512KB内存),所以在内存较小的系统上不建议开启.

MemoryResourceControllerSenabledbydefault

CONFIG_MEMCG_S

如果开启此选项,那么将默认开启CONFIG_MEMCG_SWAP特性,否则将默认关闭.即使默认开启也可以通过内核引导参数"s"禁止此特性.

MemoryResourceControllerKernelMemoryaccounting

CONFIG_MEMCG_KMEM

为MemoryResourceController添加对内核对象所占用内存的管理功能.和标准的MemoryResourceController对内存的控制不一样之处在于:

这些内核对象所占用的内存是基于每个内存页的,并且可以被swap到硬盘.使用这个功能可以确保cgroup中的进程不会单独耗尽所有内核资源.

HugeTLBResourceControllerforControlGroups

CONFIG_CGROUP_HUGETLB

为cgroup添加对HugeTLB页的资源控制功能.开启此选项之后,你就可以针对每个cgroup限定其对HugeTLB的使用.

Enableperf_eventper-cpuper-containergroup(cgroup)monitoring

CONFIG_CGROUP_PERF

将per-cpu模式进行扩展,使其可以监控属于特定cgroup并运行于特定CPU上的线程

GroupCPUscheduler

CONFIG_CGROUP_SCHED

让CPU调度程序可以在不同的cgroup之间分配CPU的带宽.systemd资源控制单元(resourcecontrolunit)的CPUShares功能依赖于它.

GroupschedulingforSCHED_OTHER

CONFIG_FAIR_GROUP_SCHED

公平CPU调度策略,也就是在多个cgroup之间平均分配CPU带宽."鸡血补丁"CONFIG_SCHED_AUTOGROUP(自动分组调度功能)依赖于它.systemd资源控制单元(resourcecontrolunit)的CPU

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1