sudo make menuconf
============核心内容=======================================
1)General setup-->Cpuset support:
该条目为y或者n,为y时定义CONFIG_CPUSETS宏。建议不勾选这项。因为这个特性是主要是用于NUMA架构和拥有大量逻辑CPU的SMP架构,开启这一特性会浪费一些内存,对一般人的桌面环境没有任何帮助。
2)Processor type and features-->Symmetric multi-processing support:
该条目为y或者n,为y时定义CONFIG_SMP宏。勾选这一项使得内核支持对称多处理器。建议勾选,因为最新的CPU大多支持双核或者超线程,就算你现在是单CPU,难保你哪天升级:)。
3)Processor type and features-->Processor family
这是一个单选条目,目的是为了指定CPU的具体型号以便进行优化,应该慎重选择,选错有可能造成内核无法正常工作。举个例子来说明这个选项的优化作用,比 如你选中了Athlon/Duron/K7,那么内核在进行memcpy()的时候就会使用经过3DNow!指令集优化过的版本。下面我大致把市面上常见 的CPU应该选哪项做一个粗糙地分类:
针对AMD的CPU:
a)Sempron(闪龙)/Duron(毒龙)/Athlon(速龙):选择Athlon/Duron/K7。
b)Sempron64/Athlon64/Athlon64 X 2/Opteron(皓龙):选择Opteron/Athlon64/Hammer/K8。
c)比上述CPU都古老的:选择K6/K6-II/K6-III。(当然如果你的CPU是K5的就得选586/K5/5x86/6x86/6x86MX了。)
针对INTEL的CPU:
a)奔腾2:选择Pentium-II/Celeron(pre-Coppermine)
b)奔腾3:选择Pentium-III/Celeron(Coppermine)/Pentium-III Xeon
c)奔腾4/奔腾D/赛扬D:选择Pentium-4/Celeron(P4-based)/Pentium-4 M/older Xeon
d)酷睿2:选择Core 2/newer Xeon
注意:如果你的CPU是赛扬(赛扬D除外),你必须先确认它到底是基于P2,P3还是P4的,一般来讲主频高于1G的是基于P4的,高于500M但小于1G的是基于P3的,其它的是基于P2的。另外,志强处理器你也要区分是基于P3,P4或者是Core 2。
【******************我的注解:*********************************************************************
Intel 用 Core 取代了 Pentium 成为主要命名代号。Core Duo 是双核心处理器(Core Solo 为单核心)。Centrino Duo 全称为 Centrino Core Duo,其中 Centrino 是迅驰移动技术Intel Pentium M Yonah processor指的就是Centrino Core Duo********************************************】
4)Processor type and features-->Generic x86 support
该条目为y或者n,为y时定义CONFIG_X86_GENERIC宏,目的是针对x86体系结构进行一般优化。比如,当 CONFIG_X86_GENERIC宏定义的情况下(当然CONFIG_X86_TSC宏也要定义,这个取决于前面Processor family的选择。),内核中的get_cycles()函数会使用TSC(time stamp counter)获取cycles值。这个选项一定要勾选上。
5)Processor type and features-->Maximum number of CPUs
这个条目是一个数字的宏(NR_CPUS,范围为2-255),该数字决定内核最多支持的逻辑CPU数量。恰当地设定该数字可以使你的内核节省一些内存, 这是因为内核中有许多数据结构是根据NR_CPUS的大小来固定分配空间的,即使你现有的逻辑CPU少于NR_CPUS,这些空间也会被分配出来从而造成 浪费。如何确定你有多少个逻辑CPU呢?举例来说吧:比如你的系统是单CPU,但是支持超线程(Hyper-threading),那么逻辑CPU数量为 2;再比如说你的系统是双CPU,每个CPU又支持双核,那么逻辑CPU数量为4。一般来说,大家应该把这个数值设定为大于等于你系统的逻辑CPU数。考 虑到大多数人应该还是使用单CPU系统,我推荐大家将这个值设定为4,因为目前个别INTEL的CPU同时支持双核与超线程,另外INTEL还推出了四核 心的CPU,AMD应该也会很快推出四核心CPU,所以将这个值设定为4是为了给不久的未来上个保险同时对于少于4个逻辑CPU的朋友又不会浪费你太多的 内存。
6)Processor type and features-->SMT (Hyperthreading) scheduler support
该条目为y或者n,为y时定义CONFIG_SCHED_SMT宏。定义它的目的是为了对支持超线程的CPU提供能好的调度功能。我举例说明一下:比如一 个系统有两个CPU,每个CPU又支持超线程,那么系统中有四个逻辑CPU,我们将这个四个CPU记为C00, C01, C10, C11,其中C00与C01是一个物理CPU上的两个硬件线程,而C10与C11则是另一个物理CPU上的两个硬件线程。假设某一个时刻系统中有两个线程 在执行,在没有定义CONFIG_SCHED_SMT宏的情况下内核很可能会将这两个线程分别调度到C00与C01上去,但这是不优化的,因为C00与 C01是一个物理CPU上的两个硬件线程,它们共享了许多硬件资源,导致两个线程运行时并不能充分发挥这个系统的资源优势;而定义了 CONFIG_SCHED_SMT宏的情况下,内核的调度器就会将这两个线程调度到位于不同物理CPU的逻辑CPU上,比如C00与C10上。
乍一看似乎只要你的CPU支持超线程,那么你就应该勾选这一项,但是我认为并不一定这样。比如你的系统是单CPU并且支持超线程,那么这个时候 CONFIG_SCHED_SMT宏对于提高调度效果并没有什么意义(当然前提是我对内核调度器的理解无误的话:)),而且定义 CONFIG_SCHED_SMT宏还会对调度增加额外的开销。
我的建议是:在你的CPU支持超线程的前提下,只有当你的系统有多个CPU或者支持多核的时候才有必要勾选这一项。
7)Processor type and features-->Multi-core scheduler support
该条目为y或者n,为y时定义CONFIG_SCHED_MC宏。它的作用很类似于前面提到的CONFIG_SCHED_SMT,只不过它针对多核 (multi-core)。我的建议是只有你的系统拥有多个物理CPU时才有必要勾选。比如我家里的机器CPU为单AMD Athlon 64 X2 4200+,虽然是双核,但只有一个物理CPU,我就没有必要定义这个宏。
8)Processor type and features-->Preemption Model
这是一个单选条目。它是一条对桌面响应能力有很重要意义的选项,我强烈建议大家选择Preemptible Kernel (Low-Latency Desktop) ,选中这项会定义CONFIG_PREEMPT宏,表示该内核将支持抢占式内核(Preemptible Kernel )特性。为了突出它的重要性,我下面通过一个例子简单介绍一下抢占式内核的概念:假设某系统中(假定只有一个逻辑CPU)有两个线程在运行,一个叫线程 H,一个叫线程L,线程H的动态优先级要比线程L高,在某一时刻,线程H由于等待键盘响应进入了阻塞状态,这时内核将会调度线程L将其投入运行,而再假设 在线程L运行的过程中由于某种原因进入了内核空间(这里主要指由于系统调用或者异常),而恰巧在L进入了内核之后用户按下了键盘,键盘中断导致线程H从阻 塞状态进入了就绪状态,那么按照正常的逻辑此时应该立刻将CPU交给线程H(因为线程H的动态优先级高),从而让线程H立刻进行用户按键后的操作处理。这 个时候,如果系统支持抢占式内核特性的话,那么linux确实会像刚才的逻辑那样做,但是如果不支持抢占式内核特性的话,那么线程H将无法立刻得到执行, 它必须要等到线程L完成了在内核空间中的所有工作并返回用户空间的前一刻才能得到调度,这就会对线程H造成一个调度上的延迟,这种延迟最大可能达到几百毫 秒之多,而几百毫秒的延时可能让人产生响应迟钝的感觉。因此对于以响应能力为重要指标的桌面系统来说,抢占式内核特性是很重要的(据我所知windows 与mac os x的内核都属于抢占式内核),因此极力建议大家选中这项。
抢占式内核特性是从2.6.x内核开始有的,我从fedora core 2一直到fedora core 6以及ubuntu 6.10自己编译的内核都开启这个特性,从来没有遇到过任何稳定性方面的问题,所以请大家放心。另外,再多说一句,不要把抢占式内核与抢占式多任务 (preemptive multitasking)混为一谈,linux从最开始就是支持抢占式多任务的。
9)Processor type and features-->Preempt The Big Kernel Lock
该条目为y或者n,为y时定义CONFIG_PREEMPT_BKL宏。定义该宏是为了在某线程占有大内核锁(Big Kernel Lock)的时候仍然可以被其它高优先级线程抢占调度。这个特性同样是为了提高桌面系统的响应能力,建议勾选。
10)Processor type and features-->High Memory Support
这是一个单选条目。目的是用于配置linux内核对high memory的支持。这个条目解释起来比较麻烦,我就不细说了。我的建议是:如果你的物理内存小于等于896MB,并且在短期内没有升级内存的可能性的 话,你就选择off;如果内存大于896MB或者说有可能升级到大于896MB内存的话,并且小于4GB,那么选择4GB;如果你的内存大于4GB的话, 原则上你应该选择64GB,但是为了充分利用你的系统资源,这种情况我还是建议你安装x86_64版本的ubuntu。
11)Processor type and features-->Allocate 3rd-level pagetables from highmem
该条目为y或者n,为y时定义CONFIG_HIGHPTE宏。这个宏的功能解释起来也比较麻烦,我也就不细说了。但注意这个宏只有在前一条目选择了 4GB或者64GB才有意义。我的建议是:如果你的物理内存数量超出896MB不是很多的时候就不要选中这项,比如说只有1GB内存的时候就我觉得就没有 必要选;但如果超出很多就有必要选中,比如说2GB内存的时候。
12)Processor type and features-->Timer frequency .
详情见:http://lamp.linux.gov.cn/Linux/kernel_options.html