在线时间 0 小时 最后登录 2007-9-23 注册时间 2004-9-10 听众数 3 收听数 0 能力 0 分 体力 9975 点 威望 7 点 阅读权限 150 积分 4048 相册 0 日志 0 记录 0 帖子 1893 主题 823 精华 2 分享 0 好友 0
我的地盘我做主
该用户从未签到
<FONT color=#f70909>作者:killua 来源:http://www.chinaunix.net/</FONT>5 q& K+ y2 w0 w1 Y
< >序
6 g2 x1 k* B( J( |8 r2 t 做一件事情,首先要知道自己在干什么,而不是盲目得升级内核,现在升级内核有点泛滥,sigh ! d& R0 o5 i; [* B
首先让我们先了解一下2.6内核的新特性 </P>
9 j" [1 S8 L4 ]+ _3 K) J, }% f+ B < >一、01.模块子系统(Module Subsystem)、统一设备模型(Unified Device Model)和 PnP 支持 $ b5 \) r' t( } Q/ f _& x- E
模块子系统发生了重大变化。 </P>& y9 C; s5 Q& o
< >02.稳定性有所提高 7 e" H! Y$ B" d6 v* O3 Q
为了彻底避免内核加载或者导出正在被使用的内核模块,或者至少为了减少加载或者卸载模块的同时使用该模块的可能性 * Q! A* Y4 T. o9 S" S# \
(这有时会导致系统崩溃),内核加载和导出内核模块的过程都得到了改进。 </P>! x5 _5 M4 i: S7 J4 L
< >03.统一设备模型 - m( P D0 ~% j2 q% S$ M* X* b/ Y
统一设备模型的创建是 2.6 内核最重要的变化之一。它促进了模块接口的标准化,其目的是更好地控制和管理设备,例如: </P>8 A6 S% i" z" r
< >更准确地确定系统设备。
- S6 l) A" H$ i 电源管理和设备电源状态。 ) H$ }" G/ [( k, {( @; C
改进的系统总线结构管理。 </P>
* ?% Y6 \& W. f2 U$ X < >04.即插即用(PnP)支持 A/ w" R, M+ d2 ], x) f
1.1.1 和 1.1.2 小节中提及的变化使得运行 2.6 内核的 Linux 成为一个真正即插即用的 OS。 ' w0 ~ x# M$ O, p4 b
例如,对 ISA PnP 扩展、遗留 MCA 和 EISA 总线以及热插拔设备的 PnP 支持。 </P>+ i( \- C. v& @0 k# B- S
< >05.内核基础设施的变化 . w) h& b, u# k+ Q* z
为了区别以 .o 为扩展名的常规对象文件,内核模块现在使用的扩展名是 .ko。 3 M' J6 z( E0 G# V3 T
创建了新的 sysfs 文件系统,当内核发现设备树时就会描述它。
5 Q( T# [! H" | 内存支持,NUMA 支持 $ W' x$ `. D s6 n
支持更大数量的 RAM
% @. P7 O# ]8 E& W9 {' J; N" T$ o 2.6 内核支持更大数量的 RAM,在分页模式下最高可达 64GB。 </P>2 x' d/ ^ { I w- i4 k
< >06.NUMA
- r+ K1 F! X" ? c5 ?9 k 对非一致内核访问(Non-Uniform Memory Access - NUMA)系统的支持是 2.6 内核中新出现的。 </P>
7 U# ~( C# ?" P7 N# Q4 k < >07.线程模型,NPTL
. w/ h: M3 ?- J. ]5 p3 |$ Z( ] 相对于 v2.4 的 LinuxThreads,在版本 2.6 中新出现的是 NPTL(Native POSIX Threading Library)。 / M' G( o* B. V: I8 g3 y
NPTL 为 Linux 带来了<a href="http://hackbase.com/job" target="_blank" >企业</A>级线程支持,提供的性能远远超过了 LinuxThreads。它所基于的用户与内核线程的比率是 1:1。 </P>
7 b6 v% z5 M/ ?% B' `% ` < >在 2003 年 10 月,GNU C 程序库 glibc 中融入了 NPTL 支持,Red Hat 率先在 Red Hat Linux 9 和
, S9 t$ i* ]0 K" B3 \, ^ Red Hat Enterprise Linux 中使用定制的 v2.4 内核实现了 NPTL。 </P>, c) ^; {1 K! O8 [3 u- m% m
< >08.性能改进 3 S3 X1 Z1 W0 @4 }) ~
新的调度器算法 5 Z! F6 C/ A1 h0 B8 D1 r$ O/ J
2.6 Linux 内核引入了新的 O(1) 算法。在高负载情况下它运行得特别好。新的调度器基于每个 CPU 来分布时间片,
) x1 G: H0 }' b- b9 ` 这样就消除了全局同步和重新分配循环,从而提高了性能。 </P> a; N; t+ Y& g
< >内核抢占(Kernel Preemption) 7 E; Y/ O1 P( N. L
新的 2.6 内核是抢占式的。这将显著地提高交互式和多媒体应用程序的性能。 </P>
; |3 V' R: l2 E# |# v < >I/O 性能改进
# h, v4 j5 N( V3 U$ I" b2 C F Linux 的 I/O 子系统也发生了重大的变化,通过修改 I/O 调度器来确保不会有进程驻留在队列中过长时间等待进行输入/输出操作, " v o9 y6 j# Z0 k5 [' [
这样就使得 I/O 操作的响应更为迅速。 </P>' [* @; d8 {5 x- Q* ~
< >快速用户空间互斥(Fast User-Space Mutexes) & Q0 }' |' @% c7 l
“futexes”(快速用户空间互斥)可以使线程串行化以避免竞态条件,引入它也提高了响应速度。 0 W ~1 I4 d6 d
通过在内核空间中部分实现“futexes”以允许基于竞争设置等待任务的优先级而实现改进。 </P>. c) w% Z O. c o3 |0 S+ I+ q! I
< >09.扩展性改进 9 K8 M: V. S9 N& A
处理器数目更多
: M( x3 i! Z( T1 X* M Linux 内核 2.6 最多可以支持 64 个 CPU。支持更大的内存,归功于 PAE(物理地址扩展,Physical Address Extensions),在 32-位系统上分页模式下所支持的内存增加到了 64GB。 </P>/ k' _% i9 r5 c! K q5 b
< >用户和组 G' s/ H, r( k% i. [( U7 s, j
惟一用户和组的数量从 65,000 增至 40 多亿,也就是从 16-位增加到了 32-位。 </P>) ?9 l6 s' ^! @( {# e
< > ID 的数量 ) S/ V6 F: |0 l; U3 Y3 n @8 s
PID 的最大数量从 32,000 增至 10 亿。 </P>
1 V5 l! v3 i) Y" R8 H < >打开文件描述符的数量
9 a$ x9 [+ K* r; T 打开文件描述符的数量没有增加,但是不再需要事先设置该参数,它将自行调节。 </P>
! X/ q! G3 f& w$ S0 q. V) f < >10.支持更多的设备
( M! }' m% U' R5 g( x6 U0 D 在 Linux 内核 2.6 之前,内核中有可以约束大型系统的限制,比如每条链 256 个设备。v2.6 内核彻底地打破了这些限制, + Z7 K1 i. F1 v' g
不但可以支持更多类型的设备,而且支持更多同类型的设备。在 Linux 2.6 系统中,可以支持 4095 种主要的设备类型,
7 q' t! w6 D: I2 p8 V 每一个单独的类型可以有超过一百万个子设备。 / p9 u3 b8 W; e
文件系统大小 ; t) `2 r! N( B) [; W" `
Linux 内核 2.6 所允许的可寻址文件系统大小最大为 16 TB。 </P>
% |1 w) R: U3 S$ m' M < >11.文件系统
5 A$ p. m! G& P9 d r) `5 o* \% r ext2、ext3 和 ReiserFS 等传统 Linux 文件系统得到了显著的改进。最值得注意的改进是扩展属性(或文件元数据)的引入。
. d M& J2 F: u" D3 b9 R 最重要的是 POSIX ACL 的实现,这是对普通 UNIX 权限的扩展,可以支持更细化的用户访问控制。 </P>, q/ q( u6 A/ f: W3 V/ D$ ~! j; U" D
< >12.除了对传统 Linux 文件系统的改进支持以外,新的内核完全支持在 Linux 中相对较新的 XFS 文件系统。 8 G9 g9 @ t. F8 G: }, j5 v9 [4 Z
Linux 2.6 内核现在还引入了对 NTFS 文件系统的改进的支持,现在允许以读/写模式安装 NTFS 文件系统。 </P>) x; ~2 A: H2 m4 N; N/ E
< >基于以上2.6的新特性,我决定用2.6的内核,我的系统为Red Hat Enterprise Linux AS release 3 (Taroon Update 3) $ ]: i' i6 ]- u, G: E8 x9 }
硬件环境为DELL 2850 </P>
1 r" N1 ?3 Z, s [ < >一、下载解压并打上内核补丁
( ?. O* K, u1 {& b; f3 |5 Y 我以2.6.10为例子,patche以bk4的例子,目的只是让大家知道怎么打patch, 5 V8 i6 z+ N1 p/ p& f5 p3 Q7 X) ~7 y6 ?
其实本人用的是2.6.6的内核,因为在AS3.0上升级到2.6.9以上的内核,
/ |+ [5 e7 K* D& H1 x2 ` mount大的nfs网络硬盘时,df 显示不正确,明明是800G的盘变成4.2G,
/ L3 g5 F1 q" M$ D 不过还是能正常用,我升级过nfs和mount的包都没用,/var/log/message里
+ B+ Y5 o5 W2 A% G8 C% w9 s7 r0 h 提示是kernel: nfs warning: mount version older than kernel,
9 O4 Z9 L! Z* I& ]- A 还望知道的 告知一声,谢 BTW:2.6.8的内核没用过 </P>9 ]- d/ A9 W, v- i& z1 Y7 t
< >内核源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>:<a href="http://www.kernel.org/pub/<a%20href=" target="_blank" >linux</A>/kernel/v2.6/<a href="http://hackbase.com/skill/linux" target="_blank" >linux</A>-2.6.10.tar.bz2">http://www.kernel.org/pub/<a href="http://hackbase.com/skill/linux" target="_blank" >linux</A>/kernel/v2.6/<a href="http://hackbase.com/skill/linux" target="_blank" >linux</A>-2.6.10.tar.bz2</A> ( K; w2 |, Y5 F2 t5 M5 [
最新内核补丁:<a href="http://www.kernel.org/pub/<a%20href=" target="_blank" >linux</A>/kernel/v2.6/snapshots/patch-2.6.10-bk4.bz2">http://www.kernel.org/pub/<a href="http://hackbase.com/skill/linux" target="_blank" >linux</A>/kernel/v2.6/snapshots/patch-2.6.10-bk4.bz2</A> </P> @5 G6 R5 Z) G. y4 d. R
< >cd /usr/src
3 z0 ^, m; E8 D2 _: ^, C rm -rf <a href="http://hackbase.com/skill/linux" target="_blank" >linux</A> & j& S4 S5 J& K$ c% L: X; o- T' M; J
tar jxf /download/<a href="http://hackbase.com/skill/linux" target="_blank" >linux</A>-2.6.10.tar.bz2
; a, |, \7 `1 k, K ln -s <a href="http://hackbase.com/skill/linux" target="_blank" >linux</A>-2.6.10 <a href="http://hackbase.com/skill/linux" target="_blank" >linux</A>
5 S9 F7 y: h' Z7 i( c! b6 P( h cd <a href="http://hackbase.com/skill/linux" target="_blank" >linux</A>
$ d4 u5 U' N3 Z! F+ D8 V1 K bunzip2 -dv /download/patch-2.6.10-bk4.bz2 |patch -p1 5 n0 ~1 n7 _5 F& l& I/ x2 Z
如果在/usr/src目录下就用patch -p0 </P>
. m! `4 M4 S8 Q6 x9 H < >二、修改内核源<a href="http://hackbase.com/hacker" target="_blank" >代码</A> (升级2.6就是为了优化,干脆连源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>也改了吧) </P>6 r W) V: P2 z% C* ?; r
< >1.修改/usr/src/<a href="http://hackbase.com/skill/linux" target="_blank" >linux</A>/include/<a href="http://hackbase.com/skill/linux" target="_blank" >linux</A>/posix<a href="http://www1.hackbase.com/skill/linux/200501209624.htm#" target="_blank" >_</A>types.h
3 a& Y j* r. F7 T7 X, ` 设置fd<a href="http://www1.hackbase.com/skill/linux/200501209624.htm#" target="_blank" >_</A>set支持的最大数量
0 V \' n% p! N' A- | #define <a href="http://www1.hackbase.com/skill/linux/200501209624.htm#" target="_blank" >_</A><a href="http://www1.hackbase.com/skill/linux/200501209624.htm#" target="_blank" >_</A>FD<a href="http://www1.hackbase.com/skill/linux/200501209624.htm#" target="_blank" >_</A>SETSIZE 1024 ---> 65536 </P>
" _ J" U5 Q Y& J* x$ `; e# ~8 \ < >2.修改/usr/src/<a href="http://hackbase.com/skill/linux" target="_blank" >linux</A>/include/<a href="http://hackbase.com/skill/linux" target="_blank" >linux</A>/fs.h 7 c+ A* Q e5 v# d5 O P* F/ C
设置最大打开文件数量(TCP连接数量) ' h- B5 j7 @9 o
#define INR<a href="http://www1.hackbase.com/skill/linux/200501209624.htm#" target="_blank" >_</A>OPEN 1024 ---> 65536
# g# J5 k6 r$ I2 l: v( X #define NR<a href="http://www1.hackbase.com/skill/linux/200501209624.htm#" target="_blank" >_</A>FILE 8192 ---> 65536 / |! e. i8 {3 v% g) [+ }
#define NR<a href="http://www1.hackbase.com/skill/linux/200501209624.htm#" target="_blank" >_</A>RESERVED<a href="http://www1.hackbase.com/skill/linux/200501209624.htm#" target="_blank" >_</A>FILES 10 ---> 128 </P>
( P5 ~+ D- f9 X < >3.修改/usr/src/<a href="http://hackbase.com/skill/linux" target="_blank" >linux</A>/include/net/tcp.h 4 t. B1 v3 |! H# a
设置TIMEOUT的时间为1秒 % e8 y) A n: f1 C) q7 [
#define TCP<a href="http://www1.hackbase.com/skill/linux/200501209624.htm#" target="_blank" >_</A>TIMEWAIT<a href="http://www1.hackbase.com/skill/linux/200501209624.htm#" target="_blank" >_</A>LEN (60*HZ) 60 ---> 1*HZ
, L* t0 ~( p/ [* A& f8 G/ p 设置在backlog队列里的半连接的重试次数,每次都会花相应的时间,本质上 也是减少重试时间 ! {0 I! j4 Z2 O, b
#define TCP<a href="http://www1.hackbase.com/skill/linux/200501209624.htm#" target="_blank" >_</A>SYNACK<a href="http://www1.hackbase.com/skill/linux/200501209624.htm#" target="_blank" >_</A>RETRIES 5 ---> 3 </P>1 o- `* O, t3 n. b7 r
<P>针对RHEL-AS3本来就是稳定+优化的,不过就算你用 RHEL-AS3 自己的内核,那也要修改一下上面的参数才好呀 </P># |; \4 j j1 k" i4 M5 n6 M
<P>三、安装必要的<a href="http://hackbase.com/hacker/tool" target="_blank" >工具</A> </P>+ a$ } I+ J1 g; D- g& X
<P>1.下载module-init-tools-3.1.tar.bz2 6 m: `" O/ P* q6 a3 Z$ t# L
<a href="http://www.kernel.org/pub/<a%20href=" target="_blank" >linux</A>/utils/kernel/module-init-tools/module-init-tools-3.1.tar.bz2">http://www.kernel.org/pub/<a href="http://hackbase.com/skill/linux" target="_blank" >linux</A>/utils/kernel/module-init-tools/module-init-tools-3.1.tar.bz2</A> 6 b: y9 ~+ H* M2 G1 N
<a href="http://hackbase.com/hacker" target="_blank" >代码</A>:
' k, p. y6 i5 O4 T, U1 F2 \ ./configure --prefix=/ $ v8 b w" D* ^4 }0 b% e
make moveold : H4 y. R$ j8 j4 D: K
make all install
/ Z- D+ Q0 ]0 _% m5 s ./generate-modprobe.conf /etc/modprobe.conf </P>
/ z. W; d; K3 G: ?& q/ C <P>2.下载新的mkinitrd
( i+ u+ a7 x/ w1 _2 k) ~ <a href="ftp://195.220.108.108/<a%20href=" target="_blank" >linux</A>/6/fedora/core/3/i386/os/Fedora/RPMS/mkinitrd-4.1.18-2.i386.rpm">ftp://195.220.108.108/<a href="http://hackbase.com/skill/linux" target="_blank" >linux</A>/6/fedora/core/3/i386/os/Fedora/RPMS/mkinitrd-4.1.18-2.i386.rpm</A> 7 ^, B9 Y$ G" C9 y3 f4 X5 @
它需要lvm2 device-mapper 1 ] g$ _. M( `' W: V0 X' D4 V
<a href="ftp://195.220.108.108/<a%20href=" target="_blank" >linux</A>/6/fedora/core/3/i386/os/Fedora/RPMS/device-mapper-1.00.19-2.i386.rpm">ftp://195.220.108.108/<a href="http://hackbase.com/skill/linux" target="_blank" >linux</A>/6/fedora/core/3/i386/os/Fedora/RPMS/device-mapper-1.00.19-2.i386.rpm</A>
( o0 q, F2 u0 [" X9 f <a href="ftp://195.220.108.108/<a%20href=" target="_blank" >linux</A>/6/fedora/core/3/i386/os/Fedora/RPMS/lvm2-2.00.25-1.01.i386.rpm">ftp://195.220.108.108/<a href="http://hackbase.com/skill/linux" target="_blank" >linux</A>/6/fedora/core/3/i386/os/Fedora/RPMS/lvm2-2.00.25-1.01.i386.rpm</A>
3 |; z3 o9 K. m2 U 如果不更新这个包在make install时会提示以下错误: & M( ?- N2 ?% r1 ^
<a href="http://hackbase.com/hacker" target="_blank" >代码</A>: 0 p. y1 \- Q. y3 q m0 z
No module mptbase found for kernel 2.6.10-bk4, aborting. 4 A. w3 x% b8 P* a5 F$ S0 n5 f
mkinitrd failed
; R8 @2 ^& C1 ?9 ?5 _ c1 K. N2 A make[1]: *** [install] Error 1
0 `* M- K% v; E" {6 i! U% y3 a make: *** [install] Error 2 </P>
+ p% r, ^% }2 q2 n, S% A <P>安装lvm2-2.00.25-1.01.i386.rpm时请用rpm -ivh --nodeps package name </P>
& M. O2 O9 D+ ?. u/ f1 v <P>四、make menuconfig
9 F3 ?1 }$ p5 s. O- L <a href="http://hackbase.com/hacker" target="_blank" >代码</A>: 3 ]/ ~" m! B- V( {3 U
01.Code maturity level options --->
- X. R, Q: J2 \ Prompt for development and/or incomplete code/drivers
9 Z. a) G9 A. Q) L) \: ?7 P& f Select only drivers expected to compile cleanly
8 k) s- x( ~( ?9 [' q2 `% } w 02.General setup --->
$ ], t* g, ^( z% f& \ o% j3 X3 d Support for paging of anonymous memory (swap)
~& X+ z3 z1 e7 I9 [ System V IPC & J; \, f P/ `1 M
POSIX Message Queues / {& [8 S) e, H8 u$ ^
[ ] BSD Process Accounting
3 {. w4 l" o6 m; ^& n; l& u) ?/ o Sysctl support
& u. n% p$ ]8 E- D! @ [ ] Auditing support 8 v; i1 ~2 J3 l4 W+ N
[ ] Support for hot-pluggable devices
$ D' B% W, }' G. d* a Kernel Userspace Events " u; f0 R) P5 g
[ ] Kernel .config support
8 p0 [0 N! t' a& u# Z7 h6 z- \7 r; ? Configure standard kernel features (for small systems) --->
9 ^8 J1 C' U1 Q5 U6 M Load all symbols for debugging/kksymoops 6 g ?4 v% O* d/ R
[ ] Do an extra kallsyms pass 9 ?7 }0 j' B* |
Enable futex support
6 R3 g3 l4 M9 F. l1 H+ R: O Enable eventpoll support + \! V4 q; {+ x7 A# g3 m
[ ] Optimize for size % H5 {* _0 J" w& E
Use full shmem filesystem
8 O: u" w2 b* a" @& O G% Z& Y 03.Loadable module support ---> 1 h# z$ R0 y- {4 {) l9 H7 R
Enable loadable module support
/ r# n) Z+ u" d& S3 Y. c3 f Module unloading
6 ? L' \9 W- p [ ] Forced module unloading ' r+ K. X9 K V. m+ O# h* q! o) r T
[ ] Module versioning support (E<a href="http://hackbase.com/skill/XP" target="_blank" >XP</A>ERIMENTAL) # Y, q. b( Q: u0 S
[ ] Source checksum for all modules 3 z' f5 L5 V: f7 Z) t( o
Automatic kernel module loading + @+ d! S" v* ^0 A
04.Processor type and features --->
1 l1 L* l% j! P3 R5 \' N( U Subarchitecture Type (PC-compatible) ---> 6 `; R) ^/ Q6 V! {2 L; t
Processor family (Pentium-4/Celeron(P4-based)/Pentium-4 M/Xeon) ---> : }* A6 F' g1 |0 t0 Q* w d
Generic x86 support , O! [/ g& u* w* }9 _1 C; n7 [7 W
[ ] HPET Timer Support
3 B: ^, n' z7 d- [ Symmetric multi-processing support 多CPU
# } X( {; O" y9 G. Z+ X (8) Maximum number of CPUs (2-255) * t; [' Y' P9 u& x' ?+ z! s- ?
SMT (Hyperthreading) scheduler support
( a5 W7 r# \( L Preemptible Kernel 抢占式内核,请选上它
( ^$ m* k" {: Z/ ]1 Y; A0 I" p9 r [ ] Machine Check Exception 0 o* S( o! l$ c; w$ {
< > Toshiba Laptop support 2 k8 j4 Q3 o2 E3 C4 H4 I/ N0 R/ u' [
< > Dell laptop support 6 y1 |. T0 s" O: e2 f% c
< > /dev/cpu/microcode - Intel IA32 CPU microcode support / u* O: P' n$ I0 U# p, p
< > /dev/cpu/*/msr - Model-specific register support + h2 s: p$ H( o6 {2 @6 k
< > /dev/cpu/*/cpuid - CPU information support
m, v+ h \& E% @% N: ^# F) [ Firmware Drivers ---> 0 h3 d! j% D8 o
High Memory Support (4GB) ---> 高内存
. _( J( q! P" f9 u5 R [ ] Allocate 3rd-level pagetables from highmem
- s6 V3 C& Y! E8 i2 j; {, d) {1 v [ ] Math emulation 0 ~+ q+ w' L# {" H1 [1 E3 B
MTRR (Memory Type Range Register) support ( _$ j, \4 Q6 ]5 i, ^' }" W" @
Enable kernel irq balancing
& v' D' t- S, ~' E* x# `0 L$ @ [ ] Use register arguments (E<a href="http://hackbase.com/skill/XP" target="_blank" >XP</A>ERIMENTAL) ! N- d4 t5 v/ ]. {& P* r6 m# {% N
05.Power management options (ACPI, APM) ---> 电源管理 自定 (偶没选)
2 t& n8 s4 c% ~' {4 u B# Z) h 06.Bus options (PCI, PCMCIA, EISA, MCA, ISA) ---> 板卡支持 自定
, p, \$ l8 o! Z9 h. Y PCI support 2 c( c1 J" D$ F
PCI access mode (Any) --->
: R- ?3 m0 g" b3 d [ ] Message Signaled Interrupts (MSI and MSI-X) : G5 v! M; B6 J3 s* N# `# P7 F
Legacy /proc/pci interface
' `* Y( {* `: c0 W9 O1 V PCI device name database
~# t( T4 l2 W: R8 s [ ] ISA support 0 d% A6 ?; x- p
[ ] MCA support
" o) u0 a7 P3 Z( F6 w# e/ o5 _ < > NatSemi SCx200 support / V% Z- Y- x) s! T
07.Executable file formats --->
1 w h& {( o! t! V3 z Kernel support for ELF binaries ' W; \& x" [) i" L P; a! M! q& Y
<M> Kernel support for a.out and ECOFF binaries
. d w' A0 R( m- l( M& ?% _ <M> Kernel support for MISC binaries </P>
zan